Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Side by Side Diff: cc/resources/tile_manager.cc

Issue 296453009: cc: Get rid of rasterizer delegate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: removed redundant get Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_perftest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/resources/tile_manager.h" 5 #include "cc/resources/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 10
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 state->SetInteger("completed_count", stats.completed_count); 360 state->SetInteger("completed_count", stats.completed_count);
361 state->SetInteger("canceled_count", stats.canceled_count); 361 state->SetInteger("canceled_count", stats.canceled_count);
362 return state.PassAs<base::Value>(); 362 return state.PassAs<base::Value>();
363 } 363 }
364 364
365 // static 365 // static
366 scoped_ptr<TileManager> TileManager::Create( 366 scoped_ptr<TileManager> TileManager::Create(
367 TileManagerClient* client, 367 TileManagerClient* client,
368 ResourcePool* resource_pool, 368 ResourcePool* resource_pool,
369 Rasterizer* rasterizer, 369 Rasterizer* rasterizer,
370 Rasterizer* gpu_rasterizer,
371 bool use_rasterize_on_demand, 370 bool use_rasterize_on_demand,
372 RenderingStatsInstrumentation* rendering_stats_instrumentation) { 371 RenderingStatsInstrumentation* rendering_stats_instrumentation) {
373 return make_scoped_ptr(new TileManager(client, 372 return make_scoped_ptr(new TileManager(client,
374 resource_pool, 373 resource_pool,
375 rasterizer, 374 rasterizer,
376 gpu_rasterizer,
377 use_rasterize_on_demand, 375 use_rasterize_on_demand,
378 rendering_stats_instrumentation)); 376 rendering_stats_instrumentation));
379 } 377 }
380 378
381 TileManager::TileManager( 379 TileManager::TileManager(
382 TileManagerClient* client, 380 TileManagerClient* client,
383 ResourcePool* resource_pool, 381 ResourcePool* resource_pool,
384 Rasterizer* rasterizer, 382 Rasterizer* rasterizer,
385 Rasterizer* gpu_rasterizer,
386 bool use_rasterize_on_demand, 383 bool use_rasterize_on_demand,
387 RenderingStatsInstrumentation* rendering_stats_instrumentation) 384 RenderingStatsInstrumentation* rendering_stats_instrumentation)
388 : client_(client), 385 : client_(client),
389 resource_pool_(resource_pool), 386 resource_pool_(resource_pool),
387 rasterizer_(rasterizer),
390 prioritized_tiles_dirty_(false), 388 prioritized_tiles_dirty_(false),
391 all_tiles_that_need_to_be_rasterized_have_memory_(true), 389 all_tiles_that_need_to_be_rasterized_have_memory_(true),
392 all_tiles_required_for_activation_have_memory_(true), 390 all_tiles_required_for_activation_have_memory_(true),
393 memory_required_bytes_(0), 391 memory_required_bytes_(0),
394 memory_nice_to_have_bytes_(0), 392 memory_nice_to_have_bytes_(0),
395 bytes_releasable_(0), 393 bytes_releasable_(0),
396 resources_releasable_(0), 394 resources_releasable_(0),
397 ever_exceeded_memory_budget_(false), 395 ever_exceeded_memory_budget_(false),
398 rendering_stats_instrumentation_(rendering_stats_instrumentation), 396 rendering_stats_instrumentation_(rendering_stats_instrumentation),
399 did_initialize_visible_tile_(false), 397 did_initialize_visible_tile_(false),
400 did_check_for_completed_tasks_since_last_schedule_tasks_(true), 398 did_check_for_completed_tasks_since_last_schedule_tasks_(true),
401 use_rasterize_on_demand_(use_rasterize_on_demand) { 399 use_rasterize_on_demand_(use_rasterize_on_demand) {
402 Rasterizer* rasterizers[NUM_RASTERIZER_TYPES] = { 400 rasterizer_->SetClient(this);
403 rasterizer, // RASTERIZER_TYPE_DEFAULT
404 gpu_rasterizer, // RASTERIZER_TYPE_GPU
405 };
406 rasterizer_delegate_ =
407 RasterizerDelegate::Create(this, rasterizers, arraysize(rasterizers));
408 } 401 }
409 402
410 TileManager::~TileManager() { 403 TileManager::~TileManager() {
411 // Reset global state and manage. This should cause 404 // Reset global state and manage. This should cause
412 // our memory usage to drop to zero. 405 // our memory usage to drop to zero.
413 global_state_ = GlobalStateThatImpactsTilePriority(); 406 global_state_ = GlobalStateThatImpactsTilePriority();
414 407
415 CleanUpReleasedTiles(); 408 CleanUpReleasedTiles();
416 DCHECK_EQ(0u, tiles_.size()); 409 DCHECK_EQ(0u, tiles_.size());
417 410
418 RasterTaskQueue empty[NUM_RASTERIZER_TYPES]; 411 RasterTaskQueue empty;
419 rasterizer_delegate_->ScheduleTasks(empty); 412 rasterizer_->ScheduleTasks(&empty);
420 orphan_raster_tasks_.clear(); 413 orphan_raster_tasks_.clear();
421 414
422 // This should finish all pending tasks and release any uninitialized 415 // This should finish all pending tasks and release any uninitialized
423 // resources. 416 // resources.
424 rasterizer_delegate_->Shutdown(); 417 rasterizer_->Shutdown();
425 rasterizer_delegate_->CheckForCompletedTasks(); 418 rasterizer_->CheckForCompletedTasks();
426 419
427 DCHECK_EQ(0u, bytes_releasable_); 420 DCHECK_EQ(0u, bytes_releasable_);
428 DCHECK_EQ(0u, resources_releasable_); 421 DCHECK_EQ(0u, resources_releasable_);
429 422
430 for (std::vector<PictureLayerImpl*>::iterator it = layers_.begin(); 423 for (std::vector<PictureLayerImpl*>::iterator it = layers_.begin();
431 it != layers_.end(); 424 it != layers_.end();
432 ++it) { 425 ++it) {
433 (*it)->DidUnregisterLayer(); 426 (*it)->DidUnregisterLayer();
434 } 427 }
435 layers_.clear(); 428 layers_.clear();
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 486
494 bool memory_usage_above_limit = resource_pool_->total_memory_usage_bytes() > 487 bool memory_usage_above_limit = resource_pool_->total_memory_usage_bytes() >
495 global_state_.soft_memory_limit_in_bytes; 488 global_state_.soft_memory_limit_in_bytes;
496 489
497 // When OOM, keep re-assigning memory until we reach a steady state 490 // When OOM, keep re-assigning memory until we reach a steady state
498 // where top-priority tiles are initialized. 491 // where top-priority tiles are initialized.
499 if (all_tiles_that_need_to_be_rasterized_have_memory_ && 492 if (all_tiles_that_need_to_be_rasterized_have_memory_ &&
500 !memory_usage_above_limit) 493 !memory_usage_above_limit)
501 return; 494 return;
502 495
503 rasterizer_delegate_->CheckForCompletedTasks(); 496 rasterizer_->CheckForCompletedTasks();
504 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 497 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
505 498
506 TileVector tiles_that_need_to_be_rasterized; 499 TileVector tiles_that_need_to_be_rasterized;
507 AssignGpuMemoryToTiles(&prioritized_tiles_, 500 AssignGpuMemoryToTiles(&prioritized_tiles_,
508 &tiles_that_need_to_be_rasterized); 501 &tiles_that_need_to_be_rasterized);
509 502
510 // |tiles_that_need_to_be_rasterized| will be empty when we reach a 503 // |tiles_that_need_to_be_rasterized| will be empty when we reach a
511 // steady memory state. Keep scheduling tasks until we reach this state. 504 // steady memory state. Keep scheduling tasks until we reach this state.
512 if (!tiles_that_need_to_be_rasterized.empty()) { 505 if (!tiles_that_need_to_be_rasterized.empty()) {
513 ScheduleTasks(tiles_that_need_to_be_rasterized); 506 ScheduleTasks(tiles_that_need_to_be_rasterized);
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 if (state != global_state_) { 693 if (state != global_state_) {
701 global_state_ = state; 694 global_state_ = state;
702 prioritized_tiles_dirty_ = true; 695 prioritized_tiles_dirty_ = true;
703 } 696 }
704 697
705 CleanUpLayers(); 698 CleanUpLayers();
706 699
707 // We need to call CheckForCompletedTasks() once in-between each call 700 // We need to call CheckForCompletedTasks() once in-between each call
708 // to ScheduleTasks() to prevent canceled tasks from being scheduled. 701 // to ScheduleTasks() to prevent canceled tasks from being scheduled.
709 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { 702 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
710 rasterizer_delegate_->CheckForCompletedTasks(); 703 rasterizer_->CheckForCompletedTasks();
711 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 704 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
712 } 705 }
713 706
714 UpdatePrioritizedTileSetIfNeeded(); 707 UpdatePrioritizedTileSetIfNeeded();
715 708
716 TileVector tiles_that_need_to_be_rasterized; 709 TileVector tiles_that_need_to_be_rasterized;
717 AssignGpuMemoryToTiles(&prioritized_tiles_, 710 AssignGpuMemoryToTiles(&prioritized_tiles_,
718 &tiles_that_need_to_be_rasterized); 711 &tiles_that_need_to_be_rasterized);
719 712
720 // Finally, schedule rasterizer tasks. 713 // Finally, schedule rasterizer tasks.
721 ScheduleTasks(tiles_that_need_to_be_rasterized); 714 ScheduleTasks(tiles_that_need_to_be_rasterized);
722 715
723 TRACE_EVENT_INSTANT1("cc", 716 TRACE_EVENT_INSTANT1("cc",
724 "DidManage", 717 "DidManage",
725 TRACE_EVENT_SCOPE_THREAD, 718 TRACE_EVENT_SCOPE_THREAD,
726 "state", 719 "state",
727 TracedValue::FromValue(BasicStateAsValue().release())); 720 TracedValue::FromValue(BasicStateAsValue().release()));
728 721
729 TRACE_COUNTER_ID1("cc", 722 TRACE_COUNTER_ID1("cc",
730 "unused_memory_bytes", 723 "unused_memory_bytes",
731 this, 724 this,
732 resource_pool_->total_memory_usage_bytes() - 725 resource_pool_->total_memory_usage_bytes() -
733 resource_pool_->acquired_memory_usage_bytes()); 726 resource_pool_->acquired_memory_usage_bytes());
734 } 727 }
735 728
736 bool TileManager::UpdateVisibleTiles() { 729 bool TileManager::UpdateVisibleTiles() {
737 TRACE_EVENT0("cc", "TileManager::UpdateVisibleTiles"); 730 TRACE_EVENT0("cc", "TileManager::UpdateVisibleTiles");
738 731
739 rasterizer_delegate_->CheckForCompletedTasks(); 732 rasterizer_->CheckForCompletedTasks();
740 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 733 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
741 734
742 TRACE_EVENT_INSTANT1( 735 TRACE_EVENT_INSTANT1(
743 "cc", 736 "cc",
744 "DidUpdateVisibleTiles", 737 "DidUpdateVisibleTiles",
745 TRACE_EVENT_SCOPE_THREAD, 738 TRACE_EVENT_SCOPE_THREAD,
746 "stats", 739 "stats",
747 TracedValue::FromValue(RasterTaskCompletionStatsAsValue( 740 TracedValue::FromValue(RasterTaskCompletionStatsAsValue(
748 update_visible_tiles_stats_).release())); 741 update_visible_tiles_stats_).release()));
749 update_visible_tiles_stats_ = RasterTaskCompletionStats(); 742 update_visible_tiles_stats_ = RasterTaskCompletionStats();
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
1006 999
1007 void TileManager::ScheduleTasks( 1000 void TileManager::ScheduleTasks(
1008 const TileVector& tiles_that_need_to_be_rasterized) { 1001 const TileVector& tiles_that_need_to_be_rasterized) {
1009 TRACE_EVENT1("cc", 1002 TRACE_EVENT1("cc",
1010 "TileManager::ScheduleTasks", 1003 "TileManager::ScheduleTasks",
1011 "count", 1004 "count",
1012 tiles_that_need_to_be_rasterized.size()); 1005 tiles_that_need_to_be_rasterized.size());
1013 1006
1014 DCHECK(did_check_for_completed_tasks_since_last_schedule_tasks_); 1007 DCHECK(did_check_for_completed_tasks_since_last_schedule_tasks_);
1015 1008
1016 for (size_t i = 0; i < NUM_RASTERIZER_TYPES; ++i) 1009 raster_queue_.Reset();
1017 raster_queue_[i].Reset();
1018 1010
1019 // Build a new task queue containing all task currently needed. Tasks 1011 // Build a new task queue containing all task currently needed. Tasks
1020 // are added in order of priority, highest priority task first. 1012 // are added in order of priority, highest priority task first.
1021 for (TileVector::const_iterator it = tiles_that_need_to_be_rasterized.begin(); 1013 for (TileVector::const_iterator it = tiles_that_need_to_be_rasterized.begin();
1022 it != tiles_that_need_to_be_rasterized.end(); 1014 it != tiles_that_need_to_be_rasterized.end();
1023 ++it) { 1015 ++it) {
1024 Tile* tile = *it; 1016 Tile* tile = *it;
1025 ManagedTileState& mts = tile->managed_state(); 1017 ManagedTileState& mts = tile->managed_state();
1026 ManagedTileState::TileVersion& tile_version = 1018 ManagedTileState::TileVersion& tile_version =
1027 mts.tile_versions[mts.raster_mode]; 1019 mts.tile_versions[mts.raster_mode];
1028 1020
1029 DCHECK(tile_version.requires_resource()); 1021 DCHECK(tile_version.requires_resource());
1030 DCHECK(!tile_version.resource_); 1022 DCHECK(!tile_version.resource_);
1031 1023
1032 if (!tile_version.raster_task_) 1024 if (!tile_version.raster_task_)
1033 tile_version.raster_task_ = CreateRasterTask(tile); 1025 tile_version.raster_task_ = CreateRasterTask(tile);
1034 1026
1035 size_t pool_type = tile->use_gpu_rasterization() ? RASTERIZER_TYPE_GPU 1027 raster_queue_.items.push_back(RasterTaskQueue::Item(
1036 : RASTERIZER_TYPE_DEFAULT;
1037
1038 raster_queue_[pool_type].items.push_back(RasterTaskQueue::Item(
1039 tile_version.raster_task_.get(), tile->required_for_activation())); 1028 tile_version.raster_task_.get(), tile->required_for_activation()));
1040 raster_queue_[pool_type].required_for_activation_count += 1029 raster_queue_.required_for_activation_count +=
1041 tile->required_for_activation(); 1030 tile->required_for_activation();
1042 } 1031 }
1043 1032
1044 // We must reduce the amount of unused resoruces before calling 1033 // We must reduce the amount of unused resoruces before calling
1045 // ScheduleTasks to prevent usage from rising above limits. 1034 // ScheduleTasks to prevent usage from rising above limits.
1046 resource_pool_->ReduceResourceUsage(); 1035 resource_pool_->ReduceResourceUsage();
1047 1036
1048 // Schedule running of |raster_tasks_|. This replaces any previously 1037 // Schedule running of |raster_tasks_|. This replaces any previously
1049 // scheduled tasks and effectively cancels all tasks not present 1038 // scheduled tasks and effectively cancels all tasks not present
1050 // in |raster_tasks_|. 1039 // in |raster_tasks_|.
1051 rasterizer_delegate_->ScheduleTasks(raster_queue_); 1040 rasterizer_->ScheduleTasks(&raster_queue_);
1052 1041
1053 // It's now safe to clean up orphan tasks as raster worker pool is not 1042 // It's now safe to clean up orphan tasks as raster worker pool is not
1054 // allowed to keep around unreferenced raster tasks after ScheduleTasks() has 1043 // allowed to keep around unreferenced raster tasks after ScheduleTasks() has
1055 // been called. 1044 // been called.
1056 orphan_raster_tasks_.clear(); 1045 orphan_raster_tasks_.clear();
1057 1046
1058 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; 1047 did_check_for_completed_tasks_since_last_schedule_tasks_ = false;
1059 } 1048 }
1060 1049
1061 scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask( 1050 scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask(
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
1626 bool prioritize_low_res = tree_priority_ != SMOOTHNESS_TAKES_PRIORITY; 1615 bool prioritize_low_res = tree_priority_ != SMOOTHNESS_TAKES_PRIORITY;
1627 1616
1628 if (b_priority.resolution != a_priority.resolution) { 1617 if (b_priority.resolution != a_priority.resolution) {
1629 return (prioritize_low_res && b_priority.resolution == LOW_RESOLUTION) || 1618 return (prioritize_low_res && b_priority.resolution == LOW_RESOLUTION) ||
1630 (!prioritize_low_res && b_priority.resolution == HIGH_RESOLUTION) || 1619 (!prioritize_low_res && b_priority.resolution == HIGH_RESOLUTION) ||
1631 (a_priority.resolution == NON_IDEAL_RESOLUTION); 1620 (a_priority.resolution == NON_IDEAL_RESOLUTION);
1632 } 1621 }
1633 return a_priority.IsHigherPriorityThan(b_priority); 1622 return a_priority.IsHigherPriorityThan(b_priority);
1634 } 1623 }
1635 1624
1636 void TileManager::SetRasterizersForTesting(Rasterizer* rasterizer, 1625 void TileManager::SetRasterizerForTesting(Rasterizer* rasterizer) {
1637 Rasterizer* gpu_rasterizer) { 1626 rasterizer_ = rasterizer;
1638 Rasterizer* rasterizers[2] = {rasterizer, gpu_rasterizer}; 1627 rasterizer_->SetClient(this);
1639 rasterizer_delegate_ =
1640 RasterizerDelegate::Create(this, rasterizers, arraysize(rasterizers));
1641 } 1628 }
1642 1629
1643 } // namespace cc 1630 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698