Index: cc/tiles/tile_manager.cc |
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc |
index ea9b32c3523f664ec2576a7b1bce47bb939ef247..56f6664c6df4d272c77c4adba09bfbcd2f944617 100644 |
--- a/cc/tiles/tile_manager.cc |
+++ b/cc/tiles/tile_manager.cc |
@@ -18,6 +18,7 @@ |
#include "base/memory/ptr_util.h" |
#include "base/metrics/histogram.h" |
#include "base/numerics/safe_conversions.h" |
+#include "base/optional.h" |
#include "base/threading/thread_checker.h" |
#include "base/trace_event/trace_event_argument.h" |
#include "cc/base/histograms.h" |
@@ -37,11 +38,46 @@ namespace { |
// a tile is of solid color. |
const bool kUseColorEstimator = true; |
+// TODO(enne): remove this histogram and its monitoring in M58 once there is |
+// enough new data from the other two raster task timers. |
DEFINE_SCOPED_UMA_HISTOGRAM_AREA_TIMER( |
- ScopedRasterTaskTimer, |
+ ScopedGeneralRasterTaskTimer, |
"Compositing.%s.RasterTask.RasterUs", |
"Compositing.%s.RasterTask.RasterPixelsPerMs"); |
+DEFINE_SCOPED_UMA_HISTOGRAM_AREA_TIMER( |
+ ScopedSoftwareRasterTaskTimer, |
+ "Compositing.%s.RasterTask.RasterUs.Software", |
+ "Compositing.%s.RasterTask.RasterPixelsPerMs.Software"); |
+ |
+DEFINE_SCOPED_UMA_HISTOGRAM_AREA_TIMER( |
+ ScopedGpuRasterTaskTimer, |
+ "Compositing.%s.RasterTask.RasterUs.Gpu", |
+ "Compositing.%s.RasterTask.RasterPixelsPerMs.Gpu"); |
+ |
+class ScopedRasterTaskTimer { |
+ public: |
+ explicit ScopedRasterTaskTimer(bool use_gpu_rasterization) { |
+ if (use_gpu_rasterization) |
+ gpu_timer_.emplace(); |
+ else |
+ software_timer_.emplace(); |
+ } |
+ |
+ void SetArea(int area) { |
+ general_timer_.SetArea(area); |
+ if (software_timer_) |
+ software_timer_->SetArea(area); |
+ if (gpu_timer_) |
+ gpu_timer_->SetArea(area); |
+ } |
+ |
+ private: |
+ ScopedGeneralRasterTaskTimer general_timer_; |
+ base::Optional<ScopedSoftwareRasterTaskTimer> software_timer_; |
+ base::Optional<ScopedGpuRasterTaskTimer> gpu_timer_; |
+}; |
+ |
class RasterTaskImpl : public TileTask { |
public: |
RasterTaskImpl(TileManager* tile_manager, |
@@ -54,8 +90,8 @@ class RasterTaskImpl : public TileTask { |
uint64_t source_prepare_tiles_id, |
std::unique_ptr<RasterBuffer> raster_buffer, |
TileTask::Vector* dependencies, |
- bool supports_concurrent_execution) |
- : TileTask(supports_concurrent_execution, dependencies), |
+ bool is_gpu_rasterization) |
+ : TileTask(!is_gpu_rasterization, dependencies), |
tile_manager_(tile_manager), |
tile_(tile), |
resource_(resource), |
@@ -70,6 +106,7 @@ class RasterTaskImpl : public TileTask { |
tile_tracing_id_(static_cast<void*>(tile)), |
new_content_id_(tile->id()), |
source_frame_number_(tile->source_frame_number()), |
+ is_gpu_rasterization_(is_gpu_rasterization), |
raster_buffer_(std::move(raster_buffer)) { |
DCHECK(origin_thread_checker_.CalledOnValidThread()); |
} |
@@ -84,7 +121,7 @@ class RasterTaskImpl : public TileTask { |
frame_viewer_instrumentation::ScopedRasterTask raster_task( |
tile_tracing_id_, tile_resolution_, source_frame_number_, layer_id_); |
- ScopedRasterTaskTimer timer; |
+ ScopedRasterTaskTimer timer(is_gpu_rasterization_); |
timer.SetArea(content_rect_.size().GetArea()); |
DCHECK(raster_source_); |
@@ -133,6 +170,7 @@ class RasterTaskImpl : public TileTask { |
void* tile_tracing_id_; |
uint64_t new_content_id_; |
int source_frame_number_; |
+ bool is_gpu_rasterization_; |
std::unique_ptr<RasterBuffer> raster_buffer_; |
DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl); |
@@ -973,7 +1011,6 @@ scoped_refptr<TileTask> TileManager::CreateRasterTask( |
prepare_tiles_count_, prioritized_tile.priority().priority_bin); |
image_manager_.GetTasksForImagesAndRef(&images, &decode_tasks, tracing_info); |
- bool supports_concurrent_execution = !use_gpu_rasterization_; |
std::unique_ptr<RasterBuffer> raster_buffer = |
raster_buffer_provider_->AcquireBufferForRaster( |
resource, resource_content_id, tile->invalidated_id()); |
@@ -981,7 +1018,7 @@ scoped_refptr<TileTask> TileManager::CreateRasterTask( |
this, tile, resource, prioritized_tile.raster_source(), playback_settings, |
prioritized_tile.priority().resolution, invalidated_rect, |
prepare_tiles_count_, std::move(raster_buffer), &decode_tasks, |
- supports_concurrent_execution)); |
+ use_gpu_rasterization_)); |
} |
void TileManager::OnRasterTaskCompleted( |