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) {} |