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 |