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

Side by Side Diff: cc/tile_manager.cc

Issue 12096112: [cc] Trace detailed tile info when --trace-all-rendered-frames (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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
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/tile_manager.h" 5 #include "cc/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 case NEVER_BIN: 87 case NEVER_BIN:
88 return scoped_ptr<base::Value>(base::Value::CreateStringValue( 88 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
89 "NEVER_BIN")); 89 "NEVER_BIN"));
90 default: 90 default:
91 DCHECK(false) << "Unrecognized TileManagerBin value"; 91 DCHECK(false) << "Unrecognized TileManagerBin value";
92 return scoped_ptr<base::Value>(base::Value::CreateStringValue( 92 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
93 "<unknown TileManagerBin value>")); 93 "<unknown TileManagerBin value>"));
94 } 94 }
95 } 95 }
96 96
97 scoped_ptr<base::Value> TileManagerBinPriorityAsValue(
98 TileManagerBinPriority bin_priority) {
99 switch (bin_priority) {
100 case HIGH_PRIORITY_BIN:
101 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
102 "HIGH_PRIORITY_BIN"));
103 case LOW_PRIORITY_BIN:
104 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
105 "LOW_PRIORITY_BIN"));
106 default:
107 DCHECK(false) << "Unrecognized TileManagerBinPriority value";
108 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
109 "<unknown TileManagerBinPriority value>"));
110 }
111 }
112
113 scoped_ptr<base::Value> TileRasterStateAsValue(
114 TileRasterState raster_state) {
115 switch (raster_state) {
116 case IDLE_STATE:
117 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
118 "IDLE_STATE"));
119 case WAITING_FOR_RASTER_STATE:
120 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
121 "WAITING_FOR_RASTER_STATE"));
122 case RASTER_STATE:
123 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
124 "RASTER_STATE"));
125 case SET_PIXELS_STATE:
126 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
127 "SET_PIXELS_STATE"));
128 default:
129 DCHECK(false) << "Unrecognized TileRasterState value";
130 return scoped_ptr<base::Value>(base::Value::CreateStringValue(
131 "<unknown TileRasterState value>"));
132 }
133 }
134
97 ManagedTileState::ManagedTileState() 135 ManagedTileState::ManagedTileState()
98 : can_use_gpu_memory(false), 136 : can_use_gpu_memory(false),
99 can_be_freed(true), 137 can_be_freed(true),
100 resource_is_being_initialized(false), 138 resource_is_being_initialized(false),
101 contents_swizzled(false), 139 contents_swizzled(false),
102 need_to_gather_pixel_refs(true), 140 need_to_gather_pixel_refs(true),
103 gpu_memmgr_stats_bin(NEVER_BIN), 141 gpu_memmgr_stats_bin(NEVER_BIN),
104 raster_state(IDLE_STATE) { 142 raster_state(IDLE_STATE) {
105 for (int i = 0; i < NUM_TREES; ++i) 143 for (int i = 0; i < NUM_TREES; ++i)
106 tree_bin[i] = NEVER_BIN; 144 tree_bin[i] = NEVER_BIN;
107 } 145 }
108 146
109 ManagedTileState::~ManagedTileState() { 147 ManagedTileState::~ManagedTileState() {
110 DCHECK(!resource); 148 DCHECK(!resource);
111 DCHECK(!resource_is_being_initialized); 149 DCHECK(!resource_is_being_initialized);
112 } 150 }
113 151
152 scoped_ptr<base::Value> ManagedTileState::AsValue() const {
153 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
154 state->SetBoolean("can_use_gpu_memory", can_use_gpu_memory);
155 state->SetBoolean("can_be_freed", can_be_freed);
156 state->SetBoolean("has_resource", resource.get() != 0);
157 state->SetBoolean("resource_is_being_initialized", resource_is_being_initializ ed);
158 state->Set("raster_state", TileRasterStateAsValue(raster_state).release());
159 state->Set("bin.0", TileManagerBinAsValue(bin[0]).release());
160 state->Set("bin.1", TileManagerBinAsValue(bin[0]).release());
161 state->Set("gpu_memmgr_stats_bin", TileManagerBinAsValue(bin[0]).release());
162 state->Set("resolution", TileResolutionAsValue(resolution).release());
163 state->SetDouble("time_to_needed_in_seconds", time_to_needed_in_seconds);
164 return state.PassAs<base::Value>();
165 }
166
114 TileManager::TileManager( 167 TileManager::TileManager(
115 TileManagerClient* client, 168 TileManagerClient* client,
116 ResourceProvider* resource_provider, 169 ResourceProvider* resource_provider,
117 size_t num_raster_threads) 170 size_t num_raster_threads)
118 : client_(client), 171 : client_(client),
119 resource_pool_(ResourcePool::Create(resource_provider)), 172 resource_pool_(ResourcePool::Create(resource_provider)),
120 raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads)), 173 raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads)),
121 manage_tiles_pending_(false), 174 manage_tiles_pending_(false),
122 manage_tiles_call_count_(0), 175 manage_tiles_call_count_(0),
123 bytes_pending_set_pixels_(0), 176 bytes_pending_set_pixels_(0),
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 362
310 DidTileBinChange(tile, bin_map[mts.tree_bin[ACTIVE_TREE]], ACTIVE_TREE); 363 DidTileBinChange(tile, bin_map[mts.tree_bin[ACTIVE_TREE]], ACTIVE_TREE);
311 DidTileBinChange(tile, bin_map[mts.tree_bin[PENDING_TREE]], PENDING_TREE); 364 DidTileBinChange(tile, bin_map[mts.tree_bin[PENDING_TREE]], PENDING_TREE);
312 } 365 }
313 366
314 SortTiles(); 367 SortTiles();
315 368
316 // Assign gpu memory and determine what tiles need to be rasterized. 369 // Assign gpu memory and determine what tiles need to be rasterized.
317 AssignGpuMemoryToTiles(); 370 AssignGpuMemoryToTiles();
318 371
319 TRACE_EVENT_INSTANT1("cc", "DidManage", "state", ValueToString(AsValue())); 372 TRACE_EVENT_INSTANT1("cc", "DidManage", "state",
373 ValueToString(AsValue()));
320 374
321 // Finally, kick the rasterizer. 375 // Finally, kick the rasterizer.
322 DispatchMoreTasks(); 376 DispatchMoreTasks();
323 } 377 }
324 378
325 void TileManager::CheckForCompletedTileUploads() { 379 void TileManager::CheckForCompletedTileUploads() {
326 while (!tiles_with_pending_set_pixels_.empty()) { 380 while (!tiles_with_pending_set_pixels_.empty()) {
327 Tile* tile = tiles_with_pending_set_pixels_.front(); 381 Tile* tile = tiles_with_pending_set_pixels_.front();
328 DCHECK(tile->managed_state().resource); 382 DCHECK(tile->managed_state().resource);
329 383
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 427
374 scoped_ptr<base::Value> TileManager::AsValue() const { 428 scoped_ptr<base::Value> TileManager::AsValue() const {
375 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); 429 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
376 state->SetInteger("tile_count", tiles_.size()); 430 state->SetInteger("tile_count", tiles_.size());
377 431
378 state->Set("global_state", global_state_.AsValue().release()); 432 state->Set("global_state", global_state_.AsValue().release());
379 433
380 state->Set("memory_requirements", GetMemoryRequirementsAsValue().release()); 434 state->Set("memory_requirements", GetMemoryRequirementsAsValue().release());
381 return state.PassAs<base::Value>(); 435 return state.PassAs<base::Value>();
382 } 436 }
437 scoped_ptr<base::Value> TileManager::AllTilesAsValue() const {
438 scoped_ptr<base::ListValue> state(new base::ListValue());
439 for (size_t i = 0; i < tiles_.size(); i++)
440 state->Append(tiles_[i]->AsValue().release());
441 return state.PassAs<base::Value>();
442 }
383 443
384 scoped_ptr<base::Value> TileManager::GetMemoryRequirementsAsValue() const { 444 scoped_ptr<base::Value> TileManager::GetMemoryRequirementsAsValue() const {
385 scoped_ptr<base::DictionaryValue> requirements( 445 scoped_ptr<base::DictionaryValue> requirements(
386 new base::DictionaryValue()); 446 new base::DictionaryValue());
387 447
388 size_t memoryRequiredBytes; 448 size_t memoryRequiredBytes;
389 size_t memoryNiceToHaveBytes; 449 size_t memoryNiceToHaveBytes;
390 size_t memoryUsedBytes; 450 size_t memoryUsedBytes;
391 GetMemoryStats(&memoryRequiredBytes, 451 GetMemoryStats(&memoryRequiredBytes,
392 &memoryNiceToHaveBytes, 452 &memoryNiceToHaveBytes,
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 RenderingStats* stats) { 833 RenderingStats* stats) {
774 TRACE_EVENT0("cc", "TileManager::RunImageDecodeTask"); 834 TRACE_EVENT0("cc", "TileManager::RunImageDecodeTask");
775 base::TimeTicks decode_begin_time = base::TimeTicks::Now(); 835 base::TimeTicks decode_begin_time = base::TimeTicks::Now();
776 pixel_ref->Decode(); 836 pixel_ref->Decode();
777 stats->totalDeferredImageDecodeCount++; 837 stats->totalDeferredImageDecodeCount++;
778 stats->totalDeferredImageDecodeTime += 838 stats->totalDeferredImageDecodeTime +=
779 base::TimeTicks::Now() - decode_begin_time; 839 base::TimeTicks::Now() - decode_begin_time;
780 } 840 }
781 841
782 } // namespace cc 842 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698