1 // Copyright 2013 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 #include "cc/debug/rendering_stats_instrumentation.h"
10 scoped_ptr
<RenderingStatsInstrumentation
>
11 RenderingStatsInstrumentation::Create() {
12 return make_scoped_ptr(new RenderingStatsInstrumentation());
15 RenderingStatsInstrumentation::RenderingStatsInstrumentation()
16 : record_rendering_stats_(false) {
19 RenderingStatsInstrumentation::~RenderingStatsInstrumentation() {}
21 RenderingStats
RenderingStatsInstrumentation::GetRenderingStats() {
22 base::AutoLock
scoped_lock(lock_
);
23 RenderingStats rendering_stats
;
24 rendering_stats
.main_stats
= main_stats_accu_
;
25 rendering_stats
.main_stats
.Add(main_stats_
);
26 rendering_stats
.impl_stats
= impl_stats_accu_
;
27 rendering_stats
.impl_stats
.Add(impl_stats_
);
28 return rendering_stats
;
31 void RenderingStatsInstrumentation::AccumulateAndClearMainThreadStats() {
32 main_stats_accu_
.Add(main_stats_
);
33 main_stats_
= MainThreadRenderingStats();
36 void RenderingStatsInstrumentation::AccumulateAndClearImplThreadStats() {
37 impl_stats_accu_
.Add(impl_stats_
);
38 impl_stats_
= ImplThreadRenderingStats();
41 base::TimeTicks
RenderingStatsInstrumentation::StartRecording() const {
42 if (record_rendering_stats_
)
43 return base::TimeTicks::HighResNow();
44 return base::TimeTicks();
47 base::TimeDelta
RenderingStatsInstrumentation::EndRecording(
48 base::TimeTicks start_time
) const {
49 if (!start_time
.is_null())
50 return base::TimeTicks::HighResNow() - start_time
;
51 return base::TimeDelta();
54 void RenderingStatsInstrumentation::IncrementAnimationFrameCount() {
55 if (!record_rendering_stats_
)
58 base::AutoLock
scoped_lock(lock_
);
59 main_stats_
.animation_frame_count
++;
62 void RenderingStatsInstrumentation::IncrementScreenFrameCount(int64 count
) {
63 if (!record_rendering_stats_
)
66 base::AutoLock
scoped_lock(lock_
);
67 impl_stats_
.screen_frame_count
+= count
;
70 void RenderingStatsInstrumentation::IncrementDroppedFrameCount(int64 count
) {
71 if (!record_rendering_stats_
)
74 base::AutoLock
scoped_lock(lock_
);
75 impl_stats_
.dropped_frame_count
+= count
;
78 void RenderingStatsInstrumentation::AddCommit(base::TimeDelta duration
) {
79 if (!record_rendering_stats_
)
82 base::AutoLock
scoped_lock(lock_
);
83 main_stats_
.commit_time
+= duration
;
84 main_stats_
.commit_count
++;
87 void RenderingStatsInstrumentation::AddPaint(base::TimeDelta duration
,
89 if (!record_rendering_stats_
)
92 base::AutoLock
scoped_lock(lock_
);
93 main_stats_
.paint_time
+= duration
;
94 main_stats_
.painted_pixel_count
+= pixels
;
97 void RenderingStatsInstrumentation::AddRecord(base::TimeDelta duration
,
99 if (!record_rendering_stats_
)
102 base::AutoLock
scoped_lock(lock_
);
103 main_stats_
.record_time
+= duration
;
104 main_stats_
.recorded_pixel_count
+= pixels
;
107 void RenderingStatsInstrumentation::AddRaster(base::TimeDelta total_duration
,
108 base::TimeDelta best_duration
,
110 bool is_in_pending_tree_now_bin
) {
111 if (!record_rendering_stats_
)
114 base::AutoLock
scoped_lock(lock_
);
115 impl_stats_
.rasterize_time
+= total_duration
;
116 impl_stats_
.best_rasterize_time
+= best_duration
;
117 impl_stats_
.rasterized_pixel_count
+= pixels
;
119 if (is_in_pending_tree_now_bin
) {
120 impl_stats_
.rasterize_time_for_now_bins_on_pending_tree
+=
125 void RenderingStatsInstrumentation::IncrementImplThreadScrolls() {
126 if (!record_rendering_stats_
)
129 base::AutoLock
scoped_lock(lock_
);
130 impl_stats_
.impl_thread_scroll_count
++;
133 void RenderingStatsInstrumentation::IncrementMainThreadScrolls() {
134 if (!record_rendering_stats_
)
137 base::AutoLock
scoped_lock(lock_
);
138 impl_stats_
.main_thread_scroll_count
++;
141 void RenderingStatsInstrumentation::AddLayersDrawn(int64 amount
) {
142 if (!record_rendering_stats_
)
145 base::AutoLock
scoped_lock(lock_
);
146 impl_stats_
.drawn_layer_count
+= amount
;
149 void RenderingStatsInstrumentation::AddMissingTiles(int64 amount
) {
150 if (!record_rendering_stats_
)
153 base::AutoLock
scoped_lock(lock_
);
154 impl_stats_
.missing_tile_count
+= amount
;
157 void RenderingStatsInstrumentation::AddDeferredImageDecode(
158 base::TimeDelta duration
) {
159 if (!record_rendering_stats_
)
162 base::AutoLock
scoped_lock(lock_
);
163 impl_stats_
.deferred_image_decode_time
+= duration
;
164 impl_stats_
.deferred_image_decode_count
++;
167 void RenderingStatsInstrumentation::AddImageGathering(
168 base::TimeDelta duration
) {
169 if (!record_rendering_stats_
)
172 base::AutoLock
scoped_lock(lock_
);
173 main_stats_
.image_gathering_time
+= duration
;
174 main_stats_
.image_gathering_count
++;
177 void RenderingStatsInstrumentation::IncrementDeferredImageCacheHitCount() {
178 if (!record_rendering_stats_
)
181 base::AutoLock
scoped_lock(lock_
);
182 impl_stats_
.deferred_image_cache_hit_count
++;
185 void RenderingStatsInstrumentation::AddAnalysisResult(
186 base::TimeDelta duration
,
187 bool is_solid_color
) {
188 if (!record_rendering_stats_
)
191 base::AutoLock
scoped_lock(lock_
);
192 impl_stats_
.tile_analysis_count
++;
193 impl_stats_
.tile_analysis_time
+= duration
;
195 impl_stats_
.solid_color_tile_analysis_count
++;