// 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_STOPWATCH_DL_H_ #define FLUTTER_FLOW_STOPWATCH_DL_H_ #include "flow/stopwatch.h" namespace flutter { //------------------------------------------------------------------------------ /// A stopwatch visualizer that uses DisplayList (|DlCanvas|) to draw. /// /// @note This is the newer non-backend specific version, that works in both /// Skia and Impeller. The older Skia-specific version is /// |SkStopwatchVisualizer|, which still should be used for Skia-specific /// optimizations. class DlStopwatchVisualizer : public StopwatchVisualizer { public: explicit DlStopwatchVisualizer(const Stopwatch& stopwatch) : StopwatchVisualizer(stopwatch) {} void Visualize(DlCanvas* canvas, const SkRect& rect) const override; }; /// @brief Provides canvas-like painting methods that actually build vertices. /// /// The goal is minimally invasive rendering for the performance monitor. /// /// The methods in this class are intended to be used by |DlStopwatchVisualizer| /// only. The rationale is the creating lines, rectangles, and paths (while OK /// for general apps) would cause non-trivial work for the performance monitor /// due to tessellation per-frame. /// /// @note A goal of this class was to make updating the performance monitor /// (and keeping it in sync with the |SkStopwatchVisualizer|) as easy as /// possible (i.e. not having to do triangle-math). class DlVertexPainter final { public: /// Draws a rectangle with the given color to a buffer. void DrawRect(const SkRect& rect, const DlColor& color); /// Converts the buffered vertices into a |DlVertices| object. /// /// @note This method clears the buffer. std::shared_ptr IntoVertices(); private: std::vector vertices_; std::vector colors_; }; } // namespace flutter #endif // FLUTTER_FLOW_STOPWATCH_DL_H_