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