| 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 "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "cc/tiled_layer.h" | 7 #include "cc/tiled_layer.h" |
| 8 | 8 |
| 9 #include "cc/bitmap_content_layer_updater.h" | 9 #include "cc/bitmap_content_layer_updater.h" |
| 10 #include "cc/layer_painter.h" | 10 #include "cc/layer_painter.h" |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); | 219 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); |
| 220 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 220 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 221 | 221 |
| 222 // We should have both tiles on the impl side. | 222 // We should have both tiles on the impl side. |
| 223 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 223 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 224 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 224 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 225 | 225 |
| 226 // Invalidates part of the top tile... | 226 // Invalidates part of the top tile... |
| 227 layer->invalidateContentRect(gfx::Rect(0, 0, 50, 50)); | 227 layer->invalidateContentRect(gfx::Rect(0, 0, 50, 50)); |
| 228 // ....but the area is occluded. | 228 // ....but the area is occluded. |
| 229 occluded.setOcclusion(cc::IntRect(0, 0, 50, 50)); | 229 occluded.setOcclusion(gfx::Rect(0, 0, 50, 50)); |
| 230 updateAndPush(layer.get(), layerImpl.get()); | 230 updateAndPush(layer.get(), layerImpl.get()); |
| 231 | 231 |
| 232 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 232 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 233 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
2500, 1); | 233 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
2500, 1); |
| 234 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 234 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 235 | 235 |
| 236 // We should still have both tiles, as part of the top tile is still unocclu
ded. | 236 // We should still have both tiles, as part of the top tile is still unocclu
ded. |
| 237 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 237 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 238 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 238 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 239 } | 239 } |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 } | 436 } |
| 437 | 437 |
| 438 TEST_F(TiledLayerTest, pushIdlePaintedOccludedTiles) | 438 TEST_F(TiledLayerTest, pushIdlePaintedOccludedTiles) |
| 439 { | 439 { |
| 440 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_textureManager.get())); | 440 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_textureManager.get())); |
| 441 ScopedFakeTiledLayerImpl layerImpl(1); | 441 ScopedFakeTiledLayerImpl layerImpl(1); |
| 442 TestOcclusionTracker occluded; | 442 TestOcclusionTracker occluded; |
| 443 m_occlusion = &occluded; | 443 m_occlusion = &occluded; |
| 444 | 444 |
| 445 // The tile size is 100x100, so this invalidates one occluded tile, culls it
during paint, but prepaints it. | 445 // The tile size is 100x100, so this invalidates one occluded tile, culls it
during paint, but prepaints it. |
| 446 occluded.setOcclusion(cc::IntRect(0, 0, 100, 100)); | 446 occluded.setOcclusion(gfx::Rect(0, 0, 100, 100)); |
| 447 | 447 |
| 448 layer->setBounds(gfx::Size(100, 100)); | 448 layer->setBounds(gfx::Size(100, 100)); |
| 449 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 100)); | 449 layer->setVisibleContentRect(gfx::Rect(0, 0, 100, 100)); |
| 450 updateAndPush(layer.get(), layerImpl.get()); | 450 updateAndPush(layer.get(), layerImpl.get()); |
| 451 | 451 |
| 452 // We should have the prepainted tile on the impl side, but culled it during
paint. | 452 // We should have the prepainted tile on the impl side, but culled it during
paint. |
| 453 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 453 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 454 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); | 454 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 455 } | 455 } |
| 456 | 456 |
| (...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 878 | 878 |
| 879 TEST_F(TiledLayerTest, tilesPaintedWithOcclusion) | 879 TEST_F(TiledLayerTest, tilesPaintedWithOcclusion) |
| 880 { | 880 { |
| 881 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_textureManager.get())); | 881 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_textureManager.get())); |
| 882 TestOcclusionTracker occluded; | 882 TestOcclusionTracker occluded; |
| 883 | 883 |
| 884 // The tile size is 100x100. | 884 // The tile size is 100x100. |
| 885 | 885 |
| 886 layer->setBounds(gfx::Size(600, 600)); | 886 layer->setBounds(gfx::Size(600, 600)); |
| 887 | 887 |
| 888 occluded.setOcclusion(cc::IntRect(200, 200, 300, 100)); | 888 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
| 889 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()
)); | 889 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()
)); |
| 890 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); | 890 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); |
| 891 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 891 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 892 | 892 |
| 893 layer->setTexturePriorities(m_priorityCalculator); | 893 layer->setTexturePriorities(m_priorityCalculator); |
| 894 m_textureManager->prioritizeTextures(); | 894 m_textureManager->prioritizeTextures(); |
| 895 layer->update(*m_queue.get(), &occluded, m_stats); | 895 layer->update(*m_queue.get(), &occluded, m_stats); |
| 896 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 896 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
| 897 | 897 |
| 898 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 898 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 899 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 899 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); |
| 900 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); | 900 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 901 | 901 |
| 902 layer->fakeLayerUpdater()->clearUpdateCount(); | 902 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 903 layer->setTexturePriorities(m_priorityCalculator); | 903 layer->setTexturePriorities(m_priorityCalculator); |
| 904 m_textureManager->prioritizeTextures(); | 904 m_textureManager->prioritizeTextures(); |
| 905 | 905 |
| 906 occluded.setOcclusion(cc::IntRect(250, 200, 300, 100)); | 906 occluded.setOcclusion(gfx::Rect(250, 200, 300, 100)); |
| 907 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 907 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 908 layer->update(*m_queue.get(), &occluded, m_stats); | 908 layer->update(*m_queue.get(), &occluded, m_stats); |
| 909 EXPECT_EQ(36-2, layer->fakeLayerUpdater()->updateCount()); | 909 EXPECT_EQ(36-2, layer->fakeLayerUpdater()->updateCount()); |
| 910 | 910 |
| 911 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 911 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 912 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000, 1); | 912 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000, 1); |
| 913 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); | 913 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 914 | 914 |
| 915 layer->fakeLayerUpdater()->clearUpdateCount(); | 915 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 916 layer->setTexturePriorities(m_priorityCalculator); | 916 layer->setTexturePriorities(m_priorityCalculator); |
| 917 m_textureManager->prioritizeTextures(); | 917 m_textureManager->prioritizeTextures(); |
| 918 | 918 |
| 919 occluded.setOcclusion(cc::IntRect(250, 250, 300, 100)); | 919 occluded.setOcclusion(gfx::Rect(250, 250, 300, 100)); |
| 920 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 920 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 921 layer->update(*m_queue.get(), &occluded, m_stats); | 921 layer->update(*m_queue.get(), &occluded, m_stats); |
| 922 EXPECT_EQ(36, layer->fakeLayerUpdater()->updateCount()); | 922 EXPECT_EQ(36, layer->fakeLayerUpdater()->updateCount()); |
| 923 | 923 |
| 924 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 924 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 925 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000 + 360000, 1); | 925 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000 + 360000, 1); |
| 926 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); | 926 EXPECT_EQ(3 + 2, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 927 } | 927 } |
| 928 | 928 |
| 929 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints) | 929 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints) |
| 930 { | 930 { |
| 931 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_textureManager.get())); | 931 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_textureManager.get())); |
| 932 TestOcclusionTracker occluded; | 932 TestOcclusionTracker occluded; |
| 933 | 933 |
| 934 // The tile size is 100x100. | 934 // The tile size is 100x100. |
| 935 | 935 |
| 936 layer->setBounds(gfx::Size(600, 600)); | 936 layer->setBounds(gfx::Size(600, 600)); |
| 937 | 937 |
| 938 // The partially occluded tiles (by the 150 occlusion height) are visible be
yond the occlusion, so not culled. | 938 // The partially occluded tiles (by the 150 occlusion height) are visible be
yond the occlusion, so not culled. |
| 939 occluded.setOcclusion(cc::IntRect(200, 200, 300, 150)); | 939 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); |
| 940 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 360)); | 940 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 360)); |
| 941 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 360)); | 941 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 360)); |
| 942 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 942 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 943 | 943 |
| 944 layer->setTexturePriorities(m_priorityCalculator); | 944 layer->setTexturePriorities(m_priorityCalculator); |
| 945 m_textureManager->prioritizeTextures(); | 945 m_textureManager->prioritizeTextures(); |
| 946 layer->update(*m_queue.get(), &occluded, m_stats); | 946 layer->update(*m_queue.get(), &occluded, m_stats); |
| 947 EXPECT_EQ(24-3, layer->fakeLayerUpdater()->updateCount()); | 947 EXPECT_EQ(24-3, layer->fakeLayerUpdater()->updateCount()); |
| 948 | 948 |
| 949 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 949 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 950 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000,
1); | 950 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000,
1); |
| 951 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); | 951 EXPECT_EQ(3, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 952 | 952 |
| 953 layer->fakeLayerUpdater()->clearUpdateCount(); | 953 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 954 | 954 |
| 955 // Now the visible region stops at the edge of the occlusion so the partly v
isible tiles become fully occluded. | 955 // Now the visible region stops at the edge of the occlusion so the partly v
isible tiles become fully occluded. |
| 956 occluded.setOcclusion(cc::IntRect(200, 200, 300, 150)); | 956 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); |
| 957 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 350)); | 957 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 350)); |
| 958 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 350)); | 958 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 350)); |
| 959 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 959 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 960 layer->setTexturePriorities(m_priorityCalculator); | 960 layer->setTexturePriorities(m_priorityCalculator); |
| 961 m_textureManager->prioritizeTextures(); | 961 m_textureManager->prioritizeTextures(); |
| 962 layer->update(*m_queue.get(), &occluded, m_stats); | 962 layer->update(*m_queue.get(), &occluded, m_stats); |
| 963 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); | 963 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); |
| 964 | 964 |
| 965 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 965 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 966 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000, 1); | 966 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000, 1); |
| 967 EXPECT_EQ(3 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); | 967 EXPECT_EQ(3 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 968 | 968 |
| 969 layer->fakeLayerUpdater()->clearUpdateCount(); | 969 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 970 | 970 |
| 971 // Now the visible region is even smaller than the occlusion, it should have
the same result. | 971 // Now the visible region is even smaller than the occlusion, it should have
the same result. |
| 972 occluded.setOcclusion(cc::IntRect(200, 200, 300, 150)); | 972 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); |
| 973 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 340)); | 973 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 340)); |
| 974 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 340)); | 974 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 340)); |
| 975 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 975 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 976 layer->setTexturePriorities(m_priorityCalculator); | 976 layer->setTexturePriorities(m_priorityCalculator); |
| 977 m_textureManager->prioritizeTextures(); | 977 m_textureManager->prioritizeTextures(); |
| 978 layer->update(*m_queue.get(), &occluded, m_stats); | 978 layer->update(*m_queue.get(), &occluded, m_stats); |
| 979 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); | 979 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); |
| 980 | 980 |
| 981 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 981 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 982 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000 + 180000, 1); | 982 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000 + 180000, 1); |
| 983 EXPECT_EQ(3 + 6 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); | 983 EXPECT_EQ(3 + 6 + 6, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 984 | 984 |
| 985 } | 985 } |
| 986 | 986 |
| 987 TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation) | 987 TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation) |
| 988 { | 988 { |
| 989 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_textureManager.get())); | 989 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_textureManager.get())); |
| 990 TestOcclusionTracker occluded; | 990 TestOcclusionTracker occluded; |
| 991 | 991 |
| 992 // The tile size is 100x100. | 992 // The tile size is 100x100. |
| 993 | 993 |
| 994 layer->setBounds(gfx::Size(600, 600)); | 994 layer->setBounds(gfx::Size(600, 600)); |
| 995 | 995 |
| 996 occluded.setOcclusion(cc::IntRect(200, 200, 300, 100)); | 996 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
| 997 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 600)); | 997 layer->setDrawableContentRect(gfx::Rect(0, 0, 600, 600)); |
| 998 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 600)); | 998 layer->setVisibleContentRect(gfx::Rect(0, 0, 600, 600)); |
| 999 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 999 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1000 layer->setTexturePriorities(m_priorityCalculator); | 1000 layer->setTexturePriorities(m_priorityCalculator); |
| 1001 m_textureManager->prioritizeTextures(); | 1001 m_textureManager->prioritizeTextures(); |
| 1002 layer->update(*m_queue.get(), &occluded, m_stats); | 1002 layer->update(*m_queue.get(), &occluded, m_stats); |
| 1003 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1003 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
| 1004 { | 1004 { |
| 1005 updateTextures(); | 1005 updateTextures(); |
| 1006 } | 1006 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1030 // The tile size is 100x100. | 1030 // The tile size is 100x100. |
| 1031 | 1031 |
| 1032 // This makes sure the painting works when the occluded region (in screen sp
ace) | 1032 // This makes sure the painting works when the occluded region (in screen sp
ace) |
| 1033 // is transformed differently than the layer. | 1033 // is transformed differently than the layer. |
| 1034 layer->setBounds(gfx::Size(600, 600)); | 1034 layer->setBounds(gfx::Size(600, 600)); |
| 1035 WebTransformationMatrix screenTransform; | 1035 WebTransformationMatrix screenTransform; |
| 1036 screenTransform.scale(0.5); | 1036 screenTransform.scale(0.5); |
| 1037 layer->setScreenSpaceTransform(screenTransform); | 1037 layer->setScreenSpaceTransform(screenTransform); |
| 1038 layer->setDrawTransform(screenTransform); | 1038 layer->setDrawTransform(screenTransform); |
| 1039 | 1039 |
| 1040 occluded.setOcclusion(cc::IntRect(100, 100, 150, 50)); | 1040 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50)); |
| 1041 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()
)); | 1041 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()
)); |
| 1042 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); | 1042 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); |
| 1043 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1043 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1044 layer->setTexturePriorities(m_priorityCalculator); | 1044 layer->setTexturePriorities(m_priorityCalculator); |
| 1045 m_textureManager->prioritizeTextures(); | 1045 m_textureManager->prioritizeTextures(); |
| 1046 layer->update(*m_queue.get(), &occluded, m_stats); | 1046 layer->update(*m_queue.get(), &occluded, m_stats); |
| 1047 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1047 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
| 1048 | 1048 |
| 1049 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1049 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1050 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1050 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1062 // a different layer space. In this case tiles are scaled to be 200x200 | 1062 // a different layer space. In this case tiles are scaled to be 200x200 |
| 1063 // pixels, which means none should be occluded. | 1063 // pixels, which means none should be occluded. |
| 1064 layer->setContentsScale(0.5); | 1064 layer->setContentsScale(0.5); |
| 1065 EXPECT_FLOAT_EQ(layer->contentsScaleX(), layer->contentsScaleY()); | 1065 EXPECT_FLOAT_EQ(layer->contentsScaleX(), layer->contentsScaleY()); |
| 1066 layer->setBounds(gfx::Size(600, 600)); | 1066 layer->setBounds(gfx::Size(600, 600)); |
| 1067 WebTransformationMatrix drawTransform; | 1067 WebTransformationMatrix drawTransform; |
| 1068 drawTransform.scale(1 / layer->contentsScaleX()); | 1068 drawTransform.scale(1 / layer->contentsScaleX()); |
| 1069 layer->setDrawTransform(drawTransform); | 1069 layer->setDrawTransform(drawTransform); |
| 1070 layer->setScreenSpaceTransform(drawTransform); | 1070 layer->setScreenSpaceTransform(drawTransform); |
| 1071 | 1071 |
| 1072 occluded.setOcclusion(cc::IntRect(200, 200, 300, 100)); | 1072 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
| 1073 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->bounds())); | 1073 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->bounds())); |
| 1074 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); | 1074 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); |
| 1075 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1075 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1076 layer->setTexturePriorities(m_priorityCalculator); | 1076 layer->setTexturePriorities(m_priorityCalculator); |
| 1077 m_textureManager->prioritizeTextures(); | 1077 m_textureManager->prioritizeTextures(); |
| 1078 layer->update(*m_queue.get(), &occluded, m_stats); | 1078 layer->update(*m_queue.get(), &occluded, m_stats); |
| 1079 // The content is half the size of the layer (so the number of tiles is fewe
r). | 1079 // The content is half the size of the layer (so the number of tiles is fewe
r). |
| 1080 // In this case, the content is 300x300, and since the tile size is 100, the | 1080 // In this case, the content is 300x300, and since the tile size is 100, the |
| 1081 // number of tiles 3x3. | 1081 // number of tiles 3x3. |
| 1082 EXPECT_EQ(9, layer->fakeLayerUpdater()->updateCount()); | 1082 EXPECT_EQ(9, layer->fakeLayerUpdater()->updateCount()); |
| 1083 | 1083 |
| 1084 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1084 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1085 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000, 1
); | 1085 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000, 1
); |
| 1086 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1086 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1087 | 1087 |
| 1088 layer->fakeLayerUpdater()->clearUpdateCount(); | 1088 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1089 | 1089 |
| 1090 // This makes sure the painting works when the content space is scaled to | 1090 // This makes sure the painting works when the content space is scaled to |
| 1091 // a different layer space. In this case the occluded region catches the | 1091 // a different layer space. In this case the occluded region catches the |
| 1092 // blown up tiles. | 1092 // blown up tiles. |
| 1093 occluded.setOcclusion(cc::IntRect(200, 200, 300, 200)); | 1093 occluded.setOcclusion(gfx::Rect(200, 200, 300, 200)); |
| 1094 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->bounds())); | 1094 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->bounds())); |
| 1095 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); | 1095 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); |
| 1096 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1096 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1097 layer->setTexturePriorities(m_priorityCalculator); | 1097 layer->setTexturePriorities(m_priorityCalculator); |
| 1098 m_textureManager->prioritizeTextures(); | 1098 m_textureManager->prioritizeTextures(); |
| 1099 layer->update(*m_queue.get(), &occluded, m_stats); | 1099 layer->update(*m_queue.get(), &occluded, m_stats); |
| 1100 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); | 1100 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); |
| 1101 | 1101 |
| 1102 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1102 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1103 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 +
80000, 1); | 1103 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 +
80000, 1); |
| 1104 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); | 1104 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1105 | 1105 |
| 1106 layer->fakeLayerUpdater()->clearUpdateCount(); | 1106 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1107 | 1107 |
| 1108 // This makes sure content scaling and transforms work together. | 1108 // This makes sure content scaling and transforms work together. |
| 1109 WebTransformationMatrix screenTransform; | 1109 WebTransformationMatrix screenTransform; |
| 1110 screenTransform.scale(0.5); | 1110 screenTransform.scale(0.5); |
| 1111 layer->setScreenSpaceTransform(screenTransform); | 1111 layer->setScreenSpaceTransform(screenTransform); |
| 1112 layer->setDrawTransform(screenTransform); | 1112 layer->setDrawTransform(screenTransform); |
| 1113 | 1113 |
| 1114 occluded.setOcclusion(cc::IntRect(100, 100, 150, 100)); | 1114 occluded.setOcclusion(gfx::Rect(100, 100, 150, 100)); |
| 1115 | 1115 |
| 1116 gfx::Rect layerBoundsRect(gfx::Point(), layer->bounds()); | 1116 gfx::Rect layerBoundsRect(gfx::Point(), layer->bounds()); |
| 1117 layer->setDrawableContentRect(gfx::ToEnclosingRect(gfx::ScaleRect(layerBound
sRect, 0.5))); | 1117 layer->setDrawableContentRect(gfx::ToEnclosingRect(gfx::ScaleRect(layerBound
sRect, 0.5))); |
| 1118 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); | 1118 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); |
| 1119 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1119 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1120 layer->setTexturePriorities(m_priorityCalculator); | 1120 layer->setTexturePriorities(m_priorityCalculator); |
| 1121 m_textureManager->prioritizeTextures(); | 1121 m_textureManager->prioritizeTextures(); |
| 1122 layer->update(*m_queue.get(), &occluded, m_stats); | 1122 layer->update(*m_queue.get(), &occluded, m_stats); |
| 1123 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); | 1123 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); |
| 1124 | 1124 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1146 layer->setDrawOpacity(1); | 1146 layer->setDrawOpacity(1); |
| 1147 | 1147 |
| 1148 layer->setTexturePriorities(m_priorityCalculator); | 1148 layer->setTexturePriorities(m_priorityCalculator); |
| 1149 m_textureManager->prioritizeTextures(); | 1149 m_textureManager->prioritizeTextures(); |
| 1150 | 1150 |
| 1151 // If the layer doesn't paint opaque content, then the visibleContentOpaqueR
egion should be empty. | 1151 // If the layer doesn't paint opaque content, then the visibleContentOpaqueR
egion should be empty. |
| 1152 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1152 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
| 1153 layer->invalidateContentRect(contentBounds); | 1153 layer->invalidateContentRect(contentBounds); |
| 1154 layer->update(*m_queue.get(), &occluded, m_stats); | 1154 layer->update(*m_queue.get(), &occluded, m_stats); |
| 1155 opaqueContents = layer->visibleContentOpaqueRegion(); | 1155 opaqueContents = layer->visibleContentOpaqueRegion(); |
| 1156 EXPECT_TRUE(opaqueContents.isEmpty()); | 1156 EXPECT_TRUE(opaqueContents.IsEmpty()); |
| 1157 | 1157 |
| 1158 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000, 1); | 1158 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 20000, 1); |
| 1159 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1159 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1160 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); | 1160 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); |
| 1161 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1161 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1162 | 1162 |
| 1163 // visibleContentOpaqueRegion should match the visible part of what is paint
ed opaque. | 1163 // visibleContentOpaqueRegion should match the visible part of what is paint
ed opaque. |
| 1164 opaquePaintRect = gfx::Rect(10, 10, 90, 190); | 1164 opaquePaintRect = gfx::Rect(10, 10, 90, 190); |
| 1165 layer->fakeLayerUpdater()->setOpaquePaintRect(opaquePaintRect); | 1165 layer->fakeLayerUpdater()->setOpaquePaintRect(opaquePaintRect); |
| 1166 layer->invalidateContentRect(contentBounds); | 1166 layer->invalidateContentRect(contentBounds); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1239 | 1239 |
| 1240 layer->setTexturePriorities(m_priorityCalculator); | 1240 layer->setTexturePriorities(m_priorityCalculator); |
| 1241 m_textureManager->prioritizeTextures(); | 1241 m_textureManager->prioritizeTextures(); |
| 1242 | 1242 |
| 1243 // Invalidates and paints the whole layer. | 1243 // Invalidates and paints the whole layer. |
| 1244 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1244 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
| 1245 layer->invalidateContentRect(contentBounds); | 1245 layer->invalidateContentRect(contentBounds); |
| 1246 layer->update(*m_queue.get(), &occluded, m_stats); | 1246 layer->update(*m_queue.get(), &occluded, m_stats); |
| 1247 updateTextures(); | 1247 updateTextures(); |
| 1248 opaqueContents = layer->visibleContentOpaqueRegion(); | 1248 opaqueContents = layer->visibleContentOpaqueRegion(); |
| 1249 EXPECT_TRUE(opaqueContents.isEmpty()); | 1249 EXPECT_TRUE(opaqueContents.IsEmpty()); |
| 1250 | 1250 |
| 1251 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 30000, 1); | 1251 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 30000, 1); |
| 1252 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1252 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1253 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 30000, 1
); | 1253 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 30000, 1
); |
| 1254 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1254 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1255 | 1255 |
| 1256 // Invalidates an area on the top and bottom tile, which will cause us to pa
int the tile in the middle, | 1256 // Invalidates an area on the top and bottom tile, which will cause us to pa
int the tile in the middle, |
| 1257 // even though it is not dirty and will not be uploaded. | 1257 // even though it is not dirty and will not be uploaded. |
| 1258 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1258 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
| 1259 layer->invalidateContentRect(gfx::Rect(0, 0, 1, 1)); | 1259 layer->invalidateContentRect(gfx::Rect(0, 0, 1, 1)); |
| 1260 layer->invalidateContentRect(gfx::Rect(50, 200, 10, 10)); | 1260 layer->invalidateContentRect(gfx::Rect(50, 200, 10, 10)); |
| 1261 layer->update(*m_queue.get(), &occluded, m_stats); | 1261 layer->update(*m_queue.get(), &occluded, m_stats); |
| 1262 updateTextures(); | 1262 updateTextures(); |
| 1263 opaqueContents = layer->visibleContentOpaqueRegion(); | 1263 opaqueContents = layer->visibleContentOpaqueRegion(); |
| 1264 EXPECT_TRUE(opaqueContents.isEmpty()); | 1264 EXPECT_TRUE(opaqueContents.IsEmpty()); |
| 1265 | 1265 |
| 1266 // The middle tile was painted even though not invalidated. | 1266 // The middle tile was painted even though not invalidated. |
| 1267 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 30000 + 60 * 210, 1)
; | 1267 EXPECT_NEAR(occluded.overdrawMetrics().pixelsPainted(), 30000 + 60 * 210, 1)
; |
| 1268 // The pixels uploaded will not include the non-invalidated tile in the midd
le. | 1268 // The pixels uploaded will not include the non-invalidated tile in the midd
le. |
| 1269 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1269 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1270 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 30000 +
1 + 100, 1); | 1270 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 30000 +
1 + 100, 1); |
| 1271 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 1271 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1272 } | 1272 } |
| 1273 | 1273 |
| 1274 TEST_F(TiledLayerTest, dontAllocateContentsWhenTargetSurfaceCantBeAllocated) | 1274 TEST_F(TiledLayerTest, dontAllocateContentsWhenTargetSurfaceCantBeAllocated) |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1623 layer->fakeLayerUpdater()->clearUpdateCount(); | 1623 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1624 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 1624 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
| 1625 } | 1625 } |
| 1626 m_layerTreeHost->commitComplete(); | 1626 m_layerTreeHost->commitComplete(); |
| 1627 | 1627 |
| 1628 textureManagerClearAllMemory(m_layerTreeHost->contentsTextureManager(), m_re
sourceProvider.get()); | 1628 textureManagerClearAllMemory(m_layerTreeHost->contentsTextureManager(), m_re
sourceProvider.get()); |
| 1629 m_layerTreeHost->setRootLayer(0); | 1629 m_layerTreeHost->setRootLayer(0); |
| 1630 } | 1630 } |
| 1631 | 1631 |
| 1632 } // namespace | 1632 } // namespace |
| OLD | NEW |