Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ci/licenses_golden/licenses_flutter
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ FILE: ../../../flutter/flow/instrumentation.h
FILE: ../../../flutter/flow/layers/backdrop_filter_layer.cc
FILE: ../../../flutter/flow/layers/backdrop_filter_layer.h
FILE: ../../../flutter/flow/layers/backdrop_filter_layer_unittests.cc
FILE: ../../../flutter/flow/layers/checkerboard_layertree_unittests.cc
FILE: ../../../flutter/flow/layers/child_scene_layer.cc
FILE: ../../../flutter/flow/layers/child_scene_layer.h
FILE: ../../../flutter/flow/layers/clip_path_layer.cc
Expand Down
1 change: 1 addition & 0 deletions flow/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ if (enable_unittests) {
"flow_test_utils.h",
"gl_context_switch_unittests.cc",
"layers/backdrop_filter_layer_unittests.cc",
"layers/checkerboard_layertree_unittests.cc",
"layers/clip_path_layer_unittests.cc",
"layers/clip_rect_layer_unittests.cc",
"layers/clip_rrect_layer_unittests.cc",
Expand Down
375 changes: 375 additions & 0 deletions flow/layers/checkerboard_layertree_unittests.cc

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions flow/layers/clip_path_layer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// found in the LICENSE file.

#include "flutter/flow/layers/clip_path_layer.h"
#include "flutter/flow/paint_utils.h"

#if defined(LEGACY_FUCHSIA_EMBEDDER)
#include "lib/ui/scenic/cpp/commands.h"
Expand Down Expand Up @@ -70,6 +71,9 @@ void ClipPathLayer::Paint(PaintContext& context) const {
PaintChildren(context);
if (UsesSaveLayer()) {
context.internal_nodes_canvas->restore();
if (context.checkerboard_offscreen_layers) {
DrawCheckerboard(context.internal_nodes_canvas, paint_bounds());
}
}
}

Expand Down
4 changes: 4 additions & 0 deletions flow/layers/clip_rect_layer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// found in the LICENSE file.

#include "flutter/flow/layers/clip_rect_layer.h"
#include "flutter/flow/paint_utils.h"

namespace flutter {

Expand Down Expand Up @@ -65,6 +66,9 @@ void ClipRectLayer::Paint(PaintContext& context) const {
PaintChildren(context);
if (UsesSaveLayer()) {
context.internal_nodes_canvas->restore();
if (context.checkerboard_offscreen_layers) {
DrawCheckerboard(context.internal_nodes_canvas, clip_rect_);
}
}
}

Expand Down
4 changes: 4 additions & 0 deletions flow/layers/clip_rrect_layer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// found in the LICENSE file.

#include "flutter/flow/layers/clip_rrect_layer.h"
#include "flutter/flow/paint_utils.h"

namespace flutter {

Expand Down Expand Up @@ -66,6 +67,9 @@ void ClipRRectLayer::Paint(PaintContext& context) const {
PaintChildren(context);
if (UsesSaveLayer()) {
context.internal_nodes_canvas->restore();
if (context.checkerboard_offscreen_layers) {
DrawCheckerboard(context.internal_nodes_canvas, paint_bounds());
}
}
}

Expand Down
6 changes: 6 additions & 0 deletions flow/layers/physical_shape_layer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,12 @@ void PhysicalShapeLayer::Paint(PaintContext& context) const {
PaintChildren(context);

context.internal_nodes_canvas->restoreToCount(saveCount);

if (UsesSaveLayer()) {
if (context.checkerboard_offscreen_layers) {
DrawCheckerboard(context.internal_nodes_canvas, paint_bounds());
}
}
}

SkRect PhysicalShapeLayer::ComputeShadowBounds(const SkRect& bounds,
Expand Down
12 changes: 12 additions & 0 deletions flow/testing/layer_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,16 @@ class LayerTestBase : public CanvasTestBase<BaseT> {
nullptr, /* raster_cache */
false, /* checkerboard_offscreen_layers */
1.0f, /* frame_device_pixel_ratio */
}),
check_board_context_({
TestT::mock_canvas().internal_canvas(), /* internal_nodes_canvas */
&TestT::mock_canvas(), /* leaf_nodes_canvas */
nullptr, /* gr_context */
nullptr, /* external_view_embedder */
raster_time_, ui_time_, texture_registry_,
nullptr, /* raster_cache */
true, /* checkerboard_offscreen_layers */
1.0f, /* frame_device_pixel_ratio */
}) {
use_null_raster_cache();
}
Expand Down Expand Up @@ -117,6 +127,7 @@ class LayerTestBase : public CanvasTestBase<BaseT> {
RasterCache* raster_cache() { return raster_cache_.get(); }
PrerollContext* preroll_context() { return &preroll_context_; }
Layer::PaintContext& paint_context() { return paint_context_; }
Layer::PaintContext& check_board_context() { return check_board_context_; }

private:
void set_raster_cache_(std::unique_ptr<RasterCache> raster_cache) {
Expand All @@ -133,6 +144,7 @@ class LayerTestBase : public CanvasTestBase<BaseT> {
std::unique_ptr<RasterCache> raster_cache_;
PrerollContext preroll_context_;
Layer::PaintContext paint_context_;
Layer::PaintContext check_board_context_;

FML_DISALLOW_COPY_AND_ASSIGN(LayerTestBase);
};
Expand Down
13 changes: 11 additions & 2 deletions testing/mock_canvas.cc
Original file line number Diff line number Diff line change
Expand Up @@ -190,8 +190,8 @@ void MockCanvas::onDrawPatch(const SkPoint[12],
FML_DCHECK(false);
}

void MockCanvas::onDrawPaint(const SkPaint&) {
FML_DCHECK(false);
void MockCanvas::onDrawPaint(const SkPaint& skPaint) {
draw_calls_.emplace_back(DrawCall{current_layer_, DrawPaint{skPaint}});
}

void MockCanvas::onDrawBehind(const SkPaint&) {
Expand Down Expand Up @@ -450,5 +450,14 @@ std::ostream& operator<<(std::ostream& os, const MockCanvas::DrawCall& draw) {
return os << "[Layer: " << draw.layer << ", Data: " << draw.data << "]";
}

bool operator==(const MockCanvas::DrawPaint& a,
const MockCanvas::DrawPaint& b) {
return a.paint == b.paint;
}

std::ostream& operator<<(std::ostream& os, const MockCanvas::DrawPaint& data) {
return os << data.paint;
}

} // namespace testing
} // namespace flutter
12 changes: 10 additions & 2 deletions testing/mock_canvas.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,10 @@ class MockCanvas : public SkCanvasVirtualEnforcer<SkCanvas> {
ClipEdgeStyle style;
};

struct DrawPaint {
SkPaint paint;
};

// Discriminated union of all the different |DrawCall| types. It is roughly
// equivalent to the different methods in |SkCanvas|' public API.
using DrawCallData = std::variant<SaveData,
Expand All @@ -123,7 +127,8 @@ class MockCanvas : public SkCanvasVirtualEnforcer<SkCanvas> {
DrawShadowData,
ClipRectData,
ClipRRectData,
ClipPathData>;
ClipPathData,
DrawPaint>;

// A single call made against this canvas.
struct DrawCall {
Expand Down Expand Up @@ -305,7 +310,10 @@ extern bool operator==(const MockCanvas::DrawCall& a,
const MockCanvas::DrawCall& b);
extern std::ostream& operator<<(std::ostream& os,
const MockCanvas::DrawCall& draw);

extern bool operator==(const MockCanvas::DrawPaint& a,
const MockCanvas::DrawPaint& b);
extern std::ostream& operator<<(std::ostream& os,
const MockCanvas::DrawPaint& data);
} // namespace testing
} // namespace flutter

Expand Down