Skip to content

Commit 9e82be4

Browse files
authored
Migrate Embedder code to impeller/DL geometry classes (flutter#172804)
Ticks off another checkbox in flutter#161456
1 parent 831a7a1 commit 9e82be4

File tree

51 files changed

+519
-586
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+519
-586
lines changed

engine/src/flutter/display_list/geometry/dl_geometry_conversions.h

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@ inline const DlPoint& ToDlPoint(const SkPoint& point) {
2727
return *reinterpret_cast<const DlPoint*>(&point);
2828
}
2929

30-
inline const DlPoint* ToDlPoints(const SkPoint* points) {
31-
return points == nullptr ? nullptr : reinterpret_cast<const DlPoint*>(points);
32-
}
33-
3430
inline const DlRect& ToDlRect(const SkRect& rect) {
3531
return *reinterpret_cast<const DlRect*>(&rect);
3632
}
@@ -43,22 +39,6 @@ inline const DlIRect& ToDlIRect(const SkIRect& rect) {
4339
return *reinterpret_cast<const DlIRect*>(&rect);
4440
}
4541

46-
inline DlRect* ToDlRect(SkRect* rect) {
47-
return rect == nullptr ? nullptr : reinterpret_cast<DlRect*>(rect);
48-
}
49-
50-
inline const DlRect* ToDlRect(const SkRect* rect) {
51-
return rect == nullptr ? nullptr : reinterpret_cast<const DlRect*>(rect);
52-
}
53-
54-
inline std::optional<const DlRect> ToOptDlRect(const SkRect* rect) {
55-
return rect == nullptr ? std::nullopt : std::optional(ToDlRect(*rect));
56-
}
57-
58-
inline const DlRect* ToDlRects(const SkRect* rects) {
59-
return rects == nullptr ? nullptr : reinterpret_cast<const DlRect*>(rects);
60-
}
61-
6242
inline const DlISize& ToDlISize(const SkISize& size) {
6343
return *reinterpret_cast<const DlISize*>(&size);
6444
}

engine/src/flutter/flow/embedded_view_params_unittests.cc

Lines changed: 15 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -11,67 +11,47 @@ namespace testing {
1111

1212
TEST(EmbeddedViewParams, GetBoundingRectAfterMutationsWithNoMutations) {
1313
MutatorsStack stack;
14-
SkMatrix matrix;
15-
16-
EmbeddedViewParams params(matrix, SkSize::Make(1, 1), stack);
17-
const SkRect& rect = params.finalBoundingRect();
18-
ASSERT_TRUE(SkScalarNearlyEqual(rect.x(), 0));
19-
ASSERT_TRUE(SkScalarNearlyEqual(rect.y(), 0));
20-
ASSERT_TRUE(SkScalarNearlyEqual(rect.width(), 1));
21-
ASSERT_TRUE(SkScalarNearlyEqual(rect.height(), 1));
14+
DlMatrix matrix;
15+
16+
EmbeddedViewParams params(matrix, DlSize(1, 1), stack);
17+
EXPECT_EQ(params.finalBoundingRect(), DlRect::MakeXYWH(0, 0, 1, 1));
2218
}
2319

2420
TEST(EmbeddedViewParams, GetBoundingRectAfterMutationsWithScale) {
2521
MutatorsStack stack;
2622
DlMatrix matrix = DlMatrix::MakeScale({2, 2, 1});
2723
stack.PushTransform(matrix);
2824

29-
EmbeddedViewParams params(ToSkMatrix(matrix), SkSize::Make(1, 1), stack);
30-
const SkRect& rect = params.finalBoundingRect();
31-
ASSERT_TRUE(SkScalarNearlyEqual(rect.x(), 0));
32-
ASSERT_TRUE(SkScalarNearlyEqual(rect.y(), 0));
33-
ASSERT_TRUE(SkScalarNearlyEqual(rect.width(), 2));
34-
ASSERT_TRUE(SkScalarNearlyEqual(rect.height(), 2));
25+
EmbeddedViewParams params(matrix, DlSize(1, 1), stack);
26+
EXPECT_EQ(params.finalBoundingRect(), DlRect::MakeXYWH(0, 0, 2, 2));
3527
}
3628

3729
TEST(EmbeddedViewParams, GetBoundingRectAfterMutationsWithTranslate) {
3830
MutatorsStack stack;
3931
DlMatrix matrix = DlMatrix::MakeTranslation({1, 1});
4032
stack.PushTransform(matrix);
4133

42-
EmbeddedViewParams params(ToSkMatrix(matrix), SkSize::Make(1, 1), stack);
43-
const SkRect& rect = params.finalBoundingRect();
44-
ASSERT_TRUE(SkScalarNearlyEqual(rect.x(), 1));
45-
ASSERT_TRUE(SkScalarNearlyEqual(rect.y(), 1));
46-
ASSERT_TRUE(SkScalarNearlyEqual(rect.width(), 1));
47-
ASSERT_TRUE(SkScalarNearlyEqual(rect.height(), 1));
34+
EmbeddedViewParams params(matrix, DlSize(1, 1), stack);
35+
EXPECT_EQ(params.finalBoundingRect(), DlRect::MakeXYWH(1, 1, 1, 1));
4836
}
4937

5038
TEST(EmbeddedViewParams, GetBoundingRectAfterMutationsWithRotation90) {
5139
MutatorsStack stack;
5240
DlMatrix matrix = DlMatrix::MakeRotationZ(DlDegrees(90));
5341
stack.PushTransform(matrix);
5442

55-
EmbeddedViewParams params(ToSkMatrix(matrix), SkSize::Make(1, 1), stack);
56-
const SkRect& rect = params.finalBoundingRect();
57-
58-
ASSERT_TRUE(SkScalarNearlyEqual(rect.x(), -1));
59-
ASSERT_TRUE(SkScalarNearlyEqual(rect.y(), 0));
60-
ASSERT_TRUE(SkScalarNearlyEqual(rect.width(), 1));
61-
ASSERT_TRUE(SkScalarNearlyEqual(rect.height(), 1));
43+
EmbeddedViewParams params(matrix, DlSize(1, 1), stack);
44+
EXPECT_EQ(params.finalBoundingRect(), DlRect::MakeXYWH(-1, 0, 1, 1));
6245
}
6346

6447
TEST(EmbeddedViewParams, GetBoundingRectAfterMutationsWithRotation45) {
6548
MutatorsStack stack;
6649
DlMatrix matrix = DlMatrix::MakeRotationZ(DlDegrees(45));
6750
stack.PushTransform(matrix);
6851

69-
EmbeddedViewParams params(ToSkMatrix(matrix), SkSize::Make(1, 1), stack);
70-
const SkRect& rect = params.finalBoundingRect();
71-
ASSERT_TRUE(SkScalarNearlyEqual(rect.x(), -sqrt(2) / 2));
72-
ASSERT_TRUE(SkScalarNearlyEqual(rect.y(), 0));
73-
ASSERT_TRUE(SkScalarNearlyEqual(rect.width(), sqrt(2)));
74-
ASSERT_TRUE(SkScalarNearlyEqual(rect.height(), sqrt(2)));
52+
EmbeddedViewParams params(matrix, DlSize(1, 1), stack);
53+
EXPECT_EQ(params.finalBoundingRect(),
54+
DlRect::MakeXYWH(-sqrt(2) / 2, 0, sqrt(2), sqrt(2)));
7555
}
7656

7757
TEST(EmbeddedViewParams,
@@ -83,12 +63,8 @@ TEST(EmbeddedViewParams,
8363
MutatorsStack stack;
8464
stack.PushTransform(matrix);
8565

86-
EmbeddedViewParams params(ToSkMatrix(matrix), SkSize::Make(1, 1), stack);
87-
const SkRect& rect = params.finalBoundingRect();
88-
ASSERT_TRUE(SkScalarNearlyEqual(rect.x(), -1));
89-
ASSERT_TRUE(SkScalarNearlyEqual(rect.y(), 2));
90-
ASSERT_TRUE(SkScalarNearlyEqual(rect.width(), 3));
91-
ASSERT_TRUE(SkScalarNearlyEqual(rect.height(), 3));
66+
EmbeddedViewParams params(matrix, DlSize(1, 1), stack);
67+
EXPECT_EQ(params.finalBoundingRect(), DlRect::MakeXYWH(-1, 2, 3, 3));
9268
}
9369

9470
} // namespace testing

engine/src/flutter/flow/embedded_views.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
namespace flutter {
88

9-
DisplayListEmbedderViewSlice::DisplayListEmbedderViewSlice(SkRect view_bounds) {
9+
DisplayListEmbedderViewSlice::DisplayListEmbedderViewSlice(DlRect view_bounds) {
1010
builder_ = std::make_unique<DisplayListBuilder>(
11-
/*bounds=*/ToDlRect(view_bounds),
11+
/*bounds=*/view_bounds,
1212
/*prepare_rtree=*/true);
1313
}
1414

engine/src/flutter/flow/embedded_views.h

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -223,39 +223,36 @@ class EmbeddedViewParams {
223223
public:
224224
EmbeddedViewParams() = default;
225225

226-
EmbeddedViewParams(SkMatrix matrix,
227-
SkSize size_points,
226+
EmbeddedViewParams(DlMatrix matrix,
227+
DlSize size_points,
228228
MutatorsStack mutators_stack)
229229
: matrix_(matrix),
230230
size_points_(size_points),
231231
mutators_stack_(std::move(mutators_stack)) {
232-
SkPath path;
233-
SkRect starting_rect = SkRect::MakeSize(size_points);
234-
path.addRect(starting_rect);
235-
path.transform(matrix);
236-
final_bounding_rect_ = path.getBounds();
232+
final_bounding_rect_ =
233+
DlRect::MakeSize(size_points).TransformAndClipBounds(matrix);
237234
}
238235

239236
// The transformation Matrix corresponding to the sum of all the
240237
// transformations in the platform view's mutator stack.
241-
const SkMatrix& transformMatrix() const { return matrix_; };
238+
const DlMatrix& transformMatrix() const { return matrix_; };
242239
// The original size of the platform view before any mutation matrix is
243240
// applied.
244-
const SkSize& sizePoints() const { return size_points_; };
241+
const DlSize& sizePoints() const { return size_points_; };
245242
// The mutators stack contains the detailed step by step mutations for this
246243
// platform view.
247244
const MutatorsStack& mutatorsStack() const { return mutators_stack_; };
248245
// The bounding rect of the platform view after applying all the mutations.
249246
//
250247
// Clippings are ignored.
251-
const SkRect& finalBoundingRect() const { return final_bounding_rect_; }
248+
const DlRect& finalBoundingRect() const { return final_bounding_rect_; }
252249

253250
// Pushes the stored DlImageFilter object to the mutators stack.
254251
//
255252
// `filter_rect` is in global coordinates.
256253
void PushImageFilter(const std::shared_ptr<DlImageFilter>& filter,
257-
const SkRect& filter_rect) {
258-
mutators_stack_.PushBackdropFilter(filter, ToDlRect(filter_rect));
254+
const DlRect& filter_rect) {
255+
mutators_stack_.PushBackdropFilter(filter, filter_rect);
259256
}
260257

261258
bool operator==(const EmbeddedViewParams& other) const {
@@ -266,10 +263,10 @@ class EmbeddedViewParams {
266263
}
267264

268265
private:
269-
SkMatrix matrix_;
270-
SkSize size_points_;
266+
DlMatrix matrix_;
267+
DlSize size_points_;
271268
MutatorsStack mutators_stack_;
272-
SkRect final_bounding_rect_;
269+
DlRect final_bounding_rect_;
273270
};
274271

275272
enum class PostPrerollResult {
@@ -285,11 +282,8 @@ enum class PostPrerollResult {
285282
};
286283

287284
// The |EmbedderViewSlice| represents the details of recording all of
288-
// the layer tree rendering operations that appear between before, after
289-
// and between the embedded views. The Slice used to abstract away
290-
// implementations that were based on either an SkPicture or a
291-
// DisplayListBuilder but more recently all of the embedder recordings
292-
// have standardized on the DisplayList.
285+
// the layer tree rendering operations that appear before, after
286+
// and between the embedded views.
293287
class EmbedderViewSlice {
294288
public:
295289
virtual ~EmbedderViewSlice() = default;
@@ -306,7 +300,7 @@ class EmbedderViewSlice {
306300

307301
class DisplayListEmbedderViewSlice : public EmbedderViewSlice {
308302
public:
309-
explicit DisplayListEmbedderViewSlice(SkRect view_bounds);
303+
explicit DisplayListEmbedderViewSlice(DlRect view_bounds);
310304
~DisplayListEmbedderViewSlice() override = default;
311305

312306
DlCanvas* canvas() override;
@@ -402,15 +396,15 @@ class ExternalViewEmbedder {
402396
virtual DlCanvas* CompositeEmbeddedView(int64_t platform_view_id) = 0;
403397

404398
// Prepare for a view to be drawn.
405-
virtual void PrepareFlutterView(SkISize frame_size,
399+
virtual void PrepareFlutterView(DlISize frame_size,
406400
double device_pixel_ratio) = 0;
407401

408402
// Submits the content stored since |PrepareFlutterView| to the specified
409403
// Flutter view.
410404
//
411405
// Implementers must submit the frame by calling frame.Submit().
412406
//
413-
// This method can mutate the root Skia canvas before submitting the frame.
407+
// This method can mutate the root canvas before submitting the frame.
414408
//
415409
// It can also allocate frames for overlay surfaces to compose hybrid views.
416410
virtual void SubmitFlutterView(
@@ -469,7 +463,7 @@ class ExternalViewEmbedder {
469463
// visited platform views list.
470464
virtual void PushFilterToVisitedPlatformViews(
471465
const std::shared_ptr<DlImageFilter>& filter,
472-
const SkRect& filter_rect) {}
466+
const DlRect& filter_rect) {}
473467

474468
private:
475469
bool used_this_frame_ = false;

engine/src/flutter/flow/layers/backdrop_filter_layer.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void BackdropFilterLayer::Preroll(PrerollContext* context) {
4545
Layer::AutoPrerollSaveLayerState::Create(context, true, bool{filter_});
4646
if (filter_ && context->view_embedder != nullptr) {
4747
context->view_embedder->PushFilterToVisitedPlatformViews(
48-
filter_, ToSkRect(context->state_stack.device_cull_rect()));
48+
filter_, context->state_stack.device_cull_rect());
4949
}
5050
DlRect child_paint_bounds;
5151
PrerollChildren(context, &child_paint_bounds);

engine/src/flutter/flow/layers/platform_view_layer.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ void PlatformViewLayer::Preroll(PrerollContext* context) {
2626
MutatorsStack mutators;
2727
context->state_stack.fill(&mutators);
2828
std::unique_ptr<EmbeddedViewParams> params =
29-
std::make_unique<EmbeddedViewParams>(
30-
ToSkMatrix(context->state_stack.matrix()), ToSkSize(size_), mutators);
29+
std::make_unique<EmbeddedViewParams>(context->state_stack.matrix(), size_,
30+
mutators);
3131
context->view_embedder->PrerollCompositeEmbeddedView(view_id_,
3232
std::move(params));
3333
context->view_embedder->PushVisitedPlatformView(view_id_);

engine/src/flutter/flow/layers/platform_view_layer.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
#include "flutter/display_list/skia/dl_sk_canvas.h"
99
#include "flutter/flow/layers/layer.h"
10-
#include "third_party/skia/include/core/SkPoint.h"
11-
#include "third_party/skia/include/core/SkSize.h"
1210

1311
namespace flutter {
1412

engine/src/flutter/flow/testing/mock_embedder.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ void MockViewEmbedder::BeginFrame(
2929
const fml::RefPtr<fml::RasterThreadMerger>& raster_thread_merger) {}
3030

3131
// |ExternalViewEmbedder|
32-
void MockViewEmbedder::PrepareFlutterView(SkISize frame_size,
32+
void MockViewEmbedder::PrepareFlutterView(DlISize frame_size,
3333
double device_pixel_ratio) {}
3434

3535
// |ExternalViewEmbedder|

engine/src/flutter/flow/testing/mock_embedder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class MockViewEmbedder : public ExternalViewEmbedder {
3030
raster_thread_merger) override;
3131

3232
// |ExternalViewEmbedder|
33-
void PrepareFlutterView(SkISize frame_size,
33+
void PrepareFlutterView(DlISize frame_size,
3434
double device_pixel_ratio) override;
3535

3636
// |ExternalViewEmbedder|

engine/src/flutter/flow/view_slicer.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010

1111
namespace flutter {
1212

13-
std::unordered_map<int64_t, SkRect> SliceViews(
13+
std::unordered_map<int64_t, DlRect> SliceViews(
1414
DlCanvas* background_canvas,
1515
const std::vector<int64_t>& composition_order,
1616
const std::unordered_map<int64_t, std::unique_ptr<EmbedderViewSlice>>&
1717
slices,
18-
const std::unordered_map<int64_t, SkRect>& view_rects) {
19-
std::unordered_map<int64_t, SkRect> overlay_layers;
18+
const std::unordered_map<int64_t, DlRect>& view_rects) {
19+
std::unordered_map<int64_t, DlRect> overlay_layers;
2020

2121
auto current_frame_view_count = composition_order.size();
2222

@@ -49,15 +49,15 @@ std::unordered_map<int64_t, SkRect> SliceViews(
4949
continue;
5050
}
5151

52-
const SkRect current_view_rect = maybe_rect->second;
52+
const DlRect current_view_rect = maybe_rect->second;
5353
const DlIRect rounded_in_platform_view_rect =
54-
DlIRect::RoundIn(ToDlRect(current_view_rect));
54+
DlIRect::RoundIn(current_view_rect);
5555
const DlRect rounded_out_platform_view_rect =
56-
DlRect::RoundOut(ToDlRect(current_view_rect));
56+
DlRect::RoundOut(current_view_rect);
5757

5858
// Each rect corresponds to a native view that renders Flutter UI.
5959
std::vector<DlIRect> intersection_rects =
60-
slice->region(ToDlRect(current_view_rect)).getRects();
60+
slice->region(current_view_rect).getRects();
6161

6262
// Ignore intersections of single width/height on the edge of the platform
6363
// view.
@@ -108,7 +108,7 @@ std::unordered_map<int64_t, SkRect> SliceViews(
108108
}
109109

110110
if (!full_joined_rect.IsEmpty()) {
111-
overlay_layers.insert({view_id, ToSkRect(full_joined_rect)});
111+
overlay_layers.insert({view_id, full_joined_rect});
112112

113113
// Clip the background canvas, so it doesn't contain any of the pixels
114114
// drawn on the overlay layer.

0 commit comments

Comments
 (0)