From 5ce5ace6ea1ab2009c23cf64361b72286554384d Mon Sep 17 00:00:00 2001 From: liyuqian Date: Tue, 15 Jan 2019 07:16:24 +0800 Subject: [PATCH] Avg ms/frame instead of FPS in performance overlay (#7443) Computing FPS from max ms/frame is misleading and we're no longer just using 60 FPS displays. --- flow/instrumentation.cc | 8 ++++++++ flow/instrumentation.h | 4 ++++ flow/layers/performance_overlay_layer.cc | 15 +++++---------- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/flow/instrumentation.cc b/flow/instrumentation.cc index 5b0f37264..ae9846c55 100644 --- a/flow/instrumentation.cc +++ b/flow/instrumentation.cc @@ -63,6 +63,14 @@ fml::TimeDelta Stopwatch::MaxDelta() const { return max_delta; } +fml::TimeDelta Stopwatch::AverageDelta() const { + fml::TimeDelta sum; // default to 0 + for (size_t i = 0; i < kMaxSamples; i++) { + sum = sum + laps_[i]; + } + return sum / kMaxSamples; +} + // Initialize the SkSurface for drawing into. Draws the base background and any // timing data from before the initial Visualize() call. void Stopwatch::InitVisualizeSurface(const SkRect& rect) const { diff --git a/flow/instrumentation.h b/flow/instrumentation.h index eac76329b..a991af5b5 100644 --- a/flow/instrumentation.h +++ b/flow/instrumentation.h @@ -14,6 +14,8 @@ namespace flow { +// DEPRECATED +// The frame per second FPS could be different than 60 (e.g., 120). static const double kOneFrameMS = 1e3 / 60.0; class Stopwatch { @@ -28,6 +30,8 @@ class Stopwatch { fml::TimeDelta MaxDelta() const; + fml::TimeDelta AverageDelta() const; + void InitVisualizeSurface(const SkRect& rect) const; void Visualize(SkCanvas& canvas, const SkRect& rect) const; diff --git a/flow/layers/performance_overlay_layer.cc b/flow/layers/performance_overlay_layer.cc index d717d2a96..c80786e86 100644 --- a/flow/layers/performance_overlay_layer.cc +++ b/flow/layers/performance_overlay_layer.cc @@ -43,19 +43,14 @@ void VisualizeStopWatch(SkCanvas& canvas, } if (show_labels) { - double ms_per_frame = stopwatch.MaxDelta().ToMillisecondsF(); - double fps; - if (ms_per_frame < kOneFrameMS) { - fps = 1e3 / kOneFrameMS; - } else { - fps = 1e3 / ms_per_frame; - } - + double max_ms_per_frame = stopwatch.MaxDelta().ToMillisecondsF(); + double average_ms_per_frame = stopwatch.AverageDelta().ToMillisecondsF(); std::stringstream stream; stream.setf(std::ios::fixed | std::ios::showpoint); stream << std::setprecision(1); - stream << label_prefix << " " << fps << " fps " << ms_per_frame - << "ms/frame"; + stream << label_prefix << " " + << "max " << max_ms_per_frame << " ms/frame, " + << "avg " << average_ms_per_frame << " ms/frame"; DrawStatisticsText(canvas, stream.str(), x + label_x, y + height + label_y); } } -- GitLab