| // Copyright 2013 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/rendering_stats_instrumentation.h" |
| |
| namespace cc { |
| |
| // static |
| scoped_ptr<RenderingStatsInstrumentation> |
| RenderingStatsInstrumentation::Create() { |
| return make_scoped_ptr(new RenderingStatsInstrumentation()); |
| } |
| |
| RenderingStatsInstrumentation::RenderingStatsInstrumentation() |
| : record_rendering_stats_(false) { |
| } |
| |
| RenderingStatsInstrumentation::~RenderingStatsInstrumentation() {} |
| |
| RenderingStats RenderingStatsInstrumentation::impl_thread_rendering_stats() { |
| base::AutoLock scoped_lock(lock_); |
| return impl_thread_rendering_stats_; |
| } |
| |
| RenderingStats RenderingStatsInstrumentation::GetRenderingStats() { |
| base::AutoLock scoped_lock(lock_); |
| RenderingStats rendering_stats; |
| rendering_stats = impl_thread_rendering_stats_accu_; |
| rendering_stats.Add(impl_thread_rendering_stats_); |
| return rendering_stats; |
| } |
| |
| void RenderingStatsInstrumentation::AccumulateAndClearImplThreadStats() { |
| base::AutoLock scoped_lock(lock_); |
| impl_thread_rendering_stats_accu_.Add(impl_thread_rendering_stats_); |
| impl_thread_rendering_stats_ = RenderingStats(); |
| } |
| |
| base::TimeTicks RenderingStatsInstrumentation::StartRecording() const { |
| if (record_rendering_stats_) { |
| if (base::TimeTicks::IsThreadNowSupported()) |
| return base::TimeTicks::ThreadNow(); |
| return base::TimeTicks::Now(); |
| } |
| return base::TimeTicks(); |
| } |
| |
| base::TimeDelta RenderingStatsInstrumentation::EndRecording( |
| base::TimeTicks start_time) const { |
| if (!start_time.is_null()) { |
| if (base::TimeTicks::IsThreadNowSupported()) |
| return base::TimeTicks::ThreadNow() - start_time; |
| return base::TimeTicks::Now() - start_time; |
| } |
| return base::TimeDelta(); |
| } |
| |
| void RenderingStatsInstrumentation::IncrementFrameCount(int64 count) { |
| if (!record_rendering_stats_) |
| return; |
| |
| base::AutoLock scoped_lock(lock_); |
| impl_thread_rendering_stats_.frame_count += count; |
| } |
| |
| void RenderingStatsInstrumentation::AddVisibleContentArea(int64 area) { |
| if (!record_rendering_stats_) |
| return; |
| |
| base::AutoLock scoped_lock(lock_); |
| impl_thread_rendering_stats_.visible_content_area += area; |
| } |
| |
| void RenderingStatsInstrumentation::AddApproximatedVisibleContentArea( |
| int64 area) { |
| if (!record_rendering_stats_) |
| return; |
| |
| base::AutoLock scoped_lock(lock_); |
| impl_thread_rendering_stats_.approximated_visible_content_area += area; |
| } |
| |
| void RenderingStatsInstrumentation::AddDrawDuration( |
| base::TimeDelta draw_duration, |
| base::TimeDelta draw_duration_estimate) { |
| if (!record_rendering_stats_) |
| return; |
| |
| base::AutoLock scoped_lock(lock_); |
| impl_thread_rendering_stats_.draw_duration.Append(draw_duration); |
| impl_thread_rendering_stats_.draw_duration_estimate.Append( |
| draw_duration_estimate); |
| } |
| |
| void RenderingStatsInstrumentation::AddBeginMainFrameToCommitDuration( |
| base::TimeDelta begin_main_frame_to_commit_duration, |
| base::TimeDelta begin_main_frame_to_commit_duration_estimate) { |
| if (!record_rendering_stats_) |
| return; |
| |
| base::AutoLock scoped_lock(lock_); |
| impl_thread_rendering_stats_.begin_main_frame_to_commit_duration.Append( |
| begin_main_frame_to_commit_duration); |
| impl_thread_rendering_stats_.begin_main_frame_to_commit_duration_estimate |
| .Append(begin_main_frame_to_commit_duration_estimate); |
| } |
| |
| void RenderingStatsInstrumentation::AddCommitToActivateDuration( |
| base::TimeDelta commit_to_activate_duration, |
| base::TimeDelta commit_to_activate_duration_estimate) { |
| if (!record_rendering_stats_) |
| return; |
| |
| base::AutoLock scoped_lock(lock_); |
| impl_thread_rendering_stats_.commit_to_activate_duration.Append( |
| commit_to_activate_duration); |
| impl_thread_rendering_stats_.commit_to_activate_duration_estimate.Append( |
| commit_to_activate_duration_estimate); |
| } |
| |
| } // namespace cc |