| 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/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 layer->SetBounds(size); | 217 layer->SetBounds(size); |
| 218 layer->SetContentBounds(size); | 218 layer->SetContentBounds(size); |
| 219 layer->SetMaxScrollOffset(gfx::Vector2d(size.width() * 2, | 219 layer->SetMaxScrollOffset(gfx::Vector2d(size.width() * 2, |
| 220 size.height() * 2)); | 220 size.height() * 2)); |
| 221 return layer.Pass(); | 221 return layer.Pass(); |
| 222 } | 222 } |
| 223 | 223 |
| 224 void InitializeRendererAndDrawFrame() { | 224 void InitializeRendererAndDrawFrame() { |
| 225 host_impl_->InitializeRenderer(CreateOutputSurface()); | 225 host_impl_->InitializeRenderer(CreateOutputSurface()); |
| 226 LayerTreeHostImpl::FrameData frame; | 226 LayerTreeHostImpl::FrameData frame; |
| 227 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 227 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 228 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 228 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 229 host_impl_->DidDrawAllLayers(frame); | 229 host_impl_->DidDrawAllLayers(frame); |
| 230 } | 230 } |
| 231 | 231 |
| 232 void pinch_zoom_pan_viewport_forces_commit_redraw(float device_scale_factor); | 232 void pinch_zoom_pan_viewport_forces_commit_redraw(float device_scale_factor); |
| 233 void pinch_zoom_pan_viewport_test(float device_scale_factor); | 233 void pinch_zoom_pan_viewport_test(float device_scale_factor); |
| 234 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); | 234 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); |
| 235 void pinch_zoom_pan_viewport_and_scroll_boundary_test( | 235 void pinch_zoom_pan_viewport_and_scroll_boundary_test( |
| 236 float device_scale_factor); | 236 float device_scale_factor); |
| 237 | 237 |
| 238 protected: | 238 protected: |
| 239 virtual scoped_ptr<OutputSurface> CreateOutputSurface() { | 239 virtual scoped_ptr<OutputSurface> CreateOutputSurface() { |
| 240 return CreateFakeOutputSurface(); | 240 return CreateFakeOutputSurface(); |
| 241 } | 241 } |
| 242 | 242 |
| 243 void DrawOneFrame() { | 243 void DrawOneFrame() { |
| 244 LayerTreeHostImpl::FrameData frame_data; | 244 LayerTreeHostImpl::FrameData frame_data; |
| 245 host_impl_->PrepareToDraw(&frame_data); | 245 host_impl_->PrepareToDraw(&frame_data, gfx::Rect()); |
| 246 host_impl_->DidDrawAllLayers(frame_data); | 246 host_impl_->DidDrawAllLayers(frame_data); |
| 247 } | 247 } |
| 248 | 248 |
| 249 FakeProxy proxy_; | 249 FakeProxy proxy_; |
| 250 DebugScopedSetImplThread always_impl_thread_; | 250 DebugScopedSetImplThread always_impl_thread_; |
| 251 DebugScopedSetMainThreadBlocked always_main_thread_blocked_; | 251 DebugScopedSetMainThreadBlocked always_main_thread_blocked_; |
| 252 | 252 |
| 253 scoped_ptr<LayerTreeHostImpl> host_impl_; | 253 scoped_ptr<LayerTreeHostImpl> host_impl_; |
| 254 FakeRenderingStatsInstrumentation stats_instrumentation_; | 254 FakeRenderingStatsInstrumentation stats_instrumentation_; |
| 255 bool on_can_draw_state_changed_called_; | 255 bool on_can_draw_state_changed_called_; |
| (...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1051 // Ensure visible_content_rect for layer is empty. | 1051 // Ensure visible_content_rect for layer is empty. |
| 1052 layer->SetPosition(gfx::PointF(100.f, 100.f)); | 1052 layer->SetPosition(gfx::PointF(100.f, 100.f)); |
| 1053 layer->SetBounds(gfx::Size(10, 10)); | 1053 layer->SetBounds(gfx::Size(10, 10)); |
| 1054 layer->SetContentBounds(gfx::Size(10, 10)); | 1054 layer->SetContentBounds(gfx::Size(10, 10)); |
| 1055 | 1055 |
| 1056 LayerTreeHostImpl::FrameData frame; | 1056 LayerTreeHostImpl::FrameData frame; |
| 1057 | 1057 |
| 1058 EXPECT_FALSE(layer->will_draw_called()); | 1058 EXPECT_FALSE(layer->will_draw_called()); |
| 1059 EXPECT_FALSE(layer->did_draw_called()); | 1059 EXPECT_FALSE(layer->did_draw_called()); |
| 1060 | 1060 |
| 1061 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 1061 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 1062 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 1062 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 1063 host_impl_->DidDrawAllLayers(frame); | 1063 host_impl_->DidDrawAllLayers(frame); |
| 1064 | 1064 |
| 1065 EXPECT_FALSE(layer->will_draw_called()); | 1065 EXPECT_FALSE(layer->will_draw_called()); |
| 1066 EXPECT_FALSE(layer->did_draw_called()); | 1066 EXPECT_FALSE(layer->did_draw_called()); |
| 1067 | 1067 |
| 1068 EXPECT_TRUE(layer->visible_content_rect().IsEmpty()); | 1068 EXPECT_TRUE(layer->visible_content_rect().IsEmpty()); |
| 1069 | 1069 |
| 1070 // Ensure visible_content_rect for layer is not empty | 1070 // Ensure visible_content_rect for layer is not empty |
| 1071 layer->SetPosition(gfx::PointF()); | 1071 layer->SetPosition(gfx::PointF()); |
| 1072 | 1072 |
| 1073 EXPECT_FALSE(layer->will_draw_called()); | 1073 EXPECT_FALSE(layer->will_draw_called()); |
| 1074 EXPECT_FALSE(layer->did_draw_called()); | 1074 EXPECT_FALSE(layer->did_draw_called()); |
| 1075 | 1075 |
| 1076 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 1076 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 1077 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 1077 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 1078 host_impl_->DidDrawAllLayers(frame); | 1078 host_impl_->DidDrawAllLayers(frame); |
| 1079 | 1079 |
| 1080 EXPECT_TRUE(layer->will_draw_called()); | 1080 EXPECT_TRUE(layer->will_draw_called()); |
| 1081 EXPECT_TRUE(layer->did_draw_called()); | 1081 EXPECT_TRUE(layer->did_draw_called()); |
| 1082 | 1082 |
| 1083 EXPECT_FALSE(layer->visible_content_rect().IsEmpty()); | 1083 EXPECT_FALSE(layer->visible_content_rect().IsEmpty()); |
| 1084 } | 1084 } |
| 1085 | 1085 |
| 1086 TEST_F(LayerTreeHostImplTest, WillDrawNotCalledOnOccludedLayer) { | 1086 TEST_F(LayerTreeHostImplTest, WillDrawNotCalledOnOccludedLayer) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1105 top_layer->SetContentBounds(big_size); | 1105 top_layer->SetContentBounds(big_size); |
| 1106 top_layer->SetContentsOpaque(true); | 1106 top_layer->SetContentsOpaque(true); |
| 1107 | 1107 |
| 1108 LayerTreeHostImpl::FrameData frame; | 1108 LayerTreeHostImpl::FrameData frame; |
| 1109 | 1109 |
| 1110 EXPECT_FALSE(occluded_layer->will_draw_called()); | 1110 EXPECT_FALSE(occluded_layer->will_draw_called()); |
| 1111 EXPECT_FALSE(occluded_layer->did_draw_called()); | 1111 EXPECT_FALSE(occluded_layer->did_draw_called()); |
| 1112 EXPECT_FALSE(top_layer->will_draw_called()); | 1112 EXPECT_FALSE(top_layer->will_draw_called()); |
| 1113 EXPECT_FALSE(top_layer->did_draw_called()); | 1113 EXPECT_FALSE(top_layer->did_draw_called()); |
| 1114 | 1114 |
| 1115 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 1115 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 1116 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 1116 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 1117 host_impl_->DidDrawAllLayers(frame); | 1117 host_impl_->DidDrawAllLayers(frame); |
| 1118 | 1118 |
| 1119 EXPECT_FALSE(occluded_layer->will_draw_called()); | 1119 EXPECT_FALSE(occluded_layer->will_draw_called()); |
| 1120 EXPECT_FALSE(occluded_layer->did_draw_called()); | 1120 EXPECT_FALSE(occluded_layer->did_draw_called()); |
| 1121 EXPECT_TRUE(top_layer->will_draw_called()); | 1121 EXPECT_TRUE(top_layer->will_draw_called()); |
| 1122 EXPECT_TRUE(top_layer->did_draw_called()); | 1122 EXPECT_TRUE(top_layer->did_draw_called()); |
| 1123 } | 1123 } |
| 1124 | 1124 |
| 1125 TEST_F(LayerTreeHostImplTest, DidDrawCalledOnAllLayers) { | 1125 TEST_F(LayerTreeHostImplTest, DidDrawCalledOnAllLayers) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1137 static_cast<DidDrawCheckLayer*>(layer1->children()[0]); | 1137 static_cast<DidDrawCheckLayer*>(layer1->children()[0]); |
| 1138 | 1138 |
| 1139 layer1->SetOpacity(0.3f); | 1139 layer1->SetOpacity(0.3f); |
| 1140 layer1->SetPreserves3d(false); | 1140 layer1->SetPreserves3d(false); |
| 1141 | 1141 |
| 1142 EXPECT_FALSE(root->did_draw_called()); | 1142 EXPECT_FALSE(root->did_draw_called()); |
| 1143 EXPECT_FALSE(layer1->did_draw_called()); | 1143 EXPECT_FALSE(layer1->did_draw_called()); |
| 1144 EXPECT_FALSE(layer2->did_draw_called()); | 1144 EXPECT_FALSE(layer2->did_draw_called()); |
| 1145 | 1145 |
| 1146 LayerTreeHostImpl::FrameData frame; | 1146 LayerTreeHostImpl::FrameData frame; |
| 1147 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 1147 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 1148 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 1148 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 1149 host_impl_->DidDrawAllLayers(frame); | 1149 host_impl_->DidDrawAllLayers(frame); |
| 1150 | 1150 |
| 1151 EXPECT_TRUE(root->did_draw_called()); | 1151 EXPECT_TRUE(root->did_draw_called()); |
| 1152 EXPECT_TRUE(layer1->did_draw_called()); | 1152 EXPECT_TRUE(layer1->did_draw_called()); |
| 1153 EXPECT_TRUE(layer2->did_draw_called()); | 1153 EXPECT_TRUE(layer2->did_draw_called()); |
| 1154 | 1154 |
| 1155 EXPECT_NE(root->render_surface(), layer1->render_surface()); | 1155 EXPECT_NE(root->render_surface(), layer1->render_surface()); |
| 1156 EXPECT_TRUE(!!layer1->render_surface()); | 1156 EXPECT_TRUE(!!layer1->render_surface()); |
| 1157 } | 1157 } |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1209 root->AddChild( | 1209 root->AddChild( |
| 1210 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1210 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 1211 2, | 1211 2, |
| 1212 false, | 1212 false, |
| 1213 false, | 1213 false, |
| 1214 true, | 1214 true, |
| 1215 host_impl_->resource_provider())); | 1215 host_impl_->resource_provider())); |
| 1216 | 1216 |
| 1217 LayerTreeHostImpl::FrameData frame; | 1217 LayerTreeHostImpl::FrameData frame; |
| 1218 | 1218 |
| 1219 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 1219 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 1220 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 1220 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 1221 host_impl_->DidDrawAllLayers(frame); | 1221 host_impl_->DidDrawAllLayers(frame); |
| 1222 | 1222 |
| 1223 // When a texture is missing and we're not animating, we draw as usual with | 1223 // When a texture is missing and we're not animating, we draw as usual with |
| 1224 // checkerboarding. | 1224 // checkerboarding. |
| 1225 host_impl_->active_tree()->SetRootLayer( | 1225 host_impl_->active_tree()->SetRootLayer( |
| 1226 DidDrawCheckLayer::Create(host_impl_->active_tree(), 3)); | 1226 DidDrawCheckLayer::Create(host_impl_->active_tree(), 3)); |
| 1227 root = | 1227 root = |
| 1228 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1228 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 1229 root->AddChild( | 1229 root->AddChild( |
| 1230 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1230 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 1231 4, | 1231 4, |
| 1232 true, | 1232 true, |
| 1233 false, | 1233 false, |
| 1234 false, | 1234 false, |
| 1235 host_impl_->resource_provider())); | 1235 host_impl_->resource_provider())); |
| 1236 | 1236 |
| 1237 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 1237 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 1238 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 1238 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 1239 host_impl_->DidDrawAllLayers(frame); | 1239 host_impl_->DidDrawAllLayers(frame); |
| 1240 | 1240 |
| 1241 // When a texture is missing and we're animating, we don't want to draw | 1241 // When a texture is missing and we're animating, we don't want to draw |
| 1242 // anything. | 1242 // anything. |
| 1243 host_impl_->active_tree()->SetRootLayer( | 1243 host_impl_->active_tree()->SetRootLayer( |
| 1244 DidDrawCheckLayer::Create(host_impl_->active_tree(), 5)); | 1244 DidDrawCheckLayer::Create(host_impl_->active_tree(), 5)); |
| 1245 root = | 1245 root = |
| 1246 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1246 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 1247 root->AddChild( | 1247 root->AddChild( |
| 1248 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1248 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 1249 6, | 1249 6, |
| 1250 true, | 1250 true, |
| 1251 false, | 1251 false, |
| 1252 true, | 1252 true, |
| 1253 host_impl_->resource_provider())); | 1253 host_impl_->resource_provider())); |
| 1254 | 1254 |
| 1255 EXPECT_FALSE(host_impl_->PrepareToDraw(&frame)); | 1255 EXPECT_FALSE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 1256 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 1256 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 1257 host_impl_->DidDrawAllLayers(frame); | 1257 host_impl_->DidDrawAllLayers(frame); |
| 1258 | 1258 |
| 1259 // When the layer skips draw and we're animating, we still draw the frame. | 1259 // When the layer skips draw and we're animating, we still draw the frame. |
| 1260 host_impl_->active_tree()->SetRootLayer( | 1260 host_impl_->active_tree()->SetRootLayer( |
| 1261 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); | 1261 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); |
| 1262 root = | 1262 root = |
| 1263 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1263 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 1264 root->AddChild( | 1264 root->AddChild( |
| 1265 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1265 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 1266 8, | 1266 8, |
| 1267 false, | 1267 false, |
| 1268 true, | 1268 true, |
| 1269 true, | 1269 true, |
| 1270 host_impl_->resource_provider())); | 1270 host_impl_->resource_provider())); |
| 1271 | 1271 |
| 1272 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 1272 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 1273 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 1273 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 1274 host_impl_->DidDrawAllLayers(frame); | 1274 host_impl_->DidDrawAllLayers(frame); |
| 1275 } | 1275 } |
| 1276 | 1276 |
| 1277 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { | 1277 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { |
| 1278 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); | 1278 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); |
| 1279 root->SetScrollable(false); | 1279 root->SetScrollable(false); |
| 1280 host_impl_->active_tree()->SetRootLayer(root.Pass()); | 1280 host_impl_->active_tree()->SetRootLayer(root.Pass()); |
| 1281 InitializeRendererAndDrawFrame(); | 1281 InitializeRendererAndDrawFrame(); |
| 1282 | 1282 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1301 | 1301 |
| 1302 gfx::Size layer_size(5, 5); | 1302 gfx::Size layer_size(5, 5); |
| 1303 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); | 1303 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); |
| 1304 root->SetScrollable(true); | 1304 root->SetScrollable(true); |
| 1305 root->SetMaxScrollOffset(gfx::Vector2d(layer_size.width(), | 1305 root->SetMaxScrollOffset(gfx::Vector2d(layer_size.width(), |
| 1306 layer_size.height())); | 1306 layer_size.height())); |
| 1307 root->SetBounds(layer_size); | 1307 root->SetBounds(layer_size); |
| 1308 root->SetContentBounds(layer_size); | 1308 root->SetContentBounds(layer_size); |
| 1309 root->SetPosition(gfx::PointF()); | 1309 root->SetPosition(gfx::PointF()); |
| 1310 root->SetAnchorPoint(gfx::PointF()); | 1310 root->SetAnchorPoint(gfx::PointF()); |
| 1311 root->SetDrawsContent(false); |
| 1311 host_impl_->active_tree()->SetRootLayer(root.Pass()); | 1312 host_impl_->active_tree()->SetRootLayer(root.Pass()); |
| 1312 host_impl_->active_tree()->FindRootScrollLayer(); | 1313 host_impl_->active_tree()->FindRootScrollLayer(); |
| 1313 InitializeRendererAndDrawFrame(); | 1314 InitializeRendererAndDrawFrame(); |
| 1314 | 1315 |
| 1315 EXPECT_EQ(InputHandlerClient::ScrollIgnored, | 1316 EXPECT_EQ(InputHandlerClient::ScrollIgnored, |
| 1316 host_impl_->ScrollBegin(gfx::Point(), InputHandlerClient::Gesture)); | 1317 host_impl_->ScrollBegin(gfx::Point(), InputHandlerClient::Gesture)); |
| 1317 | 1318 |
| 1318 host_impl_->top_controls_manager()->ScrollBegin(); | 1319 host_impl_->top_controls_manager()->ScrollBegin(); |
| 1319 host_impl_->top_controls_manager()->ScrollBy(gfx::Vector2dF(0.f, 50.f)); | 1320 host_impl_->top_controls_manager()->ScrollBy(gfx::Vector2dF(0.f, 50.f)); |
| 1320 host_impl_->top_controls_manager()->ScrollEnd(); | 1321 host_impl_->top_controls_manager()->ScrollEnd(); |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1603 DrawOneFrame(); | 1604 DrawOneFrame(); |
| 1604 | 1605 |
| 1605 // The page scale delta should only be applied to the scrollable root layer. | 1606 // The page scale delta should only be applied to the scrollable root layer. |
| 1606 EXPECT_EQ(root->impl_transform(), new_page_scale_matrix); | 1607 EXPECT_EQ(root->impl_transform(), new_page_scale_matrix); |
| 1607 EXPECT_EQ(child->impl_transform(), default_page_scale_matrix); | 1608 EXPECT_EQ(child->impl_transform(), default_page_scale_matrix); |
| 1608 EXPECT_EQ(grand_child->impl_transform(), default_page_scale_matrix); | 1609 EXPECT_EQ(grand_child->impl_transform(), default_page_scale_matrix); |
| 1609 | 1610 |
| 1610 // Make sure all the layers are drawn with the page scale delta applied, i.e., | 1611 // Make sure all the layers are drawn with the page scale delta applied, i.e., |
| 1611 // the page scale delta on the root layer is applied hierarchically. | 1612 // the page scale delta on the root layer is applied hierarchically. |
| 1612 LayerTreeHostImpl::FrameData frame; | 1613 LayerTreeHostImpl::FrameData frame; |
| 1613 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 1614 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 1614 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 1615 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 1615 host_impl_->DidDrawAllLayers(frame); | 1616 host_impl_->DidDrawAllLayers(frame); |
| 1616 | 1617 |
| 1617 EXPECT_EQ(new_page_scale, root->draw_transform().matrix().getDouble(0, 0)); | 1618 EXPECT_EQ(new_page_scale, root->draw_transform().matrix().getDouble(0, 0)); |
| 1618 EXPECT_EQ(new_page_scale, root->draw_transform().matrix().getDouble(1, 1)); | 1619 EXPECT_EQ(new_page_scale, root->draw_transform().matrix().getDouble(1, 1)); |
| 1619 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(0, 0)); | 1620 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(0, 0)); |
| 1620 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(1, 1)); | 1621 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(1, 1)); |
| 1621 EXPECT_EQ(new_page_scale, | 1622 EXPECT_EQ(new_page_scale, |
| 1622 grand_child->draw_transform().matrix().getDouble(0, 0)); | 1623 grand_child->draw_transform().matrix().getDouble(0, 0)); |
| 1623 EXPECT_EQ(new_page_scale, | 1624 EXPECT_EQ(new_page_scale, |
| (...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2139 host_impl_->resource_provider())); | 2140 host_impl_->resource_provider())); |
| 2140 BlendStateCheckLayer* layer1 = | 2141 BlendStateCheckLayer* layer1 = |
| 2141 static_cast<BlendStateCheckLayer*>(root->children()[0]); | 2142 static_cast<BlendStateCheckLayer*>(root->children()[0]); |
| 2142 layer1->SetPosition(gfx::PointF(2.f, 2.f)); | 2143 layer1->SetPosition(gfx::PointF(2.f, 2.f)); |
| 2143 | 2144 |
| 2144 LayerTreeHostImpl::FrameData frame; | 2145 LayerTreeHostImpl::FrameData frame; |
| 2145 | 2146 |
| 2146 // Opaque layer, drawn without blending. | 2147 // Opaque layer, drawn without blending. |
| 2147 layer1->SetContentsOpaque(true); | 2148 layer1->SetContentsOpaque(true); |
| 2148 layer1->SetExpectation(false, false); | 2149 layer1->SetExpectation(false, false); |
| 2149 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2150 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2151 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2150 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2152 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2151 EXPECT_TRUE(layer1->quads_appended()); | 2153 EXPECT_TRUE(layer1->quads_appended()); |
| 2152 host_impl_->DidDrawAllLayers(frame); | 2154 host_impl_->DidDrawAllLayers(frame); |
| 2153 | 2155 |
| 2154 // Layer with translucent content and painting, so drawn with blending. | 2156 // Layer with translucent content and painting, so drawn with blending. |
| 2155 layer1->SetContentsOpaque(false); | 2157 layer1->SetContentsOpaque(false); |
| 2156 layer1->SetExpectation(true, false); | 2158 layer1->SetExpectation(true, false); |
| 2157 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2159 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2160 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2158 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2161 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2159 EXPECT_TRUE(layer1->quads_appended()); | 2162 EXPECT_TRUE(layer1->quads_appended()); |
| 2160 host_impl_->DidDrawAllLayers(frame); | 2163 host_impl_->DidDrawAllLayers(frame); |
| 2161 | 2164 |
| 2162 // Layer with translucent opacity, drawn with blending. | 2165 // Layer with translucent opacity, drawn with blending. |
| 2163 layer1->SetContentsOpaque(true); | 2166 layer1->SetContentsOpaque(true); |
| 2164 layer1->SetOpacity(0.5f); | 2167 layer1->SetOpacity(0.5f); |
| 2165 layer1->SetExpectation(true, false); | 2168 layer1->SetExpectation(true, false); |
| 2166 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2169 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2170 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2167 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2171 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2168 EXPECT_TRUE(layer1->quads_appended()); | 2172 EXPECT_TRUE(layer1->quads_appended()); |
| 2169 host_impl_->DidDrawAllLayers(frame); | 2173 host_impl_->DidDrawAllLayers(frame); |
| 2170 | 2174 |
| 2171 // Layer with translucent opacity and painting, drawn with blending. | 2175 // Layer with translucent opacity and painting, drawn with blending. |
| 2172 layer1->SetContentsOpaque(true); | 2176 layer1->SetContentsOpaque(true); |
| 2173 layer1->SetOpacity(0.5f); | 2177 layer1->SetOpacity(0.5f); |
| 2174 layer1->SetExpectation(true, false); | 2178 layer1->SetExpectation(true, false); |
| 2175 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2179 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2180 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2176 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2181 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2177 EXPECT_TRUE(layer1->quads_appended()); | 2182 EXPECT_TRUE(layer1->quads_appended()); |
| 2178 host_impl_->DidDrawAllLayers(frame); | 2183 host_impl_->DidDrawAllLayers(frame); |
| 2179 | 2184 |
| 2180 layer1->AddChild( | 2185 layer1->AddChild( |
| 2181 BlendStateCheckLayer::Create(host_impl_->active_tree(), | 2186 BlendStateCheckLayer::Create(host_impl_->active_tree(), |
| 2182 3, | 2187 3, |
| 2183 host_impl_->resource_provider())); | 2188 host_impl_->resource_provider())); |
| 2184 BlendStateCheckLayer* layer2 = | 2189 BlendStateCheckLayer* layer2 = |
| 2185 static_cast<BlendStateCheckLayer*>(layer1->children()[0]); | 2190 static_cast<BlendStateCheckLayer*>(layer1->children()[0]); |
| 2186 layer2->SetPosition(gfx::PointF(4.f, 4.f)); | 2191 layer2->SetPosition(gfx::PointF(4.f, 4.f)); |
| 2187 | 2192 |
| 2188 // 2 opaque layers, drawn without blending. | 2193 // 2 opaque layers, drawn without blending. |
| 2189 layer1->SetContentsOpaque(true); | 2194 layer1->SetContentsOpaque(true); |
| 2190 layer1->SetOpacity(1.f); | 2195 layer1->SetOpacity(1.f); |
| 2191 layer1->SetExpectation(false, false); | 2196 layer1->SetExpectation(false, false); |
| 2197 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2192 layer2->SetContentsOpaque(true); | 2198 layer2->SetContentsOpaque(true); |
| 2193 layer2->SetOpacity(1.f); | 2199 layer2->SetOpacity(1.f); |
| 2194 layer2->SetExpectation(false, false); | 2200 layer2->SetExpectation(false, false); |
| 2195 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2201 layer2->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2202 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2196 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2203 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2197 EXPECT_TRUE(layer1->quads_appended()); | 2204 EXPECT_TRUE(layer1->quads_appended()); |
| 2198 EXPECT_TRUE(layer2->quads_appended()); | 2205 EXPECT_TRUE(layer2->quads_appended()); |
| 2199 host_impl_->DidDrawAllLayers(frame); | 2206 host_impl_->DidDrawAllLayers(frame); |
| 2200 | 2207 |
| 2201 // Parent layer with translucent content, drawn with blending. | 2208 // Parent layer with translucent content, drawn with blending. |
| 2202 // Child layer with opaque content, drawn without blending. | 2209 // Child layer with opaque content, drawn without blending. |
| 2203 layer1->SetContentsOpaque(false); | 2210 layer1->SetContentsOpaque(false); |
| 2204 layer1->SetExpectation(true, false); | 2211 layer1->SetExpectation(true, false); |
| 2212 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2205 layer2->SetExpectation(false, false); | 2213 layer2->SetExpectation(false, false); |
| 2206 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2214 layer2->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2215 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2207 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2216 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2208 EXPECT_TRUE(layer1->quads_appended()); | 2217 EXPECT_TRUE(layer1->quads_appended()); |
| 2209 EXPECT_TRUE(layer2->quads_appended()); | 2218 EXPECT_TRUE(layer2->quads_appended()); |
| 2210 host_impl_->DidDrawAllLayers(frame); | 2219 host_impl_->DidDrawAllLayers(frame); |
| 2211 | 2220 |
| 2212 // Parent layer with translucent content but opaque painting, drawn without | 2221 // Parent layer with translucent content but opaque painting, drawn without |
| 2213 // blending. | 2222 // blending. |
| 2214 // Child layer with opaque content, drawn without blending. | 2223 // Child layer with opaque content, drawn without blending. |
| 2215 layer1->SetContentsOpaque(true); | 2224 layer1->SetContentsOpaque(true); |
| 2216 layer1->SetExpectation(false, false); | 2225 layer1->SetExpectation(false, false); |
| 2226 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2217 layer2->SetExpectation(false, false); | 2227 layer2->SetExpectation(false, false); |
| 2218 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2228 layer2->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2229 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2219 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2230 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2220 EXPECT_TRUE(layer1->quads_appended()); | 2231 EXPECT_TRUE(layer1->quads_appended()); |
| 2221 EXPECT_TRUE(layer2->quads_appended()); | 2232 EXPECT_TRUE(layer2->quads_appended()); |
| 2222 host_impl_->DidDrawAllLayers(frame); | 2233 host_impl_->DidDrawAllLayers(frame); |
| 2223 | 2234 |
| 2224 // Parent layer with translucent opacity and opaque content. Since it has a | 2235 // Parent layer with translucent opacity and opaque content. Since it has a |
| 2225 // drawing child, it's drawn to a render surface which carries the opacity, | 2236 // drawing child, it's drawn to a render surface which carries the opacity, |
| 2226 // so it's itself drawn without blending. | 2237 // so it's itself drawn without blending. |
| 2227 // Child layer with opaque content, drawn without blending (parent surface | 2238 // Child layer with opaque content, drawn without blending (parent surface |
| 2228 // carries the inherited opacity). | 2239 // carries the inherited opacity). |
| 2229 layer1->SetContentsOpaque(true); | 2240 layer1->SetContentsOpaque(true); |
| 2230 layer1->SetOpacity(0.5f); | 2241 layer1->SetOpacity(0.5f); |
| 2231 layer1->SetExpectation(false, true); | 2242 layer1->SetExpectation(false, true); |
| 2243 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2232 layer2->SetExpectation(false, false); | 2244 layer2->SetExpectation(false, false); |
| 2233 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2245 layer2->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2246 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2234 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2247 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2235 EXPECT_TRUE(layer1->quads_appended()); | 2248 EXPECT_TRUE(layer1->quads_appended()); |
| 2236 EXPECT_TRUE(layer2->quads_appended()); | 2249 EXPECT_TRUE(layer2->quads_appended()); |
| 2237 host_impl_->DidDrawAllLayers(frame); | 2250 host_impl_->DidDrawAllLayers(frame); |
| 2238 | 2251 |
| 2239 // Draw again, but with child non-opaque, to make sure | 2252 // Draw again, but with child non-opaque, to make sure |
| 2240 // layer1 not culled. | 2253 // layer1 not culled. |
| 2241 layer1->SetContentsOpaque(true); | 2254 layer1->SetContentsOpaque(true); |
| 2242 layer1->SetOpacity(1.f); | 2255 layer1->SetOpacity(1.f); |
| 2243 layer1->SetExpectation(false, false); | 2256 layer1->SetExpectation(false, false); |
| 2257 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2244 layer2->SetContentsOpaque(true); | 2258 layer2->SetContentsOpaque(true); |
| 2245 layer2->SetOpacity(0.5f); | 2259 layer2->SetOpacity(0.5f); |
| 2246 layer2->SetExpectation(true, false); | 2260 layer2->SetExpectation(true, false); |
| 2247 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2261 layer2->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2262 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2248 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2263 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2249 EXPECT_TRUE(layer1->quads_appended()); | 2264 EXPECT_TRUE(layer1->quads_appended()); |
| 2250 EXPECT_TRUE(layer2->quads_appended()); | 2265 EXPECT_TRUE(layer2->quads_appended()); |
| 2251 host_impl_->DidDrawAllLayers(frame); | 2266 host_impl_->DidDrawAllLayers(frame); |
| 2252 | 2267 |
| 2253 // A second way of making the child non-opaque. | 2268 // A second way of making the child non-opaque. |
| 2254 layer1->SetContentsOpaque(true); | 2269 layer1->SetContentsOpaque(true); |
| 2255 layer1->SetOpacity(1.f); | 2270 layer1->SetOpacity(1.f); |
| 2256 layer1->SetExpectation(false, false); | 2271 layer1->SetExpectation(false, false); |
| 2272 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2257 layer2->SetContentsOpaque(false); | 2273 layer2->SetContentsOpaque(false); |
| 2258 layer2->SetOpacity(1.f); | 2274 layer2->SetOpacity(1.f); |
| 2259 layer2->SetExpectation(true, false); | 2275 layer2->SetExpectation(true, false); |
| 2260 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2276 layer2->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2277 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2261 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2278 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2262 EXPECT_TRUE(layer1->quads_appended()); | 2279 EXPECT_TRUE(layer1->quads_appended()); |
| 2263 EXPECT_TRUE(layer2->quads_appended()); | 2280 EXPECT_TRUE(layer2->quads_appended()); |
| 2264 host_impl_->DidDrawAllLayers(frame); | 2281 host_impl_->DidDrawAllLayers(frame); |
| 2265 | 2282 |
| 2266 // And when the layer says its not opaque but is painted opaque, it is not | 2283 // And when the layer says its not opaque but is painted opaque, it is not |
| 2267 // blended. | 2284 // blended. |
| 2268 layer1->SetContentsOpaque(true); | 2285 layer1->SetContentsOpaque(true); |
| 2269 layer1->SetOpacity(1.f); | 2286 layer1->SetOpacity(1.f); |
| 2270 layer1->SetExpectation(false, false); | 2287 layer1->SetExpectation(false, false); |
| 2288 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2271 layer2->SetContentsOpaque(true); | 2289 layer2->SetContentsOpaque(true); |
| 2272 layer2->SetOpacity(1.f); | 2290 layer2->SetOpacity(1.f); |
| 2273 layer2->SetExpectation(false, false); | 2291 layer2->SetExpectation(false, false); |
| 2274 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2292 layer2->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2293 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2275 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2294 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2276 EXPECT_TRUE(layer1->quads_appended()); | 2295 EXPECT_TRUE(layer1->quads_appended()); |
| 2277 EXPECT_TRUE(layer2->quads_appended()); | 2296 EXPECT_TRUE(layer2->quads_appended()); |
| 2278 host_impl_->DidDrawAllLayers(frame); | 2297 host_impl_->DidDrawAllLayers(frame); |
| 2279 | 2298 |
| 2280 // Layer with partially opaque contents, drawn with blending. | 2299 // Layer with partially opaque contents, drawn with blending. |
| 2281 layer1->SetContentsOpaque(false); | 2300 layer1->SetContentsOpaque(false); |
| 2282 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 2301 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 2283 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 5)); | 2302 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 5)); |
| 2284 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 2303 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 2285 layer1->SetExpectation(true, false); | 2304 layer1->SetExpectation(true, false); |
| 2286 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2305 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2306 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2287 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2307 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2288 EXPECT_TRUE(layer1->quads_appended()); | 2308 EXPECT_TRUE(layer1->quads_appended()); |
| 2289 host_impl_->DidDrawAllLayers(frame); | 2309 host_impl_->DidDrawAllLayers(frame); |
| 2290 | 2310 |
| 2291 // Layer with partially opaque contents partially culled, drawn with blending. | 2311 // Layer with partially opaque contents partially culled, drawn with blending. |
| 2292 layer1->SetContentsOpaque(false); | 2312 layer1->SetContentsOpaque(false); |
| 2293 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 2313 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 2294 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 2)); | 2314 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 2)); |
| 2295 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 2315 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 2296 layer1->SetExpectation(true, false); | 2316 layer1->SetExpectation(true, false); |
| 2297 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2317 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2318 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2298 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2319 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2299 EXPECT_TRUE(layer1->quads_appended()); | 2320 EXPECT_TRUE(layer1->quads_appended()); |
| 2300 host_impl_->DidDrawAllLayers(frame); | 2321 host_impl_->DidDrawAllLayers(frame); |
| 2301 | 2322 |
| 2302 // Layer with partially opaque contents culled, drawn with blending. | 2323 // Layer with partially opaque contents culled, drawn with blending. |
| 2303 layer1->SetContentsOpaque(false); | 2324 layer1->SetContentsOpaque(false); |
| 2304 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 2325 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 2305 layer1->SetQuadVisibleRect(gfx::Rect(7, 5, 3, 5)); | 2326 layer1->SetQuadVisibleRect(gfx::Rect(7, 5, 3, 5)); |
| 2306 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 2327 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 2307 layer1->SetExpectation(true, false); | 2328 layer1->SetExpectation(true, false); |
| 2308 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2329 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2330 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2309 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2331 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2310 EXPECT_TRUE(layer1->quads_appended()); | 2332 EXPECT_TRUE(layer1->quads_appended()); |
| 2311 host_impl_->DidDrawAllLayers(frame); | 2333 host_impl_->DidDrawAllLayers(frame); |
| 2312 | 2334 |
| 2313 // Layer with partially opaque contents and translucent contents culled, drawn | 2335 // Layer with partially opaque contents and translucent contents culled, drawn |
| 2314 // without blending. | 2336 // without blending. |
| 2315 layer1->SetContentsOpaque(false); | 2337 layer1->SetContentsOpaque(false); |
| 2316 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 2338 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 2317 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 2, 5)); | 2339 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 2, 5)); |
| 2318 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 2340 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 2319 layer1->SetExpectation(false, false); | 2341 layer1->SetExpectation(false, false); |
| 2320 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2342 layer1->set_update_rect(gfx::RectF(layer1->content_bounds())); |
| 2343 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2321 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2344 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2322 EXPECT_TRUE(layer1->quads_appended()); | 2345 EXPECT_TRUE(layer1->quads_appended()); |
| 2323 host_impl_->DidDrawAllLayers(frame); | 2346 host_impl_->DidDrawAllLayers(frame); |
| 2324 } | 2347 } |
| 2325 | 2348 |
| 2326 TEST_F(LayerTreeHostImplTest, ViewportCovered) { | 2349 TEST_F(LayerTreeHostImplTest, ViewportCovered) { |
| 2327 host_impl_->InitializeRenderer(CreateOutputSurface()); | 2350 host_impl_->InitializeRenderer(CreateOutputSurface()); |
| 2328 host_impl_->active_tree()->set_background_color(SK_ColorGRAY); | 2351 host_impl_->active_tree()->set_background_color(SK_ColorGRAY); |
| 2329 | 2352 |
| 2330 gfx::Size viewport_size(1000, 1000); | 2353 gfx::Size viewport_size(1000, 1000); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2344 // No gutter rects | 2367 // No gutter rects |
| 2345 { | 2368 { |
| 2346 gfx::Rect layer_rect(0, 0, 1000, 1000); | 2369 gfx::Rect layer_rect(0, 0, 1000, 1000); |
| 2347 child->SetPosition(layer_rect.origin()); | 2370 child->SetPosition(layer_rect.origin()); |
| 2348 child->SetBounds(layer_rect.size()); | 2371 child->SetBounds(layer_rect.size()); |
| 2349 child->SetContentBounds(layer_rect.size()); | 2372 child->SetContentBounds(layer_rect.size()); |
| 2350 child->SetQuadRect(gfx::Rect(layer_rect.size())); | 2373 child->SetQuadRect(gfx::Rect(layer_rect.size())); |
| 2351 child->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); | 2374 child->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); |
| 2352 | 2375 |
| 2353 LayerTreeHostImpl::FrameData frame; | 2376 LayerTreeHostImpl::FrameData frame; |
| 2354 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2377 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2355 ASSERT_EQ(1u, frame.render_passes.size()); | 2378 ASSERT_EQ(1u, frame.render_passes.size()); |
| 2356 | 2379 |
| 2357 size_t num_gutter_quads = 0; | 2380 size_t num_gutter_quads = 0; |
| 2358 for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i) | 2381 for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i) |
| 2359 num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material == | 2382 num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material == |
| 2360 DrawQuad::SOLID_COLOR) ? 1 : 0; | 2383 DrawQuad::SOLID_COLOR) ? 1 : 0; |
| 2361 EXPECT_EQ(0u, num_gutter_quads); | 2384 EXPECT_EQ(0u, num_gutter_quads); |
| 2362 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 2385 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 2363 | 2386 |
| 2364 LayerTestCommon::VerifyQuadsExactlyCoverRect( | 2387 LayerTestCommon::VerifyQuadsExactlyCoverRect( |
| 2365 frame.render_passes[0]->quad_list, gfx::Rect(viewport_size)); | 2388 frame.render_passes[0]->quad_list, gfx::Rect(viewport_size)); |
| 2366 host_impl_->DidDrawAllLayers(frame); | 2389 host_impl_->DidDrawAllLayers(frame); |
| 2367 } | 2390 } |
| 2368 | 2391 |
| 2369 // Empty visible content area (fullscreen gutter rect) | 2392 // Empty visible content area (fullscreen gutter rect) |
| 2370 { | 2393 { |
| 2371 gfx::Rect layer_rect(0, 0, 0, 0); | 2394 gfx::Rect layer_rect(0, 0, 0, 0); |
| 2372 child->SetPosition(layer_rect.origin()); | 2395 child->SetPosition(layer_rect.origin()); |
| 2373 child->SetBounds(layer_rect.size()); | 2396 child->SetBounds(layer_rect.size()); |
| 2374 child->SetContentBounds(layer_rect.size()); | 2397 child->SetContentBounds(layer_rect.size()); |
| 2375 child->SetQuadRect(gfx::Rect(layer_rect.size())); | 2398 child->SetQuadRect(gfx::Rect(layer_rect.size())); |
| 2376 child->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); | 2399 child->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); |
| 2377 | 2400 |
| 2378 LayerTreeHostImpl::FrameData frame; | 2401 LayerTreeHostImpl::FrameData frame; |
| 2379 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2402 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2380 ASSERT_EQ(1u, frame.render_passes.size()); | 2403 ASSERT_EQ(1u, frame.render_passes.size()); |
| 2381 | 2404 |
| 2382 size_t num_gutter_quads = 0; | 2405 size_t num_gutter_quads = 0; |
| 2383 for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i) | 2406 for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i) |
| 2384 num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material == | 2407 num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material == |
| 2385 DrawQuad::SOLID_COLOR) ? 1 : 0; | 2408 DrawQuad::SOLID_COLOR) ? 1 : 0; |
| 2386 EXPECT_EQ(1u, num_gutter_quads); | 2409 EXPECT_EQ(1u, num_gutter_quads); |
| 2387 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 2410 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 2388 | 2411 |
| 2389 LayerTestCommon::VerifyQuadsExactlyCoverRect( | 2412 LayerTestCommon::VerifyQuadsExactlyCoverRect( |
| 2390 frame.render_passes[0]->quad_list, gfx::Rect(viewport_size)); | 2413 frame.render_passes[0]->quad_list, gfx::Rect(viewport_size)); |
| 2391 host_impl_->DidDrawAllLayers(frame); | 2414 host_impl_->DidDrawAllLayers(frame); |
| 2392 } | 2415 } |
| 2393 | 2416 |
| 2394 // Content area in middle of clip rect (four surrounding gutter rects) | 2417 // Content area in middle of clip rect (four surrounding gutter rects) |
| 2395 { | 2418 { |
| 2396 gfx::Rect layer_rect(500, 500, 200, 200); | 2419 gfx::Rect layer_rect(500, 500, 200, 200); |
| 2397 child->SetPosition(layer_rect.origin()); | 2420 child->SetPosition(layer_rect.origin()); |
| 2398 child->SetBounds(layer_rect.size()); | 2421 child->SetBounds(layer_rect.size()); |
| 2399 child->SetContentBounds(layer_rect.size()); | 2422 child->SetContentBounds(layer_rect.size()); |
| 2400 child->SetQuadRect(gfx::Rect(layer_rect.size())); | 2423 child->SetQuadRect(gfx::Rect(layer_rect.size())); |
| 2401 child->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); | 2424 child->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); |
| 2402 | 2425 |
| 2403 LayerTreeHostImpl::FrameData frame; | 2426 LayerTreeHostImpl::FrameData frame; |
| 2404 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2427 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2405 ASSERT_EQ(1u, frame.render_passes.size()); | 2428 ASSERT_EQ(1u, frame.render_passes.size()); |
| 2406 | 2429 |
| 2407 size_t num_gutter_quads = 0; | 2430 size_t num_gutter_quads = 0; |
| 2408 for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i) | 2431 for (size_t i = 0; i < frame.render_passes[0]->quad_list.size(); ++i) |
| 2409 num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material == | 2432 num_gutter_quads += (frame.render_passes[0]->quad_list[i]->material == |
| 2410 DrawQuad::SOLID_COLOR) ? 1 : 0; | 2433 DrawQuad::SOLID_COLOR) ? 1 : 0; |
| 2411 EXPECT_EQ(4u, num_gutter_quads); | 2434 EXPECT_EQ(4u, num_gutter_quads); |
| 2412 EXPECT_EQ(5u, frame.render_passes[0]->quad_list.size()); | 2435 EXPECT_EQ(5u, frame.render_passes[0]->quad_list.size()); |
| 2413 | 2436 |
| 2414 LayerTestCommon::VerifyQuadsExactlyCoverRect( | 2437 LayerTestCommon::VerifyQuadsExactlyCoverRect( |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2450 scoped_ptr<WebKit::WebGraphicsContext3D>(new ReshapeTrackerContext)) | 2473 scoped_ptr<WebKit::WebGraphicsContext3D>(new ReshapeTrackerContext)) |
| 2451 .PassAs<OutputSurface>(); | 2474 .PassAs<OutputSurface>(); |
| 2452 ReshapeTrackerContext* reshape_tracker = | 2475 ReshapeTrackerContext* reshape_tracker = |
| 2453 static_cast<ReshapeTrackerContext*>(output_surface->context3d()); | 2476 static_cast<ReshapeTrackerContext*>(output_surface->context3d()); |
| 2454 host_impl_->InitializeRenderer(output_surface.Pass()); | 2477 host_impl_->InitializeRenderer(output_surface.Pass()); |
| 2455 | 2478 |
| 2456 scoped_ptr<LayerImpl> root = | 2479 scoped_ptr<LayerImpl> root = |
| 2457 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); | 2480 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); |
| 2458 root->SetAnchorPoint(gfx::PointF()); | 2481 root->SetAnchorPoint(gfx::PointF()); |
| 2459 root->SetBounds(gfx::Size(10, 10)); | 2482 root->SetBounds(gfx::Size(10, 10)); |
| 2483 root->SetContentBounds(gfx::Size(10, 10)); |
| 2460 root->SetDrawsContent(true); | 2484 root->SetDrawsContent(true); |
| 2461 host_impl_->active_tree()->SetRootLayer(root.Pass()); | 2485 host_impl_->active_tree()->SetRootLayer(root.Pass()); |
| 2462 EXPECT_FALSE(reshape_tracker->reshape_called()); | 2486 EXPECT_FALSE(reshape_tracker->reshape_called()); |
| 2463 | 2487 |
| 2464 LayerTreeHostImpl::FrameData frame; | 2488 LayerTreeHostImpl::FrameData frame; |
| 2465 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2489 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2466 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2490 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2467 EXPECT_TRUE(reshape_tracker->reshape_called()); | 2491 EXPECT_TRUE(reshape_tracker->reshape_called()); |
| 2468 host_impl_->DidDrawAllLayers(frame); | 2492 host_impl_->DidDrawAllLayers(frame); |
| 2469 } | 2493 } |
| 2470 | 2494 |
| 2471 class PartialSwapTrackerContext : public TestWebGraphicsContext3D { | 2495 class PartialSwapTrackerContext : public TestWebGraphicsContext3D { |
| 2472 public: | 2496 public: |
| 2473 virtual void postSubBufferCHROMIUM(int x, int y, int width, int height) | 2497 virtual void postSubBufferCHROMIUM(int x, int y, int width, int height) |
| 2474 OVERRIDE { | 2498 OVERRIDE { |
| 2475 partial_swap_rect_ = gfx::Rect(x, y, width, height); | 2499 partial_swap_rect_ = gfx::Rect(x, y, width, height); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2524 root->SetAnchorPoint(gfx::PointF()); | 2548 root->SetAnchorPoint(gfx::PointF()); |
| 2525 root->SetBounds(gfx::Size(500, 500)); | 2549 root->SetBounds(gfx::Size(500, 500)); |
| 2526 root->SetContentBounds(gfx::Size(500, 500)); | 2550 root->SetContentBounds(gfx::Size(500, 500)); |
| 2527 root->SetDrawsContent(true); | 2551 root->SetDrawsContent(true); |
| 2528 root->AddChild(child.Pass()); | 2552 root->AddChild(child.Pass()); |
| 2529 layer_tree_host_impl->active_tree()->SetRootLayer(root.Pass()); | 2553 layer_tree_host_impl->active_tree()->SetRootLayer(root.Pass()); |
| 2530 | 2554 |
| 2531 LayerTreeHostImpl::FrameData frame; | 2555 LayerTreeHostImpl::FrameData frame; |
| 2532 | 2556 |
| 2533 // First frame, the entire screen should get swapped. | 2557 // First frame, the entire screen should get swapped. |
| 2534 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame)); | 2558 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 2535 layer_tree_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 2559 layer_tree_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2536 layer_tree_host_impl->DidDrawAllLayers(frame); | 2560 layer_tree_host_impl->DidDrawAllLayers(frame); |
| 2537 layer_tree_host_impl->SwapBuffers(); | 2561 layer_tree_host_impl->SwapBuffers(frame); |
| 2538 gfx::Rect actual_swap_rect = partial_swap_tracker->partial_swap_rect(); | 2562 gfx::Rect actual_swap_rect = partial_swap_tracker->partial_swap_rect(); |
| 2539 gfx::Rect expected_swap_rect = gfx::Rect(0, 0, 500, 500); | 2563 gfx::Rect expected_swap_rect = gfx::Rect(0, 0, 500, 500); |
| 2540 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x()); | 2564 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x()); |
| 2541 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y()); | 2565 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y()); |
| 2542 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width()); | 2566 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width()); |
| 2543 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height()); | 2567 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height()); |
| 2544 | 2568 |
| 2545 // Second frame, only the damaged area should get swapped. Damage should be | 2569 // Second frame, only the damaged area should get swapped. Damage should be |
| 2546 // the union of old and new child rects. | 2570 // the union of old and new child rects. |
| 2547 // expected damage rect: gfx::Rect(26, 28); | 2571 // expected damage rect: gfx::Rect(26, 28); |
| 2548 // expected swap rect: vertically flipped, with origin at bottom left corner. | 2572 // expected swap rect: vertically flipped, with origin at bottom left corner. |
| 2549 layer_tree_host_impl->active_tree()->root_layer()->children()[0]->SetPosition( | 2573 layer_tree_host_impl->active_tree()->root_layer()->children()[0]->SetPosition( |
| 2550 gfx::PointF()); | 2574 gfx::PointF()); |
| 2551 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame)); | 2575 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 2552 layer_tree_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 2576 layer_tree_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2553 host_impl_->DidDrawAllLayers(frame); | 2577 host_impl_->DidDrawAllLayers(frame); |
| 2554 layer_tree_host_impl->SwapBuffers(); | 2578 layer_tree_host_impl->SwapBuffers(frame); |
| 2555 actual_swap_rect = partial_swap_tracker->partial_swap_rect(); | 2579 actual_swap_rect = partial_swap_tracker->partial_swap_rect(); |
| 2556 expected_swap_rect = gfx::Rect(0, 500-28, 26, 28); | 2580 expected_swap_rect = gfx::Rect(0, 500-28, 26, 28); |
| 2557 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x()); | 2581 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x()); |
| 2558 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y()); | 2582 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y()); |
| 2559 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width()); | 2583 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width()); |
| 2560 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height()); | 2584 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height()); |
| 2561 | 2585 |
| 2562 // Make sure that partial swap is constrained to the viewport dimensions | 2586 // Make sure that partial swap is constrained to the viewport dimensions |
| 2563 // expected damage rect: gfx::Rect(500, 500); | 2587 // expected damage rect: gfx::Rect(500, 500); |
| 2564 // expected swap rect: flipped damage rect, but also clamped to viewport | 2588 // expected swap rect: flipped damage rect, but also clamped to viewport |
| 2565 layer_tree_host_impl->SetViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); | 2589 layer_tree_host_impl->SetViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
| 2566 // This will damage everything. | 2590 // This will damage everything. |
| 2567 layer_tree_host_impl->active_tree()->root_layer()->SetOpacity(0.7f); | 2591 layer_tree_host_impl->active_tree()->root_layer()->SetOpacity(0.7f); |
| 2568 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame)); | 2592 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 2569 layer_tree_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 2593 layer_tree_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2570 host_impl_->DidDrawAllLayers(frame); | 2594 host_impl_->DidDrawAllLayers(frame); |
| 2571 layer_tree_host_impl->SwapBuffers(); | 2595 layer_tree_host_impl->SwapBuffers(frame); |
| 2572 actual_swap_rect = partial_swap_tracker->partial_swap_rect(); | 2596 actual_swap_rect = partial_swap_tracker->partial_swap_rect(); |
| 2573 expected_swap_rect = gfx::Rect(10, 10); | 2597 expected_swap_rect = gfx::Rect(10, 10); |
| 2574 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x()); | 2598 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x()); |
| 2575 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y()); | 2599 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y()); |
| 2576 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width()); | 2600 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width()); |
| 2577 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height()); | 2601 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height()); |
| 2578 } | 2602 } |
| 2579 | 2603 |
| 2580 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) { | 2604 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) { |
| 2581 scoped_ptr<LayerImpl> root = | 2605 scoped_ptr<LayerImpl> root = |
| 2582 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); | 2606 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); |
| 2583 scoped_ptr<LayerImpl> child = | 2607 scoped_ptr<LayerImpl> child = |
| 2584 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 2); | 2608 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 2); |
| 2585 child->SetAnchorPoint(gfx::PointF()); | 2609 child->SetAnchorPoint(gfx::PointF()); |
| 2586 child->SetBounds(gfx::Size(10, 10)); | 2610 child->SetBounds(gfx::Size(10, 10)); |
| 2587 child->SetContentBounds(gfx::Size(10, 10)); | 2611 child->SetContentBounds(gfx::Size(10, 10)); |
| 2588 child->SetDrawsContent(true); | 2612 child->SetDrawsContent(true); |
| 2589 root->SetAnchorPoint(gfx::PointF()); | 2613 root->SetAnchorPoint(gfx::PointF()); |
| 2590 root->SetBounds(gfx::Size(10, 10)); | 2614 root->SetBounds(gfx::Size(10, 10)); |
| 2591 root->SetContentBounds(gfx::Size(10, 10)); | 2615 root->SetContentBounds(gfx::Size(10, 10)); |
| 2592 root->SetDrawsContent(true); | 2616 root->SetDrawsContent(true); |
| 2593 root->SetOpacity(0.7f); | 2617 root->SetOpacity(0.7f); |
| 2594 root->AddChild(child.Pass()); | 2618 root->AddChild(child.Pass()); |
| 2595 | 2619 |
| 2596 host_impl_->active_tree()->SetRootLayer(root.Pass()); | 2620 host_impl_->active_tree()->SetRootLayer(root.Pass()); |
| 2597 | 2621 |
| 2598 LayerTreeHostImpl::FrameData frame; | 2622 LayerTreeHostImpl::FrameData frame; |
| 2599 | 2623 |
| 2600 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2624 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2601 EXPECT_EQ(1u, frame.render_surface_layer_list->size()); | 2625 EXPECT_EQ(1u, frame.render_surface_layer_list->size()); |
| 2602 EXPECT_EQ(1u, frame.render_passes.size()); | 2626 EXPECT_EQ(1u, frame.render_passes.size()); |
| 2603 host_impl_->DidDrawAllLayers(frame); | 2627 host_impl_->DidDrawAllLayers(frame); |
| 2604 } | 2628 } |
| 2605 | 2629 |
| 2606 class FakeLayerWithQuads : public LayerImpl { | 2630 class FakeLayerWithQuads : public LayerImpl { |
| 2607 public: | 2631 public: |
| 2608 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { | 2632 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { |
| 2609 return scoped_ptr<LayerImpl>(new FakeLayerWithQuads(tree_impl, id)); | 2633 return scoped_ptr<LayerImpl>(new FakeLayerWithQuads(tree_impl, id)); |
| 2610 } | 2634 } |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2736 | 2760 |
| 2737 // Run test case | 2761 // Run test case |
| 2738 CreateLayerTreeHost(false, output_surface.Pass()); | 2762 CreateLayerTreeHost(false, output_surface.Pass()); |
| 2739 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); | 2763 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); |
| 2740 | 2764 |
| 2741 // Without partial swap, and no clipping, no scissor is set. | 2765 // Without partial swap, and no clipping, no scissor is set. |
| 2742 harness.MustDrawSolidQuad(); | 2766 harness.MustDrawSolidQuad(); |
| 2743 harness.MustSetNoScissor(); | 2767 harness.MustSetNoScissor(); |
| 2744 { | 2768 { |
| 2745 LayerTreeHostImpl::FrameData frame; | 2769 LayerTreeHostImpl::FrameData frame; |
| 2746 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2770 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2747 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2771 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2748 host_impl_->DidDrawAllLayers(frame); | 2772 host_impl_->DidDrawAllLayers(frame); |
| 2749 } | 2773 } |
| 2750 Mock::VerifyAndClearExpectations(&mock_context); | 2774 Mock::VerifyAndClearExpectations(&mock_context); |
| 2751 | 2775 |
| 2752 // Without partial swap, but a layer does clip its subtree, one scissor is | 2776 // Without partial swap, but a layer does clip its subtree, one scissor is |
| 2753 // set. | 2777 // set. |
| 2754 host_impl_->active_tree()->root_layer()->SetMasksToBounds(true); | 2778 host_impl_->active_tree()->root_layer()->SetMasksToBounds(true); |
| 2755 harness.MustDrawSolidQuad(); | 2779 harness.MustDrawSolidQuad(); |
| 2756 harness.MustSetScissor(0, 0, 10, 10); | 2780 harness.MustSetScissor(0, 0, 10, 10); |
| 2757 { | 2781 { |
| 2758 LayerTreeHostImpl::FrameData frame; | 2782 LayerTreeHostImpl::FrameData frame; |
| 2759 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2783 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2760 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2784 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2761 host_impl_->DidDrawAllLayers(frame); | 2785 host_impl_->DidDrawAllLayers(frame); |
| 2762 } | 2786 } |
| 2763 Mock::VerifyAndClearExpectations(&mock_context); | 2787 Mock::VerifyAndClearExpectations(&mock_context); |
| 2764 } | 2788 } |
| 2765 | 2789 |
| 2766 TEST_F(LayerTreeHostImplTest, PartialSwap) { | 2790 TEST_F(LayerTreeHostImplTest, PartialSwap) { |
| 2767 scoped_ptr<OutputSurface> output_surface = | 2791 scoped_ptr<OutputSurface> output_surface = |
| 2768 FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( | 2792 FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( |
| 2769 new MockContext)).PassAs<OutputSurface>(); | 2793 new MockContext)).PassAs<OutputSurface>(); |
| 2770 MockContext* mock_context = | 2794 MockContext* mock_context = |
| 2771 static_cast<MockContext*>(output_surface->context3d()); | 2795 static_cast<MockContext*>(output_surface->context3d()); |
| 2772 MockContextHarness harness(mock_context); | 2796 MockContextHarness harness(mock_context); |
| 2773 | 2797 |
| 2774 CreateLayerTreeHost(true, output_surface.Pass()); | 2798 CreateLayerTreeHost(true, output_surface.Pass()); |
| 2775 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); | 2799 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); |
| 2776 | 2800 |
| 2777 // The first frame is not a partially-swapped one. | 2801 // The first frame is not a partially-swapped one. |
| 2778 harness.MustSetScissor(0, 0, 10, 10); | 2802 harness.MustSetScissor(0, 0, 10, 10); |
| 2779 harness.MustDrawSolidQuad(); | 2803 harness.MustDrawSolidQuad(); |
| 2780 { | 2804 { |
| 2781 LayerTreeHostImpl::FrameData frame; | 2805 LayerTreeHostImpl::FrameData frame; |
| 2782 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2806 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2783 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2807 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2784 host_impl_->DidDrawAllLayers(frame); | 2808 host_impl_->DidDrawAllLayers(frame); |
| 2785 } | 2809 } |
| 2786 Mock::VerifyAndClearExpectations(&mock_context); | 2810 Mock::VerifyAndClearExpectations(&mock_context); |
| 2787 | 2811 |
| 2788 // Damage a portion of the frame. | 2812 // Damage a portion of the frame. |
| 2789 host_impl_->active_tree()->root_layer()->set_update_rect( | 2813 host_impl_->active_tree()->root_layer()->set_update_rect( |
| 2790 gfx::Rect(0, 0, 2, 3)); | 2814 gfx::Rect(0, 0, 2, 3)); |
| 2791 | 2815 |
| 2792 // The second frame will be partially-swapped (the y coordinates are flipped). | 2816 // The second frame will be partially-swapped (the y coordinates are flipped). |
| 2793 harness.MustSetScissor(0, 7, 2, 3); | 2817 harness.MustSetScissor(0, 7, 2, 3); |
| 2794 harness.MustDrawSolidQuad(); | 2818 harness.MustDrawSolidQuad(); |
| 2795 { | 2819 { |
| 2796 LayerTreeHostImpl::FrameData frame; | 2820 LayerTreeHostImpl::FrameData frame; |
| 2797 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 2821 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 2798 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 2822 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2799 host_impl_->DidDrawAllLayers(frame); | 2823 host_impl_->DidDrawAllLayers(frame); |
| 2800 } | 2824 } |
| 2801 Mock::VerifyAndClearExpectations(&mock_context); | 2825 Mock::VerifyAndClearExpectations(&mock_context); |
| 2802 } | 2826 } |
| 2803 | 2827 |
| 2804 class PartialSwapContext : public TestWebGraphicsContext3D { | 2828 class PartialSwapContext : public TestWebGraphicsContext3D { |
| 2805 public: | 2829 public: |
| 2806 virtual WebKit::WebString getString(WebKit::WGC3Denum name) OVERRIDE { | 2830 virtual WebKit::WebString getString(WebKit::WGC3Denum name) OVERRIDE { |
| 2807 if (name == GL_EXTENSIONS) | 2831 if (name == GL_EXTENSIONS) |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2896 | 2920 |
| 2897 my_host_impl->active_tree()->SetRootLayer(root.Pass()); | 2921 my_host_impl->active_tree()->SetRootLayer(root.Pass()); |
| 2898 return my_host_impl.Pass(); | 2922 return my_host_impl.Pass(); |
| 2899 } | 2923 } |
| 2900 | 2924 |
| 2901 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorPartialSwap) { | 2925 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorPartialSwap) { |
| 2902 scoped_ptr<LayerTreeHostImpl> my_host_impl = | 2926 scoped_ptr<LayerTreeHostImpl> my_host_impl = |
| 2903 SetupLayersForOpacity(true, this, &proxy_, &stats_instrumentation_); | 2927 SetupLayersForOpacity(true, this, &proxy_, &stats_instrumentation_); |
| 2904 { | 2928 { |
| 2905 LayerTreeHostImpl::FrameData frame; | 2929 LayerTreeHostImpl::FrameData frame; |
| 2906 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 2930 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 2907 | 2931 |
| 2908 // Verify all quads have been computed | 2932 // Verify all quads have been computed |
| 2909 ASSERT_EQ(2U, frame.render_passes.size()); | 2933 ASSERT_EQ(2U, frame.render_passes.size()); |
| 2910 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 2934 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 2911 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 2935 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 2912 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 2936 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
| 2913 frame.render_passes[0]->quad_list[0]->material); | 2937 frame.render_passes[0]->quad_list[0]->material); |
| 2914 EXPECT_EQ(DrawQuad::RENDER_PASS, | 2938 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 2915 frame.render_passes[1]->quad_list[0]->material); | 2939 frame.render_passes[1]->quad_list[0]->material); |
| 2916 | 2940 |
| 2917 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 2941 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 2918 my_host_impl->DidDrawAllLayers(frame); | 2942 my_host_impl->DidDrawAllLayers(frame); |
| 2919 } | 2943 } |
| 2920 } | 2944 } |
| 2921 | 2945 |
| 2922 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { | 2946 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { |
| 2923 scoped_ptr<LayerTreeHostImpl> my_host_impl = | 2947 scoped_ptr<LayerTreeHostImpl> my_host_impl = |
| 2924 SetupLayersForOpacity(false, this, &proxy_, &stats_instrumentation_); | 2948 SetupLayersForOpacity(false, this, &proxy_, &stats_instrumentation_); |
| 2925 { | 2949 { |
| 2926 LayerTreeHostImpl::FrameData frame; | 2950 LayerTreeHostImpl::FrameData frame; |
| 2927 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 2951 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 2928 | 2952 |
| 2929 // Verify all quads have been computed | 2953 // Verify all quads have been computed |
| 2930 ASSERT_EQ(2U, frame.render_passes.size()); | 2954 ASSERT_EQ(2U, frame.render_passes.size()); |
| 2931 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 2955 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 2932 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 2956 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 2933 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 2957 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
| 2934 frame.render_passes[0]->quad_list[0]->material); | 2958 frame.render_passes[0]->quad_list[0]->material); |
| 2935 EXPECT_EQ(DrawQuad::RENDER_PASS, | 2959 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 2936 frame.render_passes[1]->quad_list[0]->material); | 2960 frame.render_passes[1]->quad_list[0]->material); |
| 2937 | 2961 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3012 io_surface_layer->SetContentBounds(gfx::Size(10, 10)); | 3036 io_surface_layer->SetContentBounds(gfx::Size(10, 10)); |
| 3013 io_surface_layer->SetDrawsContent(true); | 3037 io_surface_layer->SetDrawsContent(true); |
| 3014 io_surface_layer->SetIOSurfaceProperties(1, gfx::Size(10, 10)); | 3038 io_surface_layer->SetIOSurfaceProperties(1, gfx::Size(10, 10)); |
| 3015 root_layer->AddChild(io_surface_layer.PassAs<LayerImpl>()); | 3039 root_layer->AddChild(io_surface_layer.PassAs<LayerImpl>()); |
| 3016 | 3040 |
| 3017 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); | 3041 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); |
| 3018 | 3042 |
| 3019 EXPECT_EQ(0u, context3d->NumTextures()); | 3043 EXPECT_EQ(0u, context3d->NumTextures()); |
| 3020 | 3044 |
| 3021 LayerTreeHostImpl::FrameData frame; | 3045 LayerTreeHostImpl::FrameData frame; |
| 3022 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 3046 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 3023 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 3047 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3024 host_impl_->DidDrawAllLayers(frame); | 3048 host_impl_->DidDrawAllLayers(frame); |
| 3025 host_impl_->SwapBuffers(); | 3049 host_impl_->SwapBuffers(frame); |
| 3026 | 3050 |
| 3027 EXPECT_GT(context3d->NumTextures(), 0u); | 3051 EXPECT_GT(context3d->NumTextures(), 0u); |
| 3028 | 3052 |
| 3029 // Kill the layer tree. | 3053 // Kill the layer tree. |
| 3030 host_impl_->active_tree()->SetRootLayer( | 3054 host_impl_->active_tree()->SetRootLayer( |
| 3031 LayerImpl::Create(host_impl_->active_tree(), 100)); | 3055 LayerImpl::Create(host_impl_->active_tree(), 100)); |
| 3032 // There should be no textures left in use after. | 3056 // There should be no textures left in use after. |
| 3033 EXPECT_EQ(0u, context3d->NumTextures()); | 3057 EXPECT_EQ(0u, context3d->NumTextures()); |
| 3034 } | 3058 } |
| 3035 | 3059 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3055 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); | 3079 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); |
| 3056 host_impl_->active_tree()->set_background_color(SK_ColorWHITE); | 3080 host_impl_->active_tree()->set_background_color(SK_ColorWHITE); |
| 3057 | 3081 |
| 3058 // Verify one quad is drawn when transparent background set is not set. | 3082 // Verify one quad is drawn when transparent background set is not set. |
| 3059 host_impl_->active_tree()->set_has_transparent_background(false); | 3083 host_impl_->active_tree()->set_has_transparent_background(false); |
| 3060 EXPECT_CALL(*mock_context, useProgram(_)) | 3084 EXPECT_CALL(*mock_context, useProgram(_)) |
| 3061 .Times(1); | 3085 .Times(1); |
| 3062 EXPECT_CALL(*mock_context, drawElements(_, _, _, _)) | 3086 EXPECT_CALL(*mock_context, drawElements(_, _, _, _)) |
| 3063 .Times(1); | 3087 .Times(1); |
| 3064 LayerTreeHostImpl::FrameData frame; | 3088 LayerTreeHostImpl::FrameData frame; |
| 3065 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 3089 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 3066 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 3090 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3067 host_impl_->DidDrawAllLayers(frame); | 3091 host_impl_->DidDrawAllLayers(frame); |
| 3068 Mock::VerifyAndClearExpectations(&mock_context); | 3092 Mock::VerifyAndClearExpectations(&mock_context); |
| 3069 | 3093 |
| 3070 // Verify no quads are drawn when transparent background is set. | 3094 // Verify no quads are drawn when transparent background is set. |
| 3071 host_impl_->active_tree()->set_has_transparent_background(true); | 3095 host_impl_->active_tree()->set_has_transparent_background(true); |
| 3072 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 3096 host_impl_->SetFullRootLayerDamage(); |
| 3097 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 3073 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 3098 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3074 host_impl_->DidDrawAllLayers(frame); | 3099 host_impl_->DidDrawAllLayers(frame); |
| 3075 Mock::VerifyAndClearExpectations(&mock_context); | 3100 Mock::VerifyAndClearExpectations(&mock_context); |
| 3076 } | 3101 } |
| 3077 | 3102 |
| 3078 static void AddDrawingLayerTo(LayerImpl* parent, | 3103 static void AddDrawingLayerTo(LayerImpl* parent, |
| 3079 int id, | 3104 int id, |
| 3080 gfx::Rect layer_rect, | 3105 gfx::Rect layer_rect, |
| 3081 LayerImpl** result) { | 3106 LayerImpl** result) { |
| 3082 scoped_ptr<LayerImpl> layer = | 3107 scoped_ptr<LayerImpl> layer = |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3207 AddDrawingLayerTo(layer_s1_ptr, 4, gfx::Rect(0, 0, 30, 30), 0); // L12 | 3232 AddDrawingLayerTo(layer_s1_ptr, 4, gfx::Rect(0, 0, 30, 30), 0); // L12 |
| 3208 | 3233 |
| 3209 AddDrawingLayerTo(root_ptr, 5, gfx::Rect(550, 250, 300, 400), &layer_s2_ptr); | 3234 AddDrawingLayerTo(root_ptr, 5, gfx::Rect(550, 250, 300, 400), &layer_s2_ptr); |
| 3210 layer_s2_ptr->SetForceRenderSurface(true); | 3235 layer_s2_ptr->SetForceRenderSurface(true); |
| 3211 | 3236 |
| 3212 AddDrawingLayerTo(layer_s2_ptr, 6, gfx::Rect(20, 20, 5, 5), 0); // L21 | 3237 AddDrawingLayerTo(layer_s2_ptr, 6, gfx::Rect(20, 20, 5, 5), 0); // L21 |
| 3213 | 3238 |
| 3214 // Initial draw - must receive all quads | 3239 // Initial draw - must receive all quads |
| 3215 { | 3240 { |
| 3216 LayerTreeHostImpl::FrameData frame; | 3241 LayerTreeHostImpl::FrameData frame; |
| 3217 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3242 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3218 | 3243 |
| 3219 // Must receive 3 render passes. | 3244 // Must receive 3 render passes. |
| 3220 // For Root, there are 2 quads; for S1, there are 2 quads (1 is occluded); | 3245 // For Root, there are 2 quads; for S1, there are 2 quads (1 is occluded); |
| 3221 // for S2, there is 2 quads. | 3246 // for S2, there is 2 quads. |
| 3222 ASSERT_EQ(3U, frame.render_passes.size()); | 3247 ASSERT_EQ(3U, frame.render_passes.size()); |
| 3223 | 3248 |
| 3224 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); | 3249 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); |
| 3225 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); | 3250 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); |
| 3226 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); | 3251 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); |
| 3227 | 3252 |
| 3228 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3253 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3229 my_host_impl->DidDrawAllLayers(frame); | 3254 my_host_impl->DidDrawAllLayers(frame); |
| 3230 } | 3255 } |
| 3231 | 3256 |
| 3232 // "Unocclude" surface S1 and repeat draw. | 3257 // "Unocclude" surface S1 and repeat draw. |
| 3233 // Must remove S2's render pass since it's cached; | 3258 // Must remove S2's render pass since it's cached; |
| 3234 // Must keep S1 quads because texture contained external occlusion. | 3259 // Must keep S1 quads because texture contained external occlusion. |
| 3235 gfx::Transform transform = layer_s2_ptr->transform(); | 3260 gfx::Transform transform = layer_s2_ptr->transform(); |
| 3236 transform.Translate(150.0, 150.0); | 3261 transform.Translate(150.0, 150.0); |
| 3237 layer_s2_ptr->SetTransform(transform); | 3262 layer_s2_ptr->SetTransform(transform); |
| 3238 { | 3263 { |
| 3239 LayerTreeHostImpl::FrameData frame; | 3264 LayerTreeHostImpl::FrameData frame; |
| 3240 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3265 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3241 | 3266 |
| 3242 // Must receive 2 render passes. | 3267 // Must receive 2 render passes. |
| 3243 // For Root, there are 2 quads | 3268 // For Root, there are 2 quads |
| 3244 // For S1, the number of quads depends on what got unoccluded, so not | 3269 // For S1, the number of quads depends on what got unoccluded, so not |
| 3245 // asserted beyond being positive. | 3270 // asserted beyond being positive. |
| 3246 // For S2, there is no render pass | 3271 // For S2, there is no render pass |
| 3247 ASSERT_EQ(2U, frame.render_passes.size()); | 3272 ASSERT_EQ(2U, frame.render_passes.size()); |
| 3248 | 3273 |
| 3249 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U); | 3274 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U); |
| 3250 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); | 3275 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); |
| 3251 | 3276 |
| 3252 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3277 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3253 my_host_impl->DidDrawAllLayers(frame); | 3278 my_host_impl->DidDrawAllLayers(frame); |
| 3254 } | 3279 } |
| 3255 | 3280 |
| 3256 // "Re-occlude" surface S1 and repeat draw. | 3281 // "Re-occlude" surface S1 and repeat draw. |
| 3257 // Must remove S1's render pass since it is now available in full. | 3282 // Must remove S1's render pass since it is now available in full. |
| 3258 // S2 has no change so must also be removed. | 3283 // S2 has no change so must also be removed. |
| 3259 transform = layer_s2_ptr->transform(); | 3284 transform = layer_s2_ptr->transform(); |
| 3260 transform.Translate(-15.0, -15.0); | 3285 transform.Translate(-15.0, -15.0); |
| 3261 layer_s2_ptr->SetTransform(transform); | 3286 layer_s2_ptr->SetTransform(transform); |
| 3262 { | 3287 { |
| 3263 LayerTreeHostImpl::FrameData frame; | 3288 LayerTreeHostImpl::FrameData frame; |
| 3264 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3289 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3265 | 3290 |
| 3266 // Must receive 1 render pass - for the root. | 3291 // Must receive 1 render pass - for the root. |
| 3267 ASSERT_EQ(1U, frame.render_passes.size()); | 3292 ASSERT_EQ(1U, frame.render_passes.size()); |
| 3268 | 3293 |
| 3269 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); | 3294 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); |
| 3270 | 3295 |
| 3271 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3296 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3272 my_host_impl->DidDrawAllLayers(frame); | 3297 my_host_impl->DidDrawAllLayers(frame); |
| 3273 } | 3298 } |
| 3274 } | 3299 } |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3328 AddDrawingLayerTo(layer_s1_ptr, 5, gfx::Rect(500, 0, 300, 300), 0); // L13 | 3353 AddDrawingLayerTo(layer_s1_ptr, 5, gfx::Rect(500, 0, 300, 300), 0); // L13 |
| 3329 AddDrawingLayerTo(layer_s1_ptr, 6, gfx::Rect(500, 500, 300, 300), 0); // L14 | 3354 AddDrawingLayerTo(layer_s1_ptr, 6, gfx::Rect(500, 500, 300, 300), 0); // L14 |
| 3330 AddDrawingLayerTo(layer_s1_ptr, 9, gfx::Rect(500, 500, 300, 300), 0); // L14 | 3355 AddDrawingLayerTo(layer_s1_ptr, 9, gfx::Rect(500, 500, 300, 300), 0); // L14 |
| 3331 | 3356 |
| 3332 AddDrawingLayerTo(root_ptr, 7, gfx::Rect(450, 450, 450, 450), &layer_s2_ptr); | 3357 AddDrawingLayerTo(root_ptr, 7, gfx::Rect(450, 450, 450, 450), &layer_s2_ptr); |
| 3333 layer_s2_ptr->SetForceRenderSurface(true); | 3358 layer_s2_ptr->SetForceRenderSurface(true); |
| 3334 | 3359 |
| 3335 // Initial draw - must receive all quads | 3360 // Initial draw - must receive all quads |
| 3336 { | 3361 { |
| 3337 LayerTreeHostImpl::FrameData frame; | 3362 LayerTreeHostImpl::FrameData frame; |
| 3338 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3363 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3339 | 3364 |
| 3340 // Must receive 3 render passes. | 3365 // Must receive 3 render passes. |
| 3341 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is | 3366 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is |
| 3342 // 1 quad. | 3367 // 1 quad. |
| 3343 ASSERT_EQ(3U, frame.render_passes.size()); | 3368 ASSERT_EQ(3U, frame.render_passes.size()); |
| 3344 | 3369 |
| 3345 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 3370 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 3346 | 3371 |
| 3347 // L14 is culled, so only 3 quads. | 3372 // L14 is culled, so only 3 quads. |
| 3348 EXPECT_EQ(3U, frame.render_passes[1]->quad_list.size()); | 3373 EXPECT_EQ(3U, frame.render_passes[1]->quad_list.size()); |
| 3349 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); | 3374 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); |
| 3350 | 3375 |
| 3351 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3376 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3352 my_host_impl->DidDrawAllLayers(frame); | 3377 my_host_impl->DidDrawAllLayers(frame); |
| 3353 } | 3378 } |
| 3354 | 3379 |
| 3355 // "Unocclude" surface S1 and repeat draw. | 3380 // "Unocclude" surface S1 and repeat draw. |
| 3356 // Must remove S2's render pass since it's cached; | 3381 // Must remove S2's render pass since it's cached; |
| 3357 // Must keep S1 quads because texture contained external occlusion. | 3382 // Must keep S1 quads because texture contained external occlusion. |
| 3358 gfx::Transform transform = layer_s2_ptr->transform(); | 3383 gfx::Transform transform = layer_s2_ptr->transform(); |
| 3359 transform.Translate(100.0, 100.0); | 3384 transform.Translate(100.0, 100.0); |
| 3360 layer_s2_ptr->SetTransform(transform); | 3385 layer_s2_ptr->SetTransform(transform); |
| 3361 { | 3386 { |
| 3362 LayerTreeHostImpl::FrameData frame; | 3387 LayerTreeHostImpl::FrameData frame; |
| 3363 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3388 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3364 | 3389 |
| 3365 // Must receive 2 render passes. | 3390 // Must receive 2 render passes. |
| 3366 // For Root, there are 2 quads | 3391 // For Root, there are 2 quads |
| 3367 // For S1, the number of quads depends on what got unoccluded, so not | 3392 // For S1, the number of quads depends on what got unoccluded, so not |
| 3368 // asserted beyond being positive. | 3393 // asserted beyond being positive. |
| 3369 // For S2, there is no render pass | 3394 // For S2, there is no render pass |
| 3370 ASSERT_EQ(2U, frame.render_passes.size()); | 3395 ASSERT_EQ(2U, frame.render_passes.size()); |
| 3371 | 3396 |
| 3372 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U); | 3397 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U); |
| 3373 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); | 3398 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); |
| 3374 | 3399 |
| 3375 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3400 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3376 my_host_impl->DidDrawAllLayers(frame); | 3401 my_host_impl->DidDrawAllLayers(frame); |
| 3377 } | 3402 } |
| 3378 | 3403 |
| 3379 // "Re-occlude" surface S1 and repeat draw. | 3404 // "Re-occlude" surface S1 and repeat draw. |
| 3380 // Must remove S1's render pass since it is now available in full. | 3405 // Must remove S1's render pass since it is now available in full. |
| 3381 // S2 has no change so must also be removed. | 3406 // S2 has no change so must also be removed. |
| 3382 transform = layer_s2_ptr->transform(); | 3407 transform = layer_s2_ptr->transform(); |
| 3383 transform.Translate(-15.0, -15.0); | 3408 transform.Translate(-15.0, -15.0); |
| 3384 layer_s2_ptr->SetTransform(transform); | 3409 layer_s2_ptr->SetTransform(transform); |
| 3385 { | 3410 { |
| 3386 LayerTreeHostImpl::FrameData frame; | 3411 LayerTreeHostImpl::FrameData frame; |
| 3387 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3412 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3388 | 3413 |
| 3389 // Must receive 1 render pass - for the root. | 3414 // Must receive 1 render pass - for the root. |
| 3390 ASSERT_EQ(1U, frame.render_passes.size()); | 3415 ASSERT_EQ(1U, frame.render_passes.size()); |
| 3391 | 3416 |
| 3392 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); | 3417 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); |
| 3393 | 3418 |
| 3394 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3419 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3395 my_host_impl->DidDrawAllLayers(frame); | 3420 my_host_impl->DidDrawAllLayers(frame); |
| 3396 } | 3421 } |
| 3397 } | 3422 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3445 | 3470 |
| 3446 AddDrawingLayerTo(layer_s1_ptr, 3, gfx::Rect(0, 0, 300, 300), 0); // L11 | 3471 AddDrawingLayerTo(layer_s1_ptr, 3, gfx::Rect(0, 0, 300, 300), 0); // L11 |
| 3447 AddDrawingLayerTo(layer_s1_ptr, 4, gfx::Rect(100, 0, 300, 300), 0); // L12 | 3472 AddDrawingLayerTo(layer_s1_ptr, 4, gfx::Rect(100, 0, 300, 300), 0); // L12 |
| 3448 | 3473 |
| 3449 AddDrawingLayerTo(root_ptr, 7, gfx::Rect(200, 0, 300, 300), &layer_s2_ptr); | 3474 AddDrawingLayerTo(root_ptr, 7, gfx::Rect(200, 0, 300, 300), &layer_s2_ptr); |
| 3450 layer_s2_ptr->SetForceRenderSurface(true); | 3475 layer_s2_ptr->SetForceRenderSurface(true); |
| 3451 | 3476 |
| 3452 // Initial draw - must receive all quads | 3477 // Initial draw - must receive all quads |
| 3453 { | 3478 { |
| 3454 LayerTreeHostImpl::FrameData frame; | 3479 LayerTreeHostImpl::FrameData frame; |
| 3455 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3480 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3456 | 3481 |
| 3457 // Must receive 3 render passes. | 3482 // Must receive 3 render passes. |
| 3458 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is | 3483 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is |
| 3459 // 1 quad. | 3484 // 1 quad. |
| 3460 ASSERT_EQ(3U, frame.render_passes.size()); | 3485 ASSERT_EQ(3U, frame.render_passes.size()); |
| 3461 | 3486 |
| 3462 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 3487 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 3463 EXPECT_EQ(3U, frame.render_passes[1]->quad_list.size()); | 3488 EXPECT_EQ(3U, frame.render_passes[1]->quad_list.size()); |
| 3464 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); | 3489 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); |
| 3465 | 3490 |
| 3466 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3491 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3467 my_host_impl->DidDrawAllLayers(frame); | 3492 my_host_impl->DidDrawAllLayers(frame); |
| 3468 } | 3493 } |
| 3469 | 3494 |
| 3470 // "Unocclude" surface S1 and repeat draw. | 3495 // "Unocclude" surface S1 and repeat draw. |
| 3471 // Must remove S2's render pass since it's cached; | 3496 // Must remove S2's render pass since it's cached; |
| 3472 // Must keep S1 quads because texture contained external occlusion. | 3497 // Must keep S1 quads because texture contained external occlusion. |
| 3473 gfx::Transform transform = layer_s2_ptr->transform(); | 3498 gfx::Transform transform = layer_s2_ptr->transform(); |
| 3474 transform.Translate(300.0, 0.0); | 3499 transform.Translate(300.0, 0.0); |
| 3475 layer_s2_ptr->SetTransform(transform); | 3500 layer_s2_ptr->SetTransform(transform); |
| 3476 { | 3501 { |
| 3477 LayerTreeHostImpl::FrameData frame; | 3502 LayerTreeHostImpl::FrameData frame; |
| 3478 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3503 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3479 | 3504 |
| 3480 // Must receive 2 render passes. | 3505 // Must receive 2 render passes. |
| 3481 // For Root, there are 2 quads | 3506 // For Root, there are 2 quads |
| 3482 // For S1, the number of quads depends on what got unoccluded, so not | 3507 // For S1, the number of quads depends on what got unoccluded, so not |
| 3483 // asserted beyond being positive. | 3508 // asserted beyond being positive. |
| 3484 // For S2, there is no render pass | 3509 // For S2, there is no render pass |
| 3485 ASSERT_EQ(2U, frame.render_passes.size()); | 3510 ASSERT_EQ(2U, frame.render_passes.size()); |
| 3486 | 3511 |
| 3487 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U); | 3512 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U); |
| 3488 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); | 3513 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3536 transform.Translate(200.0, 200.0); | 3561 transform.Translate(200.0, 200.0); |
| 3537 transform.Rotate(45.0); | 3562 transform.Rotate(45.0); |
| 3538 transform.Translate(-200.0, -200.0); | 3563 transform.Translate(-200.0, -200.0); |
| 3539 layer_s1_ptr->SetTransform(transform); | 3564 layer_s1_ptr->SetTransform(transform); |
| 3540 | 3565 |
| 3541 AddDrawingLayerTo(layer_s1_ptr, 3, gfx::Rect(200, 0, 200, 400), 0); // L11 | 3566 AddDrawingLayerTo(layer_s1_ptr, 3, gfx::Rect(200, 0, 200, 400), 0); // L11 |
| 3542 | 3567 |
| 3543 // Initial draw - must receive all quads | 3568 // Initial draw - must receive all quads |
| 3544 { | 3569 { |
| 3545 LayerTreeHostImpl::FrameData frame; | 3570 LayerTreeHostImpl::FrameData frame; |
| 3546 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3571 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3547 | 3572 |
| 3548 // Must receive 2 render passes. | 3573 // Must receive 2 render passes. |
| 3549 ASSERT_EQ(2U, frame.render_passes.size()); | 3574 ASSERT_EQ(2U, frame.render_passes.size()); |
| 3550 | 3575 |
| 3551 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); | 3576 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); |
| 3552 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 3577 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 3553 | 3578 |
| 3554 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3579 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3555 my_host_impl->DidDrawAllLayers(frame); | 3580 my_host_impl->DidDrawAllLayers(frame); |
| 3556 } | 3581 } |
| 3557 | 3582 |
| 3558 // Change opacity and draw. Verify we used cached texture. | 3583 // Change opacity and draw. Verify we used cached texture. |
| 3559 layer_s1_ptr->SetOpacity(0.2f); | 3584 layer_s1_ptr->SetOpacity(0.2f); |
| 3560 { | 3585 { |
| 3561 LayerTreeHostImpl::FrameData frame; | 3586 LayerTreeHostImpl::FrameData frame; |
| 3562 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3587 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3563 | 3588 |
| 3564 // One render pass must be gone due to cached texture. | 3589 // One render pass must be gone due to cached texture. |
| 3565 ASSERT_EQ(1U, frame.render_passes.size()); | 3590 ASSERT_EQ(1U, frame.render_passes.size()); |
| 3566 | 3591 |
| 3567 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 3592 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 3568 | 3593 |
| 3569 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3594 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3570 my_host_impl->DidDrawAllLayers(frame); | 3595 my_host_impl->DidDrawAllLayers(frame); |
| 3571 } | 3596 } |
| 3572 } | 3597 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3628 AddDrawingLayerTo(layer_s1_ptr, 4, gfx::Rect(0, 0, 30, 30), 0); // L12 | 3653 AddDrawingLayerTo(layer_s1_ptr, 4, gfx::Rect(0, 0, 30, 30), 0); // L12 |
| 3629 | 3654 |
| 3630 AddDrawingLayerTo(root_ptr, 5, gfx::Rect(550, 250, 300, 400), &layer_s2_ptr); | 3655 AddDrawingLayerTo(root_ptr, 5, gfx::Rect(550, 250, 300, 400), &layer_s2_ptr); |
| 3631 layer_s2_ptr->SetForceRenderSurface(true); | 3656 layer_s2_ptr->SetForceRenderSurface(true); |
| 3632 | 3657 |
| 3633 AddDrawingLayerTo(layer_s2_ptr, 6, gfx::Rect(20, 20, 5, 5), 0); // L21 | 3658 AddDrawingLayerTo(layer_s2_ptr, 6, gfx::Rect(20, 20, 5, 5), 0); // L21 |
| 3634 | 3659 |
| 3635 // Initial draw - must receive all quads | 3660 // Initial draw - must receive all quads |
| 3636 { | 3661 { |
| 3637 LayerTreeHostImpl::FrameData frame; | 3662 LayerTreeHostImpl::FrameData frame; |
| 3638 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3663 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3639 | 3664 |
| 3640 // Must receive 3 render passes. | 3665 // Must receive 3 render passes. |
| 3641 // For Root, there are 2 quads; for S1, there are 2 quads (one is occluded); | 3666 // For Root, there are 2 quads; for S1, there are 2 quads (one is occluded); |
| 3642 // for S2, there is 2 quads. | 3667 // for S2, there is 2 quads. |
| 3643 ASSERT_EQ(3U, frame.render_passes.size()); | 3668 ASSERT_EQ(3U, frame.render_passes.size()); |
| 3644 | 3669 |
| 3645 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); | 3670 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); |
| 3646 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); | 3671 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); |
| 3647 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); | 3672 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); |
| 3648 | 3673 |
| 3649 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3674 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3650 my_host_impl->DidDrawAllLayers(frame); | 3675 my_host_impl->DidDrawAllLayers(frame); |
| 3651 } | 3676 } |
| 3652 | 3677 |
| 3653 // "Unocclude" surface S1 and repeat draw. | 3678 // "Unocclude" surface S1 and repeat draw. |
| 3654 // Must remove S2's render pass since it's cached; | 3679 // Must remove S2's render pass since it's cached; |
| 3655 // Must keep S1 quads because texture contained external occlusion. | 3680 // Must keep S1 quads because texture contained external occlusion. |
| 3656 gfx::Transform transform = layer_s2_ptr->transform(); | 3681 gfx::Transform transform = layer_s2_ptr->transform(); |
| 3657 transform.Translate(150.0, 150.0); | 3682 transform.Translate(150.0, 150.0); |
| 3658 layer_s2_ptr->SetTransform(transform); | 3683 layer_s2_ptr->SetTransform(transform); |
| 3659 { | 3684 { |
| 3660 LayerTreeHostImpl::FrameData frame; | 3685 LayerTreeHostImpl::FrameData frame; |
| 3661 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3686 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3662 | 3687 |
| 3663 // Must receive 2 render passes. | 3688 // Must receive 2 render passes. |
| 3664 // For Root, there are 2 quads. | 3689 // For Root, there are 2 quads. |
| 3665 // For S1, there are 2 quads. | 3690 // For S1, there are 2 quads. |
| 3666 // For S2, there is no render pass | 3691 // For S2, there is no render pass |
| 3667 ASSERT_EQ(2U, frame.render_passes.size()); | 3692 ASSERT_EQ(2U, frame.render_passes.size()); |
| 3668 | 3693 |
| 3669 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); | 3694 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); |
| 3670 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); | 3695 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); |
| 3671 | 3696 |
| 3672 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3697 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3673 my_host_impl->DidDrawAllLayers(frame); | 3698 my_host_impl->DidDrawAllLayers(frame); |
| 3674 } | 3699 } |
| 3675 | 3700 |
| 3676 // "Re-occlude" surface S1 and repeat draw. | 3701 // "Re-occlude" surface S1 and repeat draw. |
| 3677 // Must remove S1's render pass since it is now available in full. | 3702 // Must remove S1's render pass since it is now available in full. |
| 3678 // S2 has no change so must also be removed. | 3703 // S2 has no change so must also be removed. |
| 3679 transform = layer_s2_ptr->transform(); | 3704 transform = layer_s2_ptr->transform(); |
| 3680 transform.Translate(-15.0, -15.0); | 3705 transform.Translate(-15.0, -15.0); |
| 3681 layer_s2_ptr->SetTransform(transform); | 3706 layer_s2_ptr->SetTransform(transform); |
| 3682 { | 3707 { |
| 3683 LayerTreeHostImpl::FrameData frame; | 3708 LayerTreeHostImpl::FrameData frame; |
| 3684 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3709 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3685 | 3710 |
| 3686 // Root render pass only. | 3711 // Root render pass only. |
| 3687 ASSERT_EQ(1U, frame.render_passes.size()); | 3712 ASSERT_EQ(1U, frame.render_passes.size()); |
| 3688 | 3713 |
| 3689 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3714 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3690 my_host_impl->DidDrawAllLayers(frame); | 3715 my_host_impl->DidDrawAllLayers(frame); |
| 3691 } | 3716 } |
| 3692 } | 3717 } |
| 3693 | 3718 |
| 3694 TEST_F(LayerTreeHostImplTest, TextureCachingWithScissor) { | 3719 TEST_F(LayerTreeHostImplTest, TextureCachingWithScissor) { |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3768 | 3793 |
| 3769 child->AddChild(grand_child.Pass()); | 3794 child->AddChild(grand_child.Pass()); |
| 3770 root->AddChild(child.PassAs<LayerImpl>()); | 3795 root->AddChild(child.PassAs<LayerImpl>()); |
| 3771 my_host_impl->active_tree()->SetRootLayer(root.Pass()); | 3796 my_host_impl->active_tree()->SetRootLayer(root.Pass()); |
| 3772 my_host_impl->SetViewportSize(root_rect.size(), root_rect.size()); | 3797 my_host_impl->SetViewportSize(root_rect.size(), root_rect.size()); |
| 3773 | 3798 |
| 3774 EXPECT_FALSE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( | 3799 EXPECT_FALSE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( |
| 3775 child_pass_id)); | 3800 child_pass_id)); |
| 3776 { | 3801 { |
| 3777 LayerTreeHostImpl::FrameData frame; | 3802 LayerTreeHostImpl::FrameData frame; |
| 3778 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3803 host_impl_->SetFullRootLayerDamage(); |
| 3804 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3779 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3805 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3780 my_host_impl->DidDrawAllLayers(frame); | 3806 my_host_impl->DidDrawAllLayers(frame); |
| 3781 } | 3807 } |
| 3782 | 3808 |
| 3783 // We should have cached textures for surface 2. | 3809 // We should have cached textures for surface 2. |
| 3784 EXPECT_TRUE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( | 3810 EXPECT_TRUE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( |
| 3785 child_pass_id)); | 3811 child_pass_id)); |
| 3786 { | 3812 { |
| 3787 LayerTreeHostImpl::FrameData frame; | 3813 LayerTreeHostImpl::FrameData frame; |
| 3788 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3814 host_impl_->SetFullRootLayerDamage(); |
| 3815 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3789 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3816 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3790 my_host_impl->DidDrawAllLayers(frame); | 3817 my_host_impl->DidDrawAllLayers(frame); |
| 3791 } | 3818 } |
| 3792 | 3819 |
| 3793 // We should still have cached textures for surface 2 after drawing with no | 3820 // We should still have cached textures for surface 2 after drawing with no |
| 3794 // damage. | 3821 // damage. |
| 3795 EXPECT_TRUE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( | 3822 EXPECT_TRUE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( |
| 3796 child_pass_id)); | 3823 child_pass_id)); |
| 3797 | 3824 |
| 3798 // Damage a single tile of surface 2. | 3825 // Damage a single tile of surface 2. |
| 3799 child_ptr->set_update_rect(gfx::Rect(10, 10, 10, 10)); | 3826 child_ptr->set_update_rect(gfx::Rect(10, 10, 10, 10)); |
| 3800 { | 3827 { |
| 3801 LayerTreeHostImpl::FrameData frame; | 3828 LayerTreeHostImpl::FrameData frame; |
| 3802 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3829 host_impl_->SetFullRootLayerDamage(); |
| 3830 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3803 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3831 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3804 my_host_impl->DidDrawAllLayers(frame); | 3832 my_host_impl->DidDrawAllLayers(frame); |
| 3805 } | 3833 } |
| 3806 | 3834 |
| 3807 // We should have a cached texture for surface 2 again even though it was | 3835 // We should have a cached texture for surface 2 again even though it was |
| 3808 // damaged. | 3836 // damaged. |
| 3809 EXPECT_TRUE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( | 3837 EXPECT_TRUE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( |
| 3810 child_pass_id)); | 3838 child_pass_id)); |
| 3811 } | 3839 } |
| 3812 | 3840 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3827 LayerImpl* child_ptr; | 3855 LayerImpl* child_ptr; |
| 3828 | 3856 |
| 3829 SetupLayersForTextureCaching(my_host_impl.get(), | 3857 SetupLayersForTextureCaching(my_host_impl.get(), |
| 3830 root_ptr, | 3858 root_ptr, |
| 3831 intermediate_layer_ptr, | 3859 intermediate_layer_ptr, |
| 3832 surface_layer_ptr, | 3860 surface_layer_ptr, |
| 3833 child_ptr, | 3861 child_ptr, |
| 3834 gfx::Size(100, 100)); | 3862 gfx::Size(100, 100)); |
| 3835 { | 3863 { |
| 3836 LayerTreeHostImpl::FrameData frame; | 3864 LayerTreeHostImpl::FrameData frame; |
| 3837 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3865 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3838 | 3866 |
| 3839 // Must receive two render passes, each with one quad | 3867 // Must receive two render passes, each with one quad |
| 3840 ASSERT_EQ(2U, frame.render_passes.size()); | 3868 ASSERT_EQ(2U, frame.render_passes.size()); |
| 3841 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 3869 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 3842 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 3870 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 3843 | 3871 |
| 3844 EXPECT_EQ(DrawQuad::RENDER_PASS, | 3872 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 3845 frame.render_passes[1]->quad_list[0]->material); | 3873 frame.render_passes[1]->quad_list[0]->material); |
| 3846 const RenderPassDrawQuad* quad = | 3874 const RenderPassDrawQuad* quad = |
| 3847 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); | 3875 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); |
| 3848 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; | 3876 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; |
| 3849 ASSERT_TRUE(target_pass); | 3877 ASSERT_TRUE(target_pass); |
| 3850 EXPECT_FALSE(target_pass->damage_rect.IsEmpty()); | 3878 EXPECT_FALSE(target_pass->damage_rect.IsEmpty()); |
| 3851 | 3879 |
| 3852 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3880 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3853 my_host_impl->DidDrawAllLayers(frame); | 3881 my_host_impl->DidDrawAllLayers(frame); |
| 3854 } | 3882 } |
| 3855 | 3883 |
| 3856 // Draw without any change | 3884 // Draw without any change |
| 3857 { | 3885 { |
| 3858 LayerTreeHostImpl::FrameData frame; | 3886 LayerTreeHostImpl::FrameData frame; |
| 3859 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3887 my_host_impl->SetFullRootLayerDamage(); |
| 3888 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3860 | 3889 |
| 3861 // Must receive one render pass, as the other one should be culled | 3890 // Must receive one render pass, as the other one should be culled |
| 3862 ASSERT_EQ(1U, frame.render_passes.size()); | 3891 ASSERT_EQ(1U, frame.render_passes.size()); |
| 3863 | 3892 |
| 3864 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 3893 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 3865 EXPECT_EQ(DrawQuad::RENDER_PASS, | 3894 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 3866 frame.render_passes[0]->quad_list[0]->material); | 3895 frame.render_passes[0]->quad_list[0]->material); |
| 3867 const RenderPassDrawQuad* quad = | 3896 const RenderPassDrawQuad* quad = |
| 3868 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 3897 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 3869 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == | 3898 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == |
| 3870 frame.render_passes_by_id.end()); | 3899 frame.render_passes_by_id.end()); |
| 3871 | 3900 |
| 3872 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3901 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3873 my_host_impl->DidDrawAllLayers(frame); | 3902 my_host_impl->DidDrawAllLayers(frame); |
| 3874 } | 3903 } |
| 3875 | 3904 |
| 3876 // Change opacity and draw | 3905 // Change opacity and draw |
| 3877 surface_layer_ptr->SetOpacity(0.6f); | 3906 surface_layer_ptr->SetOpacity(0.6f); |
| 3878 { | 3907 { |
| 3879 LayerTreeHostImpl::FrameData frame; | 3908 LayerTreeHostImpl::FrameData frame; |
| 3880 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3909 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3881 | 3910 |
| 3882 // Must receive one render pass, as the other one should be culled | 3911 // Must receive one render pass, as the other one should be culled |
| 3883 ASSERT_EQ(1U, frame.render_passes.size()); | 3912 ASSERT_EQ(1U, frame.render_passes.size()); |
| 3884 | 3913 |
| 3885 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 3914 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 3886 EXPECT_EQ(DrawQuad::RENDER_PASS, | 3915 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 3887 frame.render_passes[0]->quad_list[0]->material); | 3916 frame.render_passes[0]->quad_list[0]->material); |
| 3888 const RenderPassDrawQuad* quad = | 3917 const RenderPassDrawQuad* quad = |
| 3889 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 3918 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 3890 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == | 3919 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == |
| 3891 frame.render_passes_by_id.end()); | 3920 frame.render_passes_by_id.end()); |
| 3892 | 3921 |
| 3893 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3922 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3894 my_host_impl->DidDrawAllLayers(frame); | 3923 my_host_impl->DidDrawAllLayers(frame); |
| 3895 } | 3924 } |
| 3896 | 3925 |
| 3897 // Change less benign property and draw - should have contents changed flag | 3926 // Change less benign property and draw - should have contents changed flag |
| 3898 surface_layer_ptr->SetStackingOrderChanged(true); | 3927 surface_layer_ptr->SetStackingOrderChanged(true); |
| 3899 { | 3928 { |
| 3900 LayerTreeHostImpl::FrameData frame; | 3929 LayerTreeHostImpl::FrameData frame; |
| 3901 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3930 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3902 | 3931 |
| 3903 // Must receive two render passes, each with one quad | 3932 // Must receive two render passes, each with one quad |
| 3904 ASSERT_EQ(2U, frame.render_passes.size()); | 3933 ASSERT_EQ(2U, frame.render_passes.size()); |
| 3905 | 3934 |
| 3906 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 3935 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 3907 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 3936 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
| 3908 frame.render_passes[0]->quad_list[0]->material); | 3937 frame.render_passes[0]->quad_list[0]->material); |
| 3909 | 3938 |
| 3910 EXPECT_EQ(DrawQuad::RENDER_PASS, | 3939 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 3911 frame.render_passes[1]->quad_list[0]->material); | 3940 frame.render_passes[1]->quad_list[0]->material); |
| 3912 const RenderPassDrawQuad* quad = | 3941 const RenderPassDrawQuad* quad = |
| 3913 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); | 3942 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); |
| 3914 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; | 3943 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; |
| 3915 ASSERT_TRUE(target_pass); | 3944 ASSERT_TRUE(target_pass); |
| 3916 EXPECT_FALSE(target_pass->damage_rect.IsEmpty()); | 3945 EXPECT_FALSE(target_pass->damage_rect.IsEmpty()); |
| 3917 | 3946 |
| 3918 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3947 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3919 my_host_impl->DidDrawAllLayers(frame); | 3948 my_host_impl->DidDrawAllLayers(frame); |
| 3920 } | 3949 } |
| 3921 | 3950 |
| 3922 // Change opacity again, and evict the cached surface texture. | 3951 // Change opacity again, and evict the cached surface texture. |
| 3923 surface_layer_ptr->SetOpacity(0.5f); | 3952 surface_layer_ptr->SetOpacity(0.5f); |
| 3924 static_cast<GLRendererWithReleaseTextures*>( | 3953 static_cast<GLRendererWithReleaseTextures*>( |
| 3925 my_host_impl->renderer())->ReleaseRenderPassTextures(); | 3954 my_host_impl->renderer())->ReleaseRenderPassTextures(); |
| 3926 | 3955 |
| 3927 // Change opacity and draw | 3956 // Change opacity and draw |
| 3928 surface_layer_ptr->SetOpacity(0.6f); | 3957 surface_layer_ptr->SetOpacity(0.6f); |
| 3929 { | 3958 { |
| 3930 LayerTreeHostImpl::FrameData frame; | 3959 LayerTreeHostImpl::FrameData frame; |
| 3931 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3960 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3932 | 3961 |
| 3933 // Must receive two render passes | 3962 // Must receive two render passes |
| 3934 ASSERT_EQ(2U, frame.render_passes.size()); | 3963 ASSERT_EQ(2U, frame.render_passes.size()); |
| 3935 | 3964 |
| 3936 // Even though not enough properties changed, the entire thing must be | 3965 // Even though not enough properties changed, the entire thing must be |
| 3937 // redrawn as we don't have cached textures | 3966 // redrawn as we don't have cached textures |
| 3938 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 3967 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 3939 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 3968 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 3940 | 3969 |
| 3941 EXPECT_EQ(DrawQuad::RENDER_PASS, | 3970 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 3942 frame.render_passes[1]->quad_list[0]->material); | 3971 frame.render_passes[1]->quad_list[0]->material); |
| 3943 const RenderPassDrawQuad* quad = | 3972 const RenderPassDrawQuad* quad = |
| 3944 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); | 3973 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); |
| 3945 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; | 3974 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; |
| 3946 ASSERT_TRUE(target_pass); | 3975 ASSERT_TRUE(target_pass); |
| 3947 EXPECT_TRUE(target_pass->damage_rect.IsEmpty()); | 3976 EXPECT_TRUE(target_pass->damage_rect.IsEmpty()); |
| 3948 | 3977 |
| 3949 // Was our surface evicted? | 3978 // Was our surface evicted? |
| 3950 EXPECT_FALSE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( | 3979 EXPECT_FALSE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( |
| 3951 target_pass->id)); | 3980 target_pass->id)); |
| 3952 | 3981 |
| 3953 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 3982 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3954 my_host_impl->DidDrawAllLayers(frame); | 3983 my_host_impl->DidDrawAllLayers(frame); |
| 3955 } | 3984 } |
| 3956 | 3985 |
| 3957 // Draw without any change, to make sure the state is clear | 3986 // Draw without any change, to make sure the state is clear |
| 3958 { | 3987 { |
| 3959 LayerTreeHostImpl::FrameData frame; | 3988 LayerTreeHostImpl::FrameData frame; |
| 3960 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 3989 my_host_impl->SetFullRootLayerDamage(); |
| 3990 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3961 | 3991 |
| 3962 // Must receive one render pass, as the other one should be culled | 3992 // Must receive one render pass, as the other one should be culled |
| 3963 ASSERT_EQ(1U, frame.render_passes.size()); | 3993 ASSERT_EQ(1U, frame.render_passes.size()); |
| 3964 | 3994 |
| 3965 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 3995 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 3966 EXPECT_EQ(DrawQuad::RENDER_PASS, | 3996 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 3967 frame.render_passes[0]->quad_list[0]->material); | 3997 frame.render_passes[0]->quad_list[0]->material); |
| 3968 const RenderPassDrawQuad* quad = | 3998 const RenderPassDrawQuad* quad = |
| 3969 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 3999 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 3970 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == | 4000 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == |
| 3971 frame.render_passes_by_id.end()); | 4001 frame.render_passes_by_id.end()); |
| 3972 | 4002 |
| 3973 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 4003 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 3974 my_host_impl->DidDrawAllLayers(frame); | 4004 my_host_impl->DidDrawAllLayers(frame); |
| 3975 } | 4005 } |
| 3976 | 4006 |
| 3977 // Change location of the intermediate layer | 4007 // Change location of the intermediate layer |
| 3978 gfx::Transform transform = intermediate_layer_ptr->transform(); | 4008 gfx::Transform transform = intermediate_layer_ptr->transform(); |
| 3979 transform.matrix().setDouble(0, 3, 1.0001); | 4009 transform.matrix().setDouble(0, 3, 1.0001); |
| 3980 intermediate_layer_ptr->SetTransform(transform); | 4010 intermediate_layer_ptr->SetTransform(transform); |
| 3981 { | 4011 { |
| 3982 LayerTreeHostImpl::FrameData frame; | 4012 LayerTreeHostImpl::FrameData frame; |
| 3983 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 4013 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 3984 | 4014 |
| 3985 // Must receive one render pass, as the other one should be culled. | 4015 // Must receive one render pass, as the other one should be culled. |
| 3986 ASSERT_EQ(1U, frame.render_passes.size()); | 4016 ASSERT_EQ(1U, frame.render_passes.size()); |
| 3987 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4017 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 3988 | 4018 |
| 3989 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4019 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 3990 frame.render_passes[0]->quad_list[0]->material); | 4020 frame.render_passes[0]->quad_list[0]->material); |
| 3991 const RenderPassDrawQuad* quad = | 4021 const RenderPassDrawQuad* quad = |
| 3992 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4022 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 3993 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == | 4023 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == |
| (...skipping 20 matching lines...) Expand all Loading... |
| 4014 LayerImpl* child_ptr; | 4044 LayerImpl* child_ptr; |
| 4015 | 4045 |
| 4016 SetupLayersForTextureCaching(my_host_impl.get(), | 4046 SetupLayersForTextureCaching(my_host_impl.get(), |
| 4017 root_ptr, | 4047 root_ptr, |
| 4018 intermediate_layer_ptr, | 4048 intermediate_layer_ptr, |
| 4019 surface_layer_ptr, | 4049 surface_layer_ptr, |
| 4020 child_ptr, | 4050 child_ptr, |
| 4021 gfx::Size(100, 100)); | 4051 gfx::Size(100, 100)); |
| 4022 { | 4052 { |
| 4023 LayerTreeHostImpl::FrameData frame; | 4053 LayerTreeHostImpl::FrameData frame; |
| 4024 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 4054 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 4025 | 4055 |
| 4026 // Must receive two render passes, each with one quad | 4056 // Must receive two render passes, each with one quad |
| 4027 ASSERT_EQ(2U, frame.render_passes.size()); | 4057 ASSERT_EQ(2U, frame.render_passes.size()); |
| 4028 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4058 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4029 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 4059 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 4030 | 4060 |
| 4031 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4061 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 4032 frame.render_passes[1]->quad_list[0]->material); | 4062 frame.render_passes[1]->quad_list[0]->material); |
| 4033 const RenderPassDrawQuad* quad = | 4063 const RenderPassDrawQuad* quad = |
| 4034 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); | 4064 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); |
| 4035 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; | 4065 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; |
| 4036 EXPECT_FALSE(target_pass->damage_rect.IsEmpty()); | 4066 EXPECT_FALSE(target_pass->damage_rect.IsEmpty()); |
| 4037 | 4067 |
| 4038 EXPECT_FALSE(frame.render_passes[0]->damage_rect.IsEmpty()); | 4068 EXPECT_FALSE(frame.render_passes[0]->damage_rect.IsEmpty()); |
| 4039 EXPECT_FALSE(frame.render_passes[1]->damage_rect.IsEmpty()); | 4069 EXPECT_FALSE(frame.render_passes[1]->damage_rect.IsEmpty()); |
| 4040 | 4070 |
| 4041 EXPECT_FALSE( | 4071 EXPECT_FALSE( |
| 4042 frame.render_passes[0]->has_occlusion_from_outside_target_surface); | 4072 frame.render_passes[0]->has_occlusion_from_outside_target_surface); |
| 4043 EXPECT_FALSE( | 4073 EXPECT_FALSE( |
| 4044 frame.render_passes[1]->has_occlusion_from_outside_target_surface); | 4074 frame.render_passes[1]->has_occlusion_from_outside_target_surface); |
| 4045 | 4075 |
| 4046 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 4076 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4047 my_host_impl->DidDrawAllLayers(frame); | 4077 my_host_impl->DidDrawAllLayers(frame); |
| 4048 } | 4078 } |
| 4049 | 4079 |
| 4050 // Draw without any change | 4080 // Draw without any change |
| 4051 { | 4081 { |
| 4052 LayerTreeHostImpl::FrameData frame; | 4082 LayerTreeHostImpl::FrameData frame; |
| 4053 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 4083 my_host_impl->SetFullRootLayerDamage(); |
| 4084 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 4054 | 4085 |
| 4055 // Even though there was no change, we set the damage to entire viewport. | 4086 // Even though there was no change, we set the damage to entire viewport. |
| 4056 // One of the passes should be culled as a result, since contents didn't | 4087 // One of the passes should be culled as a result, since contents didn't |
| 4057 // change and we have cached texture. | 4088 // change and we have cached texture. |
| 4058 ASSERT_EQ(1U, frame.render_passes.size()); | 4089 ASSERT_EQ(1U, frame.render_passes.size()); |
| 4059 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4090 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4060 | 4091 |
| 4061 EXPECT_TRUE(frame.render_passes[0]->damage_rect.IsEmpty()); | |
| 4062 | |
| 4063 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 4092 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4064 my_host_impl->DidDrawAllLayers(frame); | 4093 my_host_impl->DidDrawAllLayers(frame); |
| 4065 } | 4094 } |
| 4066 | 4095 |
| 4067 // Change opacity and draw | 4096 // Change opacity and draw |
| 4068 surface_layer_ptr->SetOpacity(0.6f); | 4097 surface_layer_ptr->SetOpacity(0.6f); |
| 4069 { | 4098 { |
| 4070 LayerTreeHostImpl::FrameData frame; | 4099 LayerTreeHostImpl::FrameData frame; |
| 4071 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 4100 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 4072 | 4101 |
| 4073 // Must receive one render pass, as the other one should be culled | 4102 // Must receive one render pass, as the other one should be culled |
| 4074 ASSERT_EQ(1U, frame.render_passes.size()); | 4103 ASSERT_EQ(1U, frame.render_passes.size()); |
| 4075 | 4104 |
| 4076 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4105 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4077 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4106 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 4078 frame.render_passes[0]->quad_list[0]->material); | 4107 frame.render_passes[0]->quad_list[0]->material); |
| 4079 const RenderPassDrawQuad* quad = | 4108 const RenderPassDrawQuad* quad = |
| 4080 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4109 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4081 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == | 4110 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == |
| 4082 frame.render_passes_by_id.end()); | 4111 frame.render_passes_by_id.end()); |
| 4083 | 4112 |
| 4084 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 4113 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4085 my_host_impl->DidDrawAllLayers(frame); | 4114 my_host_impl->DidDrawAllLayers(frame); |
| 4086 } | 4115 } |
| 4087 | 4116 |
| 4088 // Change less benign property and draw - should have contents changed flag | 4117 // Change less benign property and draw - should have contents changed flag |
| 4089 surface_layer_ptr->SetStackingOrderChanged(true); | 4118 surface_layer_ptr->SetStackingOrderChanged(true); |
| 4090 { | 4119 { |
| 4091 LayerTreeHostImpl::FrameData frame; | 4120 LayerTreeHostImpl::FrameData frame; |
| 4092 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 4121 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 4093 | 4122 |
| 4094 // Must receive two render passes, each with one quad | 4123 // Must receive two render passes, each with one quad |
| 4095 ASSERT_EQ(2U, frame.render_passes.size()); | 4124 ASSERT_EQ(2U, frame.render_passes.size()); |
| 4096 | 4125 |
| 4097 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4126 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4098 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 4127 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
| 4099 frame.render_passes[0]->quad_list[0]->material); | 4128 frame.render_passes[0]->quad_list[0]->material); |
| 4100 | 4129 |
| 4101 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4130 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 4102 frame.render_passes[1]->quad_list[0]->material); | 4131 frame.render_passes[1]->quad_list[0]->material); |
| 4103 const RenderPassDrawQuad* quad = | 4132 const RenderPassDrawQuad* quad = |
| 4104 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); | 4133 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); |
| 4105 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; | 4134 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; |
| 4106 ASSERT_TRUE(target_pass); | 4135 ASSERT_TRUE(target_pass); |
| 4107 EXPECT_FALSE(target_pass->damage_rect.IsEmpty()); | 4136 EXPECT_FALSE(target_pass->damage_rect.IsEmpty()); |
| 4108 | 4137 |
| 4109 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 4138 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4110 my_host_impl->DidDrawAllLayers(frame); | 4139 my_host_impl->DidDrawAllLayers(frame); |
| 4111 } | 4140 } |
| 4112 | 4141 |
| 4113 // Change opacity again, and evict the cached surface texture. | 4142 // Change opacity again, and evict the cached surface texture. |
| 4114 surface_layer_ptr->SetOpacity(0.5f); | 4143 surface_layer_ptr->SetOpacity(0.5f); |
| 4115 static_cast<GLRendererWithReleaseTextures*>( | 4144 static_cast<GLRendererWithReleaseTextures*>( |
| 4116 my_host_impl->renderer())->ReleaseRenderPassTextures(); | 4145 my_host_impl->renderer())->ReleaseRenderPassTextures(); |
| 4117 | 4146 |
| 4118 // Change opacity and draw | 4147 // Change opacity and draw |
| 4119 surface_layer_ptr->SetOpacity(0.6f); | 4148 surface_layer_ptr->SetOpacity(0.6f); |
| 4120 { | 4149 { |
| 4121 LayerTreeHostImpl::FrameData frame; | 4150 LayerTreeHostImpl::FrameData frame; |
| 4122 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 4151 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 4123 | 4152 |
| 4124 // Must receive two render passes | 4153 // Must receive two render passes |
| 4125 ASSERT_EQ(2U, frame.render_passes.size()); | 4154 ASSERT_EQ(2U, frame.render_passes.size()); |
| 4126 | 4155 |
| 4127 // Even though not enough properties changed, the entire thing must be | 4156 // Even though not enough properties changed, the entire thing must be |
| 4128 // redrawn as we don't have cached textures | 4157 // redrawn as we don't have cached textures |
| 4129 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4158 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4130 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 4159 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 4131 | 4160 |
| 4132 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4161 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 4133 frame.render_passes[1]->quad_list[0]->material); | 4162 frame.render_passes[1]->quad_list[0]->material); |
| 4134 const RenderPassDrawQuad* quad = | 4163 const RenderPassDrawQuad* quad = |
| 4135 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); | 4164 RenderPassDrawQuad::MaterialCast(frame.render_passes[1]->quad_list[0]); |
| 4136 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; | 4165 RenderPass* target_pass = frame.render_passes_by_id[quad->render_pass_id]; |
| 4137 ASSERT_TRUE(target_pass); | 4166 ASSERT_TRUE(target_pass); |
| 4138 EXPECT_TRUE(target_pass->damage_rect.IsEmpty()); | 4167 EXPECT_TRUE(target_pass->damage_rect.IsEmpty()); |
| 4139 | 4168 |
| 4140 // Was our surface evicted? | 4169 // Was our surface evicted? |
| 4141 EXPECT_FALSE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( | 4170 EXPECT_FALSE(my_host_impl->renderer()->HaveCachedResourcesForRenderPassId( |
| 4142 target_pass->id)); | 4171 target_pass->id)); |
| 4143 | 4172 |
| 4144 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 4173 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4145 my_host_impl->DidDrawAllLayers(frame); | 4174 my_host_impl->DidDrawAllLayers(frame); |
| 4146 } | 4175 } |
| 4147 | 4176 |
| 4148 // Draw without any change, to make sure the state is clear | 4177 // Draw without any change, to make sure the state is clear |
| 4149 { | 4178 { |
| 4150 LayerTreeHostImpl::FrameData frame; | 4179 LayerTreeHostImpl::FrameData frame; |
| 4151 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 4180 my_host_impl->SetFullRootLayerDamage(); |
| 4181 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 4152 | 4182 |
| 4153 // Even though there was no change, we set the damage to entire viewport. | 4183 // Even though there was no change, we set the damage to entire viewport. |
| 4154 // One of the passes should be culled as a result, since contents didn't | 4184 // One of the passes should be culled as a result, since contents didn't |
| 4155 // change and we have cached texture. | 4185 // change and we have cached texture. |
| 4156 ASSERT_EQ(1U, frame.render_passes.size()); | 4186 ASSERT_EQ(1U, frame.render_passes.size()); |
| 4157 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4187 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4158 | 4188 |
| 4159 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); | 4189 my_host_impl->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4160 my_host_impl->DidDrawAllLayers(frame); | 4190 my_host_impl->DidDrawAllLayers(frame); |
| 4161 } | 4191 } |
| 4162 | 4192 |
| 4163 // Change location of the intermediate layer | 4193 // Change location of the intermediate layer |
| 4164 gfx::Transform transform = intermediate_layer_ptr->transform(); | 4194 gfx::Transform transform = intermediate_layer_ptr->transform(); |
| 4165 transform.matrix().setDouble(0, 3, 1.0001); | 4195 transform.matrix().setDouble(0, 3, 1.0001); |
| 4166 intermediate_layer_ptr->SetTransform(transform); | 4196 intermediate_layer_ptr->SetTransform(transform); |
| 4167 { | 4197 { |
| 4168 LayerTreeHostImpl::FrameData frame; | 4198 LayerTreeHostImpl::FrameData frame; |
| 4169 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame)); | 4199 EXPECT_TRUE(my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
| 4170 | 4200 |
| 4171 // Must receive one render pass, as the other one should be culled. | 4201 // Must receive one render pass, as the other one should be culled. |
| 4172 ASSERT_EQ(1U, frame.render_passes.size()); | 4202 ASSERT_EQ(1U, frame.render_passes.size()); |
| 4173 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4203 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4174 | 4204 |
| 4175 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4205 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 4176 frame.render_passes[0]->quad_list[0]->material); | 4206 frame.render_passes[0]->quad_list[0]->material); |
| 4177 const RenderPassDrawQuad* quad = | 4207 const RenderPassDrawQuad* quad = |
| 4178 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4208 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4179 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == | 4209 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == |
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4638 } | 4668 } |
| 4639 | 4669 |
| 4640 class LayerTreeHostImplTestWithDelegatingRenderer | 4670 class LayerTreeHostImplTestWithDelegatingRenderer |
| 4641 : public LayerTreeHostImplTest { | 4671 : public LayerTreeHostImplTest { |
| 4642 protected: | 4672 protected: |
| 4643 virtual scoped_ptr<OutputSurface> CreateOutputSurface() OVERRIDE { | 4673 virtual scoped_ptr<OutputSurface> CreateOutputSurface() OVERRIDE { |
| 4644 return FakeOutputSurface::CreateDelegating3d().PassAs<OutputSurface>(); | 4674 return FakeOutputSurface::CreateDelegating3d().PassAs<OutputSurface>(); |
| 4645 } | 4675 } |
| 4646 | 4676 |
| 4647 void DrawFrameAndTestDamage(const gfx::RectF& expected_damage) { | 4677 void DrawFrameAndTestDamage(const gfx::RectF& expected_damage) { |
| 4678 bool expect_to_draw = !expected_damage.IsEmpty(); |
| 4679 |
| 4648 LayerTreeHostImpl::FrameData frame; | 4680 LayerTreeHostImpl::FrameData frame; |
| 4649 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 4681 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 4650 ASSERT_EQ(1u, frame.render_passes.size()); | |
| 4651 | 4682 |
| 4652 // Verify the damage rect for the root render pass. | 4683 if (!expect_to_draw) { |
| 4653 const RenderPass* root_render_pass = frame.render_passes.back(); | 4684 // With no damage, we don't draw, and no quads are created. |
| 4654 EXPECT_RECT_EQ(expected_damage, root_render_pass->damage_rect); | 4685 ASSERT_EQ(0u, frame.render_passes.size()); |
| 4686 } else { |
| 4687 ASSERT_EQ(1u, frame.render_passes.size()); |
| 4655 | 4688 |
| 4656 // Verify the root layer's quad is generated and not being culled. | 4689 // Verify the damage rect for the root render pass. |
| 4657 ASSERT_EQ(1u, root_render_pass->quad_list.size()); | 4690 const RenderPass* root_render_pass = frame.render_passes.back(); |
| 4658 gfx::Rect expected_visible_rect( | 4691 EXPECT_RECT_EQ(expected_damage, root_render_pass->damage_rect); |
| 4659 host_impl_->active_tree()->root_layer()->content_bounds()); | 4692 |
| 4660 EXPECT_RECT_EQ(expected_visible_rect, | 4693 // Verify the root and child layers' quads are generated and not being |
| 4661 root_render_pass->quad_list[0]->visible_rect); | 4694 // culled. |
| 4695 ASSERT_EQ(2u, root_render_pass->quad_list.size()); |
| 4696 |
| 4697 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0]; |
| 4698 gfx::RectF expected_child_visible_rect(child->content_bounds()); |
| 4699 EXPECT_RECT_EQ(expected_child_visible_rect, |
| 4700 root_render_pass->quad_list[0]->visible_rect); |
| 4701 |
| 4702 LayerImpl* root = host_impl_->active_tree()->root_layer(); |
| 4703 gfx::RectF expected_root_visible_rect(root->content_bounds()); |
| 4704 EXPECT_RECT_EQ(expected_root_visible_rect, |
| 4705 root_render_pass->quad_list[1]->visible_rect); |
| 4706 } |
| 4662 | 4707 |
| 4663 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 4708 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4664 host_impl_->DidDrawAllLayers(frame); | 4709 host_impl_->DidDrawAllLayers(frame); |
| 4710 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame)); |
| 4665 } | 4711 } |
| 4666 }; | 4712 }; |
| 4667 | 4713 |
| 4668 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { | 4714 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { |
| 4669 scoped_ptr<SolidColorLayerImpl> root = | 4715 scoped_ptr<SolidColorLayerImpl> root = |
| 4670 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); | 4716 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); |
| 4671 root->SetAnchorPoint(gfx::PointF()); | 4717 root->SetAnchorPoint(gfx::PointF()); |
| 4672 root->SetPosition(gfx::PointF()); | 4718 root->SetPosition(gfx::PointF()); |
| 4673 root->SetBounds(gfx::Size(10, 10)); | 4719 root->SetBounds(gfx::Size(10, 10)); |
| 4674 root->SetContentBounds(gfx::Size(10, 10)); | 4720 root->SetContentBounds(gfx::Size(10, 10)); |
| 4675 root->SetDrawsContent(true); | 4721 root->SetDrawsContent(true); |
| 4722 |
| 4723 // Child layer is in the bottom right corner. |
| 4724 scoped_ptr<SolidColorLayerImpl> child = |
| 4725 SolidColorLayerImpl::Create(host_impl_->active_tree(), 2); |
| 4726 child->SetAnchorPoint(gfx::PointF(0.f, 0.f)); |
| 4727 child->SetPosition(gfx::PointF(9.f, 9.f)); |
| 4728 child->SetBounds(gfx::Size(1, 1)); |
| 4729 child->SetContentBounds(gfx::Size(1, 1)); |
| 4730 child->SetDrawsContent(true); |
| 4731 root->AddChild(child.PassAs<LayerImpl>()); |
| 4732 |
| 4676 host_impl_->active_tree()->SetRootLayer(root.PassAs<LayerImpl>()); | 4733 host_impl_->active_tree()->SetRootLayer(root.PassAs<LayerImpl>()); |
| 4677 | 4734 |
| 4678 // Draw a frame. In the first frame, the entire viewport should be damaged. | 4735 // Draw a frame. In the first frame, the entire viewport should be damaged. |
| 4679 gfx::Rect full_frame_damage = gfx::Rect(host_impl_->device_viewport_size()); | 4736 gfx::Rect full_frame_damage = gfx::Rect(host_impl_->device_viewport_size()); |
| 4680 DrawFrameAndTestDamage(full_frame_damage); | 4737 DrawFrameAndTestDamage(full_frame_damage); |
| 4681 | 4738 |
| 4682 // The second frame should have no damage, but the quads should still be | 4739 // The second frame has damage that doesn't touch the child layer. Its quads |
| 4683 // generated. | 4740 // should still be generated. |
| 4741 gfx::Rect small_damage = gfx::Rect(0, 0, 1, 1); |
| 4742 host_impl_->active_tree()->root_layer()->set_update_rect(small_damage); |
| 4743 DrawFrameAndTestDamage(small_damage); |
| 4744 |
| 4745 // The third frame should have no damage, so no quads should be generated. |
| 4684 gfx::Rect no_damage; | 4746 gfx::Rect no_damage; |
| 4685 DrawFrameAndTestDamage(no_damage); | 4747 DrawFrameAndTestDamage(no_damage); |
| 4686 } | 4748 } |
| 4687 | 4749 |
| 4688 class FakeMaskLayerImpl : public LayerImpl { | 4750 class FakeMaskLayerImpl : public LayerImpl { |
| 4689 public: | 4751 public: |
| 4690 static scoped_ptr<FakeMaskLayerImpl> Create(LayerTreeImpl* tree_impl, | 4752 static scoped_ptr<FakeMaskLayerImpl> Create(LayerTreeImpl* tree_impl, |
| 4691 int id) { | 4753 int id) { |
| 4692 return make_scoped_ptr(new FakeMaskLayerImpl(tree_impl, id)); | 4754 return make_scoped_ptr(new FakeMaskLayerImpl(tree_impl, id)); |
| 4693 } | 4755 } |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4756 mask_layer->SetDrawsContent(true); | 4818 mask_layer->SetDrawsContent(true); |
| 4757 | 4819 |
| 4758 | 4820 |
| 4759 // Check that the tree scaling is correctly taken into account for the mask, | 4821 // Check that the tree scaling is correctly taken into account for the mask, |
| 4760 // that should fully map onto the quad. | 4822 // that should fully map onto the quad. |
| 4761 float device_scale_factor = 1.f; | 4823 float device_scale_factor = 1.f; |
| 4762 host_impl_->SetViewportSize(root_size, root_size); | 4824 host_impl_->SetViewportSize(root_size, root_size); |
| 4763 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 4825 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 4764 { | 4826 { |
| 4765 LayerTreeHostImpl::FrameData frame; | 4827 LayerTreeHostImpl::FrameData frame; |
| 4766 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 4828 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 4767 | 4829 |
| 4768 ASSERT_EQ(1u, frame.render_passes.size()); | 4830 ASSERT_EQ(1u, frame.render_passes.size()); |
| 4769 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4831 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4770 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4832 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4771 frame.render_passes[0]->quad_list[0]->material); | 4833 frame.render_passes[0]->quad_list[0]->material); |
| 4772 const RenderPassDrawQuad* render_pass_quad = | 4834 const RenderPassDrawQuad* render_pass_quad = |
| 4773 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4835 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4774 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 4836 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 4775 render_pass_quad->rect.ToString()); | 4837 render_pass_quad->rect.ToString()); |
| 4776 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4838 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 4777 render_pass_quad->mask_uv_rect.ToString()); | 4839 render_pass_quad->mask_uv_rect.ToString()); |
| 4778 | 4840 |
| 4779 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 4841 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4780 host_impl_->DidDrawAllLayers(frame); | 4842 host_impl_->DidDrawAllLayers(frame); |
| 4781 } | 4843 } |
| 4782 | 4844 |
| 4783 | 4845 |
| 4784 // Applying a DSF should change the render surface size, but won't affect | 4846 // Applying a DSF should change the render surface size, but won't affect |
| 4785 // which part of the mask is used. | 4847 // which part of the mask is used. |
| 4786 device_scale_factor = 2.f; | 4848 device_scale_factor = 2.f; |
| 4787 gfx::Size device_viewport = | 4849 gfx::Size device_viewport = |
| 4788 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 4850 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 4789 host_impl_->SetViewportSize(root_size, device_viewport); | 4851 host_impl_->SetViewportSize(root_size, device_viewport); |
| 4790 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 4852 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 4791 host_impl_->active_tree()->set_needs_update_draw_properties(); | 4853 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 4792 { | 4854 { |
| 4793 LayerTreeHostImpl::FrameData frame; | 4855 LayerTreeHostImpl::FrameData frame; |
| 4794 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 4856 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 4795 | 4857 |
| 4796 ASSERT_EQ(1u, frame.render_passes.size()); | 4858 ASSERT_EQ(1u, frame.render_passes.size()); |
| 4797 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4859 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4798 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4860 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4799 frame.render_passes[0]->quad_list[0]->material); | 4861 frame.render_passes[0]->quad_list[0]->material); |
| 4800 const RenderPassDrawQuad* render_pass_quad = | 4862 const RenderPassDrawQuad* render_pass_quad = |
| 4801 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4863 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4802 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 4864 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
| 4803 render_pass_quad->rect.ToString()); | 4865 render_pass_quad->rect.ToString()); |
| 4804 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4866 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 4805 render_pass_quad->mask_uv_rect.ToString()); | 4867 render_pass_quad->mask_uv_rect.ToString()); |
| 4806 | 4868 |
| 4807 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 4869 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4808 host_impl_->DidDrawAllLayers(frame); | 4870 host_impl_->DidDrawAllLayers(frame); |
| 4809 } | 4871 } |
| 4810 | 4872 |
| 4811 | 4873 |
| 4812 // Applying an equivalent content scale on the content layer and the mask | 4874 // Applying an equivalent content scale on the content layer and the mask |
| 4813 // should still result in the same part of the mask being used. | 4875 // should still result in the same part of the mask being used. |
| 4814 gfx::Size content_bounds = | 4876 gfx::Size content_bounds = |
| 4815 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, | 4877 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, |
| 4816 device_scale_factor)); | 4878 device_scale_factor)); |
| 4817 content_layer->SetContentBounds(content_bounds); | 4879 content_layer->SetContentBounds(content_bounds); |
| 4818 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 4880 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 4819 mask_layer->SetContentBounds(content_bounds); | 4881 mask_layer->SetContentBounds(content_bounds); |
| 4820 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 4882 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 4821 host_impl_->active_tree()->set_needs_update_draw_properties(); | 4883 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 4822 { | 4884 { |
| 4823 LayerTreeHostImpl::FrameData frame; | 4885 LayerTreeHostImpl::FrameData frame; |
| 4824 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 4886 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 4825 | 4887 |
| 4826 ASSERT_EQ(1u, frame.render_passes.size()); | 4888 ASSERT_EQ(1u, frame.render_passes.size()); |
| 4827 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4889 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4828 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4890 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4829 frame.render_passes[0]->quad_list[0]->material); | 4891 frame.render_passes[0]->quad_list[0]->material); |
| 4830 const RenderPassDrawQuad* render_pass_quad = | 4892 const RenderPassDrawQuad* render_pass_quad = |
| 4831 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4893 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4832 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 4894 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
| 4833 render_pass_quad->rect.ToString()); | 4895 render_pass_quad->rect.ToString()); |
| 4834 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4896 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4878 mask_layer->SetAnchorPoint(gfx::PointF()); | 4940 mask_layer->SetAnchorPoint(gfx::PointF()); |
| 4879 mask_layer->SetDrawsContent(true); | 4941 mask_layer->SetDrawsContent(true); |
| 4880 | 4942 |
| 4881 | 4943 |
| 4882 // Check that the mask fills the surface. | 4944 // Check that the mask fills the surface. |
| 4883 float device_scale_factor = 1.f; | 4945 float device_scale_factor = 1.f; |
| 4884 host_impl_->SetViewportSize(root_size, root_size); | 4946 host_impl_->SetViewportSize(root_size, root_size); |
| 4885 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 4947 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 4886 { | 4948 { |
| 4887 LayerTreeHostImpl::FrameData frame; | 4949 LayerTreeHostImpl::FrameData frame; |
| 4888 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 4950 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 4889 | 4951 |
| 4890 ASSERT_EQ(1u, frame.render_passes.size()); | 4952 ASSERT_EQ(1u, frame.render_passes.size()); |
| 4891 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4953 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4892 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4954 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4893 frame.render_passes[0]->quad_list[0]->material); | 4955 frame.render_passes[0]->quad_list[0]->material); |
| 4894 const RenderPassDrawQuad* render_pass_quad = | 4956 const RenderPassDrawQuad* render_pass_quad = |
| 4895 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4957 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4896 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 4958 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
| 4897 render_pass_quad->rect.ToString()); | 4959 render_pass_quad->rect.ToString()); |
| 4898 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4960 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 4899 render_pass_quad->mask_uv_rect.ToString()); | 4961 render_pass_quad->mask_uv_rect.ToString()); |
| 4900 | 4962 |
| 4901 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 4963 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4902 host_impl_->DidDrawAllLayers(frame); | 4964 host_impl_->DidDrawAllLayers(frame); |
| 4903 } | 4965 } |
| 4904 | 4966 |
| 4905 | 4967 |
| 4906 // Applying a DSF should change the render surface size, but won't affect | 4968 // Applying a DSF should change the render surface size, but won't affect |
| 4907 // which part of the mask is used. | 4969 // which part of the mask is used. |
| 4908 device_scale_factor = 2.f; | 4970 device_scale_factor = 2.f; |
| 4909 gfx::Size device_viewport = | 4971 gfx::Size device_viewport = |
| 4910 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 4972 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 4911 host_impl_->SetViewportSize(root_size, device_viewport); | 4973 host_impl_->SetViewportSize(root_size, device_viewport); |
| 4912 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 4974 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 4913 host_impl_->active_tree()->set_needs_update_draw_properties(); | 4975 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 4914 { | 4976 { |
| 4915 LayerTreeHostImpl::FrameData frame; | 4977 LayerTreeHostImpl::FrameData frame; |
| 4916 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 4978 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 4917 | 4979 |
| 4918 ASSERT_EQ(1u, frame.render_passes.size()); | 4980 ASSERT_EQ(1u, frame.render_passes.size()); |
| 4919 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4981 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4920 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4982 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4921 frame.render_passes[0]->quad_list[0]->material); | 4983 frame.render_passes[0]->quad_list[0]->material); |
| 4922 const RenderPassDrawQuad* render_pass_quad = | 4984 const RenderPassDrawQuad* render_pass_quad = |
| 4923 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4985 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4924 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 4986 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 4925 render_pass_quad->rect.ToString()); | 4987 render_pass_quad->rect.ToString()); |
| 4926 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4988 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| (...skipping 10 matching lines...) Expand all Loading... |
| 4937 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); | 4999 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); |
| 4938 content_layer->SetContentBounds(layer_size_large); | 5000 content_layer->SetContentBounds(layer_size_large); |
| 4939 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5001 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 4940 gfx::Size mask_size_large = | 5002 gfx::Size mask_size_large = |
| 4941 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); | 5003 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); |
| 4942 mask_layer->SetContentBounds(mask_size_large); | 5004 mask_layer->SetContentBounds(mask_size_large); |
| 4943 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5005 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 4944 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5006 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 4945 { | 5007 { |
| 4946 LayerTreeHostImpl::FrameData frame; | 5008 LayerTreeHostImpl::FrameData frame; |
| 4947 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 5009 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 4948 | 5010 |
| 4949 ASSERT_EQ(1u, frame.render_passes.size()); | 5011 ASSERT_EQ(1u, frame.render_passes.size()); |
| 4950 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5012 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4951 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5013 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4952 frame.render_passes[0]->quad_list[0]->material); | 5014 frame.render_passes[0]->quad_list[0]->material); |
| 4953 const RenderPassDrawQuad* render_pass_quad = | 5015 const RenderPassDrawQuad* render_pass_quad = |
| 4954 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5016 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4955 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5017 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 4956 render_pass_quad->rect.ToString()); | 5018 render_pass_quad->rect.ToString()); |
| 4957 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5019 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 4958 render_pass_quad->mask_uv_rect.ToString()); | 5020 render_pass_quad->mask_uv_rect.ToString()); |
| 4959 | 5021 |
| 4960 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 5022 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4961 host_impl_->DidDrawAllLayers(frame); | 5023 host_impl_->DidDrawAllLayers(frame); |
| 4962 } | 5024 } |
| 4963 | 5025 |
| 4964 // Applying a different contents scale to the mask layer will still result | 5026 // Applying a different contents scale to the mask layer will still result |
| 4965 // in the mask covering the owning layer. | 5027 // in the mask covering the owning layer. |
| 4966 mask_layer->SetContentBounds(mask_size); | 5028 mask_layer->SetContentBounds(mask_size); |
| 4967 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5029 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 4968 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5030 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 4969 { | 5031 { |
| 4970 LayerTreeHostImpl::FrameData frame; | 5032 LayerTreeHostImpl::FrameData frame; |
| 4971 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame)); | 5033 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
| 4972 | 5034 |
| 4973 ASSERT_EQ(1u, frame.render_passes.size()); | 5035 ASSERT_EQ(1u, frame.render_passes.size()); |
| 4974 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5036 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4975 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5037 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4976 frame.render_passes[0]->quad_list[0]->material); | 5038 frame.render_passes[0]->quad_list[0]->material); |
| 4977 const RenderPassDrawQuad* render_pass_quad = | 5039 const RenderPassDrawQuad* render_pass_quad = |
| 4978 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5040 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4979 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5041 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 4980 render_pass_quad->rect.ToString()); | 5042 render_pass_quad->rect.ToString()); |
| 4981 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5043 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 4982 render_pass_quad->mask_uv_rect.ToString()); | 5044 render_pass_quad->mask_uv_rect.ToString()); |
| 4983 | 5045 |
| 4984 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); | 5046 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); |
| 4985 host_impl_->DidDrawAllLayers(frame); | 5047 host_impl_->DidDrawAllLayers(frame); |
| 4986 } | 5048 } |
| 4987 } | 5049 } |
| 4988 | 5050 |
| 4989 } // namespace | 5051 } // namespace |
| 4990 } // namespace cc | 5052 } // namespace cc |
| OLD | NEW |