| // 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<DlVertices> IntoVertices(); | |
| private: | |
| std::vector<SkPoint> vertices_; | |
| std::vector<DlColor> colors_; | |
| }; | |
| } // namespace flutter | |
| #endif // FLUTTER_FLOW_STOPWATCH_DL_H_ |