Skip to content

Commit

Permalink
Avg ms/frame instead of FPS in performance overlay (flutter#7443)
Browse files Browse the repository at this point in the history
Computing FPS from max ms/frame is misleading and we're no longer
just using 60 FPS displays.
  • Loading branch information
liyuqian authored Jan 14, 2019
1 parent b7e0527 commit 5ce5ace
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 10 deletions.
8 changes: 8 additions & 0 deletions flow/instrumentation.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
4 changes: 4 additions & 0 deletions flow/instrumentation.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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;
Expand Down
15 changes: 5 additions & 10 deletions flow/layers/performance_overlay_layer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Expand Down

0 comments on commit 5ce5ace

Please sign in to comment.