diff --git a/engine/src/flutter/flow/layers/backdrop_filter_layer.cc b/engine/src/flutter/flow/layers/backdrop_filter_layer.cc index 8db214c101d..6f328263a62 100644 --- a/engine/src/flutter/flow/layers/backdrop_filter_layer.cc +++ b/engine/src/flutter/flow/layers/backdrop_filter_layer.cc @@ -12,11 +12,6 @@ BackdropFilterLayer::BackdropFilterLayer() { BackdropFilterLayer::~BackdropFilterLayer() { } -void BackdropFilterLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { - ContainerLayer::Preroll(context, matrix); - set_paint_bounds(context->child_paint_bounds); -} - void BackdropFilterLayer::Paint(PaintContext::ScopedFrame& frame) { SkCanvas& canvas = frame.canvas(); SkAutoCanvasRestore save(&canvas, false); diff --git a/engine/src/flutter/flow/layers/backdrop_filter_layer.h b/engine/src/flutter/flow/layers/backdrop_filter_layer.h index 1659df07b0e..3d4be1a0af3 100644 --- a/engine/src/flutter/flow/layers/backdrop_filter_layer.h +++ b/engine/src/flutter/flow/layers/backdrop_filter_layer.h @@ -17,7 +17,6 @@ class BackdropFilterLayer : public ContainerLayer { void set_filter(SkImageFilter* filter) { filter_ = skia::SharePtr(filter); } protected: - void Preroll(PrerollContext* context, const SkMatrix& matrix) override; void Paint(PaintContext::ScopedFrame& frame) override; private: diff --git a/engine/src/flutter/flow/layers/clip_path_layer.cc b/engine/src/flutter/flow/layers/clip_path_layer.cc index 9e62ae7ae32..277d8fbe2e8 100644 --- a/engine/src/flutter/flow/layers/clip_path_layer.cc +++ b/engine/src/flutter/flow/layers/clip_path_layer.cc @@ -12,10 +12,17 @@ ClipPathLayer::ClipPathLayer() { ClipPathLayer::~ClipPathLayer() { } +void ClipPathLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { + PrerollChildren(context, matrix); + if (!context->child_paint_bounds.intersect(clip_path_.getBounds())) + context->child_paint_bounds.setEmpty(); + set_paint_bounds(context->child_paint_bounds); +} + void ClipPathLayer::Paint(PaintContext::ScopedFrame& frame) { SkCanvas& canvas = frame.canvas(); SkAutoCanvasRestore save(&canvas, false); - canvas.saveLayer(&clip_path_.getBounds(), nullptr); + canvas.saveLayer(&paint_bounds(), nullptr); canvas.clipPath(clip_path_); PaintChildren(frame); } diff --git a/engine/src/flutter/flow/layers/clip_path_layer.h b/engine/src/flutter/flow/layers/clip_path_layer.h index 333fa00d864..ad1bf166acf 100644 --- a/engine/src/flutter/flow/layers/clip_path_layer.h +++ b/engine/src/flutter/flow/layers/clip_path_layer.h @@ -17,6 +17,7 @@ class ClipPathLayer : public ContainerLayer { void set_clip_path(const SkPath& clip_path) { clip_path_ = clip_path; } protected: + void Preroll(PrerollContext* context, const SkMatrix& matrix) override; void Paint(PaintContext::ScopedFrame& frame) override; private: diff --git a/engine/src/flutter/flow/layers/clip_rect_layer.cc b/engine/src/flutter/flow/layers/clip_rect_layer.cc index 9802e2f1a6a..de02d83767e 100644 --- a/engine/src/flutter/flow/layers/clip_rect_layer.cc +++ b/engine/src/flutter/flow/layers/clip_rect_layer.cc @@ -12,10 +12,17 @@ ClipRectLayer::ClipRectLayer() { ClipRectLayer::~ClipRectLayer() { } +void ClipRectLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { + PrerollChildren(context, matrix); + if (!context->child_paint_bounds.intersect(clip_rect_)) + context->child_paint_bounds.setEmpty(); + set_paint_bounds(context->child_paint_bounds); +} + void ClipRectLayer::Paint(PaintContext::ScopedFrame& frame) { SkCanvas& canvas = frame.canvas(); SkAutoCanvasRestore save(&canvas, true); - canvas.clipRect(clip_rect_); + canvas.clipRect(paint_bounds()); PaintChildren(frame); } diff --git a/engine/src/flutter/flow/layers/clip_rect_layer.h b/engine/src/flutter/flow/layers/clip_rect_layer.h index 8c020a04127..8abc2187c29 100644 --- a/engine/src/flutter/flow/layers/clip_rect_layer.h +++ b/engine/src/flutter/flow/layers/clip_rect_layer.h @@ -17,6 +17,7 @@ class ClipRectLayer : public ContainerLayer { void set_clip_rect(const SkRect& clip_rect) { clip_rect_ = clip_rect; } protected: + void Preroll(PrerollContext* context, const SkMatrix& matrix) override; void Paint(PaintContext::ScopedFrame& frame) override; private: diff --git a/engine/src/flutter/flow/layers/clip_rrect_layer.cc b/engine/src/flutter/flow/layers/clip_rrect_layer.cc index 761d5dc1446..ca6b3e0abef 100644 --- a/engine/src/flutter/flow/layers/clip_rrect_layer.cc +++ b/engine/src/flutter/flow/layers/clip_rrect_layer.cc @@ -12,10 +12,17 @@ ClipRRectLayer::ClipRRectLayer() { ClipRRectLayer::~ClipRRectLayer() { } +void ClipRRectLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { + PrerollChildren(context, matrix); + if (!context->child_paint_bounds.intersect(clip_rrect_.getBounds())) + context->child_paint_bounds.setEmpty(); + set_paint_bounds(context->child_paint_bounds); +} + void ClipRRectLayer::Paint(PaintContext::ScopedFrame& frame) { SkCanvas& canvas = frame.canvas(); SkAutoCanvasRestore save(&canvas, false); - canvas.saveLayer(&clip_rrect_.getBounds(), nullptr); + canvas.saveLayer(&paint_bounds(), nullptr); canvas.clipRRect(clip_rrect_); PaintChildren(frame); } diff --git a/engine/src/flutter/flow/layers/clip_rrect_layer.h b/engine/src/flutter/flow/layers/clip_rrect_layer.h index 8f9334b85b9..bec9f51dc9c 100644 --- a/engine/src/flutter/flow/layers/clip_rrect_layer.h +++ b/engine/src/flutter/flow/layers/clip_rrect_layer.h @@ -16,6 +16,8 @@ class ClipRRectLayer : public ContainerLayer { void set_clip_rrect(const SkRRect& clip_rrect) { clip_rrect_ = clip_rrect; } + protected: + void Preroll(PrerollContext* context, const SkMatrix& matrix) override; void Paint(PaintContext::ScopedFrame& frame) override; private: diff --git a/engine/src/flutter/flow/layers/color_filter_layer.cc b/engine/src/flutter/flow/layers/color_filter_layer.cc index 2abf41ea9e9..85352e586fa 100644 --- a/engine/src/flutter/flow/layers/color_filter_layer.cc +++ b/engine/src/flutter/flow/layers/color_filter_layer.cc @@ -12,11 +12,6 @@ ColorFilterLayer::ColorFilterLayer() { ColorFilterLayer::~ColorFilterLayer() { } -void ColorFilterLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { - ContainerLayer::Preroll(context, matrix); - set_paint_bounds(context->child_paint_bounds); -} - void ColorFilterLayer::Paint(PaintContext::ScopedFrame& frame) { skia::RefPtr color_filter = skia::AdoptRef(SkColorFilter::CreateModeFilter(color_, transfer_mode_)); diff --git a/engine/src/flutter/flow/layers/color_filter_layer.h b/engine/src/flutter/flow/layers/color_filter_layer.h index a17195f1ae8..901020a2d6a 100644 --- a/engine/src/flutter/flow/layers/color_filter_layer.h +++ b/engine/src/flutter/flow/layers/color_filter_layer.h @@ -21,7 +21,6 @@ class ColorFilterLayer : public ContainerLayer { } protected: - void Preroll(PrerollContext* context, const SkMatrix& matrix) override; void Paint(PaintContext::ScopedFrame& frame) override; private: diff --git a/engine/src/flutter/flow/layers/container_layer.cc b/engine/src/flutter/flow/layers/container_layer.cc index a6427ecabb9..25c92ac2fc4 100644 --- a/engine/src/flutter/flow/layers/container_layer.cc +++ b/engine/src/flutter/flow/layers/container_layer.cc @@ -19,6 +19,7 @@ void ContainerLayer::Add(std::unique_ptr layer) { void ContainerLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { PrerollChildren(context, matrix); + set_paint_bounds(context->child_paint_bounds); } void ContainerLayer::PrerollChildren(PrerollContext* context, diff --git a/engine/src/flutter/flow/layers/opacity_layer.cc b/engine/src/flutter/flow/layers/opacity_layer.cc index fa4b1e1e375..4fae92bc317 100644 --- a/engine/src/flutter/flow/layers/opacity_layer.cc +++ b/engine/src/flutter/flow/layers/opacity_layer.cc @@ -12,11 +12,6 @@ OpacityLayer::OpacityLayer() { OpacityLayer::~OpacityLayer() { } -void OpacityLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { - ContainerLayer::Preroll(context, matrix); - set_paint_bounds(context->child_paint_bounds); -} - void OpacityLayer::Paint(PaintContext::ScopedFrame& frame) { SkPaint paint; paint.setAlpha(alpha_); diff --git a/engine/src/flutter/flow/layers/opacity_layer.h b/engine/src/flutter/flow/layers/opacity_layer.h index 860ccac7115..240cd2dbc9a 100644 --- a/engine/src/flutter/flow/layers/opacity_layer.h +++ b/engine/src/flutter/flow/layers/opacity_layer.h @@ -17,7 +17,6 @@ class OpacityLayer : public ContainerLayer { void set_alpha(int alpha) { alpha_ = alpha; } protected: - void Preroll(PrerollContext* context, const SkMatrix& matrix) override; void Paint(PaintContext::ScopedFrame& frame) override; private: diff --git a/engine/src/flutter/flow/layers/performance_overlay_layer.cc b/engine/src/flutter/flow/layers/performance_overlay_layer.cc index bb0b383271e..8c3f9743c5a 100644 --- a/engine/src/flutter/flow/layers/performance_overlay_layer.cc +++ b/engine/src/flutter/flow/layers/performance_overlay_layer.cc @@ -9,15 +9,12 @@ #include "flow/layers/performance_overlay_layer.h" namespace flow { +namespace { -PerformanceOverlayLayer::PerformanceOverlayLayer(uint64_t enabledOptions) - : options_(enabledOptions) { -} - -static void DrawStatisticsText(SkCanvas& canvas, - const std::string& string, - int x, - int y) { +void DrawStatisticsText(SkCanvas& canvas, + const std::string& string, + int x, + int y) { SkPaint paint; paint.setTextSize(14); paint.setLinearText(false); @@ -25,15 +22,15 @@ static void DrawStatisticsText(SkCanvas& canvas, canvas.drawText(string.c_str(), string.size(), x, y, paint); } -static void VisualizeStopWatch(SkCanvas& canvas, - const instrumentation::Stopwatch& stopwatch, - SkScalar x, - SkScalar y, - SkScalar width, - SkScalar height, - bool show_graph, - bool show_labels, - std::string label_prefix) { +void VisualizeStopWatch(SkCanvas& canvas, + const instrumentation::Stopwatch& stopwatch, + SkScalar x, + SkScalar y, + SkScalar width, + SkScalar height, + bool show_graph, + bool show_labels, + const std::string& label_prefix) { const int labelX = 8; // distance from x const int labelY = -10; // distance from y+height @@ -60,10 +57,16 @@ static void VisualizeStopWatch(SkCanvas& canvas, } } +} // namespace + +PerformanceOverlayLayer::PerformanceOverlayLayer(uint64_t enabledOptions) + : options_(enabledOptions) { +} + + void PerformanceOverlayLayer::Paint(PaintContext::ScopedFrame& frame) { - if (!options_) { + if (!options_) return; - } SkScalar x = paint_bounds().x(); SkScalar y = paint_bounds().y(); diff --git a/engine/src/flutter/flow/layers/shader_mask_layer.cc b/engine/src/flutter/flow/layers/shader_mask_layer.cc index 541d4ad6fc6..043b36b55b0 100644 --- a/engine/src/flutter/flow/layers/shader_mask_layer.cc +++ b/engine/src/flutter/flow/layers/shader_mask_layer.cc @@ -12,11 +12,6 @@ ShaderMaskLayer::ShaderMaskLayer() { ShaderMaskLayer::~ShaderMaskLayer() { } -void ShaderMaskLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { - ContainerLayer::Preroll(context, matrix); - set_paint_bounds(context->child_paint_bounds); -} - void ShaderMaskLayer::Paint(PaintContext::ScopedFrame& frame) { SkCanvas& canvas = frame.canvas(); SkAutoCanvasRestore save(&canvas, false); diff --git a/engine/src/flutter/flow/layers/shader_mask_layer.h b/engine/src/flutter/flow/layers/shader_mask_layer.h index b2284c5886e..a4002aeb72f 100644 --- a/engine/src/flutter/flow/layers/shader_mask_layer.h +++ b/engine/src/flutter/flow/layers/shader_mask_layer.h @@ -27,7 +27,6 @@ class ShaderMaskLayer : public ContainerLayer { } protected: - void Preroll(PrerollContext* context, const SkMatrix& matrix) override; void Paint(PaintContext::ScopedFrame& frame) override; private: