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" |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); | 223 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
224 TestOcclusionTracker occluded; | 224 TestOcclusionTracker occluded; |
225 m_occlusion = &occluded; | 225 m_occlusion = &occluded; |
226 m_layerTreeHost->setViewportSize(gfx::Size(1000, 1000), gfx::Size(1000, 1000
)); | 226 m_layerTreeHost->setViewportSize(gfx::Size(1000, 1000), gfx::Size(1000, 1000
)); |
227 | 227 |
228 // The tile size is 100x100, so this invalidates and then paints two tiles. | 228 // The tile size is 100x100, so this invalidates and then paints two tiles. |
229 layer->setBounds(gfx::Size(100, 200)); | 229 layer->setBounds(gfx::Size(100, 200)); |
230 calcDrawProps(layer); | 230 calcDrawProps(layer); |
231 updateAndPush(layer, layerImpl); | 231 updateAndPush(layer, layerImpl); |
232 | 232 |
233 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 233 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
234 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); | 234 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 20000,
1); |
235 EXPECT_EQ(0, occluded.OverdrawMetrics().tilesCulledForUpload()); | 235 EXPECT_EQ(0, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
236 | 236 |
237 // We should have both tiles on the impl side. | 237 // We should have both tiles on the impl side. |
238 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 238 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
239 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 239 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
240 | 240 |
241 // Invalidates part of the top tile... | 241 // Invalidates part of the top tile... |
242 layer->invalidateContentRect(gfx::Rect(0, 0, 50, 50)); | 242 layer->invalidateContentRect(gfx::Rect(0, 0, 50, 50)); |
243 // ....but the area is occluded. | 243 // ....but the area is occluded. |
244 occluded.setOcclusion(gfx::Rect(0, 0, 50, 50)); | 244 occluded.setOcclusion(gfx::Rect(0, 0, 50, 50)); |
245 calcDrawProps(layer); | 245 calcDrawProps(layer); |
246 updateAndPush(layer, layerImpl); | 246 updateAndPush(layer, layerImpl); |
247 | 247 |
248 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 248 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
249 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 20000 +
2500, 1); | 249 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 20000
+ 2500, 1); |
250 EXPECT_EQ(0, occluded.OverdrawMetrics().tilesCulledForUpload()); | 250 EXPECT_EQ(0, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
251 | 251 |
252 // We should still have both tiles, as part of the top tile is still unocclu
ded. | 252 // We should still have both tiles, as part of the top tile is still unocclu
ded. |
253 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 253 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
254 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); | 254 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
255 } | 255 } |
256 | 256 |
257 TEST_F(TiledLayerTest, pushDeletedTiles) | 257 TEST_F(TiledLayerTest, pushDeletedTiles) |
258 { | 258 { |
259 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 259 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
260 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); | 260 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 // The tile size is 100x100, so this invalidates one occluded tile, culls it
during paint, but prepaints it. | 460 // The tile size is 100x100, so this invalidates one occluded tile, culls it
during paint, but prepaints it. |
461 occluded.setOcclusion(gfx::Rect(0, 0, 100, 100)); | 461 occluded.setOcclusion(gfx::Rect(0, 0, 100, 100)); |
462 | 462 |
463 layer->setBounds(gfx::Size(100, 100)); | 463 layer->setBounds(gfx::Size(100, 100)); |
464 calcDrawProps(layer); | 464 calcDrawProps(layer); |
465 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 465 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
466 updateAndPush(layer, layerImpl); | 466 updateAndPush(layer, layerImpl); |
467 | 467 |
468 // We should have the prepainted tile on the impl side, but culled it during
paint. | 468 // We should have the prepainted tile on the impl side, but culled it during
paint. |
469 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); | 469 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
470 EXPECT_EQ(1, occluded.OverdrawMetrics().tilesCulledForUpload()); | 470 EXPECT_EQ(1, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
471 } | 471 } |
472 | 472 |
473 TEST_F(TiledLayerTest, pushTilesMarkedDirtyDuringPaint) | 473 TEST_F(TiledLayerTest, pushTilesMarkedDirtyDuringPaint) |
474 { | 474 { |
475 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 475 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
476 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); | 476 scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLaye
rImpl(m_hostImpl->activeTree(), 1)); |
477 | 477 |
478 // The tile size is 100x100, so this invalidates and then paints two tiles. | 478 // The tile size is 100x100, so this invalidates and then paints two tiles. |
479 // However, during the paint, we invalidate one of the tiles. This should | 479 // However, during the paint, we invalidate one of the tiles. This should |
480 // not prevent the tile from being pushed. | 480 // not prevent the tile from being pushed. |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1023 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); | 1023 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
1024 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); | 1024 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); |
1025 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1025 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
1026 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1026 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1027 | 1027 |
1028 layer->setTexturePriorities(m_priorityCalculator); | 1028 layer->setTexturePriorities(m_priorityCalculator); |
1029 m_resourceManager->prioritizeTextures(); | 1029 m_resourceManager->prioritizeTextures(); |
1030 layer->update(*m_queue.get(), &occluded, NULL); | 1030 layer->update(*m_queue.get(), &occluded, NULL); |
1031 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1031 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
1032 | 1032 |
1033 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1033 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1034 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1034 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 330000
, 1); |
1035 EXPECT_EQ(3, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1035 EXPECT_EQ(3, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1036 | 1036 |
1037 layer->fakeLayerUpdater()->clearUpdateCount(); | 1037 layer->fakeLayerUpdater()->clearUpdateCount(); |
1038 layer->setTexturePriorities(m_priorityCalculator); | 1038 layer->setTexturePriorities(m_priorityCalculator); |
1039 m_resourceManager->prioritizeTextures(); | 1039 m_resourceManager->prioritizeTextures(); |
1040 | 1040 |
1041 occluded.setOcclusion(gfx::Rect(250, 200, 300, 100)); | 1041 occluded.setOcclusion(gfx::Rect(250, 200, 300, 100)); |
1042 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1042 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1043 layer->update(*m_queue.get(), &occluded, NULL); | 1043 layer->update(*m_queue.get(), &occluded, NULL); |
1044 EXPECT_EQ(36-2, layer->fakeLayerUpdater()->updateCount()); | 1044 EXPECT_EQ(36-2, layer->fakeLayerUpdater()->updateCount()); |
1045 | 1045 |
1046 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1046 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1047 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000, 1); | 1047 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 330000
+ 340000, 1); |
1048 EXPECT_EQ(3 + 2, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1048 EXPECT_EQ(3 + 2, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1049 | 1049 |
1050 layer->fakeLayerUpdater()->clearUpdateCount(); | 1050 layer->fakeLayerUpdater()->clearUpdateCount(); |
1051 layer->setTexturePriorities(m_priorityCalculator); | 1051 layer->setTexturePriorities(m_priorityCalculator); |
1052 m_resourceManager->prioritizeTextures(); | 1052 m_resourceManager->prioritizeTextures(); |
1053 | 1053 |
1054 occluded.setOcclusion(gfx::Rect(250, 250, 300, 100)); | 1054 occluded.setOcclusion(gfx::Rect(250, 250, 300, 100)); |
1055 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1055 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1056 layer->update(*m_queue.get(), &occluded, NULL); | 1056 layer->update(*m_queue.get(), &occluded, NULL); |
1057 EXPECT_EQ(36, layer->fakeLayerUpdater()->updateCount()); | 1057 EXPECT_EQ(36, layer->fakeLayerUpdater()->updateCount()); |
1058 | 1058 |
1059 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1059 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1060 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 330000 +
340000 + 360000, 1); | 1060 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 330000
+ 340000 + 360000, 1); |
1061 EXPECT_EQ(3 + 2, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1061 EXPECT_EQ(3 + 2, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1062 } | 1062 } |
1063 | 1063 |
1064 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints) | 1064 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints) |
1065 { | 1065 { |
1066 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1066 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
1067 TestOcclusionTracker occluded; | 1067 TestOcclusionTracker occluded; |
1068 m_occlusion = &occluded; | 1068 m_occlusion = &occluded; |
1069 | 1069 |
1070 // The tile size is 100x100. | 1070 // The tile size is 100x100. |
1071 | 1071 |
1072 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); | 1072 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); |
1073 layer->setBounds(gfx::Size(600, 600)); | 1073 layer->setBounds(gfx::Size(600, 600)); |
1074 calcDrawProps(layer); | 1074 calcDrawProps(layer); |
1075 | 1075 |
1076 // The partially occluded tiles (by the 150 occlusion height) are visible be
yond the occlusion, so not culled. | 1076 // The partially occluded tiles (by the 150 occlusion height) are visible be
yond the occlusion, so not culled. |
1077 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); | 1077 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); |
1078 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 360); | 1078 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 360); |
1079 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 360); | 1079 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 360); |
1080 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1080 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1081 | 1081 |
1082 layer->setTexturePriorities(m_priorityCalculator); | 1082 layer->setTexturePriorities(m_priorityCalculator); |
1083 m_resourceManager->prioritizeTextures(); | 1083 m_resourceManager->prioritizeTextures(); |
1084 layer->update(*m_queue.get(), &occluded, NULL); | 1084 layer->update(*m_queue.get(), &occluded, NULL); |
1085 EXPECT_EQ(24-3, layer->fakeLayerUpdater()->updateCount()); | 1085 EXPECT_EQ(24-3, layer->fakeLayerUpdater()->updateCount()); |
1086 | 1086 |
1087 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1087 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1088 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 210000,
1); | 1088 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 210000
, 1); |
1089 EXPECT_EQ(3, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1089 EXPECT_EQ(3, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1090 | 1090 |
1091 layer->fakeLayerUpdater()->clearUpdateCount(); | 1091 layer->fakeLayerUpdater()->clearUpdateCount(); |
1092 | 1092 |
1093 // Now the visible region stops at the edge of the occlusion so the partly v
isible tiles become fully occluded. | 1093 // Now the visible region stops at the edge of the occlusion so the partly v
isible tiles become fully occluded. |
1094 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); | 1094 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); |
1095 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 350); | 1095 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 350); |
1096 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 350); | 1096 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 350); |
1097 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1097 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1098 layer->setTexturePriorities(m_priorityCalculator); | 1098 layer->setTexturePriorities(m_priorityCalculator); |
1099 m_resourceManager->prioritizeTextures(); | 1099 m_resourceManager->prioritizeTextures(); |
1100 layer->update(*m_queue.get(), &occluded, NULL); | 1100 layer->update(*m_queue.get(), &occluded, NULL); |
1101 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); | 1101 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); |
1102 | 1102 |
1103 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1103 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1104 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000, 1); | 1104 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 210000
+ 180000, 1); |
1105 EXPECT_EQ(3 + 6, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1105 EXPECT_EQ(3 + 6, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1106 | 1106 |
1107 layer->fakeLayerUpdater()->clearUpdateCount(); | 1107 layer->fakeLayerUpdater()->clearUpdateCount(); |
1108 | 1108 |
1109 // Now the visible region is even smaller than the occlusion, it should have
the same result. | 1109 // Now the visible region is even smaller than the occlusion, it should have
the same result. |
1110 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); | 1110 occluded.setOcclusion(gfx::Rect(200, 200, 300, 150)); |
1111 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 340); | 1111 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 340); |
1112 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 340); | 1112 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 340); |
1113 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1113 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1114 layer->setTexturePriorities(m_priorityCalculator); | 1114 layer->setTexturePriorities(m_priorityCalculator); |
1115 m_resourceManager->prioritizeTextures(); | 1115 m_resourceManager->prioritizeTextures(); |
1116 layer->update(*m_queue.get(), &occluded, NULL); | 1116 layer->update(*m_queue.get(), &occluded, NULL); |
1117 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); | 1117 EXPECT_EQ(24-6, layer->fakeLayerUpdater()->updateCount()); |
1118 | 1118 |
1119 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1119 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1120 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 210000 +
180000 + 180000, 1); | 1120 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 210000
+ 180000 + 180000, 1); |
1121 EXPECT_EQ(3 + 6 + 6, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1121 EXPECT_EQ(3 + 6 + 6, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1122 | 1122 |
1123 } | 1123 } |
1124 | 1124 |
1125 TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation) | 1125 TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation) |
1126 { | 1126 { |
1127 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1127 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
1128 TestOcclusionTracker occluded; | 1128 TestOcclusionTracker occluded; |
1129 m_occlusion = &occluded; | 1129 m_occlusion = &occluded; |
1130 | 1130 |
1131 // The tile size is 100x100. | 1131 // The tile size is 100x100. |
1132 | 1132 |
1133 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); | 1133 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); |
1134 layer->setBounds(gfx::Size(600, 600)); | 1134 layer->setBounds(gfx::Size(600, 600)); |
1135 calcDrawProps(layer); | 1135 calcDrawProps(layer); |
1136 | 1136 |
1137 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); | 1137 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
1138 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 600); | 1138 layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 600); |
1139 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 600); | 1139 layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 600, 600); |
1140 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1140 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1141 layer->setTexturePriorities(m_priorityCalculator); | 1141 layer->setTexturePriorities(m_priorityCalculator); |
1142 m_resourceManager->prioritizeTextures(); | 1142 m_resourceManager->prioritizeTextures(); |
1143 layer->update(*m_queue.get(), &occluded, NULL); | 1143 layer->update(*m_queue.get(), &occluded, NULL); |
1144 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1144 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
1145 { | 1145 { |
1146 updateTextures(); | 1146 updateTextures(); |
1147 } | 1147 } |
1148 | 1148 |
1149 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1149 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1150 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1150 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 330000
, 1); |
1151 EXPECT_EQ(3, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1151 EXPECT_EQ(3, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1152 | 1152 |
1153 layer->fakeLayerUpdater()->clearUpdateCount(); | 1153 layer->fakeLayerUpdater()->clearUpdateCount(); |
1154 layer->setTexturePriorities(m_priorityCalculator); | 1154 layer->setTexturePriorities(m_priorityCalculator); |
1155 m_resourceManager->prioritizeTextures(); | 1155 m_resourceManager->prioritizeTextures(); |
1156 | 1156 |
1157 // Repaint without marking it dirty. The 3 culled tiles will be pre-painted
now. | 1157 // Repaint without marking it dirty. The 3 culled tiles will be pre-painted
now. |
1158 layer->update(*m_queue.get(), &occluded, NULL); | 1158 layer->update(*m_queue.get(), &occluded, NULL); |
1159 EXPECT_EQ(3, layer->fakeLayerUpdater()->updateCount()); | 1159 EXPECT_EQ(3, layer->fakeLayerUpdater()->updateCount()); |
1160 | 1160 |
1161 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1161 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1162 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1162 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 330000
, 1); |
1163 EXPECT_EQ(6, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1163 EXPECT_EQ(6, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1164 } | 1164 } |
1165 | 1165 |
1166 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms) | 1166 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms) |
1167 { | 1167 { |
1168 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1168 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
1169 TestOcclusionTracker occluded; | 1169 TestOcclusionTracker occluded; |
1170 m_occlusion = &occluded; | 1170 m_occlusion = &occluded; |
1171 | 1171 |
1172 // The tile size is 100x100. | 1172 // The tile size is 100x100. |
1173 | 1173 |
1174 // This makes sure the painting works when the occluded region (in screen sp
ace) | 1174 // This makes sure the painting works when the occluded region (in screen sp
ace) |
1175 // is transformed differently than the layer. | 1175 // is transformed differently than the layer. |
1176 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); | 1176 m_layerTreeHost->setViewportSize(gfx::Size(600, 600), gfx::Size(600, 600)); |
1177 layer->setBounds(gfx::Size(600, 600)); | 1177 layer->setBounds(gfx::Size(600, 600)); |
1178 calcDrawProps(layer); | 1178 calcDrawProps(layer); |
1179 gfx::Transform screenTransform; | 1179 gfx::Transform screenTransform; |
1180 screenTransform.Scale(0.5, 0.5); | 1180 screenTransform.Scale(0.5, 0.5); |
1181 layer->drawProperties().screen_space_transform = screenTransform; | 1181 layer->drawProperties().screen_space_transform = screenTransform; |
1182 layer->drawProperties().target_space_transform = screenTransform; | 1182 layer->drawProperties().target_space_transform = screenTransform; |
1183 | 1183 |
1184 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50)); | 1184 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50)); |
1185 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); | 1185 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->contentBounds()); |
1186 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1186 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
1187 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1187 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1188 layer->setTexturePriorities(m_priorityCalculator); | 1188 layer->setTexturePriorities(m_priorityCalculator); |
1189 m_resourceManager->prioritizeTextures(); | 1189 m_resourceManager->prioritizeTextures(); |
1190 layer->update(*m_queue.get(), &occluded, NULL); | 1190 layer->update(*m_queue.get(), &occluded, NULL); |
1191 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); | 1191 EXPECT_EQ(36-3, layer->fakeLayerUpdater()->updateCount()); |
1192 | 1192 |
1193 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1193 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1194 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 330000,
1); | 1194 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 330000
, 1); |
1195 EXPECT_EQ(3, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1195 EXPECT_EQ(3, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1196 } | 1196 } |
1197 | 1197 |
1198 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndScaling) | 1198 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndScaling) |
1199 { | 1199 { |
1200 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1200 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
1201 TestOcclusionTracker occluded; | 1201 TestOcclusionTracker occluded; |
1202 m_occlusion = &occluded; | 1202 m_occlusion = &occluded; |
1203 | 1203 |
1204 // The tile size is 100x100. | 1204 // The tile size is 100x100. |
1205 | 1205 |
(...skipping 16 matching lines...) Expand all Loading... |
1222 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1222 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
1223 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1223 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1224 layer->setTexturePriorities(m_priorityCalculator); | 1224 layer->setTexturePriorities(m_priorityCalculator); |
1225 m_resourceManager->prioritizeTextures(); | 1225 m_resourceManager->prioritizeTextures(); |
1226 layer->update(*m_queue.get(), &occluded, NULL); | 1226 layer->update(*m_queue.get(), &occluded, NULL); |
1227 // The content is half the size of the layer (so the number of tiles is fewe
r). | 1227 // The content is half the size of the layer (so the number of tiles is fewe
r). |
1228 // In this case, the content is 300x300, and since the tile size is 100, the | 1228 // In this case, the content is 300x300, and since the tile size is 100, the |
1229 // number of tiles 3x3. | 1229 // number of tiles 3x3. |
1230 EXPECT_EQ(9, layer->fakeLayerUpdater()->updateCount()); | 1230 EXPECT_EQ(9, layer->fakeLayerUpdater()->updateCount()); |
1231 | 1231 |
1232 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1232 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1233 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 90000, 1
); | 1233 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 90000,
1); |
1234 EXPECT_EQ(0, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1234 EXPECT_EQ(0, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1235 | 1235 |
1236 layer->fakeLayerUpdater()->clearUpdateCount(); | 1236 layer->fakeLayerUpdater()->clearUpdateCount(); |
1237 | 1237 |
1238 // This makes sure the painting works when the content space is scaled to | 1238 // This makes sure the painting works when the content space is scaled to |
1239 // a different layer space. In this case the occluded region catches the | 1239 // a different layer space. In this case the occluded region catches the |
1240 // blown up tiles. | 1240 // blown up tiles. |
1241 occluded.setOcclusion(gfx::Rect(200, 200, 300, 200)); | 1241 occluded.setOcclusion(gfx::Rect(200, 200, 300, 200)); |
1242 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->bounds()); | 1242 layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), laye
r->bounds()); |
1243 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1243 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
1244 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1244 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1245 layer->setTexturePriorities(m_priorityCalculator); | 1245 layer->setTexturePriorities(m_priorityCalculator); |
1246 m_resourceManager->prioritizeTextures(); | 1246 m_resourceManager->prioritizeTextures(); |
1247 layer->update(*m_queue.get(), &occluded, NULL); | 1247 layer->update(*m_queue.get(), &occluded, NULL); |
1248 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); | 1248 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); |
1249 | 1249 |
1250 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1250 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1251 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 90000 +
80000, 1); | 1251 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 90000
+ 80000, 1); |
1252 EXPECT_EQ(1, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1252 EXPECT_EQ(1, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1253 | 1253 |
1254 layer->fakeLayerUpdater()->clearUpdateCount(); | 1254 layer->fakeLayerUpdater()->clearUpdateCount(); |
1255 | 1255 |
1256 // This makes sure content scaling and transforms work together. | 1256 // This makes sure content scaling and transforms work together. |
1257 gfx::Transform screenTransform; | 1257 gfx::Transform screenTransform; |
1258 screenTransform.Scale(0.5, 0.5); | 1258 screenTransform.Scale(0.5, 0.5); |
1259 layer->drawProperties().screen_space_transform = screenTransform; | 1259 layer->drawProperties().screen_space_transform = screenTransform; |
1260 layer->drawProperties().target_space_transform = screenTransform; | 1260 layer->drawProperties().target_space_transform = screenTransform; |
1261 | 1261 |
1262 occluded.setOcclusion(gfx::Rect(100, 100, 150, 100)); | 1262 occluded.setOcclusion(gfx::Rect(100, 100, 150, 100)); |
1263 | 1263 |
1264 gfx::Rect layerBoundsRect(gfx::Point(), layer->bounds()); | 1264 gfx::Rect layerBoundsRect(gfx::Point(), layer->bounds()); |
1265 layer->drawProperties().drawable_content_rect = gfx::ToEnclosingRect(gfx::Sc
aleRect(layerBoundsRect, 0.5)); | 1265 layer->drawProperties().drawable_content_rect = gfx::ToEnclosingRect(gfx::Sc
aleRect(layerBoundsRect, 0.5)); |
1266 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); | 1266 layer->drawProperties().visible_content_rect = gfx::Rect(gfx::Point(), layer
->contentBounds()); |
1267 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1267 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1268 layer->setTexturePriorities(m_priorityCalculator); | 1268 layer->setTexturePriorities(m_priorityCalculator); |
1269 m_resourceManager->prioritizeTextures(); | 1269 m_resourceManager->prioritizeTextures(); |
1270 layer->update(*m_queue.get(), &occluded, NULL); | 1270 layer->update(*m_queue.get(), &occluded, NULL); |
1271 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); | 1271 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); |
1272 | 1272 |
1273 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1273 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1274 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 90000 +
80000 + 80000, 1); | 1274 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 90000
+ 80000 + 80000, 1); |
1275 EXPECT_EQ(1 + 1, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1275 EXPECT_EQ(1 + 1, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1276 } | 1276 } |
1277 | 1277 |
1278 TEST_F(TiledLayerTest, visibleContentOpaqueRegion) | 1278 TEST_F(TiledLayerTest, visibleContentOpaqueRegion) |
1279 { | 1279 { |
1280 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1280 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
1281 TestOcclusionTracker occluded; | 1281 TestOcclusionTracker occluded; |
1282 m_occlusion = &occluded; | 1282 m_occlusion = &occluded; |
1283 m_layerTreeHost->setViewportSize(gfx::Size(1000, 1000), gfx::Size(1000, 1000
)); | 1283 m_layerTreeHost->setViewportSize(gfx::Size(1000, 1000), gfx::Size(1000, 1000
)); |
1284 | 1284 |
1285 // The tile size is 100x100, so this invalidates and then paints two tiles i
n various ways. | 1285 // The tile size is 100x100, so this invalidates and then paints two tiles i
n various ways. |
(...skipping 11 matching lines...) Expand all Loading... |
1297 | 1297 |
1298 // If the layer doesn't paint opaque content, then the visibleContentOpaqueR
egion should be empty. | 1298 // If the layer doesn't paint opaque content, then the visibleContentOpaqueR
egion should be empty. |
1299 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1299 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
1300 layer->invalidateContentRect(contentBounds); | 1300 layer->invalidateContentRect(contentBounds); |
1301 layer->setTexturePriorities(m_priorityCalculator); | 1301 layer->setTexturePriorities(m_priorityCalculator); |
1302 m_resourceManager->prioritizeTextures(); | 1302 m_resourceManager->prioritizeTextures(); |
1303 layer->update(*m_queue.get(), &occluded, NULL); | 1303 layer->update(*m_queue.get(), &occluded, NULL); |
1304 opaqueContents = layer->visibleContentOpaqueRegion(); | 1304 opaqueContents = layer->visibleContentOpaqueRegion(); |
1305 EXPECT_TRUE(opaqueContents.IsEmpty()); | 1305 EXPECT_TRUE(opaqueContents.IsEmpty()); |
1306 | 1306 |
1307 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsPainted(), 20000, 1); | 1307 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_painted(), 20000, 1); |
1308 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1308 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1309 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); | 1309 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 20000,
1); |
1310 EXPECT_EQ(0, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1310 EXPECT_EQ(0, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1311 | 1311 |
1312 // visibleContentOpaqueRegion should match the visible part of what is paint
ed opaque. | 1312 // visibleContentOpaqueRegion should match the visible part of what is paint
ed opaque. |
1313 opaquePaintRect = gfx::Rect(10, 10, 90, 190); | 1313 opaquePaintRect = gfx::Rect(10, 10, 90, 190); |
1314 layer->fakeLayerUpdater()->setOpaquePaintRect(opaquePaintRect); | 1314 layer->fakeLayerUpdater()->setOpaquePaintRect(opaquePaintRect); |
1315 layer->invalidateContentRect(contentBounds); | 1315 layer->invalidateContentRect(contentBounds); |
1316 layer->setTexturePriorities(m_priorityCalculator); | 1316 layer->setTexturePriorities(m_priorityCalculator); |
1317 m_resourceManager->prioritizeTextures(); | 1317 m_resourceManager->prioritizeTextures(); |
1318 layer->update(*m_queue.get(), &occluded, NULL); | 1318 layer->update(*m_queue.get(), &occluded, NULL); |
1319 updateTextures(); | 1319 updateTextures(); |
1320 opaqueContents = layer->visibleContentOpaqueRegion(); | 1320 opaqueContents = layer->visibleContentOpaqueRegion(); |
1321 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); | 1321 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); |
1322 | 1322 |
1323 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsPainted(), 20000 * 2, 1); | 1323 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_painted(), 20000 * 2, 1); |
1324 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 17100, 1); | 1324 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 17100, 1); |
1325 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100, 1); | 1325 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 20000
+ 20000 - 17100, 1); |
1326 EXPECT_EQ(0, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1326 EXPECT_EQ(0, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1327 | 1327 |
1328 // If we paint again without invalidating, the same stuff should be opaque. | 1328 // If we paint again without invalidating, the same stuff should be opaque. |
1329 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1329 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
1330 layer->setTexturePriorities(m_priorityCalculator); | 1330 layer->setTexturePriorities(m_priorityCalculator); |
1331 m_resourceManager->prioritizeTextures(); | 1331 m_resourceManager->prioritizeTextures(); |
1332 layer->update(*m_queue.get(), &occluded, NULL); | 1332 layer->update(*m_queue.get(), &occluded, NULL); |
1333 updateTextures(); | 1333 updateTextures(); |
1334 opaqueContents = layer->visibleContentOpaqueRegion(); | 1334 opaqueContents = layer->visibleContentOpaqueRegion(); |
1335 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); | 1335 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); |
1336 | 1336 |
1337 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsPainted(), 20000 * 2, 1); | 1337 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_painted(), 20000 * 2, 1); |
1338 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 17100, 1); | 1338 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 17100, 1); |
1339 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100, 1); | 1339 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 20000
+ 20000 - 17100, 1); |
1340 EXPECT_EQ(0, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1340 EXPECT_EQ(0, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1341 | 1341 |
1342 // If we repaint a non-opaque part of the tile, then it shouldn't lose its o
paque-ness. And other tiles should | 1342 // If we repaint a non-opaque part of the tile, then it shouldn't lose its o
paque-ness. And other tiles should |
1343 // not be affected. | 1343 // not be affected. |
1344 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1344 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
1345 layer->invalidateContentRect(gfx::Rect(0, 0, 1, 1)); | 1345 layer->invalidateContentRect(gfx::Rect(0, 0, 1, 1)); |
1346 layer->setTexturePriorities(m_priorityCalculator); | 1346 layer->setTexturePriorities(m_priorityCalculator); |
1347 m_resourceManager->prioritizeTextures(); | 1347 m_resourceManager->prioritizeTextures(); |
1348 layer->update(*m_queue.get(), &occluded, NULL); | 1348 layer->update(*m_queue.get(), &occluded, NULL); |
1349 updateTextures(); | 1349 updateTextures(); |
1350 opaqueContents = layer->visibleContentOpaqueRegion(); | 1350 opaqueContents = layer->visibleContentOpaqueRegion(); |
1351 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); | 1351 EXPECT_EQ(gfx::IntersectRects(opaquePaintRect, visibleBounds).ToString(), op
aqueContents.ToString()); |
1352 | 1352 |
1353 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsPainted(), 20000 * 2 + 1, 1); | 1353 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_painted(), 20000 * 2 + 1, 1); |
1354 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 17100, 1); | 1354 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 17100, 1); |
1355 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100 + 1, 1); | 1355 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 20000
+ 20000 - 17100 + 1, 1); |
1356 EXPECT_EQ(0, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1356 EXPECT_EQ(0, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1357 | 1357 |
1358 // If we repaint an opaque part of the tile, then it should lose its opaque-
ness. But other tiles should still | 1358 // If we repaint an opaque part of the tile, then it should lose its opaque-
ness. But other tiles should still |
1359 // not be affected. | 1359 // not be affected. |
1360 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1360 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
1361 layer->invalidateContentRect(gfx::Rect(10, 10, 1, 1)); | 1361 layer->invalidateContentRect(gfx::Rect(10, 10, 1, 1)); |
1362 layer->setTexturePriorities(m_priorityCalculator); | 1362 layer->setTexturePriorities(m_priorityCalculator); |
1363 m_resourceManager->prioritizeTextures(); | 1363 m_resourceManager->prioritizeTextures(); |
1364 layer->update(*m_queue.get(), &occluded, NULL); | 1364 layer->update(*m_queue.get(), &occluded, NULL); |
1365 updateTextures(); | 1365 updateTextures(); |
1366 opaqueContents = layer->visibleContentOpaqueRegion(); | 1366 opaqueContents = layer->visibleContentOpaqueRegion(); |
1367 EXPECT_EQ(gfx::IntersectRects(gfx::Rect(10, 100, 90, 100), visibleBounds).To
String(), opaqueContents.ToString()); | 1367 EXPECT_EQ(gfx::IntersectRects(gfx::Rect(10, 100, 90, 100), visibleBounds).To
String(), opaqueContents.ToString()); |
1368 | 1368 |
1369 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsPainted(), 20000 * 2 + 1 + 1,
1); | 1369 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_painted(), 20000 * 2 + 1 + 1,
1); |
1370 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 17100, 1); | 1370 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 17100, 1); |
1371 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 20000 +
20000 - 17100 + 1 + 1, 1); | 1371 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 20000
+ 20000 - 17100 + 1 + 1, 1); |
1372 EXPECT_EQ(0, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1372 EXPECT_EQ(0, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1373 } | 1373 } |
1374 | 1374 |
1375 TEST_F(TiledLayerTest, pixelsPaintedMetrics) | 1375 TEST_F(TiledLayerTest, pixels_paintedMetrics) |
1376 { | 1376 { |
1377 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1377 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
1378 TestOcclusionTracker occluded; | 1378 TestOcclusionTracker occluded; |
1379 m_occlusion = &occluded; | 1379 m_occlusion = &occluded; |
1380 m_layerTreeHost->setViewportSize(gfx::Size(1000, 1000), gfx::Size(1000, 1000
)); | 1380 m_layerTreeHost->setViewportSize(gfx::Size(1000, 1000), gfx::Size(1000, 1000
)); |
1381 | 1381 |
1382 // The tile size is 100x100, so this invalidates and then paints two tiles i
n various ways. | 1382 // The tile size is 100x100, so this invalidates and then paints two tiles i
n various ways. |
1383 | 1383 |
1384 gfx::Rect opaquePaintRect; | 1384 gfx::Rect opaquePaintRect; |
1385 Region opaqueContents; | 1385 Region opaqueContents; |
1386 | 1386 |
1387 gfx::Rect contentBounds = gfx::Rect(0, 0, 100, 300); | 1387 gfx::Rect contentBounds = gfx::Rect(0, 0, 100, 300); |
1388 layer->setBounds(contentBounds.size()); | 1388 layer->setBounds(contentBounds.size()); |
1389 calcDrawProps(layer); | 1389 calcDrawProps(layer); |
1390 | 1390 |
1391 // Invalidates and paints the whole layer. | 1391 // Invalidates and paints the whole layer. |
1392 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1392 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
1393 layer->invalidateContentRect(contentBounds); | 1393 layer->invalidateContentRect(contentBounds); |
1394 layer->setTexturePriorities(m_priorityCalculator); | 1394 layer->setTexturePriorities(m_priorityCalculator); |
1395 m_resourceManager->prioritizeTextures(); | 1395 m_resourceManager->prioritizeTextures(); |
1396 layer->update(*m_queue.get(), &occluded, NULL); | 1396 layer->update(*m_queue.get(), &occluded, NULL); |
1397 updateTextures(); | 1397 updateTextures(); |
1398 opaqueContents = layer->visibleContentOpaqueRegion(); | 1398 opaqueContents = layer->visibleContentOpaqueRegion(); |
1399 EXPECT_TRUE(opaqueContents.IsEmpty()); | 1399 EXPECT_TRUE(opaqueContents.IsEmpty()); |
1400 | 1400 |
1401 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsPainted(), 30000, 1); | 1401 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_painted(), 30000, 1); |
1402 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1402 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1403 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 30000, 1
); | 1403 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 30000,
1); |
1404 EXPECT_EQ(0, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1404 EXPECT_EQ(0, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1405 | 1405 |
1406 // Invalidates an area on the top and bottom tile, which will cause us to pa
int the tile in the middle, | 1406 // Invalidates an area on the top and bottom tile, which will cause us to pa
int the tile in the middle, |
1407 // even though it is not dirty and will not be uploaded. | 1407 // even though it is not dirty and will not be uploaded. |
1408 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); | 1408 layer->fakeLayerUpdater()->setOpaquePaintRect(gfx::Rect()); |
1409 layer->invalidateContentRect(gfx::Rect(0, 0, 1, 1)); | 1409 layer->invalidateContentRect(gfx::Rect(0, 0, 1, 1)); |
1410 layer->invalidateContentRect(gfx::Rect(50, 200, 10, 10)); | 1410 layer->invalidateContentRect(gfx::Rect(50, 200, 10, 10)); |
1411 layer->setTexturePriorities(m_priorityCalculator); | 1411 layer->setTexturePriorities(m_priorityCalculator); |
1412 m_resourceManager->prioritizeTextures(); | 1412 m_resourceManager->prioritizeTextures(); |
1413 layer->update(*m_queue.get(), &occluded, NULL); | 1413 layer->update(*m_queue.get(), &occluded, NULL); |
1414 updateTextures(); | 1414 updateTextures(); |
1415 opaqueContents = layer->visibleContentOpaqueRegion(); | 1415 opaqueContents = layer->visibleContentOpaqueRegion(); |
1416 EXPECT_TRUE(opaqueContents.IsEmpty()); | 1416 EXPECT_TRUE(opaqueContents.IsEmpty()); |
1417 | 1417 |
1418 // The middle tile was painted even though not invalidated. | 1418 // The middle tile was painted even though not invalidated. |
1419 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsPainted(), 30000 + 60 * 210, 1)
; | 1419 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_painted(), 30000 + 60 * 210, 1
); |
1420 // The pixels uploaded will not include the non-invalidated tile in the midd
le. | 1420 // The pixels uploaded will not include the non-invalidated tile in the midd
le. |
1421 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1421 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_opaque(), 0, 1); |
1422 EXPECT_NEAR(occluded.OverdrawMetrics().pixelsUploadedTranslucent(), 30000 +
1 + 100, 1); | 1422 EXPECT_NEAR(occluded.OverdrawMetrics().pixels_uploaded_translucent(), 30000
+ 1 + 100, 1); |
1423 EXPECT_EQ(0, occluded.OverdrawMetrics().tilesCulledForUpload()); | 1423 EXPECT_EQ(0, occluded.OverdrawMetrics().tiles_culled_for_upload()); |
1424 } | 1424 } |
1425 | 1425 |
1426 TEST_F(TiledLayerTest, dontAllocateContentsWhenTargetSurfaceCantBeAllocated) | 1426 TEST_F(TiledLayerTest, dontAllocateContentsWhenTargetSurfaceCantBeAllocated) |
1427 { | 1427 { |
1428 // Tile size is 100x100. | 1428 // Tile size is 100x100. |
1429 gfx::Rect rootRect(0, 0, 300, 200); | 1429 gfx::Rect rootRect(0, 0, 300, 200); |
1430 gfx::Rect childRect(0, 0, 300, 100); | 1430 gfx::Rect childRect(0, 0, 300, 100); |
1431 gfx::Rect child2Rect(0, 100, 300, 100); | 1431 gfx::Rect child2Rect(0, 100, 300, 100); |
1432 | 1432 |
1433 scoped_refptr<FakeTiledLayer> root = make_scoped_refptr(new FakeTiledLayer(m
_layerTreeHost->contentsTextureManager())); | 1433 scoped_refptr<FakeTiledLayer> root = make_scoped_refptr(new FakeTiledLayer(m
_layerTreeHost->contentsTextureManager())); |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1666 | 1666 |
1667 // Invalidate the entire layer in layer space. When painting, the rect given
to webkit should match the layer's bounds. | 1667 // Invalidate the entire layer in layer space. When painting, the rect given
to webkit should match the layer's bounds. |
1668 layer->setNeedsDisplayRect(layerRect); | 1668 layer->setNeedsDisplayRect(layerRect); |
1669 layer->update(*m_queue.get(), 0, NULL); | 1669 layer->update(*m_queue.get(), 0, NULL); |
1670 | 1670 |
1671 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); | 1671 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); |
1672 } | 1672 } |
1673 | 1673 |
1674 } // namespace | 1674 } // namespace |
1675 } // namespace cc | 1675 } // namespace cc |
OLD | NEW |