1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci* Copyright 2017 Google Inc. 3cb93a386Sopenharmony_ci* 4cb93a386Sopenharmony_ci* Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci* found in the LICENSE file. 6cb93a386Sopenharmony_ci*/ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef StatsLayer_DEFINED 9cb93a386Sopenharmony_ci#define StatsLayer_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/core/SkColor.h" 12cb93a386Sopenharmony_ci#include "include/core/SkString.h" 13cb93a386Sopenharmony_ci#include "tools/sk_app/Window.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ciclass StatsLayer : public sk_app::Window::Layer { 16cb93a386Sopenharmony_cipublic: 17cb93a386Sopenharmony_ci StatsLayer(); 18cb93a386Sopenharmony_ci void resetMeasurements(); 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ci typedef int Timer; 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ci Timer addTimer(const char* label, SkColor color, SkColor labelColor = 0); 23cb93a386Sopenharmony_ci void beginTiming(Timer); 24cb93a386Sopenharmony_ci void endTiming(Timer); 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_ci void onPrePaint() override; 27cb93a386Sopenharmony_ci void onPaint(SkSurface*) override; 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_ci void setDisplayScale(float scale) { fDisplayScale = scale; } 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_ciprivate: 32cb93a386Sopenharmony_ci static const int kMeasurementCount = 1 << 6; // should be power of 2 for fast mod 33cb93a386Sopenharmony_ci struct TimerData { 34cb93a386Sopenharmony_ci double fTimes[kMeasurementCount]; 35cb93a386Sopenharmony_ci SkString fLabel; 36cb93a386Sopenharmony_ci SkColor fColor; 37cb93a386Sopenharmony_ci SkColor fLabelColor; 38cb93a386Sopenharmony_ci }; 39cb93a386Sopenharmony_ci SkTArray<TimerData> fTimers; 40cb93a386Sopenharmony_ci double fTotalTimes[kMeasurementCount]; 41cb93a386Sopenharmony_ci int fCurrentMeasurement; 42cb93a386Sopenharmony_ci double fLastTotalBegin; 43cb93a386Sopenharmony_ci double fCumulativeMeasurementTime; 44cb93a386Sopenharmony_ci int fCumulativeMeasurementCount; 45cb93a386Sopenharmony_ci float fDisplayScale; 46cb93a386Sopenharmony_ci}; 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci#endif 49