Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3976)

Unified Diff: cc/tile_manager.cc

Issue 12519006: cc:: Add RenderingStatsInstrumentation to manage collection of RenderingStats (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Early out in methods, pass raw pointers, updated tests Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/tile_manager.cc
diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc
index 8b49b15a75226e899e2a29543d5b4a05c94f1b9b..6cd86ba28d1929e002bed5dfd20c8074d6888494 100644
--- a/cc/tile_manager.cc
+++ b/cc/tile_manager.cc
@@ -192,6 +192,7 @@ TileManager::TileManager(
TileManagerClient* client,
ResourceProvider* resource_provider,
size_t num_raster_threads,
+ RenderingStatsRecorder* rendering_stats_recorder,
bool use_cheapness_estimator,
bool use_color_estimator,
bool prediction_benchmarking)
@@ -203,7 +204,7 @@ TileManager::TileManager(
bytes_pending_upload_(0),
has_performed_uploads_since_last_flush_(false),
ever_exceeded_memory_budget_(false),
- record_rendering_stats_(false),
+ rendering_stats_recorder_(rendering_stats_recorder),
use_cheapness_estimator_(use_cheapness_estimator),
use_color_estimator_(use_color_estimator),
allow_cheap_tasks_(true),
@@ -528,24 +529,6 @@ scoped_ptr<base::Value> TileManager::GetMemoryRequirementsAsValue() const {
return requirements.PassAs<base::Value>();
}
-void TileManager::SetRecordRenderingStats(bool record_rendering_stats) {
- if (record_rendering_stats_ == record_rendering_stats)
- return;
-
- record_rendering_stats_ = record_rendering_stats;
- raster_worker_pool_->SetRecordRenderingStats(record_rendering_stats);
-}
-
-void TileManager::GetRenderingStats(RenderingStats* stats) {
- CHECK(record_rendering_stats_);
- raster_worker_pool_->GetRenderingStats(stats);
- stats->totalDeferredImageCacheHitCount =
- rendering_stats_.totalDeferredImageCacheHitCount;
- stats->totalImageGatheringCount = rendering_stats_.totalImageGatheringCount;
- stats->totalImageGatheringTime =
- rendering_stats_.totalImageGatheringTime;
-}
-
bool TileManager::HasPendingWorkScheduled(WhichTree tree) const {
// Always true when ManageTiles() call is pending.
if (manage_tiles_pending_)
@@ -758,19 +741,15 @@ void TileManager::GatherPixelRefsForTile(Tile* tile) {
TRACE_EVENT0("cc", "TileManager::GatherPixelRefsForTile");
ManagedTileState& managed_tile_state = tile->managed_state();
if (managed_tile_state.need_to_gather_pixel_refs) {
- base::TimeTicks gather_begin_time;
- if (record_rendering_stats_)
- gather_begin_time = base::TimeTicks::HighResNow();
+ base::TimeTicks start_time = rendering_stats_recorder_->StartRecording();
tile->picture_pile()->GatherPixelRefs(
tile->content_rect_,
tile->contents_scale_,
managed_tile_state.pending_pixel_refs);
managed_tile_state.need_to_gather_pixel_refs = false;
- if (record_rendering_stats_) {
- rendering_stats_.totalImageGatheringCount++;
- rendering_stats_.totalImageGatheringTime +=
- base::TimeTicks::HighResNow() - gather_begin_time;
- }
+ base::TimeDelta duration =
+ rendering_stats_recorder_->EndRecording(start_time);
+ rendering_stats_recorder_->AddImageGathering(duration);
}
}
@@ -787,7 +766,7 @@ void TileManager::DispatchImageDecodeTasksForTile(Tile* tile) {
}
// TODO(qinmin): passing correct image size to PrepareToDecode().
if ((*it)->PrepareToDecode(skia::LazyPixelRef::PrepareParams())) {
- rendering_stats_.totalDeferredImageCacheHitCount++;
+ rendering_stats_recorder_->IncrementDeferredImageCacheHitCount();
pending_pixel_refs.erase(it++);
} else {
if (pending_tasks_ >= max_pending_tasks_)
@@ -807,7 +786,9 @@ void TileManager::DispatchOneImageDecodeTask(
pending_decode_tasks_[pixel_ref_id] = pixel_ref;
raster_worker_pool_->PostTaskAndReply(
- base::Bind(&TileManager::RunImageDecodeTask, pixel_ref),
+ base::Bind(&TileManager::RunImageDecodeTask,
+ pixel_ref,
+ rendering_stats_recorder_),
base::Bind(&TileManager::OnImageDecodeTaskCompleted,
base::Unretained(this),
tile,
@@ -871,7 +852,8 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) {
buffer,
tile->content_rect(),
tile->contents_scale(),
- GetRasterTaskMetadata(*tile)),
+ GetRasterTaskMetadata(*tile),
+ rendering_stats_recorder_),
base::Bind(&TileManager::OnRasterTaskCompleted,
base::Unretained(this),
tile,
@@ -987,12 +969,13 @@ void TileManager::DidTileTreeBinChange(Tile* tile,
}
// static
-void TileManager::RunRasterTask(uint8* buffer,
- const gfx::Rect& rect,
- float contents_scale,
- const RasterTaskMetadata& metadata,
- PicturePileImpl* picture_pile,
- RenderingStats* stats) {
+void TileManager::RunRasterTask(
+ uint8* buffer,
+ const gfx::Rect& rect,
+ float contents_scale,
+ const RasterTaskMetadata& metadata,
+ RenderingStatsRecorder* stats_recorder,
+ PicturePileImpl* picture_pile) {
TRACE_EVENT2(
"cc", "TileManager::RunRasterTask",
"is_on_pending_tree",
@@ -1010,22 +993,16 @@ void TileManager::RunRasterTask(uint8* buffer,
SkDevice device(bitmap);
SkCanvas canvas(&device);
- base::TimeTicks begin_time;
- if (stats)
- begin_time = base::TimeTicks::HighResNow();
+ base::TimeTicks start_time = stats_recorder->StartRecording();
int64 total_pixels_rasterized = 0;
picture_pile->Raster(&canvas, rect, contents_scale,
&total_pixels_rasterized);
- if (stats) {
- stats->totalPixelsRasterized += total_pixels_rasterized;
+ base::TimeDelta duration = stats_recorder->EndRecording(start_time);
- base::TimeTicks end_time = base::TimeTicks::HighResNow();
- base::TimeDelta duration = end_time - begin_time;
- stats->totalRasterizeTime += duration;
- if (metadata.is_tile_in_pending_tree_now_bin)
- stats->totalRasterizeTimeForNowBinsOnPendingTree += duration;
+ if (stats_recorder->record_rendering_stats()) {
+ stats_recorder->AddRaster(duration, total_pixels_rasterized, metadata.is_tile_in_pending_tree_now_bin);
UMA_HISTOGRAM_CUSTOM_COUNTS("Renderer4.PictureRasterTimeMS",
duration.InMilliseconds(),
@@ -1118,18 +1095,14 @@ void TileManager::RecordSolidColorPredictorResults(
}
// static
-void TileManager::RunImageDecodeTask(skia::LazyPixelRef* pixel_ref,
- RenderingStats* stats) {
+void TileManager::RunImageDecodeTask(
+ skia::LazyPixelRef* pixel_ref,
+ RenderingStatsRecorder* stats_recorder) {
TRACE_EVENT0("cc", "TileManager::RunImageDecodeTask");
- base::TimeTicks decode_begin_time;
- if (stats)
- decode_begin_time = base::TimeTicks::HighResNow();
+ base::TimeTicks start_time = stats_recorder->StartRecording();
pixel_ref->Decode();
- if (stats) {
- stats->totalDeferredImageDecodeCount++;
- stats->totalDeferredImageDecodeTime +=
- base::TimeTicks::HighResNow() - decode_begin_time;
- }
+ base::TimeDelta duration = stats_recorder->EndRecording(start_time);
+ stats_recorder->AddDeferredImageDecode(duration);
}
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698