Chromium Code Reviews| Index: cc/tiles/tile_manager.cc |
| diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc |
| index bb8e450d332d13f47e38f5ba8a3164f51d23ee07..9baea28018b924d79caabd8459c3187839a41aee 100644 |
| --- a/cc/tiles/tile_manager.cc |
| +++ b/cc/tiles/tile_manager.cc |
| @@ -1358,6 +1358,63 @@ scoped_refptr<TileTask> TileManager::CreateTaskSetFinishedTask( |
| base::Bind(callback, task_set_finished_weak_ptr_factory_.GetWeakPtr()))); |
| } |
| +std::unique_ptr<base::trace_event::ConvertableToTraceFormat> |
| +TileManager::ActivationStateAsValue() { |
| + auto state = base::MakeUnique<base::trace_event::TracedValue>(); |
| + state->SetString("tree_priority", |
| + TreePriorityToString(global_state_.tree_priority)); |
| + state->SetInteger("soft_memory_limit", |
| + global_state_.soft_memory_limit_in_bytes); |
| + state->SetInteger("hard_memory_limit", |
| + global_state_.soft_memory_limit_in_bytes); |
| + state->SetInteger("pending_required_for_activation_callback_id", |
| + pending_required_for_activation_callback_id_); |
| + state->SetInteger("current_memory_usage", |
| + resource_pool_->memory_usage_bytes()); |
| + state->SetInteger("current_resource_usage", resource_pool_->resource_count()); |
| + |
| + // Use a custom tile_as_value, instead of Tile::AsValueInto, since we don't |
| + // need all of the state that would be captured by other functions. |
| + auto tile_as_value = [](const PrioritizedTile& prioritized_tile, |
| + base::trace_event::TracedValue* value) { |
|
sunnyps
2017/04/06 01:12:37
nit: I'd expect the value param to be exclusive to
vmpstr
2017/04/06 18:16:28
Done.
|
| + Tile* tile = prioritized_tile.tile(); |
| + TilePriority priority = prioritized_tile.priority(); |
| + |
| + value->BeginDictionary(); |
| + value->SetInteger("id", tile->id()); |
| + value->SetString("content_rect", tile->content_rect().ToString().c_str()); |
|
sunnyps
2017/04/06 01:12:37
nit: SetString takes a StringPiece so you don't ne
vmpstr
2017/04/06 18:16:28
Done.
|
| + value->SetDouble("contents_scale", tile->contents_scale()); |
| + value->SetBoolean("is_ready_to_draw", tile->draw_info().IsReadyToDraw()); |
| + value->SetString("resolution", TileResolutionToString(priority.resolution)); |
| + value->SetString("priority_bin", |
| + TilePriorityBinToString(priority.priority_bin)); |
| + value->SetDouble("distance_to_visible", priority.distance_to_visible); |
| + value->SetBoolean("required_for_activation", |
| + tile->required_for_activation()); |
| + value->SetBoolean("required_for_draw", tile->required_for_draw()); |
| + value->EndDictionary(); |
| + }; |
| + |
| + std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue( |
| + client_->BuildRasterQueue(global_state_.tree_priority, |
| + RasterTilePriorityQueue::Type::ALL)); |
| + state->BeginArray("raster_tiles"); |
| + for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) |
| + tile_as_value(raster_priority_queue->Top(), state.get()); |
| + state->EndArray(); |
| + |
| + std::unique_ptr<RasterTilePriorityQueue> required_priority_queue( |
| + client_->BuildRasterQueue( |
| + global_state_.tree_priority, |
| + RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION)); |
| + state->BeginArray("activation_tiles"); |
| + for (; !required_priority_queue->IsEmpty(); required_priority_queue->Pop()) |
| + tile_as_value(required_priority_queue->Top(), state.get()); |
| + state->EndArray(); |
| + |
| + return state; |
| +} |
| + |
| TileManager::MemoryUsage::MemoryUsage() |
| : memory_bytes_(0), resource_count_(0) {} |