| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef FLUTTER_FLOW_INSTRUMENTATION_H_ |
| #define FLUTTER_FLOW_INSTRUMENTATION_H_ |
| |
| #include <vector> |
| |
| #include "flutter/fml/macros.h" |
| #include "flutter/fml/time/time_delta.h" |
| #include "flutter/fml/time/time_point.h" |
| #include "third_party/skia/include/core/SkCanvas.h" |
| |
| namespace flutter { |
| |
| class Stopwatch { |
| public: |
| Stopwatch(fml::Milliseconds frame_budget = fml::kDefaultFrameBudget); |
| |
| ~Stopwatch(); |
| |
| const fml::TimeDelta& LastLap() const; |
| |
| fml::TimeDelta CurrentLap() const { return fml::TimePoint::Now() - start_; } |
| |
| fml::TimeDelta MaxDelta() const; |
| |
| fml::TimeDelta AverageDelta() const; |
| |
| void InitVisualizeSurface(const SkRect& rect) const; |
| |
| void Visualize(SkCanvas* canvas, const SkRect& rect) const; |
| |
| void Start(); |
| |
| void Stop(); |
| |
| void SetLapTime(const fml::TimeDelta& delta); |
| |
| private: |
| inline double UnitFrameInterval(double time_ms) const; |
| inline double UnitHeight(double time_ms, double max_height) const; |
| |
| fml::TimePoint start_; |
| std::vector<fml::TimeDelta> laps_; |
| size_t current_sample_; |
| |
| fml::Milliseconds frame_budget_; |
| |
| // Mutable data cache for performance optimization of the graphs. Prevents |
| // expensive redrawing of old data. |
| mutable bool cache_dirty_; |
| mutable sk_sp<SkSurface> visualize_cache_surface_; |
| mutable size_t prev_drawn_sample_index_; |
| |
| FML_DISALLOW_COPY_AND_ASSIGN(Stopwatch); |
| }; |
| |
| class Counter { |
| public: |
| Counter() : count_(0) {} |
| |
| size_t count() const { return count_; } |
| |
| void Reset(size_t count = 0) { count_ = count; } |
| |
| void Increment(size_t count = 1) { count_ += count; } |
| |
| private: |
| size_t count_; |
| |
| FML_DISALLOW_COPY_AND_ASSIGN(Counter); |
| }; |
| |
| class CounterValues { |
| public: |
| CounterValues(); |
| |
| ~CounterValues(); |
| |
| void Add(int64_t value); |
| |
| void Visualize(SkCanvas* canvas, const SkRect& rect) const; |
| |
| int64_t GetCurrentValue() const; |
| |
| int64_t GetMaxValue() const; |
| |
| int64_t GetMinValue() const; |
| |
| private: |
| std::vector<int64_t> values_; |
| size_t current_sample_; |
| |
| FML_DISALLOW_COPY_AND_ASSIGN(CounterValues); |
| }; |
| |
| } // namespace flutter |
| |
| #endif // FLUTTER_FLOW_INSTRUMENTATION_H_ |