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/layers/layer_impl.h" | 5 #include "cc/layers/layer_impl.h" |
6 | 6 |
7 #include "cc/output/filter_operation.h" | 7 #include "cc/output/filter_operation.h" |
8 #include "cc/output/filter_operations.h" | 8 #include "cc/output/filter_operations.h" |
9 #include "cc/test/fake_impl_proxy.h" | 9 #include "cc/test/fake_impl_proxy.h" |
10 #include "cc/test/fake_layer_tree_host_impl.h" | 10 #include "cc/test/fake_layer_tree_host_impl.h" |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 250 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
251 root->SetClipParent(clip_parent.get())); | 251 root->SetClipParent(clip_parent.get())); |
252 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( | 252 EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE( |
253 root->SetClipChildren(clip_children)); | 253 root->SetClipChildren(clip_children)); |
254 } | 254 } |
255 | 255 |
256 TEST(LayerImplTest, VerifyNeedsUpdateDrawProperties) { | 256 TEST(LayerImplTest, VerifyNeedsUpdateDrawProperties) { |
257 FakeImplProxy proxy; | 257 FakeImplProxy proxy; |
258 FakeLayerTreeHostImpl host_impl(&proxy); | 258 FakeLayerTreeHostImpl host_impl(&proxy); |
259 EXPECT_TRUE(host_impl.InitializeRenderer(CreateFakeOutputSurface())); | 259 EXPECT_TRUE(host_impl.InitializeRenderer(CreateFakeOutputSurface())); |
260 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.active_tree(), 1); | 260 host_impl.active_tree()->SetRootLayer( |
261 root->SetScrollable(true); | 261 LayerImpl::Create(host_impl.active_tree(), 1)); |
| 262 LayerImpl* root = host_impl.active_tree()->root_layer(); |
| 263 scoped_ptr<LayerImpl> layer_ptr = |
| 264 LayerImpl::Create(host_impl.active_tree(), 2); |
| 265 LayerImpl* layer = layer_ptr.get(); |
| 266 root->AddChild(layer_ptr.Pass()); |
| 267 layer->SetScrollable(true); |
| 268 DCHECK(host_impl.CanDraw()); |
262 | 269 |
263 gfx::PointF arbitrary_point_f = gfx::PointF(0.125f, 0.25f); | 270 gfx::PointF arbitrary_point_f = gfx::PointF(0.125f, 0.25f); |
264 float arbitrary_number = 0.352f; | 271 float arbitrary_number = 0.352f; |
265 gfx::Size arbitrary_size = gfx::Size(111, 222); | 272 gfx::Size arbitrary_size = gfx::Size(111, 222); |
266 gfx::Point arbitrary_point = gfx::Point(333, 444); | 273 gfx::Point arbitrary_point = gfx::Point(333, 444); |
267 gfx::Vector2d arbitrary_vector2d = gfx::Vector2d(111, 222); | 274 gfx::Vector2d arbitrary_vector2d = gfx::Vector2d(111, 222); |
268 gfx::Vector2d large_vector2d = gfx::Vector2d(1000, 1000); | 275 gfx::Vector2d large_vector2d = gfx::Vector2d(1000, 1000); |
269 gfx::Rect arbitrary_rect = gfx::Rect(arbitrary_point, arbitrary_size); | 276 gfx::Rect arbitrary_rect = gfx::Rect(arbitrary_point, arbitrary_size); |
270 gfx::RectF arbitrary_rect_f = | 277 gfx::RectF arbitrary_rect_f = |
271 gfx::RectF(arbitrary_point_f, gfx::SizeF(1.234f, 5.678f)); | 278 gfx::RectF(arbitrary_point_f, gfx::SizeF(1.234f, 5.678f)); |
272 SkColor arbitrary_color = SkColorSetRGB(10, 20, 30); | 279 SkColor arbitrary_color = SkColorSetRGB(10, 20, 30); |
273 gfx::Transform arbitrary_transform; | 280 gfx::Transform arbitrary_transform; |
274 arbitrary_transform.Scale3d(0.1f, 0.2f, 0.3f); | 281 arbitrary_transform.Scale3d(0.1f, 0.2f, 0.3f); |
275 FilterOperations arbitrary_filters; | 282 FilterOperations arbitrary_filters; |
276 arbitrary_filters.Append(FilterOperation::CreateOpacityFilter(0.5f)); | 283 arbitrary_filters.Append(FilterOperation::CreateOpacityFilter(0.5f)); |
277 SkXfermode::Mode arbitrary_blend_mode = SkXfermode::kMultiply_Mode; | 284 SkXfermode::Mode arbitrary_blend_mode = SkXfermode::kMultiply_Mode; |
278 | 285 |
279 // Related filter functions. | 286 // Related filter functions. |
280 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetFilters(arbitrary_filters)); | 287 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetFilters(arbitrary_filters)); |
281 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetFilters(arbitrary_filters)); | 288 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetFilters(arbitrary_filters)); |
282 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetFilters(FilterOperations())); | 289 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetFilters(FilterOperations())); |
283 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetFilters(arbitrary_filters)); | 290 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetFilters(arbitrary_filters)); |
284 | 291 |
285 // Related scrolling functions. | 292 // Related scrolling functions. |
286 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetMaxScrollOffset(large_vector2d)); | 293 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 294 layer->SetMaxScrollOffset(large_vector2d)); |
287 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 295 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
288 root->SetMaxScrollOffset(large_vector2d)); | 296 layer->SetMaxScrollOffset(large_vector2d)); |
289 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->ScrollBy(arbitrary_vector2d)); | 297 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(arbitrary_vector2d)); |
290 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->ScrollBy(gfx::Vector2d())); | 298 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->ScrollBy(gfx::Vector2d())); |
291 root->SetScrollDelta(gfx::Vector2d(0, 0)); | 299 layer->SetScrollDelta(gfx::Vector2d(0, 0)); |
292 host_impl.ForcePrepareToDraw(); | 300 host_impl.ForcePrepareToDraw(); |
293 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetScrollDelta(arbitrary_vector2d)); | 301 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 302 layer->SetScrollDelta(arbitrary_vector2d)); |
294 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 303 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
295 root->SetScrollDelta(arbitrary_vector2d)); | 304 layer->SetScrollDelta(arbitrary_vector2d)); |
296 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 305 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
297 root->SetScrollOffset(arbitrary_vector2d)); | 306 layer->SetScrollOffset(arbitrary_vector2d)); |
298 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 307 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
299 root->SetScrollOffset(arbitrary_vector2d)); | 308 layer->SetScrollOffset(arbitrary_vector2d)); |
300 | 309 |
301 // Unrelated functions, always set to new values, always set needs update. | 310 // Unrelated functions, always set to new values, always set needs update. |
302 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetAnchorPointZ(arbitrary_number)); | 311 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetAnchorPointZ(arbitrary_number)); |
303 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 312 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
304 root->SetMaskLayer(LayerImpl::Create(host_impl.active_tree(), 4))); | 313 layer->SetMaskLayer(LayerImpl::Create(host_impl.active_tree(), 4))); |
305 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetMasksToBounds(true)); | 314 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetMasksToBounds(true)); |
306 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetContentsOpaque(true)); | 315 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetContentsOpaque(true)); |
307 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 316 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
308 root->SetReplicaLayer(LayerImpl::Create(host_impl.active_tree(), 5))); | 317 layer->SetReplicaLayer(LayerImpl::Create(host_impl.active_tree(), 5))); |
309 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetPosition(arbitrary_point_f)); | 318 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetPosition(arbitrary_point_f)); |
310 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetPreserves3d(true)); | 319 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetPreserves3d(true)); |
311 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 320 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
312 root->SetDoubleSided(false)); // constructor initializes it to "true". | 321 layer->SetDoubleSided(false)); // constructor initializes it to "true". |
313 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetContentBounds(arbitrary_size)); | 322 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetContentBounds(arbitrary_size)); |
314 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 323 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
315 root->SetContentsScale(arbitrary_number, arbitrary_number)); | 324 layer->SetContentsScale(arbitrary_number, arbitrary_number)); |
316 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetDrawsContent(true)); | 325 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetDrawsContent(true)); |
317 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 326 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
318 root->SetBackgroundColor(arbitrary_color)); | 327 layer->SetBackgroundColor(arbitrary_color)); |
319 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 328 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
320 root->SetBackgroundFilters(arbitrary_filters)); | 329 layer->SetBackgroundFilters(arbitrary_filters)); |
321 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetOpacity(arbitrary_number)); | 330 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetOpacity(arbitrary_number)); |
322 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetBlendMode(arbitrary_blend_mode)); | |
323 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetTransform(arbitrary_transform)); | |
324 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( | 331 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
325 root->SetSublayerTransform(arbitrary_transform)); | 332 layer->SetBlendMode(arbitrary_blend_mode)); |
326 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetBounds(arbitrary_size)); | 333 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetTransform(arbitrary_transform)); |
| 334 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 335 layer->SetSublayerTransform(arbitrary_transform)); |
| 336 VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(arbitrary_size)); |
327 | 337 |
328 // Unrelated functions, set to the same values, no needs update. | 338 // Unrelated functions, set to the same values, no needs update. |
329 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 339 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
330 root->SetAnchorPointZ(arbitrary_number)); | 340 layer->SetAnchorPointZ(arbitrary_number)); |
331 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetIsRootForIsolatedGroup(true)); | |
332 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetFilters(arbitrary_filters)); | |
333 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetMasksToBounds(true)); | |
334 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetContentsOpaque(true)); | |
335 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetPosition(arbitrary_point_f)); | |
336 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetPreserves3d(true)); | |
337 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 341 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
338 root->SetDoubleSided(false)); // constructor initializes it to "true". | 342 layer->SetIsRootForIsolatedGroup(true)); |
| 343 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetFilters(arbitrary_filters)); |
| 344 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetMasksToBounds(true)); |
| 345 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetContentsOpaque(true)); |
| 346 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetPosition(arbitrary_point_f)); |
| 347 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetPreserves3d(true)); |
339 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 348 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
340 root->SetContentBounds(arbitrary_size)); | 349 layer->SetDoubleSided(false)); // constructor initializes it to "true". |
341 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 350 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
342 root->SetContentsScale(arbitrary_number, arbitrary_number)); | 351 layer->SetContentBounds(arbitrary_size)); |
343 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetDrawsContent(true)); | |
344 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 352 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
345 root->SetBackgroundColor(arbitrary_color)); | 353 layer->SetContentsScale(arbitrary_number, arbitrary_number)); |
| 354 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetDrawsContent(true)); |
346 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 355 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
347 root->SetBackgroundFilters(arbitrary_filters)); | 356 layer->SetBackgroundColor(arbitrary_color)); |
348 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetOpacity(arbitrary_number)); | |
349 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 357 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
350 root->SetBlendMode(arbitrary_blend_mode)); | 358 layer->SetBackgroundFilters(arbitrary_filters)); |
351 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetIsRootForIsolatedGroup(true)); | 359 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetOpacity(arbitrary_number)); |
352 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 360 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
353 root->SetTransform(arbitrary_transform)); | 361 layer->SetBlendMode(arbitrary_blend_mode)); |
354 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( | 362 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
355 root->SetSublayerTransform(arbitrary_transform)); | 363 layer->SetIsRootForIsolatedGroup(true)); |
356 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(root->SetBounds(arbitrary_size)); | 364 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 365 layer->SetTransform(arbitrary_transform)); |
| 366 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES( |
| 367 layer->SetSublayerTransform(arbitrary_transform)); |
| 368 VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->SetBounds(arbitrary_size)); |
357 } | 369 } |
358 | 370 |
359 TEST(LayerImplTest, SafeOpaqueBackgroundColor) { | 371 TEST(LayerImplTest, SafeOpaqueBackgroundColor) { |
360 FakeImplProxy proxy; | 372 FakeImplProxy proxy; |
361 FakeLayerTreeHostImpl host_impl(&proxy); | 373 FakeLayerTreeHostImpl host_impl(&proxy); |
362 EXPECT_TRUE(host_impl.InitializeRenderer(CreateFakeOutputSurface())); | 374 EXPECT_TRUE(host_impl.InitializeRenderer(CreateFakeOutputSurface())); |
363 scoped_ptr<LayerImpl> layer = LayerImpl::Create(host_impl.active_tree(), 1); | 375 scoped_ptr<LayerImpl> layer = LayerImpl::Create(host_impl.active_tree(), 1); |
364 | 376 |
365 for (int contents_opaque = 0; contents_opaque < 2; ++contents_opaque) { | 377 for (int contents_opaque = 0; contents_opaque < 2; ++contents_opaque) { |
366 for (int layer_opaque = 0; layer_opaque < 2; ++layer_opaque) { | 378 for (int layer_opaque = 0; layer_opaque < 2; ++layer_opaque) { |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 layer()->SetMaxScrollOffset(max_scroll_offset); | 653 layer()->SetMaxScrollOffset(max_scroll_offset); |
642 layer()->SetScrollOffset(scroll_offset); | 654 layer()->SetScrollOffset(scroll_offset); |
643 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); | 655 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); |
644 | 656 |
645 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled); | 657 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled); |
646 EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->TotalScrollOffset()); | 658 EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->TotalScrollOffset()); |
647 } | 659 } |
648 | 660 |
649 } // namespace | 661 } // namespace |
650 } // namespace cc | 662 } // namespace cc |
OLD | NEW |