| 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 |