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/tiled_layer.h" | 5 #include "cc/layers/tiled_layer.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 params.main_task_runner = base::ThreadTaskRunnerHandle::Get(); | 101 params.main_task_runner = base::ThreadTaskRunnerHandle::Get(); |
102 | 102 |
103 layer_tree_host_ = | 103 layer_tree_host_ = |
104 LayerTreeHost::CreateThreaded(impl_thread_.task_runner(), ¶ms); | 104 LayerTreeHost::CreateThreaded(impl_thread_.task_runner(), ¶ms); |
105 synchronous_output_surface_client_.SetLayerTreeHost(layer_tree_host_.get()); | 105 synchronous_output_surface_client_.SetLayerTreeHost(layer_tree_host_.get()); |
106 proxy_ = layer_tree_host_->proxy(); | 106 proxy_ = layer_tree_host_->proxy(); |
107 resource_manager_ = PrioritizedResourceManager::Create(proxy_); | 107 resource_manager_ = PrioritizedResourceManager::Create(proxy_); |
108 layer_tree_host_->SetLayerTreeHostClientReady(); | 108 layer_tree_host_->SetLayerTreeHostClientReady(); |
109 CHECK(synchronous_output_surface_client_.EnsureOutputSurfaceCreated()); | 109 CHECK(synchronous_output_surface_client_.EnsureOutputSurfaceCreated()); |
110 | 110 |
111 layer_tree_host_->SetRootLayer(Layer::Create()); | 111 layer_tree_host_->SetRootLayer(Layer::Create(layer_settings_)); |
112 | 112 |
113 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 113 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
114 | 114 |
115 DebugScopedSetImplThreadAndMainThreadBlocked | 115 DebugScopedSetImplThreadAndMainThreadBlocked |
116 impl_thread_and_main_thread_blocked(proxy_); | 116 impl_thread_and_main_thread_blocked(proxy_); |
117 resource_provider_ = ResourceProvider::Create(output_surface_.get(), | 117 resource_provider_ = ResourceProvider::Create(output_surface_.get(), |
118 shared_bitmap_manager_.get(), | 118 shared_bitmap_manager_.get(), |
119 nullptr, | 119 nullptr, |
120 nullptr, | 120 nullptr, |
121 0, | 121 0, |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 LayerPushPropertiesTo(layer1.get(), layer_impl1.get()); | 232 LayerPushPropertiesTo(layer1.get(), layer_impl1.get()); |
233 if (layer2.get()) | 233 if (layer2.get()) |
234 LayerPushPropertiesTo(layer2.get(), layer_impl2.get()); | 234 LayerPushPropertiesTo(layer2.get(), layer_impl2.get()); |
235 | 235 |
236 return needs_update; | 236 return needs_update; |
237 } | 237 } |
238 | 238 |
239 public: | 239 public: |
240 Proxy* proxy_; | 240 Proxy* proxy_; |
241 LayerTreeSettings settings_; | 241 LayerTreeSettings settings_; |
| 242 LayerSettings layer_settings_; |
242 FakeOutputSurfaceClient output_surface_client_; | 243 FakeOutputSurfaceClient output_surface_client_; |
243 scoped_ptr<OutputSurface> output_surface_; | 244 scoped_ptr<OutputSurface> output_surface_; |
244 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; | 245 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; |
245 scoped_ptr<ResourceProvider> resource_provider_; | 246 scoped_ptr<ResourceProvider> resource_provider_; |
246 scoped_ptr<ResourceUpdateQueue> queue_; | 247 scoped_ptr<ResourceUpdateQueue> queue_; |
247 PriorityCalculator priority_calculator_; | 248 PriorityCalculator priority_calculator_; |
248 base::Thread impl_thread_; | 249 base::Thread impl_thread_; |
249 SynchronousOutputSurfaceClient synchronous_output_surface_client_; | 250 SynchronousOutputSurfaceClient synchronous_output_surface_client_; |
250 scoped_ptr<LayerTreeHost> layer_tree_host_; | 251 scoped_ptr<LayerTreeHost> layer_tree_host_; |
251 scoped_ptr<FakeLayerTreeHostImpl> host_impl_; | 252 scoped_ptr<FakeLayerTreeHostImpl> host_impl_; |
252 scoped_ptr<PrioritizedResourceManager> resource_manager_; | 253 scoped_ptr<PrioritizedResourceManager> resource_manager_; |
253 TestOcclusionTracker* occlusion_; | 254 TestOcclusionTracker* occlusion_; |
254 }; | 255 }; |
255 | 256 |
256 TEST_F(TiledLayerTest, PushDirtyTiles) { | 257 TEST_F(TiledLayerTest, PushDirtyTiles) { |
257 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); | 258 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); |
258 | 259 |
259 scoped_refptr<FakeTiledLayer> layer = | 260 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
260 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 261 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
261 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 262 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
262 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 263 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
263 RenderSurfaceLayerList render_surface_layer_list; | 264 RenderSurfaceLayerList render_surface_layer_list; |
264 | 265 |
265 layer_tree_host_->root_layer()->AddChild(layer); | 266 layer_tree_host_->root_layer()->AddChild(layer); |
266 | 267 |
267 // The tile size is 100x100, so this invalidates and then paints two tiles. | 268 // The tile size is 100x100, so this invalidates and then paints two tiles. |
268 layer->SetBounds(gfx::Size(100, 200)); | 269 layer->SetBounds(gfx::Size(100, 200)); |
269 CalcDrawProps(&render_surface_layer_list); | 270 CalcDrawProps(&render_surface_layer_list); |
270 UpdateAndPush(layer, layer_impl); | 271 UpdateAndPush(layer, layer_impl); |
(...skipping 11 matching lines...) Expand all Loading... |
282 // not painted. | 283 // not painted. |
283 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); | 284 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); |
284 EXPECT_FALSE(layer_impl->HasResourceIdForTileAt(0, 1)); | 285 EXPECT_FALSE(layer_impl->HasResourceIdForTileAt(0, 1)); |
285 } | 286 } |
286 | 287 |
287 TEST_F(TiledLayerTest, Scale) { | 288 TEST_F(TiledLayerTest, Scale) { |
288 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); | 289 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); |
289 | 290 |
290 layer_tree_host_->SetDeviceScaleFactor(1.5); | 291 layer_tree_host_->SetDeviceScaleFactor(1.5); |
291 | 292 |
292 scoped_refptr<FakeTiledLayer> layer = | 293 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
293 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 294 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
294 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 295 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
295 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 296 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
296 RenderSurfaceLayerList render_surface_layer_list; | 297 RenderSurfaceLayerList render_surface_layer_list; |
297 | 298 |
298 layer_tree_host_->root_layer()->AddChild(layer); | 299 layer_tree_host_->root_layer()->AddChild(layer); |
299 | 300 |
300 layer->SetBounds(gfx::Size(100, 200)); | 301 layer->SetBounds(gfx::Size(100, 200)); |
301 CalcDrawProps(&render_surface_layer_list); | 302 CalcDrawProps(&render_surface_layer_list); |
302 | 303 |
303 // Change the width so that it doesn't divide cleanly by the scale. | 304 // Change the width so that it doesn't divide cleanly by the scale. |
304 layer->SetBounds(gfx::Size(101, 200)); | 305 layer->SetBounds(gfx::Size(101, 200)); |
305 UpdateAndPush(layer, layer_impl); | 306 UpdateAndPush(layer, layer_impl); |
306 | 307 |
307 EXPECT_EQ(1.5, layer->fake_layer_updater()->last_contents_width_scale()); | 308 EXPECT_EQ(1.5, layer->fake_layer_updater()->last_contents_width_scale()); |
308 } | 309 } |
309 | 310 |
310 TEST_F(TiledLayerTest, PushOccludedDirtyTiles) { | 311 TEST_F(TiledLayerTest, PushOccludedDirtyTiles) { |
311 scoped_refptr<FakeTiledLayer> layer = | 312 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
312 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 313 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
313 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 314 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
314 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 315 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
315 TestOcclusionTracker occluded; | 316 TestOcclusionTracker occluded; |
316 occlusion_ = &occluded; | 317 occlusion_ = &occluded; |
317 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); | 318 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); |
318 | 319 |
319 layer_tree_host_->root_layer()->AddChild(layer); | 320 layer_tree_host_->root_layer()->AddChild(layer); |
320 | 321 |
321 { | 322 { |
322 RenderSurfaceLayerList render_surface_layer_list; | 323 RenderSurfaceLayerList render_surface_layer_list; |
(...skipping 21 matching lines...) Expand all Loading... |
344 // We should still have both tiles, as part of the top tile is still | 345 // We should still have both tiles, as part of the top tile is still |
345 // unoccluded. | 346 // unoccluded. |
346 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); | 347 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); |
347 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1)); | 348 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1)); |
348 } | 349 } |
349 } | 350 } |
350 | 351 |
351 TEST_F(TiledLayerTest, PushDeletedTiles) { | 352 TEST_F(TiledLayerTest, PushDeletedTiles) { |
352 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); | 353 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); |
353 | 354 |
354 scoped_refptr<FakeTiledLayer> layer = | 355 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
355 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 356 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
356 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 357 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
357 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 358 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
358 RenderSurfaceLayerList render_surface_layer_list; | 359 RenderSurfaceLayerList render_surface_layer_list; |
359 | 360 |
360 layer_tree_host_->root_layer()->AddChild(layer); | 361 layer_tree_host_->root_layer()->AddChild(layer); |
361 | 362 |
362 // The tile size is 100x100, so this invalidates and then paints two tiles. | 363 // The tile size is 100x100, so this invalidates and then paints two tiles. |
363 layer->SetBounds(gfx::Size(100, 200)); | 364 layer->SetBounds(gfx::Size(100, 200)); |
364 CalcDrawProps(&render_surface_layer_list); | 365 CalcDrawProps(&render_surface_layer_list); |
365 UpdateAndPush(layer, layer_impl); | 366 UpdateAndPush(layer, layer_impl); |
(...skipping 17 matching lines...) Expand all Loading... |
383 // This should recreate and update one of the deleted textures. | 384 // This should recreate and update one of the deleted textures. |
384 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 385 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
385 UpdateAndPush(layer, layer_impl); | 386 UpdateAndPush(layer, layer_impl); |
386 | 387 |
387 // We should have one tiles on the impl side. | 388 // We should have one tiles on the impl side. |
388 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); | 389 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); |
389 EXPECT_FALSE(layer_impl->HasResourceIdForTileAt(0, 1)); | 390 EXPECT_FALSE(layer_impl->HasResourceIdForTileAt(0, 1)); |
390 } | 391 } |
391 | 392 |
392 TEST_F(TiledLayerTest, PushIdlePaintTiles) { | 393 TEST_F(TiledLayerTest, PushIdlePaintTiles) { |
393 scoped_refptr<FakeTiledLayer> layer = | 394 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
394 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 395 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
395 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 396 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
396 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 397 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
397 RenderSurfaceLayerList render_surface_layer_list; | 398 RenderSurfaceLayerList render_surface_layer_list; |
398 | 399 |
399 layer_tree_host_->root_layer()->AddChild(layer); | 400 layer_tree_host_->root_layer()->AddChild(layer); |
400 | 401 |
401 // The tile size is 100x100. Setup 5x5 tiles with one visible tile in the | 402 // The tile size is 100x100. Setup 5x5 tiles with one visible tile in the |
402 // center. This paints 1 visible of the 25 invalid tiles. | 403 // center. This paints 1 visible of the 25 invalid tiles. |
403 layer->SetBounds(gfx::Size(500, 500)); | 404 layer->SetBounds(gfx::Size(500, 500)); |
404 CalcDrawProps(&render_surface_layer_list); | 405 CalcDrawProps(&render_surface_layer_list); |
(...skipping 18 matching lines...) Expand all Loading... |
423 // We should have pre-painted all of the surrounding tiles. | 424 // We should have pre-painted all of the surrounding tiles. |
424 for (int i = 0; i < 5; i++) { | 425 for (int i = 0; i < 5; i++) { |
425 for (int j = 0; j < 5; j++) | 426 for (int j = 0; j < 5; j++) |
426 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(i, j)); | 427 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(i, j)); |
427 } | 428 } |
428 | 429 |
429 EXPECT_FALSE(needs_update); | 430 EXPECT_FALSE(needs_update); |
430 } | 431 } |
431 | 432 |
432 TEST_F(TiledLayerTest, PredictivePainting) { | 433 TEST_F(TiledLayerTest, PredictivePainting) { |
433 scoped_refptr<FakeTiledLayer> layer = | 434 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
434 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 435 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
435 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 436 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
436 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 437 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
437 | 438 |
438 layer_tree_host_->root_layer()->AddChild(layer); | 439 layer_tree_host_->root_layer()->AddChild(layer); |
439 | 440 |
440 // Prepainting should occur in the scroll direction first, and the | 441 // Prepainting should occur in the scroll direction first, and the |
441 // visible rect should be extruded only along the dominant axis. | 442 // visible rect should be extruded only along the dominant axis. |
442 gfx::Vector2d directions[6] = { gfx::Vector2d(-10, 0), gfx::Vector2d(10, 0), | 443 gfx::Vector2d directions[6] = { gfx::Vector2d(-10, 0), gfx::Vector2d(10, 0), |
443 gfx::Vector2d(0, -10), gfx::Vector2d(0, 10), | 444 gfx::Vector2d(0, -10), gfx::Vector2d(0, 10), |
444 gfx::Vector2d(10, 20), | 445 gfx::Vector2d(10, 20), |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 for (int i = 0; i < 20; i++) | 503 for (int i = 0; i < 20; i++) |
503 needs_update = UpdateAndPush(layer, layer_impl); | 504 needs_update = UpdateAndPush(layer, layer_impl); |
504 EXPECT_FALSE(needs_update); | 505 EXPECT_FALSE(needs_update); |
505 } | 506 } |
506 } | 507 } |
507 | 508 |
508 TEST_F(TiledLayerTest, PushTilesAfterIdlePaintFailed) { | 509 TEST_F(TiledLayerTest, PushTilesAfterIdlePaintFailed) { |
509 // Start with 2mb of memory, but the test is going to try to use just more | 510 // Start with 2mb of memory, but the test is going to try to use just more |
510 // than 1mb, so we reduce to 1mb later. | 511 // than 1mb, so we reduce to 1mb later. |
511 resource_manager_->SetMaxMemoryLimitBytes(2 * 1024 * 1024); | 512 resource_manager_->SetMaxMemoryLimitBytes(2 * 1024 * 1024); |
512 scoped_refptr<FakeTiledLayer> layer1 = | 513 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr( |
513 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 514 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
514 scoped_ptr<FakeTiledLayerImpl> layer_impl1 = | 515 scoped_ptr<FakeTiledLayerImpl> layer_impl1 = |
515 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 516 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
516 scoped_refptr<FakeTiledLayer> layer2 = | 517 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr( |
517 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 518 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
518 scoped_ptr<FakeTiledLayerImpl> layer_impl2 = | 519 scoped_ptr<FakeTiledLayerImpl> layer_impl2 = |
519 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 2)); | 520 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 2)); |
520 RenderSurfaceLayerList render_surface_layer_list; | 521 RenderSurfaceLayerList render_surface_layer_list; |
521 | 522 |
522 layer_tree_host_->root_layer()->AddChild(layer1); | 523 layer_tree_host_->root_layer()->AddChild(layer1); |
523 layer_tree_host_->root_layer()->AddChild(layer2); | 524 layer_tree_host_->root_layer()->AddChild(layer2); |
524 | 525 |
525 // For this test we have two layers. layer1 exhausts most texture memory, | 526 // For this test we have two layers. layer1 exhausts most texture memory, |
526 // leaving room for 2 more tiles from layer2, but not all three tiles. First | 527 // leaving room for 2 more tiles from layer2, but not all three tiles. First |
527 // we paint layer1, and one tile from layer2. Then when we idle paint layer2, | 528 // we paint layer1, and one tile from layer2. Then when we idle paint layer2, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 EXPECT_TRUE(layer_impl2->HasResourceIdForTileAt(0, 0)); | 564 EXPECT_TRUE(layer_impl2->HasResourceIdForTileAt(0, 0)); |
564 EXPECT_TRUE(layer_impl2->HasResourceIdForTileAt(0, 0)); | 565 EXPECT_TRUE(layer_impl2->HasResourceIdForTileAt(0, 0)); |
565 EXPECT_TRUE(layer_impl2->HasResourceIdForTileAt(0, 1)); | 566 EXPECT_TRUE(layer_impl2->HasResourceIdForTileAt(0, 1)); |
566 EXPECT_TRUE(layer_impl2->HasResourceIdForTileAt(0, 1)); | 567 EXPECT_TRUE(layer_impl2->HasResourceIdForTileAt(0, 1)); |
567 | 568 |
568 EXPECT_FALSE(needs_update); | 569 EXPECT_FALSE(needs_update); |
569 EXPECT_FALSE(layer_impl2->HasResourceIdForTileAt(0, 2)); | 570 EXPECT_FALSE(layer_impl2->HasResourceIdForTileAt(0, 2)); |
570 } | 571 } |
571 | 572 |
572 TEST_F(TiledLayerTest, PushIdlePaintedOccludedTiles) { | 573 TEST_F(TiledLayerTest, PushIdlePaintedOccludedTiles) { |
573 scoped_refptr<FakeTiledLayer> layer = | 574 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
574 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 575 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
575 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 576 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
576 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 577 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
577 RenderSurfaceLayerList render_surface_layer_list; | 578 RenderSurfaceLayerList render_surface_layer_list; |
578 TestOcclusionTracker occluded; | 579 TestOcclusionTracker occluded; |
579 occlusion_ = &occluded; | 580 occlusion_ = &occluded; |
580 | 581 |
581 layer_tree_host_->root_layer()->AddChild(layer); | 582 layer_tree_host_->root_layer()->AddChild(layer); |
582 | 583 |
583 // The tile size is 100x100, so this invalidates one occluded tile, culls it | 584 // The tile size is 100x100, so this invalidates one occluded tile, culls it |
584 // during paint, but prepaints it. | 585 // during paint, but prepaints it. |
585 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(0, 0, 100, 100))); | 586 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(0, 0, 100, 100))); |
586 | 587 |
587 layer->SetBounds(gfx::Size(100, 100)); | 588 layer->SetBounds(gfx::Size(100, 100)); |
588 CalcDrawProps(&render_surface_layer_list); | 589 CalcDrawProps(&render_surface_layer_list); |
589 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 590 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
590 UpdateAndPush(layer, layer_impl); | 591 UpdateAndPush(layer, layer_impl); |
591 | 592 |
592 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); | 593 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); |
593 } | 594 } |
594 | 595 |
595 TEST_F(TiledLayerTest, PushTilesMarkedDirtyDuringPaint) { | 596 TEST_F(TiledLayerTest, PushTilesMarkedDirtyDuringPaint) { |
596 scoped_refptr<FakeTiledLayer> layer = | 597 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
597 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 598 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
598 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 599 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
599 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 600 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
600 RenderSurfaceLayerList render_surface_layer_list; | 601 RenderSurfaceLayerList render_surface_layer_list; |
601 | 602 |
602 layer_tree_host_->root_layer()->AddChild(layer); | 603 layer_tree_host_->root_layer()->AddChild(layer); |
603 | 604 |
604 // The tile size is 100x100, so this invalidates and then paints two tiles. | 605 // The tile size is 100x100, so this invalidates and then paints two tiles. |
605 // However, during the paint, we invalidate one of the tiles. This should | 606 // However, during the paint, we invalidate one of the tiles. This should |
606 // not prevent the tile from being pushed. | 607 // not prevent the tile from being pushed. |
607 layer->fake_layer_updater()->SetRectToInvalidate( | 608 layer->fake_layer_updater()->SetRectToInvalidate( |
608 gfx::Rect(0, 50, 100, 50), layer.get()); | 609 gfx::Rect(0, 50, 100, 50), layer.get()); |
609 layer->SetBounds(gfx::Size(100, 200)); | 610 layer->SetBounds(gfx::Size(100, 200)); |
610 CalcDrawProps(&render_surface_layer_list); | 611 CalcDrawProps(&render_surface_layer_list); |
611 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 612 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
612 UpdateAndPush(layer, layer_impl); | 613 UpdateAndPush(layer, layer_impl); |
613 | 614 |
614 // We should have both tiles on the impl side. | 615 // We should have both tiles on the impl side. |
615 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); | 616 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); |
616 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1)); | 617 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1)); |
617 } | 618 } |
618 | 619 |
619 TEST_F(TiledLayerTest, PushTilesLayerMarkedDirtyDuringPaintOnNextLayer) { | 620 TEST_F(TiledLayerTest, PushTilesLayerMarkedDirtyDuringPaintOnNextLayer) { |
620 scoped_refptr<FakeTiledLayer> layer1 = | 621 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr( |
621 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 622 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
622 scoped_refptr<FakeTiledLayer> layer2 = | 623 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr( |
623 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 624 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
624 scoped_ptr<FakeTiledLayerImpl> layer1_impl = | 625 scoped_ptr<FakeTiledLayerImpl> layer1_impl = |
625 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 626 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
626 scoped_ptr<FakeTiledLayerImpl> layer2_impl = | 627 scoped_ptr<FakeTiledLayerImpl> layer2_impl = |
627 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 2)); | 628 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 2)); |
628 RenderSurfaceLayerList render_surface_layer_list; | 629 RenderSurfaceLayerList render_surface_layer_list; |
629 | 630 |
630 layer_tree_host_->root_layer()->AddChild(layer1); | 631 layer_tree_host_->root_layer()->AddChild(layer1); |
631 layer_tree_host_->root_layer()->AddChild(layer2); | 632 layer_tree_host_->root_layer()->AddChild(layer2); |
632 | 633 |
633 // Invalidate a tile on layer1, during update of layer 2. | 634 // Invalidate a tile on layer1, during update of layer 2. |
634 layer2->fake_layer_updater()->SetRectToInvalidate( | 635 layer2->fake_layer_updater()->SetRectToInvalidate( |
635 gfx::Rect(0, 50, 100, 50), layer1.get()); | 636 gfx::Rect(0, 50, 100, 50), layer1.get()); |
636 layer1->SetBounds(gfx::Size(100, 200)); | 637 layer1->SetBounds(gfx::Size(100, 200)); |
637 layer2->SetBounds(gfx::Size(100, 200)); | 638 layer2->SetBounds(gfx::Size(100, 200)); |
638 CalcDrawProps(&render_surface_layer_list); | 639 CalcDrawProps(&render_surface_layer_list); |
639 layer1->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 640 layer1->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
640 layer2->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 641 layer2->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
641 UpdateAndPush(layer1, layer1_impl, layer2, layer2_impl); | 642 UpdateAndPush(layer1, layer1_impl, layer2, layer2_impl); |
642 | 643 |
643 // We should have both tiles on the impl side for all layers. | 644 // We should have both tiles on the impl side for all layers. |
644 EXPECT_TRUE(layer1_impl->HasResourceIdForTileAt(0, 0)); | 645 EXPECT_TRUE(layer1_impl->HasResourceIdForTileAt(0, 0)); |
645 EXPECT_TRUE(layer1_impl->HasResourceIdForTileAt(0, 1)); | 646 EXPECT_TRUE(layer1_impl->HasResourceIdForTileAt(0, 1)); |
646 EXPECT_TRUE(layer2_impl->HasResourceIdForTileAt(0, 0)); | 647 EXPECT_TRUE(layer2_impl->HasResourceIdForTileAt(0, 0)); |
647 EXPECT_TRUE(layer2_impl->HasResourceIdForTileAt(0, 1)); | 648 EXPECT_TRUE(layer2_impl->HasResourceIdForTileAt(0, 1)); |
648 } | 649 } |
649 | 650 |
650 TEST_F(TiledLayerTest, PushTilesLayerMarkedDirtyDuringPaintOnPreviousLayer) { | 651 TEST_F(TiledLayerTest, PushTilesLayerMarkedDirtyDuringPaintOnPreviousLayer) { |
651 scoped_refptr<FakeTiledLayer> layer1 = | 652 scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr( |
652 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 653 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
653 scoped_refptr<FakeTiledLayer> layer2 = | 654 scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr( |
654 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 655 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
655 scoped_ptr<FakeTiledLayerImpl> layer1_impl = | 656 scoped_ptr<FakeTiledLayerImpl> layer1_impl = |
656 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 657 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
657 scoped_ptr<FakeTiledLayerImpl> layer2_impl = | 658 scoped_ptr<FakeTiledLayerImpl> layer2_impl = |
658 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 2)); | 659 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 2)); |
659 RenderSurfaceLayerList render_surface_layer_list; | 660 RenderSurfaceLayerList render_surface_layer_list; |
660 | 661 |
661 layer_tree_host_->root_layer()->AddChild(layer1); | 662 layer_tree_host_->root_layer()->AddChild(layer1); |
662 layer_tree_host_->root_layer()->AddChild(layer2); | 663 layer_tree_host_->root_layer()->AddChild(layer2); |
663 | 664 |
664 layer1->fake_layer_updater()->SetRectToInvalidate( | 665 layer1->fake_layer_updater()->SetRectToInvalidate( |
(...skipping 25 matching lines...) Expand all Loading... |
690 int memory_for_layer = layer_width * layer_height * 4; | 691 int memory_for_layer = layer_width * layer_height * 4; |
691 layer_tree_host_->SetViewportSize( | 692 layer_tree_host_->SetViewportSize( |
692 gfx::Size(viewport_width, viewport_height)); | 693 gfx::Size(viewport_width, viewport_height)); |
693 | 694 |
694 // Use 10x5 tiles to run out of memory. | 695 // Use 10x5 tiles to run out of memory. |
695 if (run_out_of_memory[i]) | 696 if (run_out_of_memory[i]) |
696 layer_width *= 2; | 697 layer_width *= 2; |
697 | 698 |
698 resource_manager_->SetMaxMemoryLimitBytes(memory_for_layer); | 699 resource_manager_->SetMaxMemoryLimitBytes(memory_for_layer); |
699 | 700 |
700 scoped_refptr<FakeTiledLayer> layer = | 701 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
701 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 702 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
702 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 703 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
703 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 704 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
704 RenderSurfaceLayerList render_surface_layer_list; | 705 RenderSurfaceLayerList render_surface_layer_list; |
705 | 706 |
706 layer_tree_host_->root_layer()->AddChild(layer); | 707 layer_tree_host_->root_layer()->AddChild(layer); |
707 | 708 |
708 // Full size layer with half being visible. | 709 // Full size layer with half being visible. |
709 layer->SetBounds(gfx::Size(layer_width, layer_height)); | 710 layer->SetBounds(gfx::Size(layer_width, layer_height)); |
710 gfx::Rect visible_rect(0, 0, layer_width / 2, layer_height); | 711 gfx::Rect visible_rect(0, 0, layer_width / 2, layer_height); |
711 CalcDrawProps(&render_surface_layer_list); | 712 CalcDrawProps(&render_surface_layer_list); |
(...skipping 25 matching lines...) Expand all Loading... |
737 for (int j = 0; j < 5; ++j) | 738 for (int j = 0; j < 5; ++j) |
738 EXPECT_EQ(layer_impl->HasResourceIdForTileAt(i, j), i < 5); | 739 EXPECT_EQ(layer_impl->HasResourceIdForTileAt(i, j), i < 5); |
739 } | 740 } |
740 } | 741 } |
741 | 742 |
742 layer->RemoveFromParent(); | 743 layer->RemoveFromParent(); |
743 } | 744 } |
744 } | 745 } |
745 | 746 |
746 TEST_F(TiledLayerTest, IdlePaintOutOfMemory) { | 747 TEST_F(TiledLayerTest, IdlePaintOutOfMemory) { |
747 scoped_refptr<FakeTiledLayer> layer = | 748 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
748 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 749 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
749 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 750 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
750 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 751 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
751 RenderSurfaceLayerList render_surface_layer_list; | 752 RenderSurfaceLayerList render_surface_layer_list; |
752 | 753 |
753 layer_tree_host_->root_layer()->AddChild(layer); | 754 layer_tree_host_->root_layer()->AddChild(layer); |
754 | 755 |
755 // We have enough memory for only the visible rect, so we will run out of | 756 // We have enough memory for only the visible rect, so we will run out of |
756 // memory in first idle paint. | 757 // memory in first idle paint. |
757 int memory_limit = 4 * 100 * 100; // 1 tiles, 4 bytes per pixel. | 758 int memory_limit = 4 * 100 * 100; // 1 tiles, 4 bytes per pixel. |
758 resource_manager_->SetMaxMemoryLimitBytes(memory_limit); | 759 resource_manager_->SetMaxMemoryLimitBytes(memory_limit); |
759 | 760 |
760 // The tile size is 100x100, so this invalidates and then paints two tiles. | 761 // The tile size is 100x100, so this invalidates and then paints two tiles. |
761 bool needs_update = false; | 762 bool needs_update = false; |
762 layer->SetBounds(gfx::Size(300, 300)); | 763 layer->SetBounds(gfx::Size(300, 300)); |
763 CalcDrawProps(&render_surface_layer_list); | 764 CalcDrawProps(&render_surface_layer_list); |
764 layer->draw_properties().visible_content_rect = gfx::Rect(100, 100, 100, 100); | 765 layer->draw_properties().visible_content_rect = gfx::Rect(100, 100, 100, 100); |
765 for (int i = 0; i < 2; i++) | 766 for (int i = 0; i < 2; i++) |
766 needs_update = UpdateAndPush(layer, layer_impl); | 767 needs_update = UpdateAndPush(layer, layer_impl); |
767 | 768 |
768 // Idle-painting should see no more priority tiles for painting. | 769 // Idle-painting should see no more priority tiles for painting. |
769 EXPECT_FALSE(needs_update); | 770 EXPECT_FALSE(needs_update); |
770 | 771 |
771 // We should have one tile on the impl side. | 772 // We should have one tile on the impl side. |
772 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(1, 1)); | 773 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(1, 1)); |
773 } | 774 } |
774 | 775 |
775 TEST_F(TiledLayerTest, IdlePaintZeroSizedLayer) { | 776 TEST_F(TiledLayerTest, IdlePaintZeroSizedLayer) { |
776 scoped_refptr<FakeTiledLayer> layer = | 777 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
777 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 778 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
778 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 779 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
779 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 780 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
780 | 781 |
781 layer_tree_host_->root_layer()->AddChild(layer); | 782 layer_tree_host_->root_layer()->AddChild(layer); |
782 | 783 |
783 bool animating[2] = { false, true }; | 784 bool animating[2] = { false, true }; |
784 for (int i = 0; i < 2; i++) { | 785 for (int i = 0; i < 2; i++) { |
785 // Pretend the layer is animating. | 786 // Pretend the layer is animating. |
786 layer->draw_properties().target_space_transform_is_animating = animating[i]; | 787 layer->draw_properties().target_space_transform_is_animating = animating[i]; |
787 | 788 |
(...skipping 11 matching lines...) Expand all Loading... |
799 | 800 |
800 // Empty layers don't need prepaint. | 801 // Empty layers don't need prepaint. |
801 EXPECT_FALSE(needs_update); | 802 EXPECT_FALSE(needs_update); |
802 | 803 |
803 // Empty layers don't have tiles. | 804 // Empty layers don't have tiles. |
804 EXPECT_FALSE(layer_impl->HasResourceIdForTileAt(0, 0)); | 805 EXPECT_FALSE(layer_impl->HasResourceIdForTileAt(0, 0)); |
805 } | 806 } |
806 } | 807 } |
807 | 808 |
808 TEST_F(TiledLayerTest, IdlePaintNonVisibleLayers) { | 809 TEST_F(TiledLayerTest, IdlePaintNonVisibleLayers) { |
809 scoped_refptr<FakeTiledLayer> layer = | 810 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
810 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 811 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
811 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 812 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
812 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 813 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
813 | 814 |
814 // Alternate between not visible and visible. | 815 // Alternate between not visible and visible. |
815 gfx::Rect v(0, 0, 100, 100); | 816 gfx::Rect v(0, 0, 100, 100); |
816 gfx::Rect nv(0, 0, 0, 0); | 817 gfx::Rect nv(0, 0, 0, 0); |
817 gfx::Rect visible_rect[10] = { nv, nv, v, v, nv, nv, v, v, nv, nv }; | 818 gfx::Rect visible_rect[10] = { nv, nv, v, v, nv, nv, v, v, nv, nv }; |
818 bool invalidate[10] = { true, true, true, true, true, true, true, true, false, | 819 bool invalidate[10] = { true, true, true, true, true, true, true, true, false, |
819 false }; | 820 false }; |
820 | 821 |
(...skipping 16 matching lines...) Expand all Loading... |
837 bool needs_update = UpdateAndPush(layer, layer_impl); | 838 bool needs_update = UpdateAndPush(layer, layer_impl); |
838 | 839 |
839 // We should never signal idle paint, as we painted the entire layer | 840 // We should never signal idle paint, as we painted the entire layer |
840 // or the layer was not visible. | 841 // or the layer was not visible. |
841 EXPECT_FALSE(needs_update); | 842 EXPECT_FALSE(needs_update); |
842 EXPECT_EQ(layer_impl->HasResourceIdForTileAt(0, 0), have_tile[i]); | 843 EXPECT_EQ(layer_impl->HasResourceIdForTileAt(0, 0), have_tile[i]); |
843 } | 844 } |
844 } | 845 } |
845 | 846 |
846 TEST_F(TiledLayerTest, InvalidateFromPrepare) { | 847 TEST_F(TiledLayerTest, InvalidateFromPrepare) { |
847 scoped_refptr<FakeTiledLayer> layer = | 848 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
848 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 849 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
849 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 850 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
850 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 851 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
851 RenderSurfaceLayerList render_surface_layer_list; | 852 RenderSurfaceLayerList render_surface_layer_list; |
852 | 853 |
853 layer_tree_host_->root_layer()->AddChild(layer); | 854 layer_tree_host_->root_layer()->AddChild(layer); |
854 | 855 |
855 // The tile size is 100x100, so this invalidates and then paints two tiles. | 856 // The tile size is 100x100, so this invalidates and then paints two tiles. |
856 layer->SetBounds(gfx::Size(100, 200)); | 857 layer->SetBounds(gfx::Size(100, 200)); |
857 CalcDrawProps(&render_surface_layer_list); | 858 CalcDrawProps(&render_surface_layer_list); |
858 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 200); | 859 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 200); |
(...skipping 20 matching lines...) Expand all Loading... |
879 layer->fake_layer_updater()->ClearPrepareCount(); | 880 layer->fake_layer_updater()->ClearPrepareCount(); |
880 | 881 |
881 // The layer should still be invalid as update invoked invalidate. | 882 // The layer should still be invalid as update invoked invalidate. |
882 UpdateAndPush(layer, layer_impl); // visible | 883 UpdateAndPush(layer, layer_impl); // visible |
883 EXPECT_EQ(1, layer->fake_layer_updater()->prepare_count()); | 884 EXPECT_EQ(1, layer->fake_layer_updater()->prepare_count()); |
884 } | 885 } |
885 | 886 |
886 TEST_F(TiledLayerTest, VerifyUpdateRectWhenContentBoundsAreScaled) { | 887 TEST_F(TiledLayerTest, VerifyUpdateRectWhenContentBoundsAreScaled) { |
887 // The update rect (that indicates what was actually painted) should be in | 888 // The update rect (that indicates what was actually painted) should be in |
888 // layer space, not the content space. | 889 // layer space, not the content space. |
889 scoped_refptr<FakeTiledLayerWithScaledBounds> layer = make_scoped_refptr( | 890 scoped_refptr<FakeTiledLayerWithScaledBounds> layer = |
890 new FakeTiledLayerWithScaledBounds(resource_manager_.get())); | 891 make_scoped_refptr(new FakeTiledLayerWithScaledBounds( |
| 892 layer_settings_, resource_manager_.get())); |
891 | 893 |
892 layer_tree_host_->root_layer()->AddChild(layer); | 894 layer_tree_host_->root_layer()->AddChild(layer); |
893 | 895 |
894 gfx::Rect layer_bounds(0, 0, 300, 200); | 896 gfx::Rect layer_bounds(0, 0, 300, 200); |
895 gfx::Rect content_bounds(0, 0, 150, 250); | 897 gfx::Rect content_bounds(0, 0, 150, 250); |
896 | 898 |
897 layer->SetBounds(layer_bounds.size()); | 899 layer->SetBounds(layer_bounds.size()); |
898 layer->SetContentBounds(content_bounds.size()); | 900 layer->SetContentBounds(content_bounds.size()); |
899 layer->draw_properties().visible_content_rect = content_bounds; | 901 layer->draw_properties().visible_content_rect = content_bounds; |
900 layer->draw_properties().contents_scale_x = .5f; | 902 layer->draw_properties().contents_scale_x = .5f; |
(...skipping 28 matching lines...) Expand all Loading... |
929 gfx::Rect partial_damage(30, 100, 10, 10); | 931 gfx::Rect partial_damage(30, 100, 10, 10); |
930 layer->InvalidateContentRect(partial_damage); | 932 layer->InvalidateContentRect(partial_damage); |
931 layer->SetTexturePriorities(priority_calculator_); | 933 layer->SetTexturePriorities(priority_calculator_); |
932 resource_manager_->PrioritizeTextures(); | 934 resource_manager_->PrioritizeTextures(); |
933 layer->SavePaintProperties(); | 935 layer->SavePaintProperties(); |
934 layer->Update(queue_.get(), nullptr); | 936 layer->Update(queue_.get(), nullptr); |
935 EXPECT_FLOAT_RECT_EQ(gfx::RectF(60, 80, 20, 8), layer->update_rect()); | 937 EXPECT_FLOAT_RECT_EQ(gfx::RectF(60, 80, 20, 8), layer->update_rect()); |
936 } | 938 } |
937 | 939 |
938 TEST_F(TiledLayerTest, VerifyInvalidationWhenContentsScaleChanges) { | 940 TEST_F(TiledLayerTest, VerifyInvalidationWhenContentsScaleChanges) { |
939 scoped_refptr<FakeTiledLayer> layer = | 941 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
940 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 942 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
941 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 943 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
942 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 944 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
943 RenderSurfaceLayerList render_surface_layer_list; | 945 RenderSurfaceLayerList render_surface_layer_list; |
944 | 946 |
945 layer_tree_host_->root_layer()->AddChild(layer); | 947 layer_tree_host_->root_layer()->AddChild(layer); |
946 | 948 |
947 // Create a layer with one tile. | 949 // Create a layer with one tile. |
948 layer->SetBounds(gfx::Size(100, 100)); | 950 layer->SetBounds(gfx::Size(100, 100)); |
949 CalcDrawProps(&render_surface_layer_list); | 951 CalcDrawProps(&render_surface_layer_list); |
950 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 952 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1003 } | 1005 } |
1004 | 1006 |
1005 TEST_F(TiledLayerTest, SkipsDrawGetsReset) { | 1007 TEST_F(TiledLayerTest, SkipsDrawGetsReset) { |
1006 // Create two 300 x 300 tiled layers. | 1008 // Create two 300 x 300 tiled layers. |
1007 gfx::Size content_bounds(300, 300); | 1009 gfx::Size content_bounds(300, 300); |
1008 gfx::Rect content_rect(content_bounds); | 1010 gfx::Rect content_rect(content_bounds); |
1009 | 1011 |
1010 // We have enough memory for only one of the two layers. | 1012 // We have enough memory for only one of the two layers. |
1011 int memory_limit = 4 * 300 * 300; // 4 bytes per pixel. | 1013 int memory_limit = 4 * 300 * 300; // 4 bytes per pixel. |
1012 | 1014 |
1013 scoped_refptr<FakeTiledLayer> root_layer = make_scoped_refptr( | 1015 scoped_refptr<FakeTiledLayer> root_layer = |
1014 new FakeTiledLayer(layer_tree_host_->contents_texture_manager())); | 1016 make_scoped_refptr(new FakeTiledLayer( |
1015 scoped_refptr<FakeTiledLayer> child_layer = make_scoped_refptr( | 1017 layer_settings_, layer_tree_host_->contents_texture_manager())); |
1016 new FakeTiledLayer(layer_tree_host_->contents_texture_manager())); | 1018 scoped_refptr<FakeTiledLayer> child_layer = |
| 1019 make_scoped_refptr(new FakeTiledLayer( |
| 1020 layer_settings_, layer_tree_host_->contents_texture_manager())); |
1017 root_layer->AddChild(child_layer); | 1021 root_layer->AddChild(child_layer); |
1018 | 1022 |
1019 root_layer->SetBounds(content_bounds); | 1023 root_layer->SetBounds(content_bounds); |
1020 root_layer->draw_properties().visible_content_rect = content_rect; | 1024 root_layer->draw_properties().visible_content_rect = content_rect; |
1021 root_layer->SetPosition(gfx::PointF(0, 0)); | 1025 root_layer->SetPosition(gfx::PointF(0, 0)); |
1022 child_layer->SetBounds(content_bounds); | 1026 child_layer->SetBounds(content_bounds); |
1023 child_layer->draw_properties().visible_content_rect = content_rect; | 1027 child_layer->draw_properties().visible_content_rect = content_rect; |
1024 child_layer->SetPosition(gfx::PointF(0, 0)); | 1028 child_layer->SetPosition(gfx::PointF(0, 0)); |
1025 root_layer->InvalidateContentRect(content_rect); | 1029 root_layer->InvalidateContentRect(content_rect); |
1026 child_layer->InvalidateContentRect(content_rect); | 1030 child_layer->InvalidateContentRect(content_rect); |
(...skipping 16 matching lines...) Expand all Loading... |
1043 | 1047 |
1044 layer_tree_host_->UpdateLayers(queue_.get()); | 1048 layer_tree_host_->UpdateLayers(queue_.get()); |
1045 EXPECT_FALSE(root_layer->SkipsDraw()); | 1049 EXPECT_FALSE(root_layer->SkipsDraw()); |
1046 | 1050 |
1047 ResourceManagerClearAllMemory(layer_tree_host_->contents_texture_manager(), | 1051 ResourceManagerClearAllMemory(layer_tree_host_->contents_texture_manager(), |
1048 resource_provider_.get()); | 1052 resource_provider_.get()); |
1049 layer_tree_host_->SetRootLayer(nullptr); | 1053 layer_tree_host_->SetRootLayer(nullptr); |
1050 } | 1054 } |
1051 | 1055 |
1052 TEST_F(TiledLayerTest, ResizeToSmaller) { | 1056 TEST_F(TiledLayerTest, ResizeToSmaller) { |
1053 scoped_refptr<FakeTiledLayer> layer = | 1057 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
1054 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1058 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
1055 | 1059 |
1056 layer_tree_host_->root_layer()->AddChild(layer); | 1060 layer_tree_host_->root_layer()->AddChild(layer); |
1057 | 1061 |
1058 layer->SetBounds(gfx::Size(700, 700)); | 1062 layer->SetBounds(gfx::Size(700, 700)); |
1059 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 700, 700); | 1063 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 700, 700); |
1060 layer->InvalidateContentRect(gfx::Rect(0, 0, 700, 700)); | 1064 layer->InvalidateContentRect(gfx::Rect(0, 0, 700, 700)); |
1061 | 1065 |
1062 layer->SetTexturePriorities(priority_calculator_); | 1066 layer->SetTexturePriorities(priority_calculator_); |
1063 resource_manager_->PrioritizeTextures(); | 1067 resource_manager_->PrioritizeTextures(); |
1064 layer->SavePaintProperties(); | 1068 layer->SavePaintProperties(); |
1065 layer->Update(queue_.get(), nullptr); | 1069 layer->Update(queue_.get(), nullptr); |
1066 | 1070 |
1067 layer->SetBounds(gfx::Size(200, 200)); | 1071 layer->SetBounds(gfx::Size(200, 200)); |
1068 layer->InvalidateContentRect(gfx::Rect(0, 0, 200, 200)); | 1072 layer->InvalidateContentRect(gfx::Rect(0, 0, 200, 200)); |
1069 } | 1073 } |
1070 | 1074 |
1071 TEST_F(TiledLayerTest, HugeLayerUpdateCrash) { | 1075 TEST_F(TiledLayerTest, HugeLayerUpdateCrash) { |
1072 scoped_refptr<FakeTiledLayer> layer = | 1076 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
1073 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1077 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
1074 | 1078 |
1075 layer_tree_host_->root_layer()->AddChild(layer); | 1079 layer_tree_host_->root_layer()->AddChild(layer); |
1076 | 1080 |
1077 int size = 1 << 30; | 1081 int size = 1 << 30; |
1078 layer->SetBounds(gfx::Size(size, size)); | 1082 layer->SetBounds(gfx::Size(size, size)); |
1079 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 700, 700); | 1083 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 700, 700); |
1080 layer->InvalidateContentRect(gfx::Rect(0, 0, size, size)); | 1084 layer->InvalidateContentRect(gfx::Rect(0, 0, size, size)); |
1081 | 1085 |
1082 // Ensure no crash for bounds where size * size would overflow an int. | 1086 // Ensure no crash for bounds where size * size would overflow an int. |
1083 layer->SetTexturePriorities(priority_calculator_); | 1087 layer->SetTexturePriorities(priority_calculator_); |
1084 resource_manager_->PrioritizeTextures(); | 1088 resource_manager_->PrioritizeTextures(); |
1085 layer->SavePaintProperties(); | 1089 layer->SavePaintProperties(); |
1086 layer->Update(queue_.get(), nullptr); | 1090 layer->Update(queue_.get(), nullptr); |
1087 } | 1091 } |
1088 | 1092 |
1089 class TiledLayerPartialUpdateTest : public TiledLayerTest { | 1093 class TiledLayerPartialUpdateTest : public TiledLayerTest { |
1090 public: | 1094 public: |
1091 TiledLayerPartialUpdateTest() { settings_.max_partial_texture_updates = 4; } | 1095 TiledLayerPartialUpdateTest() { settings_.max_partial_texture_updates = 4; } |
1092 }; | 1096 }; |
1093 | 1097 |
1094 TEST_F(TiledLayerPartialUpdateTest, PartialUpdates) { | 1098 TEST_F(TiledLayerPartialUpdateTest, PartialUpdates) { |
1095 // Create one 300 x 200 tiled layer with 3 x 2 tiles. | 1099 // Create one 300 x 200 tiled layer with 3 x 2 tiles. |
1096 gfx::Size content_bounds(300, 200); | 1100 gfx::Size content_bounds(300, 200); |
1097 gfx::Rect content_rect(content_bounds); | 1101 gfx::Rect content_rect(content_bounds); |
1098 | 1102 |
1099 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( | 1103 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer( |
1100 new FakeTiledLayer(layer_tree_host_->contents_texture_manager())); | 1104 layer_settings_, layer_tree_host_->contents_texture_manager())); |
1101 layer->SetBounds(content_bounds); | 1105 layer->SetBounds(content_bounds); |
1102 layer->SetPosition(gfx::PointF(0, 0)); | 1106 layer->SetPosition(gfx::PointF(0, 0)); |
1103 layer->draw_properties().visible_content_rect = content_rect; | 1107 layer->draw_properties().visible_content_rect = content_rect; |
1104 layer->InvalidateContentRect(content_rect); | 1108 layer->InvalidateContentRect(content_rect); |
1105 | 1109 |
1106 layer_tree_host_->SetRootLayer(layer); | 1110 layer_tree_host_->SetRootLayer(layer); |
1107 layer_tree_host_->SetViewportSize(gfx::Size(300, 200)); | 1111 layer_tree_host_->SetViewportSize(gfx::Size(300, 200)); |
1108 | 1112 |
1109 // Full update of all 6 tiles. | 1113 // Full update of all 6 tiles. |
1110 layer_tree_host_->UpdateLayers(queue_.get()); | 1114 layer_tree_host_->UpdateLayers(queue_.get()); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1195 layer_tree_host_->CommitComplete(); | 1199 layer_tree_host_->CommitComplete(); |
1196 | 1200 |
1197 ResourceManagerClearAllMemory(layer_tree_host_->contents_texture_manager(), | 1201 ResourceManagerClearAllMemory(layer_tree_host_->contents_texture_manager(), |
1198 resource_provider_.get()); | 1202 resource_provider_.get()); |
1199 layer_tree_host_->SetRootLayer(nullptr); | 1203 layer_tree_host_->SetRootLayer(nullptr); |
1200 } | 1204 } |
1201 | 1205 |
1202 TEST_F(TiledLayerTest, TilesPaintedWithoutOcclusion) { | 1206 TEST_F(TiledLayerTest, TilesPaintedWithoutOcclusion) { |
1203 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); | 1207 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); |
1204 | 1208 |
1205 scoped_refptr<FakeTiledLayer> layer = | 1209 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
1206 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1210 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
1207 RenderSurfaceLayerList render_surface_layer_list; | 1211 RenderSurfaceLayerList render_surface_layer_list; |
1208 | 1212 |
1209 layer_tree_host_->root_layer()->AddChild(layer); | 1213 layer_tree_host_->root_layer()->AddChild(layer); |
1210 | 1214 |
1211 // The tile size is 100x100, so this invalidates and then paints two tiles. | 1215 // The tile size is 100x100, so this invalidates and then paints two tiles. |
1212 layer->SetBounds(gfx::Size(100, 200)); | 1216 layer->SetBounds(gfx::Size(100, 200)); |
1213 CalcDrawProps(&render_surface_layer_list); | 1217 CalcDrawProps(&render_surface_layer_list); |
1214 | 1218 |
1215 layer->SetTexturePriorities(priority_calculator_); | 1219 layer->SetTexturePriorities(priority_calculator_); |
1216 resource_manager_->PrioritizeTextures(); | 1220 resource_manager_->PrioritizeTextures(); |
1217 layer->SavePaintProperties(); | 1221 layer->SavePaintProperties(); |
1218 layer->Update(queue_.get(), nullptr); | 1222 layer->Update(queue_.get(), nullptr); |
1219 EXPECT_EQ(2, layer->fake_layer_updater()->update_count()); | 1223 EXPECT_EQ(2, layer->fake_layer_updater()->update_count()); |
1220 } | 1224 } |
1221 | 1225 |
1222 TEST_F(TiledLayerTest, TilesPaintedWithOcclusion) { | 1226 TEST_F(TiledLayerTest, TilesPaintedWithOcclusion) { |
1223 scoped_refptr<FakeTiledLayer> layer = | 1227 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
1224 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1228 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
1225 RenderSurfaceLayerList render_surface_layer_list; | 1229 RenderSurfaceLayerList render_surface_layer_list; |
1226 TestOcclusionTracker occluded; | 1230 TestOcclusionTracker occluded; |
1227 occlusion_ = &occluded; | 1231 occlusion_ = &occluded; |
1228 | 1232 |
1229 layer_tree_host_->root_layer()->AddChild(layer); | 1233 layer_tree_host_->root_layer()->AddChild(layer); |
1230 | 1234 |
1231 // The tile size is 100x100. | 1235 // The tile size is 100x100. |
1232 | 1236 |
1233 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); | 1237 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); |
1234 layer->SetBounds(gfx::Size(600, 600)); | 1238 layer->SetBounds(gfx::Size(600, 600)); |
(...skipping 27 matching lines...) Expand all Loading... |
1262 resource_manager_->PrioritizeTextures(); | 1266 resource_manager_->PrioritizeTextures(); |
1263 | 1267 |
1264 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(250, 250, 300, 100))); | 1268 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(250, 250, 300, 100))); |
1265 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1269 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1266 layer->SavePaintProperties(); | 1270 layer->SavePaintProperties(); |
1267 layer->Update(queue_.get(), &occluded); | 1271 layer->Update(queue_.get(), &occluded); |
1268 EXPECT_EQ(36, layer->fake_layer_updater()->update_count()); | 1272 EXPECT_EQ(36, layer->fake_layer_updater()->update_count()); |
1269 } | 1273 } |
1270 | 1274 |
1271 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndVisiblityConstraints) { | 1275 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndVisiblityConstraints) { |
1272 scoped_refptr<FakeTiledLayer> layer = | 1276 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
1273 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1277 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
1274 RenderSurfaceLayerList render_surface_layer_list; | 1278 RenderSurfaceLayerList render_surface_layer_list; |
1275 TestOcclusionTracker occluded; | 1279 TestOcclusionTracker occluded; |
1276 occlusion_ = &occluded; | 1280 occlusion_ = &occluded; |
1277 | 1281 |
1278 layer_tree_host_->root_layer()->AddChild(layer); | 1282 layer_tree_host_->root_layer()->AddChild(layer); |
1279 | 1283 |
1280 // The tile size is 100x100. | 1284 // The tile size is 100x100. |
1281 | 1285 |
1282 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); | 1286 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); |
1283 layer->SetBounds(gfx::Size(600, 600)); | 1287 layer->SetBounds(gfx::Size(600, 600)); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1319 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 340); | 1323 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 340); |
1320 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1324 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1321 layer->SetTexturePriorities(priority_calculator_); | 1325 layer->SetTexturePriorities(priority_calculator_); |
1322 resource_manager_->PrioritizeTextures(); | 1326 resource_manager_->PrioritizeTextures(); |
1323 layer->SavePaintProperties(); | 1327 layer->SavePaintProperties(); |
1324 layer->Update(queue_.get(), &occluded); | 1328 layer->Update(queue_.get(), &occluded); |
1325 EXPECT_EQ(24 - 6, layer->fake_layer_updater()->update_count()); | 1329 EXPECT_EQ(24 - 6, layer->fake_layer_updater()->update_count()); |
1326 } | 1330 } |
1327 | 1331 |
1328 TEST_F(TiledLayerTest, TilesNotPaintedWithoutInvalidation) { | 1332 TEST_F(TiledLayerTest, TilesNotPaintedWithoutInvalidation) { |
1329 scoped_refptr<FakeTiledLayer> layer = | 1333 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
1330 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1334 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
1331 RenderSurfaceLayerList render_surface_layer_list; | 1335 RenderSurfaceLayerList render_surface_layer_list; |
1332 TestOcclusionTracker occluded; | 1336 TestOcclusionTracker occluded; |
1333 occlusion_ = &occluded; | 1337 occlusion_ = &occluded; |
1334 | 1338 |
1335 layer_tree_host_->root_layer()->AddChild(layer); | 1339 layer_tree_host_->root_layer()->AddChild(layer); |
1336 | 1340 |
1337 // The tile size is 100x100. | 1341 // The tile size is 100x100. |
1338 | 1342 |
1339 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); | 1343 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); |
1340 layer->SetBounds(gfx::Size(600, 600)); | 1344 layer->SetBounds(gfx::Size(600, 600)); |
(...skipping 15 matching lines...) Expand all Loading... |
1356 resource_manager_->PrioritizeTextures(); | 1360 resource_manager_->PrioritizeTextures(); |
1357 layer->SavePaintProperties(); | 1361 layer->SavePaintProperties(); |
1358 | 1362 |
1359 // Repaint without marking it dirty. The 3 culled tiles will be pre-painted | 1363 // Repaint without marking it dirty. The 3 culled tiles will be pre-painted |
1360 // now. | 1364 // now. |
1361 layer->Update(queue_.get(), &occluded); | 1365 layer->Update(queue_.get(), &occluded); |
1362 EXPECT_EQ(3, layer->fake_layer_updater()->update_count()); | 1366 EXPECT_EQ(3, layer->fake_layer_updater()->update_count()); |
1363 } | 1367 } |
1364 | 1368 |
1365 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndTransforms) { | 1369 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndTransforms) { |
1366 scoped_refptr<FakeTiledLayer> layer = | 1370 scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr( |
1367 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1371 new FakeTiledLayer(layer_settings_, resource_manager_.get())); |
1368 RenderSurfaceLayerList render_surface_layer_list; | 1372 RenderSurfaceLayerList render_surface_layer_list; |
1369 TestOcclusionTracker occluded; | 1373 TestOcclusionTracker occluded; |
1370 occlusion_ = &occluded; | 1374 occlusion_ = &occluded; |
1371 | 1375 |
1372 layer_tree_host_->root_layer()->AddChild(layer); | 1376 layer_tree_host_->root_layer()->AddChild(layer); |
1373 | 1377 |
1374 // The tile size is 100x100. | 1378 // The tile size is 100x100. |
1375 | 1379 |
1376 // This makes sure the painting works when the occluded region (in screen | 1380 // This makes sure the painting works when the occluded region (in screen |
1377 // space) is transformed differently than the layer. | 1381 // space) is transformed differently than the layer. |
(...skipping 13 matching lines...) Expand all Loading... |
1391 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1395 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1392 layer->SetTexturePriorities(priority_calculator_); | 1396 layer->SetTexturePriorities(priority_calculator_); |
1393 resource_manager_->PrioritizeTextures(); | 1397 resource_manager_->PrioritizeTextures(); |
1394 layer->SavePaintProperties(); | 1398 layer->SavePaintProperties(); |
1395 layer->Update(queue_.get(), &occluded); | 1399 layer->Update(queue_.get(), &occluded); |
1396 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); | 1400 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); |
1397 } | 1401 } |
1398 | 1402 |
1399 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndScaling) { | 1403 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndScaling) { |
1400 scoped_refptr<FakeTiledLayer> layer = | 1404 scoped_refptr<FakeTiledLayer> layer = |
1401 new FakeTiledLayer(resource_manager_.get()); | 1405 new FakeTiledLayer(layer_settings_, resource_manager_.get()); |
1402 RenderSurfaceLayerList render_surface_layer_list; | 1406 RenderSurfaceLayerList render_surface_layer_list; |
1403 TestOcclusionTracker occluded; | 1407 TestOcclusionTracker occluded; |
1404 occlusion_ = &occluded; | 1408 occlusion_ = &occluded; |
1405 | 1409 |
1406 scoped_refptr<FakeTiledLayer> scale_layer = | 1410 scoped_refptr<FakeTiledLayer> scale_layer = |
1407 new FakeTiledLayer(resource_manager_.get()); | 1411 new FakeTiledLayer(layer_settings_, resource_manager_.get()); |
1408 gfx::Transform scale_transform; | 1412 gfx::Transform scale_transform; |
1409 scale_transform.Scale(2.0, 2.0); | 1413 scale_transform.Scale(2.0, 2.0); |
1410 scale_layer->SetTransform(scale_transform); | 1414 scale_layer->SetTransform(scale_transform); |
1411 | 1415 |
1412 layer_tree_host_->root_layer()->AddChild(scale_layer); | 1416 layer_tree_host_->root_layer()->AddChild(scale_layer); |
1413 | 1417 |
1414 // The tile size is 100x100. | 1418 // The tile size is 100x100. |
1415 | 1419 |
1416 // This makes sure the painting works when the content space is scaled to | 1420 // This makes sure the painting works when the content space is scaled to |
1417 // a different layer space. | 1421 // a different layer space. |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1480 int visible_tiles3 = 6 * 6 - 6; | 1484 int visible_tiles3 = 6 * 6 - 6; |
1481 EXPECT_EQ(visible_tiles3, layer->fake_layer_updater()->update_count()); | 1485 EXPECT_EQ(visible_tiles3, layer->fake_layer_updater()->update_count()); |
1482 } | 1486 } |
1483 | 1487 |
1484 TEST_F(TiledLayerTest, DontAllocateContentsWhenTargetSurfaceCantBeAllocated) { | 1488 TEST_F(TiledLayerTest, DontAllocateContentsWhenTargetSurfaceCantBeAllocated) { |
1485 // Tile size is 100x100. | 1489 // Tile size is 100x100. |
1486 gfx::Rect root_rect(0, 0, 300, 200); | 1490 gfx::Rect root_rect(0, 0, 300, 200); |
1487 gfx::Rect child_rect(0, 0, 300, 100); | 1491 gfx::Rect child_rect(0, 0, 300, 100); |
1488 gfx::Rect child2_rect(0, 100, 300, 100); | 1492 gfx::Rect child2_rect(0, 100, 300, 100); |
1489 | 1493 |
1490 scoped_refptr<FakeTiledLayer> root = make_scoped_refptr( | 1494 scoped_refptr<FakeTiledLayer> root = make_scoped_refptr(new FakeTiledLayer( |
1491 new FakeTiledLayer(layer_tree_host_->contents_texture_manager())); | 1495 layer_settings_, layer_tree_host_->contents_texture_manager())); |
1492 scoped_refptr<Layer> surface = Layer::Create(); | 1496 scoped_refptr<Layer> surface = Layer::Create(layer_settings_); |
1493 scoped_refptr<FakeTiledLayer> child = make_scoped_refptr( | 1497 scoped_refptr<FakeTiledLayer> child = make_scoped_refptr(new FakeTiledLayer( |
1494 new FakeTiledLayer(layer_tree_host_->contents_texture_manager())); | 1498 layer_settings_, layer_tree_host_->contents_texture_manager())); |
1495 scoped_refptr<FakeTiledLayer> child2 = make_scoped_refptr( | 1499 scoped_refptr<FakeTiledLayer> child2 = make_scoped_refptr(new FakeTiledLayer( |
1496 new FakeTiledLayer(layer_tree_host_->contents_texture_manager())); | 1500 layer_settings_, layer_tree_host_->contents_texture_manager())); |
1497 | 1501 |
1498 root->SetBounds(root_rect.size()); | 1502 root->SetBounds(root_rect.size()); |
1499 root->draw_properties().drawable_content_rect = root_rect; | 1503 root->draw_properties().drawable_content_rect = root_rect; |
1500 root->draw_properties().visible_content_rect = root_rect; | 1504 root->draw_properties().visible_content_rect = root_rect; |
1501 root->AddChild(surface); | 1505 root->AddChild(surface); |
1502 | 1506 |
1503 surface->SetForceRenderSurface(true); | 1507 surface->SetForceRenderSurface(true); |
1504 surface->SetOpacity(0.5); | 1508 surface->SetOpacity(0.5); |
1505 surface->AddChild(child); | 1509 surface->AddChild(child); |
1506 surface->AddChild(child2); | 1510 surface->AddChild(child2); |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1654 | 1658 |
1655 gfx::Rect PaintedRect() const { return painted_rect_; } | 1659 gfx::Rect PaintedRect() const { return painted_rect_; } |
1656 void ResetPaintedRect() { painted_rect_ = gfx::Rect(); } | 1660 void ResetPaintedRect() { painted_rect_ = gfx::Rect(); } |
1657 | 1661 |
1658 private: | 1662 private: |
1659 gfx::Rect painted_rect_; | 1663 gfx::Rect painted_rect_; |
1660 }; | 1664 }; |
1661 | 1665 |
1662 class UpdateTrackingTiledLayer : public FakeTiledLayer { | 1666 class UpdateTrackingTiledLayer : public FakeTiledLayer { |
1663 public: | 1667 public: |
1664 explicit UpdateTrackingTiledLayer(PrioritizedResourceManager* manager) | 1668 explicit UpdateTrackingTiledLayer(const LayerSettings& settings, |
1665 : FakeTiledLayer(manager) { | 1669 PrioritizedResourceManager* manager) |
| 1670 : FakeTiledLayer(settings, manager) { |
1666 scoped_ptr<TrackingLayerPainter> painter(TrackingLayerPainter::Create()); | 1671 scoped_ptr<TrackingLayerPainter> painter(TrackingLayerPainter::Create()); |
1667 tracking_layer_painter_ = painter.get(); | 1672 tracking_layer_painter_ = painter.get(); |
1668 layer_updater_ = BitmapContentLayerUpdater::Create(painter.Pass(), 0); | 1673 layer_updater_ = BitmapContentLayerUpdater::Create(painter.Pass(), 0); |
1669 } | 1674 } |
1670 | 1675 |
1671 TrackingLayerPainter* tracking_layer_painter() const { | 1676 TrackingLayerPainter* tracking_layer_painter() const { |
1672 return tracking_layer_painter_; | 1677 return tracking_layer_painter_; |
1673 } | 1678 } |
1674 | 1679 |
1675 private: | 1680 private: |
1676 LayerUpdater* Updater() const override { return layer_updater_.get(); } | 1681 LayerUpdater* Updater() const override { return layer_updater_.get(); } |
1677 ~UpdateTrackingTiledLayer() override {} | 1682 ~UpdateTrackingTiledLayer() override {} |
1678 | 1683 |
1679 TrackingLayerPainter* tracking_layer_painter_; | 1684 TrackingLayerPainter* tracking_layer_painter_; |
1680 scoped_refptr<BitmapContentLayerUpdater> layer_updater_; | 1685 scoped_refptr<BitmapContentLayerUpdater> layer_updater_; |
1681 }; | 1686 }; |
1682 | 1687 |
1683 TEST_F(TiledLayerTest, NonIntegerContentsScaleIsNotDistortedDuringPaint) { | 1688 TEST_F(TiledLayerTest, NonIntegerContentsScaleIsNotDistortedDuringPaint) { |
1684 scoped_refptr<UpdateTrackingTiledLayer> layer = | 1689 scoped_refptr<UpdateTrackingTiledLayer> layer = make_scoped_refptr( |
1685 make_scoped_refptr(new UpdateTrackingTiledLayer(resource_manager_.get())); | 1690 new UpdateTrackingTiledLayer(layer_settings_, resource_manager_.get())); |
1686 | 1691 |
1687 layer_tree_host_->root_layer()->AddChild(layer); | 1692 layer_tree_host_->root_layer()->AddChild(layer); |
1688 | 1693 |
1689 gfx::Rect layer_rect(0, 0, 30, 31); | 1694 gfx::Rect layer_rect(0, 0, 30, 31); |
1690 layer->SetPosition(layer_rect.origin()); | 1695 layer->SetPosition(layer_rect.origin()); |
1691 layer->SetBounds(layer_rect.size()); | 1696 layer->SetBounds(layer_rect.size()); |
1692 layer->UpdateContentsScale(1.5f); | 1697 layer->UpdateContentsScale(1.5f); |
1693 | 1698 |
1694 gfx::Rect content_rect(0, 0, 45, 47); | 1699 gfx::Rect content_rect(0, 0, 45, 47); |
1695 EXPECT_EQ(content_rect.size(), layer->content_bounds()); | 1700 EXPECT_EQ(content_rect.size(), layer->content_bounds()); |
(...skipping 18 matching lines...) Expand all Loading... |
1714 | 1719 |
1715 // Rounding leads to an extra pixel. | 1720 // Rounding leads to an extra pixel. |
1716 gfx::Rect expanded_layer_rect(layer_rect); | 1721 gfx::Rect expanded_layer_rect(layer_rect); |
1717 expanded_layer_rect.set_height(32); | 1722 expanded_layer_rect.set_height(32); |
1718 EXPECT_EQ(expanded_layer_rect, | 1723 EXPECT_EQ(expanded_layer_rect, |
1719 layer->tracking_layer_painter()->PaintedRect()); | 1724 layer->tracking_layer_painter()->PaintedRect()); |
1720 } | 1725 } |
1721 | 1726 |
1722 TEST_F(TiledLayerTest, | 1727 TEST_F(TiledLayerTest, |
1723 NonIntegerContentsScaleIsNotDistortedDuringInvalidation) { | 1728 NonIntegerContentsScaleIsNotDistortedDuringInvalidation) { |
1724 scoped_refptr<UpdateTrackingTiledLayer> layer = | 1729 scoped_refptr<UpdateTrackingTiledLayer> layer = make_scoped_refptr( |
1725 make_scoped_refptr(new UpdateTrackingTiledLayer(resource_manager_.get())); | 1730 new UpdateTrackingTiledLayer(layer_settings_, resource_manager_.get())); |
1726 | 1731 |
1727 layer_tree_host_->root_layer()->AddChild(layer); | 1732 layer_tree_host_->root_layer()->AddChild(layer); |
1728 | 1733 |
1729 gfx::Rect layer_rect(0, 0, 30, 31); | 1734 gfx::Rect layer_rect(0, 0, 30, 31); |
1730 layer->SetPosition(layer_rect.origin()); | 1735 layer->SetPosition(layer_rect.origin()); |
1731 layer->SetBounds(layer_rect.size()); | 1736 layer->SetBounds(layer_rect.size()); |
1732 layer->UpdateContentsScale(1.3f); | 1737 layer->UpdateContentsScale(1.3f); |
1733 | 1738 |
1734 gfx::Rect content_rect(layer->content_bounds()); | 1739 gfx::Rect content_rect(layer->content_bounds()); |
1735 layer->draw_properties().visible_content_rect = content_rect; | 1740 layer->draw_properties().visible_content_rect = content_rect; |
(...skipping 17 matching lines...) Expand all Loading... |
1753 | 1758 |
1754 // Rounding leads to an extra pixel. | 1759 // Rounding leads to an extra pixel. |
1755 gfx::Rect expanded_layer_rect(layer_rect); | 1760 gfx::Rect expanded_layer_rect(layer_rect); |
1756 expanded_layer_rect.set_height(32); | 1761 expanded_layer_rect.set_height(32); |
1757 EXPECT_EQ(expanded_layer_rect, | 1762 EXPECT_EQ(expanded_layer_rect, |
1758 layer->tracking_layer_painter()->PaintedRect()); | 1763 layer->tracking_layer_painter()->PaintedRect()); |
1759 } | 1764 } |
1760 | 1765 |
1761 } // namespace | 1766 } // namespace |
1762 } // namespace cc | 1767 } // namespace cc |
OLD | NEW |