| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/tiled_layer.h" | 5 #include "cc/tiled_layer.h" |
| 6 | 6 |
| 7 #include "cc/bitmap_content_layer_updater.h" | 7 #include "cc/bitmap_content_layer_updater.h" |
| 8 #include "cc/layer_painter.h" | 8 #include "cc/layer_painter.h" |
| 9 #include "cc/overdraw_metrics.h" | 9 #include "cc/overdraw_metrics.h" |
| 10 #include "cc/prioritized_resource_manager.h" | 10 #include "cc/prioritized_resource_manager.h" |
| 11 #include "cc/rendering_stats.h" | |
| 12 #include "cc/resource_update_controller.h" | 11 #include "cc/resource_update_controller.h" |
| 13 #include "cc/single_thread_proxy.h" // For DebugScopedSetImplThread | 12 #include "cc/single_thread_proxy.h" // For DebugScopedSetImplThread |
| 14 #include "cc/test/animation_test_common.h" | 13 #include "cc/test/animation_test_common.h" |
| 15 #include "cc/test/fake_layer_tree_host_client.h" | 14 #include "cc/test/fake_layer_tree_host_client.h" |
| 16 #include "cc/test/fake_layer_tree_host_impl.h" | 15 #include "cc/test/fake_layer_tree_host_impl.h" |
| 17 #include "cc/test/fake_output_surface.h" | 16 #include "cc/test/fake_output_surface.h" |
| 18 #include "cc/test/fake_proxy.h" | 17 #include "cc/test/fake_proxy.h" |
| 19 #include "cc/test/geometry_test_utils.h" | 18 #include "cc/test/geometry_test_utils.h" |
| 20 #include "cc/test/tiled_layer_test_common.h" | 19 #include "cc/test/tiled_layer_test_common.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 m_queue = make_scoped_ptr(new ResourceUpdateQueue); | 99 m_queue = make_scoped_ptr(new ResourceUpdateQueue); |
| 101 } | 100 } |
| 102 void layerPushPropertiesTo(FakeTiledLayer* layer, FakeTiledLayerImpl* layerI
mpl) | 101 void layerPushPropertiesTo(FakeTiledLayer* layer, FakeTiledLayerImpl* layerI
mpl) |
| 103 { | 102 { |
| 104 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc
ked(m_proxy); | 103 DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBloc
ked(m_proxy); |
| 105 layer->pushPropertiesTo(layerImpl); | 104 layer->pushPropertiesTo(layerImpl); |
| 106 } | 105 } |
| 107 void layerUpdate(FakeTiledLayer* layer, TestOcclusionTracker* occluded) | 106 void layerUpdate(FakeTiledLayer* layer, TestOcclusionTracker* occluded) |
| 108 { | 107 { |
| 109 DebugScopedSetMainThread mainThread(m_proxy); | 108 DebugScopedSetMainThread mainThread(m_proxy); |
| 110 layer->update(*m_queue.get(), occluded, m_stats); | 109 layer->update(*m_queue.get(), occluded, NULL); |
| 111 } | 110 } |
| 112 | 111 |
| 113 void calcDrawProps(const scoped_refptr<FakeTiledLayer>& layer1) | 112 void calcDrawProps(const scoped_refptr<FakeTiledLayer>& layer1) |
| 114 { | 113 { |
| 115 scoped_refptr<FakeTiledLayer> layer2; | 114 scoped_refptr<FakeTiledLayer> layer2; |
| 116 calcDrawProps(layer1, layer2); | 115 calcDrawProps(layer1, layer2); |
| 117 } | 116 } |
| 118 | 117 |
| 119 void calcDrawProps(const scoped_refptr<FakeTiledLayer>& layer1, | 118 void calcDrawProps(const scoped_refptr<FakeTiledLayer>& layer1, |
| 120 const scoped_refptr<FakeTiledLayer>& layer2) | 119 const scoped_refptr<FakeTiledLayer>& layer2) |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 // Get textures | 152 // Get textures |
| 154 m_resourceManager->clearPriorities(); | 153 m_resourceManager->clearPriorities(); |
| 155 if (layer1) | 154 if (layer1) |
| 156 layer1->setTexturePriorities(m_priorityCalculator); | 155 layer1->setTexturePriorities(m_priorityCalculator); |
| 157 if (layer2) | 156 if (layer2) |
| 158 layer2->setTexturePriorities(m_priorityCalculator); | 157 layer2->setTexturePriorities(m_priorityCalculator); |
| 159 m_resourceManager->prioritizeTextures(); | 158 m_resourceManager->prioritizeTextures(); |
| 160 | 159 |
| 161 // Update content | 160 // Update content |
| 162 if (layer1) | 161 if (layer1) |
| 163 layer1->update(*m_queue.get(), m_occlusion, m_stats); | 162 layer1->update(*m_queue.get(), m_occlusion, NULL); |
| 164 if (layer2) | 163 if (layer2) |
| 165 layer2->update(*m_queue.get(), m_occlusion, m_stats); | 164 layer2->update(*m_queue.get(), m_occlusion, NULL); |
| 166 | 165 |
| 167 bool needsUpdate = false; | 166 bool needsUpdate = false; |
| 168 if (layer1) | 167 if (layer1) |
| 169 needsUpdate |= layer1->needsIdlePaint(); | 168 needsUpdate |= layer1->needsIdlePaint(); |
| 170 if (layer2) | 169 if (layer2) |
| 171 needsUpdate |= layer2->needsIdlePaint(); | 170 needsUpdate |= layer2->needsIdlePaint(); |
| 172 | 171 |
| 173 // Update textures and push. | 172 // Update textures and push. |
| 174 updateTextures(); | 173 updateTextures(); |
| 175 if (layer1) | 174 if (layer1) |
| 176 layerPushPropertiesTo(layer1.get(), layerImpl1.get()); | 175 layerPushPropertiesTo(layer1.get(), layerImpl1.get()); |
| 177 if (layer2) | 176 if (layer2) |
| 178 layerPushPropertiesTo(layer2.get(), layerImpl2.get()); | 177 layerPushPropertiesTo(layer2.get(), layerImpl2.get()); |
| 179 | 178 |
| 180 return needsUpdate; | 179 return needsUpdate; |
| 181 } | 180 } |
| 182 | 181 |
| 183 public: | 182 public: |
| 184 Proxy* m_proxy; | 183 Proxy* m_proxy; |
| 185 LayerTreeSettings m_settings; | 184 LayerTreeSettings m_settings; |
| 186 scoped_ptr<OutputSurface> m_outputSurface; | 185 scoped_ptr<OutputSurface> m_outputSurface; |
| 187 scoped_ptr<ResourceProvider> m_resourceProvider; | 186 scoped_ptr<ResourceProvider> m_resourceProvider; |
| 188 scoped_ptr<ResourceUpdateQueue> m_queue; | 187 scoped_ptr<ResourceUpdateQueue> m_queue; |
| 189 RenderingStats m_stats; | |
| 190 PriorityCalculator m_priorityCalculator; | 188 PriorityCalculator m_priorityCalculator; |
| 191 FakeLayerImplTreeHostClient m_fakeLayerImplTreeHostClient; | 189 FakeLayerImplTreeHostClient m_fakeLayerImplTreeHostClient; |
| 192 scoped_ptr<LayerTreeHost> m_layerTreeHost; | 190 scoped_ptr<LayerTreeHost> m_layerTreeHost; |
| 193 scoped_ptr<FakeLayerTreeHostImpl> m_hostImpl; | 191 scoped_ptr<FakeLayerTreeHostImpl> m_hostImpl; |
| 194 scoped_ptr<PrioritizedResourceManager> m_resourceManager; | 192 scoped_ptr<PrioritizedResourceManager> m_resourceManager; |
| 195 TestOcclusionTracker* m_occlusion; | 193 TestOcclusionTracker* m_occlusion; |
| 196 }; | 194 }; |
| 197 | 195 |
| 198 TEST_F(TiledLayerTest, pushDirtyTiles) | 196 TEST_F(TiledLayerTest, pushDirtyTiles) |
| 199 { | 197 { |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 layer->drawProperties().target_space_transform_is_animating = true; | 574 layer->drawProperties().target_space_transform_is_animating = true; |
| 577 layer->setBounds(contentBounds); | 575 layer->setBounds(contentBounds); |
| 578 layer->drawProperties().visible_content_rect = visibleRect; | 576 layer->drawProperties().visible_content_rect = visibleRect; |
| 579 layer->invalidateContentRect(contentRect); | 577 layer->invalidateContentRect(contentRect); |
| 580 layer->setLayerTreeHost(layerTreeHost.get()); | 578 layer->setLayerTreeHost(layerTreeHost.get()); |
| 581 | 579 |
| 582 // The layer should paint it's entire contents on the first paint | 580 // The layer should paint it's entire contents on the first paint |
| 583 // if it is close to the viewport size and has the available memory. | 581 // if it is close to the viewport size and has the available memory. |
| 584 layer->setTexturePriorities(m_priorityCalculator); | 582 layer->setTexturePriorities(m_priorityCalculator); |
| 585 m_resourceManager->prioritizeTextures(); | 583 m_resourceManager->prioritizeTextures(); |
| 586 layer->update(*m_queue.get(), 0, m_stats); | 584 layer->update(*m_queue.get(), 0, NULL); |
| 587 updateTextures(); | 585 updateTextures(); |
| 588 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 586 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
| 589 | 587 |
| 590 // We should have all the tiles for the small animated layer. | 588 // We should have all the tiles for the small animated layer. |
| 591 // We should still have the visible tiles when we didn't | 589 // We should still have the visible tiles when we didn't |
| 592 // have enough memory for all the tiles. | 590 // have enough memory for all the tiles. |
| 593 if (!runOutOfMemory[i]) { | 591 if (!runOutOfMemory[i]) { |
| 594 for (int i = 0; i < 5; ++i) { | 592 for (int i = 0; i < 5; ++i) { |
| 595 for (int j = 0; j < 5; ++j) | 593 for (int j = 0; j < 5; ++j) |
| 596 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(i, j)); | 594 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(i, j)); |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 layer->setBounds(layerBounds.size()); | 731 layer->setBounds(layerBounds.size()); |
| 734 layer->setContentBounds(contentBounds.size()); | 732 layer->setContentBounds(contentBounds.size()); |
| 735 layer->drawProperties().visible_content_rect = contentBounds; | 733 layer->drawProperties().visible_content_rect = contentBounds; |
| 736 | 734 |
| 737 // On first update, the updateRect includes all tiles, even beyond the bound
aries of the layer. | 735 // On first update, the updateRect includes all tiles, even beyond the bound
aries of the layer. |
| 738 // However, it should still be in layer space, not content space. | 736 // However, it should still be in layer space, not content space. |
| 739 layer->invalidateContentRect(contentBounds); | 737 layer->invalidateContentRect(contentBounds); |
| 740 | 738 |
| 741 layer->setTexturePriorities(m_priorityCalculator); | 739 layer->setTexturePriorities(m_priorityCalculator); |
| 742 m_resourceManager->prioritizeTextures(); | 740 m_resourceManager->prioritizeTextures(); |
| 743 layer->update(*m_queue.get(), 0, m_stats); | 741 layer->update(*m_queue.get(), 0, NULL); |
| 744 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 300, 300 * 0.8), layer->updateRect()); | 742 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 300, 300 * 0.8), layer->updateRect()); |
| 745 updateTextures(); | 743 updateTextures(); |
| 746 | 744 |
| 747 // After the tiles are updated once, another invalidate only needs to update
the bounds of the layer. | 745 // After the tiles are updated once, another invalidate only needs to update
the bounds of the layer. |
| 748 layer->setTexturePriorities(m_priorityCalculator); | 746 layer->setTexturePriorities(m_priorityCalculator); |
| 749 m_resourceManager->prioritizeTextures(); | 747 m_resourceManager->prioritizeTextures(); |
| 750 layer->invalidateContentRect(contentBounds); | 748 layer->invalidateContentRect(contentBounds); |
| 751 layer->update(*m_queue.get(), 0, m_stats); | 749 layer->update(*m_queue.get(), 0, NULL); |
| 752 EXPECT_FLOAT_RECT_EQ(gfx::RectF(layerBounds), layer->updateRect()); | 750 EXPECT_FLOAT_RECT_EQ(gfx::RectF(layerBounds), layer->updateRect()); |
| 753 updateTextures(); | 751 updateTextures(); |
| 754 | 752 |
| 755 // Partial re-paint should also be represented by the updateRect in layer sp
ace, not content space. | 753 // Partial re-paint should also be represented by the updateRect in layer sp
ace, not content space. |
| 756 gfx::Rect partialDamage(30, 100, 10, 10); | 754 gfx::Rect partialDamage(30, 100, 10, 10); |
| 757 layer->invalidateContentRect(partialDamage); | 755 layer->invalidateContentRect(partialDamage); |
| 758 layer->setTexturePriorities(m_priorityCalculator); | 756 layer->setTexturePriorities(m_priorityCalculator); |
| 759 m_resourceManager->prioritizeTextures(); | 757 m_resourceManager->prioritizeTextures(); |
| 760 layer->update(*m_queue.get(), 0, m_stats); | 758 layer->update(*m_queue.get(), 0, NULL); |
| 761 EXPECT_FLOAT_RECT_EQ(gfx::RectF(45, 80, 15, 8), layer->updateRect()); | 759 EXPECT_FLOAT_RECT_EQ(gfx::RectF(45, 80, 15, 8), layer->updateRect()); |
| 762 } | 760 } |
| 763 | 761 |
| 764 TEST_F(TiledLayerTest, verifyInvalidationWhenContentsScaleChanges) | 762 TEST_F(TiledLayerTest, verifyInvalidationWhenContentsScaleChanges) |
| 765 { | 763 { |
| 766 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 764 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| 767 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); | 765 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
| 768 | 766 |
| 769 // Create a layer with one tile. | 767 // Create a layer with one tile. |
| 770 layer->setBounds(gfx::Size(100, 100)); | 768 layer->setBounds(gfx::Size(100, 100)); |
| 771 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 769 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
| 772 | 770 |
| 773 // Invalidate the entire layer. | 771 // Invalidate the entire layer. |
| 774 layer->setNeedsDisplay(); | 772 layer->setNeedsDisplay(); |
| 775 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100), layer->lastNeedsDisplayRect
()); | 773 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100), layer->lastNeedsDisplayRect
()); |
| 776 | 774 |
| 777 // Push the tiles to the impl side and check that there is exactly one. | 775 // Push the tiles to the impl side and check that there is exactly one. |
| 778 layer->setTexturePriorities(m_priorityCalculator); | 776 layer->setTexturePriorities(m_priorityCalculator); |
| 779 m_resourceManager->prioritizeTextures(); | 777 m_resourceManager->prioritizeTextures(); |
| 780 layer->update(*m_queue.get(), 0, m_stats); | 778 layer->update(*m_queue.get(), 0, NULL); |
| 781 updateTextures(); | 779 updateTextures(); |
| 782 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 780 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
| 783 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 781 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 784 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); | 782 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 785 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 0)); | 783 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 0)); |
| 786 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 1)); | 784 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 1)); |
| 787 | 785 |
| 788 layer->setNeedsDisplayRect(gfx::Rect()); | 786 layer->setNeedsDisplayRect(gfx::Rect()); |
| 789 EXPECT_FLOAT_RECT_EQ(gfx::RectF(), layer->lastNeedsDisplayRect()); | 787 EXPECT_FLOAT_RECT_EQ(gfx::RectF(), layer->lastNeedsDisplayRect()); |
| 790 | 788 |
| 791 // Change the contents scale. | 789 // Change the contents scale. |
| 792 layer->updateContentsScale(2); | 790 layer->updateContentsScale(2); |
| 793 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 200, 200); | 791 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 200, 200); |
| 794 | 792 |
| 795 // The impl side should get 2x2 tiles now. | 793 // The impl side should get 2x2 tiles now. |
| 796 layer->setTexturePriorities(m_priorityCalculator); | 794 layer->setTexturePriorities(m_priorityCalculator); |
| 797 m_resourceManager->prioritizeTextures(); | 795 m_resourceManager->prioritizeTextures(); |
| 798 layer->update(*m_queue.get(), 0, m_stats); | 796 layer->update(*m_queue.get(), 0, NULL); |
| 799 updateTextures(); | 797 updateTextures(); |
| 800 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 798 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
| 801 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 799 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 802 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 800 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 803 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 0)); | 801 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 0)); |
| 804 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 1)); | 802 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 1)); |
| 805 | 803 |
| 806 // Verify that changing the contents scale caused invalidation, and | 804 // Verify that changing the contents scale caused invalidation, and |
| 807 // that the layer-space rectangle requiring painting is not scaled. | 805 // that the layer-space rectangle requiring painting is not scaled. |
| 808 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100), layer->lastNeedsDisplayRect
()); | 806 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0, 0, 100, 100), layer->lastNeedsDisplayRect
()); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 866 TEST_F(TiledLayerTest, resizeToSmaller) | 864 TEST_F(TiledLayerTest, resizeToSmaller) |
| 867 { | 865 { |
| 868 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 866 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| 869 | 867 |
| 870 layer->setBounds(gfx::Size(700, 700)); | 868 layer->setBounds(gfx::Size(700, 700)); |
| 871 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 700, 700); | 869 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 700, 700); |
| 872 layer->invalidateContentRect(gfx::Rect(0, 0, 700, 700)); | 870 layer->invalidateContentRect(gfx::Rect(0, 0, 700, 700)); |
| 873 | 871 |
| 874 layer->setTexturePriorities(m_priorityCalculator); | 872 layer->setTexturePriorities(m_priorityCalculator); |
| 875 m_resourceManager->prioritizeTextures(); | 873 m_resourceManager->prioritizeTextures(); |
| 876 layer->update(*m_queue.get(), 0, m_stats); | 874 layer->update(*m_queue.get(), 0, NULL); |
| 877 | 875 |
| 878 layer->setBounds(gfx::Size(200, 200)); | 876 layer->setBounds(gfx::Size(200, 200)); |
| 879 layer->invalidateContentRect(gfx::Rect(0, 0, 200, 200)); | 877 layer->invalidateContentRect(gfx::Rect(0, 0, 200, 200)); |
| 880 } | 878 } |
| 881 | 879 |
| 882 TEST_F(TiledLayerTest, hugeLayerUpdateCrash) | 880 TEST_F(TiledLayerTest, hugeLayerUpdateCrash) |
| 883 { | 881 { |
| 884 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 882 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| 885 | 883 |
| 886 int size = 1 << 30; | 884 int size = 1 << 30; |
| 887 layer->setBounds(gfx::Size(size, size)); | 885 layer->setBounds(gfx::Size(size, size)); |
| 888 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 700, 700); | 886 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 700, 700); |
| 889 layer->invalidateContentRect(gfx::Rect(0, 0, size, size)); | 887 layer->invalidateContentRect(gfx::Rect(0, 0, size, size)); |
| 890 | 888 |
| 891 // Ensure no crash for bounds where size * size would overflow an int. | 889 // Ensure no crash for bounds where size * size would overflow an int. |
| 892 layer->setTexturePriorities(m_priorityCalculator); | 890 layer->setTexturePriorities(m_priorityCalculator); |
| 893 m_resourceManager->prioritizeTextures(); | 891 m_resourceManager->prioritizeTextures(); |
| 894 layer->update(*m_queue.get(), 0, m_stats); | 892 layer->update(*m_queue.get(), 0, NULL); |
| 895 } | 893 } |
| 896 | 894 |
| 897 class TiledLayerPartialUpdateTest : public TiledLayerTest { | 895 class TiledLayerPartialUpdateTest : public TiledLayerTest { |
| 898 public: | 896 public: |
| 899 TiledLayerPartialUpdateTest() | 897 TiledLayerPartialUpdateTest() |
| 900 { | 898 { |
| 901 m_settings.maxPartialTextureUpdates = 4; | 899 m_settings.maxPartialTextureUpdates = 4; |
| 902 } | 900 } |
| 903 }; | 901 }; |
| 904 | 902 |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1009 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1007 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| 1010 | 1008 |
| 1011 // The tile size is 100x100, so this invalidates and then paints two tiles. | 1009 // The tile size is 100x100, so this invalidates and then paints two tiles. |
| 1012 layer->setBounds(gfx::Size(100, 200)); | 1010 layer->setBounds(gfx::Size(100, 200)); |
| 1013 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 100, 200); | 1011 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 100, 200); |
| 1014 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 1012 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
| 1015 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); | 1013 layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200)); |
| 1016 | 1014 |
| 1017 layer->setTexturePriorities(m_priorityCalculator); | 1015 layer->setTexturePriorities(m_priorityCalculator); |
| 1018 m_resourceManager->prioritizeTextures(); | 1016 m_resourceManager->prioritizeTextures(); |
| 1019 layer->update(*m_queue.get(), 0, m_stats); | 1017 layer->update(*m_queue.get(), 0, NULL); |
| 1020 EXPECT_EQ(2, layer->fakeLayerUpdater()->updateCount()); | 1018 EXPECT_EQ(2, layer->fakeLayerUpdater()->updateCount()); |
| 1021 } | 1019 } |
| 1022 | 1020 |
| 1023 TEST_F(TiledLayerTest, tilesPaintedWithOcclusion) | 1021 TEST_F(TiledLayerTest, tilesPaintedWithOcclusion) |
| 1024 { | 1022 { |
| 1025 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1023 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| 1026 TestOcclusionTracker occluded; | 1024 TestOcclusionTracker occluded; |
| 1027 m_occlusion = &occluded; | 1025 m_occlusion = &occluded; |
| 1028 | 1026 |
| 1029 // The tile size is 100x100. | 1027 // The tile size is 100x100. |
| 1030 | 1028 |
| 1031 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); | 1029 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); |
| 1032 layer->setBounds(gfx::Size(600, 600)); | 1030 layer->setBounds(gfx::Size(600, 600)); |
| 1033 calcDrawProps(layer); | 1031 calcDrawProps(layer); |
| 1034 | 1032 |
| 1035 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); | 1033 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
| 1036 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); | 1034 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); |
| 1037 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1035 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
| 1038 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1036 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1039 | 1037 |
| 1040 layer->setTexturePriorities(m_priorityCalculator); | 1038 layer->setTexturePriorities(m_priorityCalculator); |
| 1041 m_resourceManager->prioritizeTextures(); | 1039 m_resourceManager->prioritizeTextures(); |
| 1042 layer->update(*m_queue.get(), &occluded, m_stats); | 1040 layer->update(*m_queue.get(), &occluded, NULL); |
| 1043 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1041 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
| 1044 | 1042 |
| 1045 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1043 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1046 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1044 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); |
| 1047 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); | 1045 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1048 | 1046 |
| 1049 layer->fakeLayerUpdater()->clearUpdateCount(); | 1047 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1050 layer->setTexturePriorities(m_priorityCalculator); | 1048 layer->setTexturePriorities(m_priorityCalculator); |
| 1051 m_resourceManager->prioritizeTextures(); | 1049 m_resourceManager->prioritizeTextures(); |
| 1052 | 1050 |
| 1053 occluded.setOcclusion(gfx::Rect(250, 200, 300, 100)); | 1051 occluded.setOcclusion(gfx::Rect(250, 200, 300, 100)); |
| 1054 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1052 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1055 layer->update(*m_queue.get(), &occluded, m_stats); | 1053 layer->update(*m_queue.get(), &occluded, NULL); |
| 1056 EXPECT_EQ(36-2, layer->fakeLayerUpdater()->updateCount()); | 1054 EXPECT_EQ(36-2, layer->fakeLayerUpdater()->updateCount()); |
| 1057 | 1055 |
| 1058 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1056 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1059 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000, 1); | 1057 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000, 1); |
| 1060 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); | 1058 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1061 | 1059 |
| 1062 layer->fakeLayerUpdater()->clearUpdateCount(); | 1060 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1063 layer->setTexturePriorities(m_priorityCalculator); | 1061 layer->setTexturePriorities(m_priorityCalculator); |
| 1064 m_resourceManager->prioritizeTextures(); | 1062 m_resourceManager->prioritizeTextures(); |
| 1065 | 1063 |
| 1066 occluded.setOcclusion(gfx::Rect(250, 250, 300, 100)); | 1064 occluded.setOcclusion(gfx::Rect(250, 250, 300, 100)); |
| 1067 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1065 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1068 layer->update(*m_queue.get(), &occluded, m_stats); | 1066 layer->update(*m_queue.get(), &occluded, NULL); |
| 1069 EXPECT_EQ(36, layer->fakeLayerUpdater()->updateCount()); | 1067 EXPECT_EQ(36, layer->fakeLayerUpdater()->updateCount()); |
| 1070 | 1068 |
| 1071 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1069 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1072 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000 + 360000, 1); | 1070 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000 + 360000, 1); |
| 1073 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); | 1071 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1074 } | 1072 } |
| 1075 | 1073 |
| 1076 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints) | 1074 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints) |
| 1077 { | 1075 { |
| 1078 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1076 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| 1079 TestOcclusionTracker occluded; | 1077 TestOcclusionTracker occluded; |
| 1080 m_occlusion = &occluded; | 1078 m_occlusion = &occluded; |
| 1081 | 1079 |
| 1082 // The tile size is 100x100. | 1080 // The tile size is 100x100. |
| 1083 | 1081 |
| 1084 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); | 1082 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); |
| 1085 layer->setBounds(gfx::Size(600, 600)); | 1083 layer->setBounds(gfx::Size(600, 600)); |
| 1086 calcDrawProps(layer); | 1084 calcDrawProps(layer); |
| 1087 | 1085 |
| 1088 // The partially occluded tiles (by the 150 occlusion height) are visible be
yond the occlusion, so not culled. | 1086 // The partially occluded tiles (by the 150 occlusion height) are visible be
yond the occlusion, so not culled. |
| 1089 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); | 1087 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); |
| 1090 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 360); | 1088 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 360); |
| 1091 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 360); | 1089 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 360); |
| 1092 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1090 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1093 | 1091 |
| 1094 layer->setTexturePriorities(m_priorityCalculator); | 1092 layer->setTexturePriorities(m_priorityCalculator); |
| 1095 m_resourceManager->prioritizeTextures(); | 1093 m_resourceManager->prioritizeTextures(); |
| 1096 layer->update(*m_queue.get(), &occluded, m_stats); | 1094 layer->update(*m_queue.get(), &occluded, NULL); |
| 1097 EXPECT_EQ(24-3, layer->fakeLayerUpdater()->updateCount()); | 1095 EXPECT_EQ(24-3, layer->fakeLayerUpdater()->updateCount()); |
| 1098 | 1096 |
| 1099 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1097 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1100 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000,
1); | 1098 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000,
1); |
| 1101 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); | 1099 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1102 | 1100 |
| 1103 layer->fakeLayerUpdater()->clearUpdateCount(); | 1101 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1104 | 1102 |
| 1105 // Now the visible region stops at the edge of the occlusion so the partly v
isible tiles become fully occluded. | 1103 // Now the visible region stops at the edge of the occlusion so the partly v
isible tiles become fully occluded. |
| 1106 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); | 1104 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); |
| 1107 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 350); | 1105 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 350); |
| 1108 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 350); | 1106 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 350); |
| 1109 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1107 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1110 layer->setTexturePriorities(m_priorityCalculator); | 1108 layer->setTexturePriorities(m_priorityCalculator); |
| 1111 m_resourceManager->prioritizeTextures(); | 1109 m_resourceManager->prioritizeTextures(); |
| 1112 layer->update(*m_queue.get(), &occluded, m_stats); | 1110 layer->update(*m_queue.get(), &occluded, NULL); |
| 1113 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); | 1111 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); |
| 1114 | 1112 |
| 1115 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1113 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1116 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000, 1); | 1114 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000, 1); |
| 1117 EXPECT_EQ(3 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); | 1115 EXPECT_EQ(3 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1118 | 1116 |
| 1119 layer->fakeLayerUpdater()->clearUpdateCount(); | 1117 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1120 | 1118 |
| 1121 // Now the visible region is even smaller than the occlusion, it should have
the same result. | 1119 // Now the visible region is even smaller than the occlusion, it should have
the same result. |
| 1122 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); | 1120 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); |
| 1123 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 340); | 1121 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 340); |
| 1124 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 340); | 1122 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 340); |
| 1125 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1123 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1126 layer->setTexturePriorities(m_priorityCalculator); | 1124 layer->setTexturePriorities(m_priorityCalculator); |
| 1127 m_resourceManager->prioritizeTextures(); | 1125 m_resourceManager->prioritizeTextures(); |
| 1128 layer->update(*m_queue.get(), &occluded, m_stats); | 1126 layer->update(*m_queue.get(), &occluded, NULL); |
| 1129 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); | 1127 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); |
| 1130 | 1128 |
| 1131 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1129 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1132 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000 + 180000, 1); | 1130 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000 + 180000, 1); |
| 1133 EXPECT_EQ(3 + 6 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); | 1131 EXPECT_EQ(3 + 6 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1134 | 1132 |
| 1135 } | 1133 } |
| 1136 | 1134 |
| 1137 TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation) | 1135 TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation) |
| 1138 { | 1136 { |
| 1139 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1137 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| 1140 TestOcclusionTracker occluded; | 1138 TestOcclusionTracker occluded; |
| 1141 m_occlusion = &occluded; | 1139 m_occlusion = &occluded; |
| 1142 | 1140 |
| 1143 // The tile size is 100x100. | 1141 // The tile size is 100x100. |
| 1144 | 1142 |
| 1145 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); | 1143 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); |
| 1146 layer->setBounds(gfx::Size(600, 600)); | 1144 layer->setBounds(gfx::Size(600, 600)); |
| 1147 calcDrawProps(layer); | 1145 calcDrawProps(layer); |
| 1148 | 1146 |
| 1149 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); | 1147 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
| 1150 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 600); | 1148 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 600); |
| 1151 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 600); | 1149 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 600); |
| 1152 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1150 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1153 layer->setTexturePriorities(m_priorityCalculator); | 1151 layer->setTexturePriorities(m_priorityCalculator); |
| 1154 m_resourceManager->prioritizeTextures(); | 1152 m_resourceManager->prioritizeTextures(); |
| 1155 layer->update(*m_queue.get(), &occluded, m_stats); | 1153 layer->update(*m_queue.get(), &occluded, NULL); |
| 1156 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1154 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
| 1157 { | 1155 { |
| 1158 updateTextures(); | 1156 updateTextures(); |
| 1159 } | 1157 } |
| 1160 | 1158 |
| 1161 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1159 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1162 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1160 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); |
| 1163 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); | 1161 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1164 | 1162 |
| 1165 layer->fakeLayerUpdater()->clearUpdateCount(); | 1163 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1166 layer->setTexturePriorities(m_priorityCalculator); | 1164 layer->setTexturePriorities(m_priorityCalculator); |
| 1167 m_resourceManager->prioritizeTextures(); | 1165 m_resourceManager->prioritizeTextures(); |
| 1168 | 1166 |
| 1169 // Repaint without marking it dirty. The 3 culled tiles will be pre-painted
now. | 1167 // Repaint without marking it dirty. The 3 culled tiles will be pre-painted
now. |
| 1170 layer->update(*m_queue.get(), &occluded, m_stats); | 1168 layer->update(*m_queue.get(), &occluded, NULL); |
| 1171 EXPECT_EQ(3, layer->fakeLayerUpdater()->updateCount()); | 1169 EXPECT_EQ(3, layer->fakeLayerUpdater()->updateCount()); |
| 1172 | 1170 |
| 1173 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1171 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1174 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1172 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); |
| 1175 EXPECT_EQ(6, occluded.overdrawMetrics().tilesCulledForUpload()); | 1173 EXPECT_EQ(6, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1176 } | 1174 } |
| 1177 | 1175 |
| 1178 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms) | 1176 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms) |
| 1179 { | 1177 { |
| 1180 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1178 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1192 screenTransform.Scale(0.5, 0.5); | 1190 screenTransform.Scale(0.5, 0.5); |
| 1193 layer->drawProperties().screen_space_transform = screenTransform; | 1191 layer->drawProperties().screen_space_transform = screenTransform; |
| 1194 layer->drawProperties().target_space_transform = screenTransform; | 1192 layer->drawProperties().target_space_transform = screenTransform; |
| 1195 | 1193 |
| 1196 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50)); | 1194 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50)); |
| 1197 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); | 1195 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); |
| 1198 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1196 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
| 1199 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1197 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1200 layer->setTexturePriorities(m_priorityCalculator); | 1198 layer->setTexturePriorities(m_priorityCalculator); |
| 1201 m_resourceManager->prioritizeTextures(); | 1199 m_resourceManager->prioritizeTextures(); |
| 1202 layer->update(*m_queue.get(), &occluded, m_stats); | 1200 layer->update(*m_queue.get(), &occluded, NULL); |
| 1203 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1201 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
| 1204 | 1202 |
| 1205 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1203 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1206 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1204 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); |
| 1207 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); | 1205 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1208 } | 1206 } |
| 1209 | 1207 |
| 1210 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndScaling) | 1208 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndScaling) |
| 1211 { | 1209 { |
| 1212 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1210 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1228 drawTransform.Scale(invScaleFactor, invScaleFactor); | 1226 drawTransform.Scale(invScaleFactor, invScaleFactor); |
| 1229 layer->drawProperties().target_space_transform = drawTransform; | 1227 layer->drawProperties().target_space_transform = drawTransform; |
| 1230 layer->drawProperties().screen_space_transform = drawTransform; | 1228 layer->drawProperties().screen_space_transform = drawTransform; |
| 1231 | 1229 |
| 1232 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); | 1230 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
| 1233 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->bounds()); | 1231 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->bounds()); |
| 1234 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1232 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
| 1235 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1233 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1236 layer->setTexturePriorities(m_priorityCalculator); | 1234 layer->setTexturePriorities(m_priorityCalculator); |
| 1237 m_resourceManager->prioritizeTextures(); | 1235 m_resourceManager->prioritizeTextures(); |
| 1238 layer->update(*m_queue.get(), &occluded, m_stats); | 1236 layer->update(*m_queue.get(), &occluded, NULL); |
| 1239 // The content is half the size of the layer (so the number of tiles is fewe
r). | 1237 // The content is half the size of the layer (so the number of tiles is fewe
r). |
| 1240 // In this case, the content is 300x300, and since the tile size is 100, the | 1238 // In this case, the content is 300x300, and since the tile size is 100, the |
| 1241 // number of tiles 3x3. | 1239 // number of tiles 3x3. |
| 1242 EXPECT_EQ(9, layer->fakeLayerUpdater()->updateCount()); | 1240 EXPECT_EQ(9, layer->fakeLayerUpdater()->updateCount()); |
| 1243 | 1241 |
| 1244 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1242 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1245 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000, 1
); | 1243 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000, 1
); |
| 1246 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1244 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1247 | 1245 |
| 1248 layer->fakeLayerUpdater()->clearUpdateCount(); | 1246 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1249 | 1247 |
| 1250 // This makes sure the painting works when the content space is scaled to | 1248 // This makes sure the painting works when the content space is scaled to |
| 1251 // a different layer space. In this case the occluded region catches the | 1249 // a different layer space. In this case the occluded region catches the |
| 1252 // blown up tiles. | 1250 // blown up tiles. |
| 1253 occluded.setOcclusion(gfx::Rect(200, 200, 300, 200)); | 1251 occluded.setOcclusion(gfx::Rect(200, 200, 300, 200)); |
| 1254 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->bounds()); | 1252 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->bounds()); |
| 1255 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1253 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
| 1256 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1254 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1257 layer->setTexturePriorities(m_priorityCalculator); | 1255 layer->setTexturePriorities(m_priorityCalculator); |
| 1258 m_resourceManager->prioritizeTextures(); | 1256 m_resourceManager->prioritizeTextures(); |
| 1259 layer->update(*m_queue.get(), &occluded, m_stats); | 1257 layer->update(*m_queue.get(), &occluded, NULL); |
| 1260 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); | 1258 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); |
| 1261 | 1259 |
| 1262 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1260 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1263 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 +
80000, 1); | 1261 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 +
80000, 1); |
| 1264 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); | 1262 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1265 | 1263 |
| 1266 layer->fakeLayerUpdater()->clearUpdateCount(); | 1264 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1267 | 1265 |
| 1268 // This makes sure content scaling and transforms work together. | 1266 // This makes sure content scaling and transforms work together. |
| 1269 gfx::Transform screenTransform; | 1267 gfx::Transform screenTransform; |
| 1270 screenTransform.Scale(0.5, 0.5); | 1268 screenTransform.Scale(0.5, 0.5); |
| 1271 layer->drawProperties().screen_space_transform = screenTransform; | 1269 layer->drawProperties().screen_space_transform = screenTransform; |
| 1272 layer->drawProperties().target_space_transform = screenTransform; | 1270 layer->drawProperties().target_space_transform = screenTransform; |
| 1273 | 1271 |
| 1274 occluded.setOcclusion(gfx::Rect(100, 100, 150, 100)); | 1272 occluded.setOcclusion(gfx::Rect(100, 100, 150, 100)); |
| 1275 | 1273 |
| 1276 gfx::Rect layerBoundsRect(gfx::Point(), layer->bounds()); | 1274 gfx::Rect layerBoundsRect(gfx::Point(), layer->bounds()); |
| 1277 layer->drawProperties().drawable_content_rect = gfx::ToEnclosingRect(gfx::Sc
aleRect(layerBoundsRect, 0.5)); | 1275 layer->drawProperties().drawable_content_rect = gfx::ToEnclosingRect(gfx::Sc
aleRect(layerBoundsRect, 0.5)); |
| 1278 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1276 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
| 1279 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1277 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1280 layer->setTexturePriorities(m_priorityCalculator); | 1278 layer->setTexturePriorities(m_priorityCalculator); |
| 1281 m_resourceManager->prioritizeTextures(); | 1279 m_resourceManager->prioritizeTextures(); |
| 1282 layer->update(*m_queue.get(), &occluded, m_stats); | 1280 layer->update(*m_queue.get(), &occluded, NULL); |
| 1283 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); | 1281 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); |
| 1284 | 1282 |
| 1285 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1283 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1286 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 +
80000 + 80000, 1); | 1284 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 +
80000 + 80000, 1); |
| 1287 EXPECT_EQ(1 + 1, occluded.overdrawMetrics().tilesCulledForUpload()); | 1285 EXPECT_EQ(1 + 1, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1288 } | 1286 } |
| 1289 | 1287 |
| 1290 TEST_F(TiledLayerTest, visibleContentOpaqueRegion) | 1288 TEST_F(TiledLayerTest, visibleContentOpaqueRegion) |
| 1291 { | 1289 { |
| 1292 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1290 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1304 layer->drawProperties().drawable_content_rect = visibleBounds; | 1302 layer->drawProperties().drawable_content_rect = visibleBounds; |
| 1305 layer->drawProperties().visible_content_rect = visibleBounds; | 1303 layer->drawProperties().visible_content_rect = visibleBounds; |
| 1306 layer->drawProperties().opacity = 1; | 1304 layer->drawProperties().opacity = 1; |
| 1307 | 1305 |
| 1308 layer->setTexturePriorities(m_priorityCalculator); | 1306 layer->setTexturePriorities(m_priorityCalculator); |
| 1309 m_resourceManager->prioritizeTextures(); | 1307 m_resourceManager->prioritizeTextures(); |
| 1310 | 1308 |
| 1311 // If the layer doesn't paint opaque content, then the visibleContentOpaqueR
egion should be empty. | 1309 // If the layer doesn't paint opaque content, then the visibleContentOpaqueR
egion should be empty. |
| 1312 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1310 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
| 1313 layer->invalidateContentRect(contentBounds); | 1311 layer->invalidateContentRect(contentBounds); |
| 1314 layer->update(*m_queue.get(), &occluded, m_stats); | 1312 layer->update(*m_queue.get(), &occluded, NULL); |
| 1315 opaqueContents = layer->visibleContentOpaqueRegion(); | 1313 opaqueContents = layer->visibleContentOpaqueRegion(); |
| 1316 EXPECT_TRUE(opaqueContents.IsEmpty()); | 1314 EXPECT_TRUE(opaqueContents.IsEmpty()); |
| 1317 | 1315 |
| 1318 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000, 1); | 1316 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000, 1); |
| 1319 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1317 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1320 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); | 1318 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); |
| 1321 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1319 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1322 | 1320 |
| 1323 // visibleContentOpaqueRegion should match the visible part of what is paint
ed opaque. | 1321 // visibleContentOpaqueRegion should match the visible part of what is paint
ed opaque. |
| 1324 opaquePaintRect = gfx::Rect(10, 10, 90, 190); | 1322 opaquePaintRect = gfx::Rect(10, 10, 90, 190); |
| 1325 layer->fakeLayerUpdater()->setOpaquePaintRect(opaquePaintRect); | 1323 layer->fakeLayerUpdater()->setOpaquePaintRect(opaquePaintRect); |
| 1326 layer->invalidateContentRect(contentBounds); | 1324 layer->invalidateContentRect(contentBounds); |
| 1327 layer->update(*m_queue.get(), &occluded, m_stats); | 1325 layer->update(*m_queue.get(), &occluded, NULL); |
| 1328 updateTextures(); | 1326 updateTextures(); |
| 1329 opaqueContents = layer->visibleContentOpaqueRegion(); | 1327 opaqueContents = layer->visibleContentOpaqueRegion(); |
| 1330 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); | 1328 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); |
| 1331 | 1329 |
| 1332 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000 * 2, 1); | 1330 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000 * 2, 1); |
| 1333 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 17100, 1); | 1331 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 17100, 1); |
| 1334 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100, 1); | 1332 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100, 1); |
| 1335 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1333 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1336 | 1334 |
| 1337 // If we paint again without invalidating, the same stuff should be opaque. | 1335 // If we paint again without invalidating, the same stuff should be opaque. |
| 1338 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1336 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
| 1339 layer->update(*m_queue.get(), &occluded, m_stats); | 1337 layer->update(*m_queue.get(), &occluded, NULL); |
| 1340 updateTextures(); | 1338 updateTextures(); |
| 1341 opaqueContents = layer->visibleContentOpaqueRegion(); | 1339 opaqueContents = layer->visibleContentOpaqueRegion(); |
| 1342 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); | 1340 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); |
| 1343 | 1341 |
| 1344 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000 * 2, 1); | 1342 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000 * 2, 1); |
| 1345 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 17100, 1); | 1343 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 17100, 1); |
| 1346 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100, 1); | 1344 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100, 1); |
| 1347 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1345 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1348 | 1346 |
| 1349 // If we repaint a non-opaque part of the tile, then it shouldn't lose its o
paque-ness. And other tiles should | 1347 // If we repaint a non-opaque part of the tile, then it shouldn't lose its o
paque-ness. And other tiles should |
| 1350 // not be affected. | 1348 // not be affected. |
| 1351 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1349 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
| 1352 layer->invalidateContentRect(gfx::Rect(0, 0, 1, 1)); | 1350 layer->invalidateContentRect(gfx::Rect(0, 0, 1, 1)); |
| 1353 layer->update(*m_queue.get(), &occluded, m_stats); | 1351 layer->update(*m_queue.get(), &occluded, NULL); |
| 1354 updateTextures(); | 1352 updateTextures(); |
| 1355 opaqueContents = layer->visibleContentOpaqueRegion(); | 1353 opaqueContents = layer->visibleContentOpaqueRegion(); |
| 1356 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); | 1354 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); |
| 1357 | 1355 |
| 1358 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000 * 2 + 1, 1); | 1356 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000 * 2 + 1, 1); |
| 1359 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 17100, 1); | 1357 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 17100, 1); |
| 1360 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100 + 1, 1); | 1358 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100 + 1, 1); |
| 1361 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1359 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1362 | 1360 |
| 1363 // If we repaint an opaque part of the tile, then it should lose its opaque-
ness. But other tiles should still | 1361 // If we repaint an opaque part of the tile, then it should lose its opaque-
ness. But other tiles should still |
| 1364 // not be affected. | 1362 // not be affected. |
| 1365 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1363 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
| 1366 layer->invalidateContentRect(gfx::Rect(10, 10, 1, 1)); | 1364 layer->invalidateContentRect(gfx::Rect(10, 10, 1, 1)); |
| 1367 layer->update(*m_queue.get(), &occluded, m_stats); | 1365 layer->update(*m_queue.get(), &occluded, NULL); |
| 1368 updateTextures(); | 1366 updateTextures(); |
| 1369 opaqueContents = layer->visibleContentOpaqueRegion(); | 1367 opaqueContents = layer->visibleContentOpaqueRegion(); |
| 1370 EXPECT_EQ(gfx::IntersectRects(gfx::Rect(10, 100, 90, 100), visibleBounds).To
String(), opaqueContents.ToString()); | 1368 EXPECT_EQ(gfx::IntersectRects(gfx::Rect(10, 100, 90, 100), visibleBounds).To
String(), opaqueContents.ToString()); |
| 1371 | 1369 |
| 1372 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000 * 2 + 1 + 1,
1); | 1370 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000 * 2 + 1 + 1,
1); |
| 1373 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 17100, 1); | 1371 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 17100, 1); |
| 1374 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100 + 1 + 1, 1); | 1372 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100 + 1 + 1, 1); |
| 1375 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1373 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1376 } | 1374 } |
| 1377 | 1375 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1392 layer->drawProperties().drawable_content_rect = visibleBounds; | 1390 layer->drawProperties().drawable_content_rect = visibleBounds; |
| 1393 layer->drawProperties().visible_content_rect = visibleBounds; | 1391 layer->drawProperties().visible_content_rect = visibleBounds; |
| 1394 layer->drawProperties().opacity = 1; | 1392 layer->drawProperties().opacity = 1; |
| 1395 | 1393 |
| 1396 layer->setTexturePriorities(m_priorityCalculator); | 1394 layer->setTexturePriorities(m_priorityCalculator); |
| 1397 m_resourceManager->prioritizeTextures(); | 1395 m_resourceManager->prioritizeTextures(); |
| 1398 | 1396 |
| 1399 // Invalidates and paints the whole layer. | 1397 // Invalidates and paints the whole layer. |
| 1400 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1398 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
| 1401 layer->invalidateContentRect(contentBounds); | 1399 layer->invalidateContentRect(contentBounds); |
| 1402 layer->update(*m_queue.get(), &occluded, m_stats); | 1400 layer->update(*m_queue.get(), &occluded, NULL); |
| 1403 updateTextures(); | 1401 updateTextures(); |
| 1404 opaqueContents = layer->visibleContentOpaqueRegion(); | 1402 opaqueContents = layer->visibleContentOpaqueRegion(); |
| 1405 EXPECT_TRUE(opaqueContents.IsEmpty()); | 1403 EXPECT_TRUE(opaqueContents.IsEmpty()); |
| 1406 | 1404 |
| 1407 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 30000, 1); | 1405 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 30000, 1); |
| 1408 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1406 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1409 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 30000, 1
); | 1407 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 30000, 1
); |
| 1410 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1408 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1411 | 1409 |
| 1412 // Invalidates an area on the top and bottom tile, which will cause us to pa
int the tile in the middle, | 1410 // Invalidates an area on the top and bottom tile, which will cause us to pa
int the tile in the middle, |
| 1413 // even though it is not dirty and will not be uploaded. | 1411 // even though it is not dirty and will not be uploaded. |
| 1414 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1412 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
| 1415 layer->invalidateContentRect(gfx::Rect(0, 0, 1, 1)); | 1413 layer->invalidateContentRect(gfx::Rect(0, 0, 1, 1)); |
| 1416 layer->invalidateContentRect(gfx::Rect(50, 200, 10, 10)); | 1414 layer->invalidateContentRect(gfx::Rect(50, 200, 10, 10)); |
| 1417 layer->update(*m_queue.get(), &occluded, m_stats); | 1415 layer->update(*m_queue.get(), &occluded, NULL); |
| 1418 updateTextures(); | 1416 updateTextures(); |
| 1419 opaqueContents = layer->visibleContentOpaqueRegion(); | 1417 opaqueContents = layer->visibleContentOpaqueRegion(); |
| 1420 EXPECT_TRUE(opaqueContents.IsEmpty()); | 1418 EXPECT_TRUE(opaqueContents.IsEmpty()); |
| 1421 | 1419 |
| 1422 // The middle tile was painted even though not invalidated. | 1420 // The middle tile was painted even though not invalidated. |
| 1423 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 30000 + 60 * 210, 1)
; | 1421 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 30000 + 60 * 210, 1)
; |
| 1424 // The pixels uploaded will not include the non-invalidated tile in the midd
le. | 1422 // The pixels uploaded will not include the non-invalidated tile in the midd
le. |
| 1425 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1423 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1426 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 30000 +
1 + 100, 1); | 1424 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 30000 +
1 + 100, 1); |
| 1427 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1425 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1625 | 1623 |
| 1626 gfx::Rect contentRect(0, 0, 45, 47); | 1624 gfx::Rect contentRect(0, 0, 45, 47); |
| 1627 EXPECT_EQ(contentRect.size(), layer->contentBounds()); | 1625 EXPECT_EQ(contentRect.size(), layer->contentBounds()); |
| 1628 layer->drawProperties().visible_content_rect = contentRect; | 1626 layer->drawProperties().visible_content_rect = contentRect; |
| 1629 layer->drawProperties().drawable_content_rect = contentRect; | 1627 layer->drawProperties().drawable_content_rect = contentRect; |
| 1630 | 1628 |
| 1631 layer->setTexturePriorities(m_priorityCalculator); | 1629 layer->setTexturePriorities(m_priorityCalculator); |
| 1632 m_resourceManager->prioritizeTextures(); | 1630 m_resourceManager->prioritizeTextures(); |
| 1633 | 1631 |
| 1634 // Update the whole tile. | 1632 // Update the whole tile. |
| 1635 layer->update(*m_queue.get(), 0, m_stats); | 1633 layer->update(*m_queue.get(), 0, NULL); |
| 1636 layer->trackingLayerPainter()->resetPaintedRect(); | 1634 layer->trackingLayerPainter()->resetPaintedRect(); |
| 1637 | 1635 |
| 1638 EXPECT_RECT_EQ(gfx::Rect(), layer->trackingLayerPainter()->paintedRect()); | 1636 EXPECT_RECT_EQ(gfx::Rect(), layer->trackingLayerPainter()->paintedRect()); |
| 1639 updateTextures(); | 1637 updateTextures(); |
| 1640 | 1638 |
| 1641 // Invalidate the entire layer in content space. When painting, the rect giv
en to webkit should match the layer's bounds. | 1639 // Invalidate the entire layer in content space. When painting, the rect giv
en to webkit should match the layer's bounds. |
| 1642 layer->invalidateContentRect(contentRect); | 1640 layer->invalidateContentRect(contentRect); |
| 1643 layer->update(*m_queue.get(), 0, m_stats); | 1641 layer->update(*m_queue.get(), 0, NULL); |
| 1644 | 1642 |
| 1645 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); | 1643 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); |
| 1646 } | 1644 } |
| 1647 | 1645 |
| 1648 TEST_F(TiledLayerTest, nonIntegerContentsScaleIsNotDistortedDuringInvalidation) | 1646 TEST_F(TiledLayerTest, nonIntegerContentsScaleIsNotDistortedDuringInvalidation) |
| 1649 { | 1647 { |
| 1650 scoped_refptr<UpdateTrackingTiledLayer> layer = make_scoped_refptr(new Updat
eTrackingTiledLayer(m_resourceManager.get())); | 1648 scoped_refptr<UpdateTrackingTiledLayer> layer = make_scoped_refptr(new Updat
eTrackingTiledLayer(m_resourceManager.get())); |
| 1651 | 1649 |
| 1652 gfx::Rect layerRect(0, 0, 30, 31); | 1650 gfx::Rect layerRect(0, 0, 30, 31); |
| 1653 layer->setPosition(layerRect.origin()); | 1651 layer->setPosition(layerRect.origin()); |
| 1654 layer->setBounds(layerRect.size()); | 1652 layer->setBounds(layerRect.size()); |
| 1655 layer->updateContentsScale(1.3f); | 1653 layer->updateContentsScale(1.3f); |
| 1656 | 1654 |
| 1657 gfx::Rect contentRect(gfx::Point(), layer->contentBounds()); | 1655 gfx::Rect contentRect(gfx::Point(), layer->contentBounds()); |
| 1658 layer->drawProperties().visible_content_rect = contentRect; | 1656 layer->drawProperties().visible_content_rect = contentRect; |
| 1659 layer->drawProperties().drawable_content_rect = contentRect; | 1657 layer->drawProperties().drawable_content_rect = contentRect; |
| 1660 | 1658 |
| 1661 layer->setTexturePriorities(m_priorityCalculator); | 1659 layer->setTexturePriorities(m_priorityCalculator); |
| 1662 m_resourceManager->prioritizeTextures(); | 1660 m_resourceManager->prioritizeTextures(); |
| 1663 | 1661 |
| 1664 // Update the whole tile. | 1662 // Update the whole tile. |
| 1665 layer->update(*m_queue.get(), 0, m_stats); | 1663 layer->update(*m_queue.get(), 0, NULL); |
| 1666 layer->trackingLayerPainter()->resetPaintedRect(); | 1664 layer->trackingLayerPainter()->resetPaintedRect(); |
| 1667 | 1665 |
| 1668 EXPECT_RECT_EQ(gfx::Rect(), layer->trackingLayerPainter()->paintedRect()); | 1666 EXPECT_RECT_EQ(gfx::Rect(), layer->trackingLayerPainter()->paintedRect()); |
| 1669 updateTextures(); | 1667 updateTextures(); |
| 1670 | 1668 |
| 1671 // Invalidate the entire layer in layer space. When painting, the rect given
to webkit should match the layer's bounds. | 1669 // Invalidate the entire layer in layer space. When painting, the rect given
to webkit should match the layer's bounds. |
| 1672 layer->setNeedsDisplayRect(layerRect); | 1670 layer->setNeedsDisplayRect(layerRect); |
| 1673 layer->update(*m_queue.get(), 0, m_stats); | 1671 layer->update(*m_queue.get(), 0, NULL); |
| 1674 | 1672 |
| 1675 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); | 1673 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); |
| 1676 } | 1674 } |
| 1677 | 1675 |
| 1678 } // namespace | 1676 } // namespace |
| 1679 } // namespace cc | 1677 } // namespace cc |
| OLD | NEW |