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