Fix web contents modal dialog crash in SimpleWebViewDialog
[chromium-blink-merge.git] / cc / debug / rendering_stats_instrumentation.cc
blob3c164f9d8cdfd87cd9bae3d6a8a5660cd701d853
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"
7 namespace cc {
9 // static
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_)
56 return;
58 base::AutoLock scoped_lock(lock_);
59 main_stats_.animation_frame_count++;
62 void RenderingStatsInstrumentation::IncrementScreenFrameCount(int64 count) {
63 if (!record_rendering_stats_)
64 return;
66 base::AutoLock scoped_lock(lock_);
67 impl_stats_.screen_frame_count += count;
70 void RenderingStatsInstrumentation::IncrementDroppedFrameCount(int64 count) {
71 if (!record_rendering_stats_)
72 return;
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_)
80 return;
82 base::AutoLock scoped_lock(lock_);
83 main_stats_.commit_time += duration;
84 main_stats_.commit_count++;
87 void RenderingStatsInstrumentation::AddPaint(base::TimeDelta duration,
88 int64 pixels) {
89 if (!record_rendering_stats_)
90 return;
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,
98 int64 pixels) {
99 if (!record_rendering_stats_)
100 return;
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,
109 int64 pixels,
110 bool is_in_pending_tree_now_bin) {
111 if (!record_rendering_stats_)
112 return;
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 +=
121 total_duration;
125 void RenderingStatsInstrumentation::IncrementImplThreadScrolls() {
126 if (!record_rendering_stats_)
127 return;
129 base::AutoLock scoped_lock(lock_);
130 impl_stats_.impl_thread_scroll_count++;
133 void RenderingStatsInstrumentation::IncrementMainThreadScrolls() {
134 if (!record_rendering_stats_)
135 return;
137 base::AutoLock scoped_lock(lock_);
138 impl_stats_.main_thread_scroll_count++;
141 void RenderingStatsInstrumentation::AddLayersDrawn(int64 amount) {
142 if (!record_rendering_stats_)
143 return;
145 base::AutoLock scoped_lock(lock_);
146 impl_stats_.drawn_layer_count += amount;
149 void RenderingStatsInstrumentation::AddMissingTiles(int64 amount) {
150 if (!record_rendering_stats_)
151 return;
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_)
160 return;
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_)
170 return;
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_)
179 return;
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_)
189 return;
191 base::AutoLock scoped_lock(lock_);
192 impl_stats_.tile_analysis_count++;
193 impl_stats_.tile_analysis_time += duration;
194 if (is_solid_color)
195 impl_stats_.solid_color_tile_analysis_count++;
198 } // namespace cc