1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CC_DEBUG_OVERDRAW_METRICS_H_
6 #define CC_DEBUG_OVERDRAW_METRICS_H_
8 #include "base/basictypes.h"
9 #include "base/memory/scoped_ptr.h"
18 class LayerTreeHostImpl
;
20 class OverdrawMetrics
{
22 static scoped_ptr
<OverdrawMetrics
> Create(bool record_metrics_for_frame
) {
23 return make_scoped_ptr(new OverdrawMetrics(record_metrics_for_frame
));
26 // These methods are used for saving metrics during update/commit.
28 // Record pixels painted by WebKit into the texture updater, but does not mean
29 // the pixels were rasterized in main memory.
30 void DidPaint(gfx::Rect painted_rect
);
31 // Records that an invalid tile was culled and did not need to be
32 // painted/uploaded, and did not contribute to other tiles needing to be
34 void DidCullTilesForUpload(int count
);
35 // Records pixels that were uploaded to texture memory.
36 void DidUpload(const gfx::Transform
& transform_to_target
,
37 gfx::Rect upload_rect
,
38 gfx::Rect opaque_rect
);
39 // Record contents texture(s) behind present using the given number of bytes.
40 void DidUseContentsTextureMemoryBytes(size_t contents_texture_use_bytes
);
41 // Record RenderSurfaceImpl texture(s) being present using the given number of
43 void DidUseRenderSurfaceTextureMemoryBytes(size_t render_surface_use_bytes
);
45 // These methods are used for saving metrics during draw.
47 // Record pixels that were not drawn to screen.
48 void DidCullForDrawing(const gfx::Transform
& transform_to_target
,
49 gfx::Rect before_cull_rect
,
50 gfx::Rect after_cull_rect
);
51 // Record pixels that were drawn to screen.
52 void DidDraw(const gfx::Transform
& transform_to_target
,
53 gfx::Rect after_cull_rect
,
54 gfx::Rect opaque_rect
);
56 void RecordMetrics(const LayerTreeHost
* layer_tree_host
) const;
57 void RecordMetrics(const LayerTreeHostImpl
* layer_tree_host_impl
) const;
59 // Accessors for tests.
60 float pixels_drawn_opaque() const { return pixels_drawn_opaque_
; }
61 float pixels_drawn_translucent() const { return pixels_drawn_translucent_
; }
62 float pixels_culled_for_drawing() const { return pixels_culled_for_drawing_
; }
63 float pixels_painted() const { return pixels_painted_
; }
64 float pixels_uploaded_opaque() const { return pixels_uploaded_opaque_
; }
65 float pixels_uploaded_translucent() const {
66 return pixels_uploaded_translucent_
;
68 int tiles_culled_for_upload() const { return tiles_culled_for_upload_
; }
76 explicit OverdrawMetrics(bool record_metrics_for_frame
);
78 template <typename LayerTreeHostType
>
79 void RecordMetricsInternal(MetricsType metrics_type
,
80 const LayerTreeHostType
* layer_tree_host
) const;
82 // When false this class is a giant no-op.
83 bool record_metrics_for_frame_
;
85 // These values are used for saving metrics during update/commit.
87 // Count of pixels that were painted due to invalidation.
88 float pixels_painted_
;
89 // Count of pixels uploaded to textures and known to be opaque.
90 float pixels_uploaded_opaque_
;
91 // Count of pixels uploaded to textures and not known to be opaque.
92 float pixels_uploaded_translucent_
;
93 // Count of tiles that were invalidated but not uploaded.
94 int tiles_culled_for_upload_
;
95 // Count the number of bytes in contents textures.
96 uint64 contents_texture_use_bytes_
;
97 // Count the number of bytes in RenderSurfaceImpl textures.
98 uint64 render_surface_texture_use_bytes_
;
100 // These values are used for saving metrics during draw.
102 // Count of pixels that are opaque (and thus occlude). Ideally this is no more
103 // than wiewport width x height.
104 float pixels_drawn_opaque_
;
105 // Count of pixels that are possibly translucent, and cannot occlude.
106 float pixels_drawn_translucent_
;
107 // Count of pixels not drawn as they are occluded by somthing opaque.
108 float pixels_culled_for_drawing_
;
110 DISALLOW_COPY_AND_ASSIGN(OverdrawMetrics
);
115 #endif // CC_DEBUG_OVERDRAW_METRICS_H_