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

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

Issue 23757024: cc: Speed up CleanUpImageDecodeTasks a bit. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 global_state_.memory_limit_in_bytes, 183 global_state_.memory_limit_in_bytes,
184 global_state_.unused_memory_limit_in_bytes, 184 global_state_.unused_memory_limit_in_bytes,
185 global_state_.num_resources_limit); 185 global_state_.num_resources_limit);
186 } 186 }
187 187
188 void TileManager::RegisterTile(Tile* tile) { 188 void TileManager::RegisterTile(Tile* tile) {
189 DCHECK(!tile->required_for_activation()); 189 DCHECK(!tile->required_for_activation());
190 DCHECK(tiles_.find(tile->id()) == tiles_.end()); 190 DCHECK(tiles_.find(tile->id()) == tiles_.end());
191 191
192 tiles_[tile->id()] = tile; 192 tiles_[tile->id()] = tile;
193 used_layer_counts_[tile->layer_id()]++;
193 prioritized_tiles_dirty_ = true; 194 prioritized_tiles_dirty_ = true;
194 } 195 }
195 196
196 void TileManager::UnregisterTile(Tile* tile) { 197 void TileManager::UnregisterTile(Tile* tile) {
197 FreeResourcesForTile(tile); 198 FreeResourcesForTile(tile);
198 199
199 DCHECK(tiles_.find(tile->id()) != tiles_.end()); 200 DCHECK(tiles_.find(tile->id()) != tiles_.end());
200 tiles_.erase(tile->id()); 201 tiles_.erase(tile->id());
202
203 LayerCountMap::iterator layer_it = used_layer_counts_.find(tile->layer_id());
204 DCHECK_GT(layer_it->second, 0);
205 if (--layer_it->second == 0) {
206 used_layer_counts_.erase(layer_it);
207 image_decode_tasks_.erase(tile->layer_id());
208 }
209
201 prioritized_tiles_dirty_ = true; 210 prioritized_tiles_dirty_ = true;
202 } 211 }
203 212
204 void TileManager::DidChangeTilePriority(Tile* tile) { 213 void TileManager::DidChangeTilePriority(Tile* tile) {
205 prioritized_tiles_dirty_ = true; 214 prioritized_tiles_dirty_ = true;
206 } 215 }
207 216
208 bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const { 217 bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const {
209 return GlobalState().tree_priority != SMOOTHNESS_TAKES_PRIORITY; 218 return GlobalState().tree_priority != SMOOTHNESS_TAKES_PRIORITY;
210 } 219 }
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 tiles->InsertTile(tile, priority_bin); 371 tiles->InsertTile(tile, priority_bin);
363 } 372 }
364 } 373 }
365 374
366 void TileManager::ManageTiles() { 375 void TileManager::ManageTiles() {
367 TRACE_EVENT0("cc", "TileManager::ManageTiles"); 376 TRACE_EVENT0("cc", "TileManager::ManageTiles");
368 377
369 TileVector tiles_that_need_to_be_rasterized; 378 TileVector tiles_that_need_to_be_rasterized;
370 AssignGpuMemoryToTiles(GetPrioritizedTileSet(), 379 AssignGpuMemoryToTiles(GetPrioritizedTileSet(),
371 &tiles_that_need_to_be_rasterized); 380 &tiles_that_need_to_be_rasterized);
372 CleanUpUnusedImageDecodeTasks();
373 381
374 // Finally, schedule rasterizer tasks. 382 // Finally, schedule rasterizer tasks.
375 ScheduleTasks(tiles_that_need_to_be_rasterized); 383 ScheduleTasks(tiles_that_need_to_be_rasterized);
376 384
377 TRACE_EVENT_INSTANT1( 385 TRACE_EVENT_INSTANT1(
378 "cc", "DidManage", TRACE_EVENT_SCOPE_THREAD, 386 "cc", "DidManage", TRACE_EVENT_SCOPE_THREAD,
379 "state", TracedValue::FromValue(BasicStateAsValue().release())); 387 "state", TracedValue::FromValue(BasicStateAsValue().release()));
380 388
381 TRACE_COUNTER_ID1("cc", "unused_memory_bytes", this, 389 TRACE_COUNTER_ID1("cc", "unused_memory_bytes", this,
382 resource_pool_->total_memory_usage_bytes() - 390 resource_pool_->total_memory_usage_bytes() -
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 memory_stats_from_last_assign_.total_budget_in_bytes = 621 memory_stats_from_last_assign_.total_budget_in_bytes =
614 global_state_.memory_limit_in_bytes; 622 global_state_.memory_limit_in_bytes;
615 memory_stats_from_last_assign_.bytes_allocated = 623 memory_stats_from_last_assign_.bytes_allocated =
616 bytes_allocatable - bytes_left; 624 bytes_allocatable - bytes_left;
617 memory_stats_from_last_assign_.bytes_unreleasable = 625 memory_stats_from_last_assign_.bytes_unreleasable =
618 bytes_allocatable - bytes_releasable_; 626 bytes_allocatable - bytes_releasable_;
619 memory_stats_from_last_assign_.bytes_over = 627 memory_stats_from_last_assign_.bytes_over =
620 bytes_that_exceeded_memory_budget; 628 bytes_that_exceeded_memory_budget;
621 } 629 }
622 630
623 void TileManager::CleanUpUnusedImageDecodeTasks() {
624 if (image_decode_tasks_.empty())
625 return;
626
627 // Calculate a set of layers that are used by at least one tile.
628 base::hash_set<int> used_layers;
629 for (TileMap::iterator it = tiles_.begin(); it != tiles_.end(); ++it)
630 used_layers.insert(it->second->layer_id());
631
632 // Now calculate the set of layers in |image_decode_tasks_| that are not used
633 // by any tile.
634 std::vector<int> unused_layers;
635 for (LayerPixelRefTaskMap::iterator it = image_decode_tasks_.begin();
636 it != image_decode_tasks_.end();
637 ++it) {
638 if (used_layers.find(it->first) == used_layers.end())
639 unused_layers.push_back(it->first);
640 }
641
642 // Erase unused layers from |image_decode_tasks_|.
643 for (std::vector<int>::iterator it = unused_layers.begin();
644 it != unused_layers.end();
645 ++it) {
646 image_decode_tasks_.erase(*it);
647 }
648 }
649
650 void TileManager::FreeResourceForTile(Tile* tile, RasterMode mode) { 631 void TileManager::FreeResourceForTile(Tile* tile, RasterMode mode) {
651 ManagedTileState& mts = tile->managed_state(); 632 ManagedTileState& mts = tile->managed_state();
652 if (mts.tile_versions[mode].resource_) { 633 if (mts.tile_versions[mode].resource_) {
653 resource_pool_->ReleaseResource( 634 resource_pool_->ReleaseResource(
654 mts.tile_versions[mode].resource_.Pass()); 635 mts.tile_versions[mode].resource_.Pass());
655 636
656 DCHECK_GE(bytes_releasable_, tile->bytes_consumed_if_allocated()); 637 DCHECK_GE(bytes_releasable_, tile->bytes_consumed_if_allocated());
657 DCHECK_GE(resources_releasable_, 1u); 638 DCHECK_GE(resources_releasable_, 1u);
658 639
659 bytes_releasable_ -= tile->bytes_consumed_if_allocated(); 640 bytes_releasable_ -= tile->bytes_consumed_if_allocated();
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 bytes_releasable_ += tile->bytes_consumed_if_allocated(); 827 bytes_releasable_ += tile->bytes_consumed_if_allocated();
847 ++resources_releasable_; 828 ++resources_releasable_;
848 } 829 }
849 830
850 FreeUnusedResourcesForTile(tile); 831 FreeUnusedResourcesForTile(tile);
851 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) 832 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0)
852 did_initialize_visible_tile_ = true; 833 did_initialize_visible_tile_ = true;
853 } 834 }
854 835
855 } // namespace cc 836 } // 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