Index: cc/debug/overdraw_metrics.cc |
diff --git a/cc/debug/overdraw_metrics.cc b/cc/debug/overdraw_metrics.cc |
deleted file mode 100644 |
index 02f074535d73f2b90bf0d2e5bb901e78f8465b35..0000000000000000000000000000000000000000 |
--- a/cc/debug/overdraw_metrics.cc |
+++ /dev/null |
@@ -1,269 +0,0 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "cc/debug/overdraw_metrics.h" |
- |
-#include "base/debug/trace_event.h" |
-#include "base/metrics/histogram.h" |
-#include "cc/base/math_util.h" |
-#include "cc/trees/layer_tree_host.h" |
-#include "cc/trees/layer_tree_host_impl.h" |
-#include "ui/gfx/quad_f.h" |
-#include "ui/gfx/rect.h" |
-#include "ui/gfx/transform.h" |
- |
-namespace cc { |
- |
-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(const gfx::PointF& p1, const 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 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 std::abs(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 clipped_quad[8]; |
- int num_vertices_in_clipped_quad = 0; |
- MathUtil::MapClippedQuad(transform, |
- quad, |
- clipped_quad, |
- &num_vertices_in_clipped_quad); |
- return PolygonArea(clipped_quad, num_vertices_in_clipped_quad); |
-} |
- |
-void OverdrawMetrics::DidPaint(const gfx::Rect& painted_rect) { |
- if (!record_metrics_for_frame_) |
- return; |
- |
- pixels_painted_ += |
- static_cast<float>(painted_rect.width()) * painted_rect.height(); |
-} |
- |
-void OverdrawMetrics::DidCullTilesForUpload(int count) { |
- if (record_metrics_for_frame_) |
- tiles_culled_for_upload_ += count; |
-} |
- |
-void OverdrawMetrics::DidUpload(const gfx::Transform& transform_to_target, |
- const gfx::Rect& upload_rect, |
- const 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 contents_texture_use_bytes) { |
- if (!record_metrics_for_frame_) |
- return; |
- |
- contents_texture_use_bytes_ += contents_texture_use_bytes; |
-} |
- |
-void OverdrawMetrics::DidUseRenderSurfaceTextureMemoryBytes( |
- size_t render_surface_use_bytes) { |
- if (!record_metrics_for_frame_) |
- return; |
- |
- render_surface_texture_use_bytes_ += render_surface_use_bytes; |
-} |
- |
-void OverdrawMetrics::DidCullForDrawing( |
- const gfx::Transform& transform_to_target, |
- const gfx::Rect& before_cull_rect, |
- const gfx::Rect& after_cull_rect) { |
- if (!record_metrics_for_frame_) |
- return; |
- |
- 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)); |
- |
- pixels_culled_for_drawing_ += before_cull_area - after_cull_area; |
-} |
- |
-void OverdrawMetrics::DidDraw(const gfx::Transform& transform_to_target, |
- const gfx::Rect& after_cull_rect, |
- const 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* layer_tree_host) const { |
- if (record_metrics_for_frame_) |
- RecordMetricsInternal<LayerTreeHost>(UpdateAndCommit, layer_tree_host); |
-} |
- |
-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 DrawViewportSize(const LayerTreeHost* host) { |
- return host->device_viewport_size(); |
-} |
-static gfx::Size DrawViewportSize(const LayerTreeHostImpl* host_impl) { |
- return host_impl->DrawViewportSize(); |
-} |
- |
-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 / (DrawViewportSize(layer_tree_host).width() * |
- DrawViewportSize(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 / (DrawViewportSize(layer_tree_host).width() / 256.f * |
- DrawViewportSize(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 * 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 * 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 |