| 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 case NEVER_BIN: | 88 case NEVER_BIN: |
| 89 return scoped_ptr<base::Value>(base::Value::CreateStringValue( | 89 return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 90 "NEVER_BIN")); | 90 "NEVER_BIN")); |
| 91 default: | 91 default: |
| 92 DCHECK(false) << "Unrecognized TileManagerBin value"; | 92 DCHECK(false) << "Unrecognized TileManagerBin value"; |
| 93 return scoped_ptr<base::Value>(base::Value::CreateStringValue( | 93 return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 94 "<unknown TileManagerBin value>")); | 94 "<unknown TileManagerBin value>")); |
| 95 } | 95 } |
| 96 } | 96 } |
| 97 | 97 |
| 98 scoped_ptr<base::Value> TileManagerBinPriorityAsValue( |
| 99 TileManagerBinPriority bin_priority) { |
| 100 switch (bin_priority) { |
| 101 case HIGH_PRIORITY_BIN: |
| 102 return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 103 "HIGH_PRIORITY_BIN")); |
| 104 case LOW_PRIORITY_BIN: |
| 105 return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 106 "LOW_PRIORITY_BIN")); |
| 107 default: |
| 108 DCHECK(false) << "Unrecognized TileManagerBinPriority value"; |
| 109 return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 110 "<unknown TileManagerBinPriority value>")); |
| 111 } |
| 112 } |
| 113 |
| 114 scoped_ptr<base::Value> TileRasterStateAsValue( |
| 115 TileRasterState raster_state) { |
| 116 switch (raster_state) { |
| 117 case IDLE_STATE: |
| 118 return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 119 "IDLE_STATE")); |
| 120 case WAITING_FOR_RASTER_STATE: |
| 121 return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 122 "WAITING_FOR_RASTER_STATE")); |
| 123 case RASTER_STATE: |
| 124 return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 125 "RASTER_STATE")); |
| 126 case SET_PIXELS_STATE: |
| 127 return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 128 "SET_PIXELS_STATE")); |
| 129 default: |
| 130 DCHECK(false) << "Unrecognized TileRasterState value"; |
| 131 return scoped_ptr<base::Value>(base::Value::CreateStringValue( |
| 132 "<unknown TileRasterState value>")); |
| 133 } |
| 134 } |
| 135 |
| 98 ManagedTileState::ManagedTileState() | 136 ManagedTileState::ManagedTileState() |
| 99 : can_use_gpu_memory(false), | 137 : can_use_gpu_memory(false), |
| 100 can_be_freed(true), | 138 can_be_freed(true), |
| 101 resource_is_being_initialized(false), | 139 resource_is_being_initialized(false), |
| 102 contents_swizzled(false), | 140 contents_swizzled(false), |
| 103 need_to_gather_pixel_refs(true), | 141 need_to_gather_pixel_refs(true), |
| 104 gpu_memmgr_stats_bin(NEVER_BIN), | 142 gpu_memmgr_stats_bin(NEVER_BIN), |
| 105 raster_state(IDLE_STATE) { | 143 raster_state(IDLE_STATE) { |
| 106 for (int i = 0; i < NUM_TREES; ++i) | 144 for (int i = 0; i < NUM_TREES; ++i) |
| 107 tree_bin[i] = NEVER_BIN; | 145 tree_bin[i] = NEVER_BIN; |
| 108 } | 146 } |
| 109 | 147 |
| 110 ManagedTileState::~ManagedTileState() { | 148 ManagedTileState::~ManagedTileState() { |
| 111 DCHECK(!resource); | 149 DCHECK(!resource); |
| 112 DCHECK(!resource_is_being_initialized); | 150 DCHECK(!resource_is_being_initialized); |
| 113 } | 151 } |
| 114 | 152 |
| 153 scoped_ptr<base::Value> ManagedTileState::AsValue() const { |
| 154 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
| 155 state->SetBoolean("can_use_gpu_memory", can_use_gpu_memory); |
| 156 state->SetBoolean("can_be_freed", can_be_freed); |
| 157 state->SetBoolean("has_resource", resource.get() != 0); |
| 158 state->SetBoolean("resource_is_being_initialized", resource_is_being_initializ
ed); |
| 159 state->Set("raster_state", TileRasterStateAsValue(raster_state).release()); |
| 160 state->Set("bin.0", TileManagerBinAsValue(bin[0]).release()); |
| 161 state->Set("bin.1", TileManagerBinAsValue(bin[0]).release()); |
| 162 state->Set("gpu_memmgr_stats_bin", TileManagerBinAsValue(bin[0]).release()); |
| 163 state->Set("resolution", TileResolutionAsValue(resolution).release()); |
| 164 state->SetDouble("time_to_needed_in_seconds", time_to_needed_in_seconds); |
| 165 return state.PassAs<base::Value>(); |
| 166 } |
| 167 |
| 115 TileManager::TileManager( | 168 TileManager::TileManager( |
| 116 TileManagerClient* client, | 169 TileManagerClient* client, |
| 117 ResourceProvider* resource_provider, | 170 ResourceProvider* resource_provider, |
| 118 size_t num_raster_threads, | 171 size_t num_raster_threads, |
| 119 bool use_cheapness_estimator) | 172 bool use_cheapness_estimator) |
| 120 : client_(client), | 173 : client_(client), |
| 121 resource_pool_(ResourcePool::Create(resource_provider)), | 174 resource_pool_(ResourcePool::Create(resource_provider)), |
| 122 raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads)), | 175 raster_worker_pool_(RasterWorkerPool::Create(num_raster_threads)), |
| 123 manage_tiles_pending_(false), | 176 manage_tiles_pending_(false), |
| 124 manage_tiles_call_count_(0), | 177 manage_tiles_call_count_(0), |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 | 384 |
| 332 DidTileBinChange(tile, bin_map[mts.tree_bin[ACTIVE_TREE]], ACTIVE_TREE); | 385 DidTileBinChange(tile, bin_map[mts.tree_bin[ACTIVE_TREE]], ACTIVE_TREE); |
| 333 DidTileBinChange(tile, bin_map[mts.tree_bin[PENDING_TREE]], PENDING_TREE); | 386 DidTileBinChange(tile, bin_map[mts.tree_bin[PENDING_TREE]], PENDING_TREE); |
| 334 } | 387 } |
| 335 | 388 |
| 336 SortTiles(); | 389 SortTiles(); |
| 337 | 390 |
| 338 // Assign gpu memory and determine what tiles need to be rasterized. | 391 // Assign gpu memory and determine what tiles need to be rasterized. |
| 339 AssignGpuMemoryToTiles(); | 392 AssignGpuMemoryToTiles(); |
| 340 | 393 |
| 341 TRACE_EVENT_INSTANT1("cc", "DidManage", "state", ValueToString(AsValue())); | 394 TRACE_EVENT_INSTANT1("cc", "DidManage", "state", |
| 395 ValueToString(BasicStateAsValue())); |
| 342 | 396 |
| 343 // Finally, kick the rasterizer. | 397 // Finally, kick the rasterizer. |
| 344 DispatchMoreTasks(); | 398 DispatchMoreTasks(); |
| 345 } | 399 } |
| 346 | 400 |
| 347 void TileManager::CheckForCompletedTileUploads() { | 401 void TileManager::CheckForCompletedTileUploads() { |
| 348 while (!tiles_with_pending_set_pixels_.empty()) { | 402 while (!tiles_with_pending_set_pixels_.empty()) { |
| 349 Tile* tile = tiles_with_pending_set_pixels_.front(); | 403 Tile* tile = tiles_with_pending_set_pixels_.front(); |
| 350 DCHECK(tile->managed_state().resource); | 404 DCHECK(tile->managed_state().resource); |
| 351 | 405 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 size_t tile_bytes = tile->bytes_consumed_if_allocated(); | 440 size_t tile_bytes = tile->bytes_consumed_if_allocated(); |
| 387 if (mts.gpu_memmgr_stats_bin == NOW_BIN) | 441 if (mts.gpu_memmgr_stats_bin == NOW_BIN) |
| 388 *memoryRequiredBytes += tile_bytes; | 442 *memoryRequiredBytes += tile_bytes; |
| 389 if (mts.gpu_memmgr_stats_bin != NEVER_BIN) | 443 if (mts.gpu_memmgr_stats_bin != NEVER_BIN) |
| 390 *memoryNiceToHaveBytes += tile_bytes; | 444 *memoryNiceToHaveBytes += tile_bytes; |
| 391 if (mts.can_use_gpu_memory) | 445 if (mts.can_use_gpu_memory) |
| 392 *memoryUsedBytes += tile_bytes; | 446 *memoryUsedBytes += tile_bytes; |
| 393 } | 447 } |
| 394 } | 448 } |
| 395 | 449 |
| 396 scoped_ptr<base::Value> TileManager::AsValue() const { | 450 scoped_ptr<base::Value> TileManager::BasicStateAsValue() const { |
| 397 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); | 451 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
| 398 state->SetInteger("tile_count", tiles_.size()); | 452 state->SetInteger("tile_count", tiles_.size()); |
| 399 | 453 |
| 400 state->Set("global_state", global_state_.AsValue().release()); | 454 state->Set("global_state", global_state_.AsValue().release()); |
| 401 | 455 |
| 402 state->Set("memory_requirements", GetMemoryRequirementsAsValue().release()); | 456 state->Set("memory_requirements", GetMemoryRequirementsAsValue().release()); |
| 403 return state.PassAs<base::Value>(); | 457 return state.PassAs<base::Value>(); |
| 404 } | 458 } |
| 459 scoped_ptr<base::Value> TileManager::AllTilesAsValue() const { |
| 460 scoped_ptr<base::ListValue> state(new base::ListValue()); |
| 461 for (size_t i = 0; i < tiles_.size(); i++) |
| 462 state->Append(tiles_[i]->AsValue().release()); |
| 463 return state.PassAs<base::Value>(); |
| 464 } |
| 405 | 465 |
| 406 scoped_ptr<base::Value> TileManager::GetMemoryRequirementsAsValue() const { | 466 scoped_ptr<base::Value> TileManager::GetMemoryRequirementsAsValue() const { |
| 407 scoped_ptr<base::DictionaryValue> requirements( | 467 scoped_ptr<base::DictionaryValue> requirements( |
| 408 new base::DictionaryValue()); | 468 new base::DictionaryValue()); |
| 409 | 469 |
| 410 size_t memoryRequiredBytes; | 470 size_t memoryRequiredBytes; |
| 411 size_t memoryNiceToHaveBytes; | 471 size_t memoryNiceToHaveBytes; |
| 412 size_t memoryUsedBytes; | 472 size_t memoryUsedBytes; |
| 413 GetMemoryStats(&memoryRequiredBytes, | 473 GetMemoryStats(&memoryRequiredBytes, |
| 414 &memoryNiceToHaveBytes, | 474 &memoryNiceToHaveBytes, |
| (...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 885 decode_begin_time = base::TimeTicks::Now(); | 945 decode_begin_time = base::TimeTicks::Now(); |
| 886 pixel_ref->Decode(); | 946 pixel_ref->Decode(); |
| 887 if (stats) { | 947 if (stats) { |
| 888 stats->totalDeferredImageDecodeCount++; | 948 stats->totalDeferredImageDecodeCount++; |
| 889 stats->totalDeferredImageDecodeTime += | 949 stats->totalDeferredImageDecodeTime += |
| 890 base::TimeTicks::Now() - decode_begin_time; | 950 base::TimeTicks::Now() - decode_begin_time; |
| 891 } | 951 } |
| 892 } | 952 } |
| 893 | 953 |
| 894 } // namespace cc | 954 } // namespace cc |
| OLD | NEW |