Index: cc/overdraw_metrics.cc |
diff --git a/cc/overdraw_metrics.cc b/cc/overdraw_metrics.cc |
index c1ab20f68d22dc96184a1c401dc4f200e638ac09..0ed58d1101dd94b75a0d78fa1ab774e235f5f8d2 100644 |
--- a/cc/overdraw_metrics.cc |
+++ b/cc/overdraw_metrics.cc |
@@ -15,205 +15,253 @@ |
namespace cc { |
-OverdrawMetrics::OverdrawMetrics(bool recordMetricsForFrame) |
- : m_recordMetricsForFrame(recordMetricsForFrame) |
- , m_pixelsPainted(0) |
- , m_pixelsUploadedOpaque(0) |
- , m_pixelsUploadedTranslucent(0) |
- , m_tilesCulledForUpload(0) |
- , m_contentsTextureUseBytes(0) |
- , m_renderSurfaceTextureUseBytes(0) |
- , m_pixelsDrawnOpaque(0) |
- , m_pixelsDrawnTranslucent(0) |
- , m_pixelsCulledForDrawing(0) |
-{ |
-} |
- |
-static inline float wedgeProduct(const gfx::PointF& p1, const gfx::PointF& p2) |
-{ |
- return p1.x() * p2.y() - p1.y() * p2.x(); |
+OverdrawMetrics::OverdrawMetrics(bool record_metrics_for_frame) |
+ : record_metrics_for_frame_(record_metrics_for_frame), |
+ pixels_painted_(0), |
+ pixels_uploaded_opaque_(0), |
+ pixels_uploaded_translucent_(0), |
+ tiles_culled_for_upload_(0), |
+ contents_texture_use_bytes_(0), |
+ render_surface_texture_use_bytes_(0), |
+ pixels_drawn_opaque_(0), |
+ pixels_drawn_translucent_(0), |
+ pixels_culled_for_drawing_(0) {} |
+ |
+static inline float WedgeProduct(gfx::PointF p1, gfx::PointF p2) { |
+ return p1.x() * p2.y() - p1.y() * p2.x(); |
} |
// Calculates area of an arbitrary convex polygon with up to 8 points. |
-static inline float polygonArea(const gfx::PointF points[8], int numPoints) |
-{ |
- if (numPoints < 3) |
- return 0; |
- |
- float area = 0; |
- for (int i = 0; i < numPoints; ++i) |
- area += wedgeProduct(points[i], points[(i+1)%numPoints]); |
- return fabs(0.5f * area); |
+static inline float PolygonArea(gfx::PointF points[8], int num_points) { |
+ if (num_points < 3) |
+ return 0; |
+ |
+ float area = 0; |
+ for (int i = 0; i < num_points; ++i) |
+ area += WedgeProduct(points[i], points[(i+1)%num_points]); |
+ return fabs(0.5f * area); |
} |
-// Takes a given quad, maps it by the given transformation, and gives the area of the resulting polygon. |
-static inline float areaOfMappedQuad(const gfx::Transform& transform, const gfx::QuadF& quad) |
-{ |
- gfx::PointF clippedQuad[8]; |
- int numVerticesInClippedQuad = 0; |
- MathUtil::mapClippedQuad(transform, quad, clippedQuad, numVerticesInClippedQuad); |
- return polygonArea(clippedQuad, numVerticesInClippedQuad); |
+// Takes a given quad, maps it by the given transformation, and gives the area |
+// of the resulting polygon. |
+static inline float AreaOfMappedQuad(const gfx::Transform& transform, |
+ const gfx::QuadF& quad) { |
+ gfx::PointF clippedQuad[8]; |
+ int num_vertices_in_clipped_quad = 0; |
+ MathUtil::mapClippedQuad(transform, |
+ quad, |
+ clippedQuad, |
+ num_vertices_in_clipped_quad); |
+ return PolygonArea(clippedQuad, num_vertices_in_clipped_quad); |
} |
-void OverdrawMetrics::didPaint(const gfx::Rect& paintedRect) |
-{ |
- if (!m_recordMetricsForFrame) |
- return; |
+void OverdrawMetrics::DidPaint(gfx::Rect painted_rect) { |
+ if (!record_metrics_for_frame_) |
+ return; |
- m_pixelsPainted += static_cast<float>(paintedRect.width()) * paintedRect.height(); |
+ pixels_painted_ += |
+ static_cast<float>(painted_rect.width()) * painted_rect.height(); |
} |
-void OverdrawMetrics::didCullTilesForUpload(int count) |
-{ |
- if (m_recordMetricsForFrame) |
- m_tilesCulledForUpload += count; |
+void OverdrawMetrics::DidCullTilesForUpload(int count) { |
+ if (record_metrics_for_frame_) |
+ tiles_culled_for_upload_ += count; |
} |
-void OverdrawMetrics::didUpload(const gfx::Transform& transformToTarget, const gfx::Rect& uploadRect, const gfx::Rect& opaqueRect) |
-{ |
- if (!m_recordMetricsForFrame) |
- return; |
- |
- float uploadArea = areaOfMappedQuad(transformToTarget, gfx::QuadF(uploadRect)); |
- float uploadOpaqueArea = areaOfMappedQuad(transformToTarget, gfx::QuadF(gfx::IntersectRects(opaqueRect, uploadRect))); |
- |
- m_pixelsUploadedOpaque += uploadOpaqueArea; |
- m_pixelsUploadedTranslucent += uploadArea - uploadOpaqueArea; |
+void OverdrawMetrics::DidUpload(const gfx::Transform& transform_to_target, |
+ gfx::Rect upload_rect, |
+ gfx::Rect opaque_rect) { |
+ if (!record_metrics_for_frame_) |
+ return; |
+ |
+ float upload_area = |
+ AreaOfMappedQuad(transform_to_target, gfx::QuadF(upload_rect)); |
+ float upload_opaque_area = |
+ AreaOfMappedQuad(transform_to_target, |
+ gfx::QuadF(gfx::IntersectRects(opaque_rect, |
+ upload_rect))); |
+ |
+ pixels_uploaded_opaque_ += upload_opaque_area; |
+ pixels_uploaded_translucent_ += upload_area - upload_opaque_area; |
} |
-void OverdrawMetrics::didUseContentsTextureMemoryBytes(size_t contentsTextureUseBytes) |
-{ |
- if (!m_recordMetricsForFrame) |
- return; |
+void OverdrawMetrics::DidUseContentsTextureMemoryBytes( |
+ size_t contents_texture_use_bytes) { |
+ if (!record_metrics_for_frame_) |
+ return; |
- m_contentsTextureUseBytes += contentsTextureUseBytes; |
+ contents_texture_use_bytes_ += contents_texture_use_bytes; |
} |
-void OverdrawMetrics::didUseRenderSurfaceTextureMemoryBytes(size_t renderSurfaceUseBytes) |
-{ |
- if (!m_recordMetricsForFrame) |
- return; |
+void OverdrawMetrics::DidUseRenderSurfaceTextureMemoryBytes( |
+ size_t render_surface_use_bytes) { |
+ if (!record_metrics_for_frame_) |
+ return; |
- m_renderSurfaceTextureUseBytes += renderSurfaceUseBytes; |
+ render_surface_texture_use_bytes_ += render_surface_use_bytes; |
} |
-void OverdrawMetrics::didCullForDrawing(const gfx::Transform& transformToTarget, const gfx::Rect& beforeCullRect, const gfx::Rect& afterCullRect) |
-{ |
- if (!m_recordMetricsForFrame) |
- return; |
+void OverdrawMetrics::DidCullForDrawing( |
+ const gfx::Transform& transform_to_target, |
+ gfx::Rect before_cull_rect, |
+ gfx::Rect after_cull_rect) { |
+ if (!record_metrics_for_frame_) |
+ return; |
- float beforeCullArea = areaOfMappedQuad(transformToTarget, gfx::QuadF(beforeCullRect)); |
- float afterCullArea = areaOfMappedQuad(transformToTarget, gfx::QuadF(afterCullRect)); |
+ float before_cull_area = |
+ AreaOfMappedQuad(transform_to_target, gfx::QuadF(before_cull_rect)); |
+ float after_cull_area = |
+ AreaOfMappedQuad(transform_to_target, gfx::QuadF(after_cull_rect)); |
- m_pixelsCulledForDrawing += beforeCullArea - afterCullArea; |
+ pixels_culled_for_drawing_ += before_cull_area - after_cull_area; |
} |
-void OverdrawMetrics::didDraw(const gfx::Transform& transformToTarget, const gfx::Rect& afterCullRect, const gfx::Rect& opaqueRect) |
-{ |
- if (!m_recordMetricsForFrame) |
- return; |
- |
- float afterCullArea = areaOfMappedQuad(transformToTarget, gfx::QuadF(afterCullRect)); |
- float afterCullOpaqueArea = areaOfMappedQuad(transformToTarget, gfx::QuadF(gfx::IntersectRects(opaqueRect, afterCullRect))); |
- |
- m_pixelsDrawnOpaque += afterCullOpaqueArea; |
- m_pixelsDrawnTranslucent += afterCullArea - afterCullOpaqueArea; |
+void OverdrawMetrics::DidDraw(const gfx::Transform& transform_to_target, |
+ gfx::Rect after_cull_rect, |
+ gfx::Rect opaque_rect) { |
+ if (!record_metrics_for_frame_) |
+ return; |
+ |
+ float after_cull_area = |
+ AreaOfMappedQuad(transform_to_target, gfx::QuadF(after_cull_rect)); |
+ float after_cull_opaque_area = |
+ AreaOfMappedQuad(transform_to_target, |
+ gfx::QuadF(gfx::IntersectRects(opaque_rect, |
+ after_cull_rect))); |
+ |
+ pixels_drawn_opaque_ += after_cull_opaque_area; |
+ pixels_drawn_translucent_ += after_cull_area - after_cull_opaque_area; |
} |
-void OverdrawMetrics::recordMetrics(const LayerTreeHost* layerTreeHost) const |
-{ |
- if (m_recordMetricsForFrame) |
- recordMetricsInternal<LayerTreeHost>(UpdateAndCommit, layerTreeHost); |
+void OverdrawMetrics::RecordMetrics( |
+ const LayerTreeHost* layer_tree_host) const { |
+ if (record_metrics_for_frame_) |
+ RecordMetricsInternal<LayerTreeHost>(UpdateAndCommit, layer_tree_host); |
} |
-void OverdrawMetrics::recordMetrics(const LayerTreeHostImpl* layerTreeHost) const |
-{ |
- if (m_recordMetricsForFrame) |
- recordMetricsInternal<LayerTreeHostImpl>(DrawingToScreen, layerTreeHost); |
+void OverdrawMetrics::RecordMetrics( |
+ const LayerTreeHostImpl* layer_tree_host_impl) const { |
+ if (record_metrics_for_frame_) { |
+ RecordMetricsInternal<LayerTreeHostImpl>(DrawingToScreen, |
+ layer_tree_host_impl); |
+ } |
} |
-static gfx::Size DeviceViewportSize(const LayerTreeHost* host) { return host->deviceViewportSize(); } |
-static gfx::Size DeviceViewportSize(const LayerTreeHostImpl* host_impl) { return host_impl->DeviceViewportSize(); } |
- |
-template<typename LayerTreeHostType> |
-void OverdrawMetrics::recordMetricsInternal(MetricsType metricsType, const LayerTreeHostType* layerTreeHost) const |
-{ |
- // This gives approximately 10x the percentage of pixels to fill the viewport once. |
- float normalization = 1000.f / (DeviceViewportSize(layerTreeHost).width() * DeviceViewportSize(layerTreeHost).height()); |
- // This gives approximately 100x the percentage of tiles to fill the viewport once, if all tiles were 256x256. |
- float tileNormalization = 10000.f / (DeviceViewportSize(layerTreeHost).width() / 256.f * DeviceViewportSize(layerTreeHost).height() / 256.f); |
- // This gives approximately 10x the percentage of bytes to fill the viewport once, assuming 4 bytes per pixel. |
- float byteNormalization = normalization / 4; |
+static gfx::Size DeviceViewportSize(const LayerTreeHost* host) { |
+ return host->deviceViewportSize(); |
+} |
+static gfx::Size DeviceViewportSize(const LayerTreeHostImpl* host_impl) { |
+ return host_impl->DeviceViewportSize(); |
+} |
- switch (metricsType) { |
+template <typename LayerTreeHostType> |
+void OverdrawMetrics::RecordMetricsInternal( |
+ MetricsType metrics_type, |
+ const LayerTreeHostType* layer_tree_host) const { |
+ // This gives approximately 10x the percentage of pixels to fill the viewport |
+ // once. |
+ float normalization = 1000.f / (DeviceViewportSize(layer_tree_host).width() * |
+ DeviceViewportSize(layer_tree_host).height()); |
+ // This gives approximately 100x the percentage of tiles to fill the viewport |
+ // once, if all tiles were 256x256. |
+ float tile_normalization = |
+ 10000.f / (DeviceViewportSize(layer_tree_host).width() / 256.f * |
+ DeviceViewportSize(layer_tree_host).height() / 256.f); |
+ // This gives approximately 10x the percentage of bytes to fill the viewport |
+ // once, assuming 4 bytes per pixel. |
+ float byte_normalization = normalization / 4; |
+ |
+ switch (metrics_type) { |
case DrawingToScreen: { |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.pixelCountOpaque_Draw", |
- static_cast<int>(normalization * m_pixelsDrawnOpaque), |
- 100, 1000000, 50); |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.pixelCountTranslucent_Draw", |
- static_cast<int>(normalization * m_pixelsDrawnTranslucent), |
- 100, 1000000, 50); |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.pixelCountCulled_Draw", |
- static_cast<int>(normalization * m_pixelsCulledForDrawing), |
- 100, 1000000, 50); |
- |
- TRACE_COUNTER_ID1("cc", "DrawPixelsCulled", layerTreeHost, m_pixelsCulledForDrawing); |
- TRACE_EVENT2("cc", "OverdrawMetrics", "PixelsDrawnOpaque", m_pixelsDrawnOpaque, "PixelsDrawnTranslucent", m_pixelsDrawnTranslucent); |
- break; |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.pixelCountOpaque_Draw", |
+ static_cast<int>(normalization * pixels_drawn_opaque_), |
+ 100, 1000000, 50); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.pixelCountTranslucent_Draw", |
+ static_cast<int>(normalization * pixels_drawn_translucent_), |
+ 100, 1000000, 50); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.pixelCountCulled_Draw", |
+ static_cast<int>(normalization * pixels_culled_for_drawing_), |
+ 100, 1000000, 50); |
+ |
+ TRACE_COUNTER_ID1("cc", |
+ "DrawPixelsCulled", |
+ layer_tree_host, |
+ pixels_culled_for_drawing_); |
+ TRACE_EVENT2("cc", |
+ "OverdrawMetrics", |
+ "PixelsDrawnOpaque", |
+ pixels_drawn_opaque_, |
+ "PixelsDrawnTranslucent", |
+ pixels_drawn_translucent_); |
+ break; |
} |
case UpdateAndCommit: { |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.pixelCountPainted", |
- static_cast<int>(normalization * m_pixelsPainted), |
- 100, 1000000, 50); |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.pixelCountOpaque_Upload", |
- static_cast<int>(normalization * m_pixelsUploadedOpaque), |
- 100, 1000000, 50); |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.pixelCountTranslucent_Upload", |
- static_cast<int>(normalization * m_pixelsUploadedTranslucent), |
- 100, 1000000, 50); |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.tileCountCulled_Upload", |
- static_cast<int>(tileNormalization * m_tilesCulledForUpload), |
- 100, 10000000, 50); |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.renderSurfaceTextureBytes_ViewportScaled", |
- static_cast<int>( |
- byteNormalization * m_renderSurfaceTextureUseBytes), |
- 10, 1000000, 50); |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.renderSurfaceTextureBytes_Unscaled", |
- static_cast<int>(m_renderSurfaceTextureUseBytes / 1000), |
- 1000, 100000000, 50); |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.contentsTextureBytes_ViewportScaled", |
- static_cast<int>(byteNormalization * m_contentsTextureUseBytes), |
- 10, 1000000, 50); |
- UMA_HISTOGRAM_CUSTOM_COUNTS( |
- "Renderer4.contentsTextureBytes_Unscaled", |
- static_cast<int>(m_contentsTextureUseBytes / 1000), |
- 1000, 100000000, 50); |
- |
- { |
- TRACE_COUNTER_ID1("cc", "UploadTilesCulled", layerTreeHost, m_tilesCulledForUpload); |
- TRACE_EVENT2("cc", "OverdrawMetrics", "PixelsUploadedOpaque", m_pixelsUploadedOpaque, "PixelsUploadedTranslucent", m_pixelsUploadedTranslucent); |
- } |
- { |
- // This must be in a different scope than the TRACE_EVENT2 above. |
- TRACE_EVENT1("cc", "OverdrawPaintMetrics", "PixelsPainted", m_pixelsPainted); |
- } |
- { |
- // This must be in a different scope than the TRACE_EVENTs above. |
- TRACE_EVENT2("cc", "OverdrawPaintMetrics", "ContentsTextureBytes", m_contentsTextureUseBytes, "RenderSurfaceTextureBytes", m_renderSurfaceTextureUseBytes); |
- } |
- break; |
- } |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.pixelCountPainted", |
+ static_cast<int>(normalization * pixels_painted_), |
+ 100, 1000000, 50); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.pixelCountOpaque_Upload", |
+ static_cast<int>(normalization * pixels_uploaded_opaque_), |
+ 100, 1000000, 50); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.pixelCountTranslucent_Upload", |
+ static_cast<int>(normalization * pixels_uploaded_translucent_), |
+ 100, 1000000, 50); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.tileCountCulled_Upload", |
+ static_cast<int>(tile_normalization * tiles_culled_for_upload_), |
+ 100, 10000000, 50); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.renderSurfaceTextureBytes_ViewportScaled", |
+ static_cast<int>( |
+ byte_normalization * render_surface_texture_use_bytes_), |
+ 10, 1000000, 50); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.renderSurfaceTextureBytes_Unscaled", |
+ static_cast<int>(render_surface_texture_use_bytes_ / 1000), |
+ 1000, 100000000, 50); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.contentsTextureBytes_ViewportScaled", |
+ static_cast<int>(byte_normalization * contents_texture_use_bytes_), |
+ 10, 1000000, 50); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Renderer4.contentsTextureBytes_Unscaled", |
+ static_cast<int>(contents_texture_use_bytes_ / 1000), |
+ 1000, 100000000, 50); { |
+ TRACE_COUNTER_ID1("cc", |
+ "UploadTilesCulled", |
+ layer_tree_host, |
+ tiles_culled_for_upload_); |
+ TRACE_EVENT2("cc", |
+ "OverdrawMetrics", |
+ "PixelsUploadedOpaque", |
+ pixels_uploaded_opaque_, |
+ "PixelsUploadedTranslucent", |
+ pixels_uploaded_translucent_); |
+ } |
+ { |
+ // This must be in a different scope than the TRACE_EVENT2 above. |
+ TRACE_EVENT1("cc", |
+ "OverdrawPaintMetrics", |
+ "PixelsPainted", |
+ pixels_painted_); |
+ } |
+ { |
+ // This must be in a different scope than the TRACE_EVENTs above. |
+ TRACE_EVENT2("cc", |
+ "OverdrawPaintMetrics", |
+ "ContentsTextureBytes", |
+ contents_texture_use_bytes_, |
+ "RenderSurfaceTextureBytes", |
+ render_surface_texture_use_bytes_); |
+ } |
+ break; |
} |
+ } |
} |
} // namespace cc |