// 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::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::TimeDelta RenderingStatsInstrumentation::StartRecording() const { if (record_rendering_stats_) { if (base::ThreadTicks::IsSupported()) return base::ThreadTicks::Now() - base::ThreadTicks(); return base::TimeTicks::Now() - base::TimeTicks(); } return base::TimeDelta(); } base::TimeDelta RenderingStatsInstrumentation::EndRecording( base::TimeDelta start_time) const { if (start_time != base::TimeDelta()) { if (base::ThreadTicks::IsSupported()) return (base::ThreadTicks::Now() - base::ThreadTicks()) - start_time; return (base::TimeTicks::Now() - base::TimeTicks()) - 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::AddCheckerboardedVisibleContentArea( int64 area) { if (!record_rendering_stats_) return; base::AutoLock scoped_lock(lock_); impl_thread_rendering_stats_.checkerboarded_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