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 |