| 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/rendering_stats.h" | 10 #include "cc/rendering_stats.h" |
| 11 #include "cc/resource_update_controller.h" | 11 #include "cc/resource_update_controller.h" |
| 12 #include "cc/single_thread_proxy.h" // For DebugScopedSetImplThread | 12 #include "cc/single_thread_proxy.h" // For DebugScopedSetImplThread |
| 13 #include "cc/test/animation_test_common.h" | 13 #include "cc/test/animation_test_common.h" |
| 14 #include "cc/test/fake_graphics_context.h" | 14 #include "cc/test/fake_graphics_context.h" |
| 15 #include "cc/test/fake_layer_tree_host_client.h" | 15 #include "cc/test/fake_layer_tree_host_client.h" |
| 16 #include "cc/test/fake_proxy.h" | 16 #include "cc/test/fake_proxy.h" |
| 17 #include "cc/test/geometry_test_utils.h" | 17 #include "cc/test/geometry_test_utils.h" |
| 18 #include "cc/test/tiled_layer_test_common.h" | 18 #include "cc/test/tiled_layer_test_common.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 20 #include "ui/gfx/rect_conversions.h" | 20 #include "ui/gfx/rect_conversions.h" |
| 21 #include <public/WebTransformationMatrix.h> | 21 #include "ui/gfx/transform.h" |
| 22 | 22 |
| 23 using namespace WebKitTests; | 23 using namespace WebKitTests; |
| 24 using WebKit::WebTransformationMatrix; | 24 using gfx::Transform; |
| 25 | 25 |
| 26 namespace cc { | 26 namespace cc { |
| 27 namespace { | 27 namespace { |
| 28 | 28 |
| 29 class TestOcclusionTracker : public OcclusionTracker { | 29 class TestOcclusionTracker : public OcclusionTracker { |
| 30 public: | 30 public: |
| 31 TestOcclusionTracker() | 31 TestOcclusionTracker() |
| 32 : OcclusionTracker(gfx::Rect(0, 0, 1000, 1000), true) | 32 : OcclusionTracker(gfx::Rect(0, 0, 1000, 1000), true) |
| 33 , m_layerClipRectInTarget(gfx::Rect(0, 0, 1000, 1000)) | 33 , m_layerClipRectInTarget(gfx::Rect(0, 0, 1000, 1000)) |
| 34 { | 34 { |
| (...skipping 1099 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1134 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms) | 1134 TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms) |
| 1135 { | 1135 { |
| 1136 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); | 1136 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(
m_resourceManager.get())); |
| 1137 TestOcclusionTracker occluded; | 1137 TestOcclusionTracker occluded; |
| 1138 | 1138 |
| 1139 // The tile size is 100x100. | 1139 // The tile size is 100x100. |
| 1140 | 1140 |
| 1141 // This makes sure the painting works when the occluded region (in screen sp
ace) | 1141 // This makes sure the painting works when the occluded region (in screen sp
ace) |
| 1142 // is transformed differently than the layer. | 1142 // is transformed differently than the layer. |
| 1143 layer->setBounds(gfx::Size(600, 600)); | 1143 layer->setBounds(gfx::Size(600, 600)); |
| 1144 WebTransformationMatrix screenTransform; | 1144 Transform screenTransform; |
| 1145 screenTransform.scale(0.5); | 1145 screenTransform.PreconcatScale(0.5, 0.5); |
| 1146 layer->setScreenSpaceTransform(screenTransform); | 1146 layer->setScreenSpaceTransform(screenTransform); |
| 1147 layer->setDrawTransform(screenTransform); | 1147 layer->setDrawTransform(screenTransform); |
| 1148 | 1148 |
| 1149 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50)); | 1149 occluded.setOcclusion(gfx::Rect(100, 100, 150, 50)); |
| 1150 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()
)); | 1150 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->contentBounds()
)); |
| 1151 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); | 1151 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); |
| 1152 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1152 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1153 layer->setTexturePriorities(m_priorityCalculator); | 1153 layer->setTexturePriorities(m_priorityCalculator); |
| 1154 m_resourceManager->prioritizeTextures(); | 1154 m_resourceManager->prioritizeTextures(); |
| 1155 layer->update(*m_queue.get(), &occluded, m_stats); | 1155 layer->update(*m_queue.get(), &occluded, m_stats); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1166 TestOcclusionTracker occluded; | 1166 TestOcclusionTracker occluded; |
| 1167 | 1167 |
| 1168 // The tile size is 100x100. | 1168 // The tile size is 100x100. |
| 1169 | 1169 |
| 1170 // This makes sure the painting works when the content space is scaled to | 1170 // This makes sure the painting works when the content space is scaled to |
| 1171 // a different layer space. In this case tiles are scaled to be 200x200 | 1171 // a different layer space. In this case tiles are scaled to be 200x200 |
| 1172 // pixels, which means none should be occluded. | 1172 // pixels, which means none should be occluded. |
| 1173 layer->setContentsScale(0.5); | 1173 layer->setContentsScale(0.5); |
| 1174 EXPECT_FLOAT_EQ(layer->contentsScaleX(), layer->contentsScaleY()); | 1174 EXPECT_FLOAT_EQ(layer->contentsScaleX(), layer->contentsScaleY()); |
| 1175 layer->setBounds(gfx::Size(600, 600)); | 1175 layer->setBounds(gfx::Size(600, 600)); |
| 1176 WebTransformationMatrix drawTransform; | 1176 Transform drawTransform; |
| 1177 drawTransform.scale(1 / layer->contentsScaleX()); | 1177 double invScaleFactor = 1 / layer->contentsScaleX(); |
| 1178 drawTransform.PreconcatScale(invScaleFactor, invScaleFactor); |
| 1178 layer->setDrawTransform(drawTransform); | 1179 layer->setDrawTransform(drawTransform); |
| 1179 layer->setScreenSpaceTransform(drawTransform); | 1180 layer->setScreenSpaceTransform(drawTransform); |
| 1180 | 1181 |
| 1181 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); | 1182 occluded.setOcclusion(gfx::Rect(200, 200, 300, 100)); |
| 1182 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->bounds())); | 1183 layer->setDrawableContentRect(gfx::Rect(gfx::Point(), layer->bounds())); |
| 1183 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); | 1184 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); |
| 1184 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1185 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1185 layer->setTexturePriorities(m_priorityCalculator); | 1186 layer->setTexturePriorities(m_priorityCalculator); |
| 1186 m_resourceManager->prioritizeTextures(); | 1187 m_resourceManager->prioritizeTextures(); |
| 1187 layer->update(*m_queue.get(), &occluded, m_stats); | 1188 layer->update(*m_queue.get(), &occluded, m_stats); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1208 layer->update(*m_queue.get(), &occluded, m_stats); | 1209 layer->update(*m_queue.get(), &occluded, m_stats); |
| 1209 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); | 1210 EXPECT_EQ(9-1, layer->fakeLayerUpdater()->updateCount()); |
| 1210 | 1211 |
| 1211 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 1212 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 1212 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 +
80000, 1); | 1213 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 90000 +
80000, 1); |
| 1213 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); | 1214 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 1214 | 1215 |
| 1215 layer->fakeLayerUpdater()->clearUpdateCount(); | 1216 layer->fakeLayerUpdater()->clearUpdateCount(); |
| 1216 | 1217 |
| 1217 // This makes sure content scaling and transforms work together. | 1218 // This makes sure content scaling and transforms work together. |
| 1218 WebTransformationMatrix screenTransform; | 1219 Transform screenTransform; |
| 1219 screenTransform.scale(0.5); | 1220 screenTransform.PreconcatScale(0.5, 0.5); |
| 1220 layer->setScreenSpaceTransform(screenTransform); | 1221 layer->setScreenSpaceTransform(screenTransform); |
| 1221 layer->setDrawTransform(screenTransform); | 1222 layer->setDrawTransform(screenTransform); |
| 1222 | 1223 |
| 1223 occluded.setOcclusion(gfx::Rect(100, 100, 150, 100)); | 1224 occluded.setOcclusion(gfx::Rect(100, 100, 150, 100)); |
| 1224 | 1225 |
| 1225 gfx::Rect layerBoundsRect(gfx::Point(), layer->bounds()); | 1226 gfx::Rect layerBoundsRect(gfx::Point(), layer->bounds()); |
| 1226 layer->setDrawableContentRect(gfx::ToEnclosingRect(gfx::ScaleRect(layerBound
sRect, 0.5))); | 1227 layer->setDrawableContentRect(gfx::ToEnclosingRect(gfx::ScaleRect(layerBound
sRect, 0.5))); |
| 1227 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); | 1228 layer->setVisibleContentRect(gfx::Rect(gfx::Point(), layer->contentBounds())
); |
| 1228 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1229 layer->invalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
| 1229 layer->setTexturePriorities(m_priorityCalculator); | 1230 layer->setTexturePriorities(m_priorityCalculator); |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1619 | 1620 |
| 1620 // Invalidate the entire layer in layer space. When painting, the rect given
to webkit should match the layer's bounds. | 1621 // Invalidate the entire layer in layer space. When painting, the rect given
to webkit should match the layer's bounds. |
| 1621 layer->setNeedsDisplayRect(layerRect); | 1622 layer->setNeedsDisplayRect(layerRect); |
| 1622 layer->update(*m_queue.get(), 0, m_stats); | 1623 layer->update(*m_queue.get(), 0, m_stats); |
| 1623 | 1624 |
| 1624 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); | 1625 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); |
| 1625 } | 1626 } |
| 1626 | 1627 |
| 1627 } // namespace | 1628 } // namespace |
| 1628 } // namespace cc | 1629 } // namespace cc |
| OLD | NEW |