| 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
|
|
|