OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |