Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6520)

Unified Diff: cc/debug/frame_rate_counter.cc

Issue 1057283003: Remove parts of //cc we aren't using (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/debug/frame_rate_counter.h ('k') | cc/debug/frame_timing_request.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/debug/frame_rate_counter.cc
diff --git a/cc/debug/frame_rate_counter.cc b/cc/debug/frame_rate_counter.cc
deleted file mode 100644
index 2f3b291fea900d4b50d8bb247606de34c3431c37..0000000000000000000000000000000000000000
--- a/cc/debug/frame_rate_counter.cc
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright 2012 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/frame_rate_counter.h"
-
-#include <algorithm>
-#include <limits>
-
-#include "base/metrics/histogram.h"
-#include "cc/trees/proxy.h"
-
-namespace cc {
-
-// The following constants are measured in seconds.
-
-// Two thresholds (measured in seconds) that describe what is considered to be a
-// "no-op frame" that should not be counted.
-// - if the frame is too fast, then given our compositor implementation, the
-// frame probably was a no-op and did not draw.
-// - if the frame is too slow, then there is probably not animating content, so
-// we should not pollute the average.
-static const double kFrameTooFast = 1.0 / 70.0;
-static const double kFrameTooSlow = 1.0 / 4.0;
-
-// If a frame takes longer than this threshold (measured in seconds) then we
-// (naively) assume that it missed a screen refresh; that is, we dropped a
-// frame.
-// TODO(brianderson): Determine this threshold based on monitor refresh rate,
-// crbug.com/138642.
-static const double kDroppedFrameTime = 1.0 / 50.0;
-
-// static
-scoped_ptr<FrameRateCounter> FrameRateCounter::Create(bool has_impl_thread) {
- return make_scoped_ptr(new FrameRateCounter(has_impl_thread));
-}
-
-base::TimeDelta FrameRateCounter::RecentFrameInterval(size_t n) const {
- DCHECK_GT(n, 0u);
- DCHECK_LT(n, ring_buffer_.BufferSize());
- return ring_buffer_.ReadBuffer(n) - ring_buffer_.ReadBuffer(n - 1);
-}
-
-FrameRateCounter::FrameRateCounter(bool has_impl_thread)
- : has_impl_thread_(has_impl_thread), dropped_frame_count_(0) {}
-
-void FrameRateCounter::SaveTimeStamp(base::TimeTicks timestamp, bool software) {
- ring_buffer_.SaveToBuffer(timestamp);
-
- // Check if frame interval can be computed.
- if (ring_buffer_.CurrentIndex() < 2)
- return;
-
- base::TimeDelta frame_interval_seconds =
- RecentFrameInterval(ring_buffer_.BufferSize() - 1);
-
- if (has_impl_thread_ && ring_buffer_.CurrentIndex() > 0) {
- if (software) {
- UMA_HISTOGRAM_CUSTOM_COUNTS(
- "Renderer4.SoftwareCompositorThreadImplDrawDelay",
- frame_interval_seconds.InMilliseconds(),
- 1,
- 120,
- 60);
- } else {
- UMA_HISTOGRAM_CUSTOM_COUNTS("Renderer4.CompositorThreadImplDrawDelay",
- frame_interval_seconds.InMilliseconds(),
- 1,
- 120,
- 60);
- }
- }
-
- if (!IsBadFrameInterval(frame_interval_seconds) &&
- frame_interval_seconds.InSecondsF() > kDroppedFrameTime)
- dropped_frame_count_ +=
- frame_interval_seconds.InSecondsF() / kDroppedFrameTime;
-}
-
-bool FrameRateCounter::IsBadFrameInterval(
- base::TimeDelta interval_between_consecutive_frames) const {
- double delta = interval_between_consecutive_frames.InSecondsF();
- bool scheduler_allows_double_frames = !has_impl_thread_;
- bool interval_too_fast =
- scheduler_allows_double_frames ? delta < kFrameTooFast : delta <= 0.0;
- bool interval_too_slow = delta > kFrameTooSlow;
- return interval_too_fast || interval_too_slow;
-}
-
-void FrameRateCounter::GetMinAndMaxFPS(double* min_fps, double* max_fps) const {
- *min_fps = std::numeric_limits<double>::max();
- *max_fps = 0.0;
-
- for (RingBufferType::Iterator it = --ring_buffer_.End(); it; --it) {
- base::TimeDelta delta = RecentFrameInterval(it.index() + 1);
-
- if (IsBadFrameInterval(delta))
- continue;
-
- DCHECK_GT(delta.InSecondsF(), 0.f);
- double fps = 1.0 / delta.InSecondsF();
-
- *min_fps = std::min(fps, *min_fps);
- *max_fps = std::max(fps, *max_fps);
- }
-
- if (*min_fps > *max_fps)
- *min_fps = *max_fps;
-}
-
-double FrameRateCounter::GetAverageFPS() const {
- int frame_count = 0;
- double frame_times_total = 0.0;
- double average_fps = 0.0;
-
- // Walk backwards through the samples looking for a run of good frame
- // timings from which to compute the mean.
- //
- // Slow frames occur just because the user is inactive, and should be
- // ignored. Fast frames are ignored if the scheduler is in single-thread
- // mode in order to represent the true frame rate in spite of the fact that
- // the first few swapbuffers happen instantly which skews the statistics
- // too much for short lived animations.
- //
- // IsBadFrameInterval encapsulates the frame too slow/frame too fast logic.
-
- for (RingBufferType::Iterator it = --ring_buffer_.End();
- it && frame_times_total < 1.0;
- --it) {
- base::TimeDelta delta = RecentFrameInterval(it.index() + 1);
-
- if (!IsBadFrameInterval(delta)) {
- frame_count++;
- frame_times_total += delta.InSecondsF();
- } else if (frame_count) {
- break;
- }
- }
-
- if (frame_count) {
- DCHECK_GT(frame_times_total, 0.0);
- average_fps = frame_count / frame_times_total;
- }
-
- return average_fps;
-}
-
-} // namespace cc
« no previous file with comments | « cc/debug/frame_rate_counter.h ('k') | cc/debug/frame_timing_request.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698