Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit f9f7706

Browse files
authored
Reland "Sequester all Skia<->DL interactions into the skia sub-module" (#40243)
Reland "Sequester all Skia<->DL interactions into the skia sub-module"
1 parent e80266b commit f9f7706

94 files changed

Lines changed: 4729 additions & 3876 deletions

File tree

Some content is hidden

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

ci/licenses_golden/excluded_files

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,21 @@
2929
../../../flutter/build
3030
../../../flutter/ci
3131
../../../flutter/common/README.md
32-
../../../flutter/display_list/display_list_canvas_unittests.cc
3332
../../../flutter/display_list/display_list_color_filter_unittests.cc
3433
../../../flutter/display_list/display_list_color_source_unittests.cc
3534
../../../flutter/display_list/display_list_color_unittests.cc
3635
../../../flutter/display_list/display_list_complexity_unittests.cc
37-
../../../flutter/display_list/display_list_enum_unittests.cc
3836
../../../flutter/display_list/display_list_image_filter_unittests.cc
3937
../../../flutter/display_list/display_list_mask_filter_unittests.cc
4038
../../../flutter/display_list/display_list_matrix_clip_tracker_unittests.cc
4139
../../../flutter/display_list/display_list_paint_unittests.cc
4240
../../../flutter/display_list/display_list_path_effect_unittests.cc
4341
../../../flutter/display_list/display_list_rtree_unittests.cc
4442
../../../flutter/display_list/display_list_unittests.cc
45-
../../../flutter/display_list/display_list_utils_unittests.cc
4643
../../../flutter/display_list/display_list_vertices_unittests.cc
44+
../../../flutter/display_list/dl_rendering_unittests.cc
45+
../../../flutter/display_list/skia/dl_sk_conversions_unittests.cc
46+
../../../flutter/display_list/skia/dl_sk_utils_unittests.cc
4747
../../../flutter/display_list/testing
4848
../../../flutter/docs
4949
../../../flutter/examples

ci/licenses_golden/licenses_flutter

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -714,8 +714,6 @@ ORIGIN: ../../../flutter/display_list/display_list_blend_mode.h + ../../../flutt
714714
ORIGIN: ../../../flutter/display_list/display_list_builder.cc + ../../../flutter/LICENSE
715715
ORIGIN: ../../../flutter/display_list/display_list_builder.h + ../../../flutter/LICENSE
716716
ORIGIN: ../../../flutter/display_list/display_list_builder_benchmarks.cc + ../../../flutter/LICENSE
717-
ORIGIN: ../../../flutter/display_list/display_list_canvas_dispatcher.cc + ../../../flutter/LICENSE
718-
ORIGIN: ../../../flutter/display_list/display_list_canvas_dispatcher.h + ../../../flutter/LICENSE
719717
ORIGIN: ../../../flutter/display_list/display_list_color.h + ../../../flutter/LICENSE
720718
ORIGIN: ../../../flutter/display_list/display_list_color_filter.cc + ../../../flutter/LICENSE
721719
ORIGIN: ../../../flutter/display_list/display_list_color_filter.h + ../../../flutter/LICENSE
@@ -729,8 +727,6 @@ ORIGIN: ../../../flutter/display_list/display_list_complexity_gl.h + ../../../fl
729727
ORIGIN: ../../../flutter/display_list/display_list_complexity_helper.h + ../../../flutter/LICENSE
730728
ORIGIN: ../../../flutter/display_list/display_list_complexity_metal.cc + ../../../flutter/LICENSE
731729
ORIGIN: ../../../flutter/display_list/display_list_complexity_metal.h + ../../../flutter/LICENSE
732-
ORIGIN: ../../../flutter/display_list/display_list_dispatcher.cc + ../../../flutter/LICENSE
733-
ORIGIN: ../../../flutter/display_list/display_list_dispatcher.h + ../../../flutter/LICENSE
734730
ORIGIN: ../../../flutter/display_list/display_list_flags.cc + ../../../flutter/LICENSE
735731
ORIGIN: ../../../flutter/display_list/display_list_flags.h + ../../../flutter/LICENSE
736732
ORIGIN: ../../../flutter/display_list/display_list_image.cc + ../../../flutter/LICENSE
@@ -759,9 +755,18 @@ ORIGIN: ../../../flutter/display_list/display_list_utils.cc + ../../../flutter/L
759755
ORIGIN: ../../../flutter/display_list/display_list_utils.h + ../../../flutter/LICENSE
760756
ORIGIN: ../../../flutter/display_list/display_list_vertices.cc + ../../../flutter/LICENSE
761757
ORIGIN: ../../../flutter/display_list/display_list_vertices.h + ../../../flutter/LICENSE
758+
ORIGIN: ../../../flutter/display_list/dl_canvas.cc + ../../../flutter/LICENSE
762759
ORIGIN: ../../../flutter/display_list/dl_canvas.h + ../../../flutter/LICENSE
760+
ORIGIN: ../../../flutter/display_list/dl_op_receiver.cc + ../../../flutter/LICENSE
761+
ORIGIN: ../../../flutter/display_list/dl_op_receiver.h + ../../../flutter/LICENSE
763762
ORIGIN: ../../../flutter/display_list/skia/dl_sk_canvas.cc + ../../../flutter/LICENSE
764763
ORIGIN: ../../../flutter/display_list/skia/dl_sk_canvas.h + ../../../flutter/LICENSE
764+
ORIGIN: ../../../flutter/display_list/skia/dl_sk_conversions.cc + ../../../flutter/LICENSE
765+
ORIGIN: ../../../flutter/display_list/skia/dl_sk_conversions.h + ../../../flutter/LICENSE
766+
ORIGIN: ../../../flutter/display_list/skia/dl_sk_dispatcher.cc + ../../../flutter/LICENSE
767+
ORIGIN: ../../../flutter/display_list/skia/dl_sk_dispatcher.h + ../../../flutter/LICENSE
768+
ORIGIN: ../../../flutter/display_list/skia/dl_sk_utils.cc + ../../../flutter/LICENSE
769+
ORIGIN: ../../../flutter/display_list/skia/dl_sk_utils.h + ../../../flutter/LICENSE
765770
ORIGIN: ../../../flutter/display_list/types.h + ../../../flutter/LICENSE
766771
ORIGIN: ../../../flutter/flow/compositor_context.cc + ../../../flutter/LICENSE
767772
ORIGIN: ../../../flutter/flow/compositor_context.h + ../../../flutter/LICENSE
@@ -3247,8 +3252,6 @@ FILE: ../../../flutter/display_list/display_list_blend_mode.h
32473252
FILE: ../../../flutter/display_list/display_list_builder.cc
32483253
FILE: ../../../flutter/display_list/display_list_builder.h
32493254
FILE: ../../../flutter/display_list/display_list_builder_benchmarks.cc
3250-
FILE: ../../../flutter/display_list/display_list_canvas_dispatcher.cc
3251-
FILE: ../../../flutter/display_list/display_list_canvas_dispatcher.h
32523255
FILE: ../../../flutter/display_list/display_list_color.h
32533256
FILE: ../../../flutter/display_list/display_list_color_filter.cc
32543257
FILE: ../../../flutter/display_list/display_list_color_filter.h
@@ -3262,8 +3265,6 @@ FILE: ../../../flutter/display_list/display_list_complexity_gl.h
32623265
FILE: ../../../flutter/display_list/display_list_complexity_helper.h
32633266
FILE: ../../../flutter/display_list/display_list_complexity_metal.cc
32643267
FILE: ../../../flutter/display_list/display_list_complexity_metal.h
3265-
FILE: ../../../flutter/display_list/display_list_dispatcher.cc
3266-
FILE: ../../../flutter/display_list/display_list_dispatcher.h
32673268
FILE: ../../../flutter/display_list/display_list_flags.cc
32683269
FILE: ../../../flutter/display_list/display_list_flags.h
32693270
FILE: ../../../flutter/display_list/display_list_image.cc
@@ -3292,9 +3293,18 @@ FILE: ../../../flutter/display_list/display_list_utils.cc
32923293
FILE: ../../../flutter/display_list/display_list_utils.h
32933294
FILE: ../../../flutter/display_list/display_list_vertices.cc
32943295
FILE: ../../../flutter/display_list/display_list_vertices.h
3296+
FILE: ../../../flutter/display_list/dl_canvas.cc
32953297
FILE: ../../../flutter/display_list/dl_canvas.h
3298+
FILE: ../../../flutter/display_list/dl_op_receiver.cc
3299+
FILE: ../../../flutter/display_list/dl_op_receiver.h
32963300
FILE: ../../../flutter/display_list/skia/dl_sk_canvas.cc
32973301
FILE: ../../../flutter/display_list/skia/dl_sk_canvas.h
3302+
FILE: ../../../flutter/display_list/skia/dl_sk_conversions.cc
3303+
FILE: ../../../flutter/display_list/skia/dl_sk_conversions.h
3304+
FILE: ../../../flutter/display_list/skia/dl_sk_dispatcher.cc
3305+
FILE: ../../../flutter/display_list/skia/dl_sk_dispatcher.h
3306+
FILE: ../../../flutter/display_list/skia/dl_sk_utils.cc
3307+
FILE: ../../../flutter/display_list/skia/dl_sk_utils.h
32983308
FILE: ../../../flutter/display_list/types.h
32993309
FILE: ../../../flutter/flow/compositor_context.cc
33003310
FILE: ../../../flutter/flow/compositor_context.h

display_list/BUILD.gn

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ source_set("display_list") {
2424
"display_list_blend_mode.h",
2525
"display_list_builder.cc",
2626
"display_list_builder.h",
27-
"display_list_canvas_dispatcher.cc",
28-
"display_list_canvas_dispatcher.h",
2927
"display_list_color.h",
3028
"display_list_color_filter.cc",
3129
"display_list_color_filter.h",
@@ -37,8 +35,6 @@ source_set("display_list") {
3735
"display_list_complexity_gl.h",
3836
"display_list_complexity_metal.cc",
3937
"display_list_complexity_metal.h",
40-
"display_list_dispatcher.cc",
41-
"display_list_dispatcher.h",
4238
"display_list_flags.cc",
4339
"display_list_flags.h",
4440
"display_list_image.cc",
@@ -67,9 +63,18 @@ source_set("display_list") {
6763
"display_list_utils.h",
6864
"display_list_vertices.cc",
6965
"display_list_vertices.h",
66+
"dl_canvas.cc",
7067
"dl_canvas.h",
68+
"dl_op_receiver.cc",
69+
"dl_op_receiver.h",
7170
"skia/dl_sk_canvas.cc",
7271
"skia/dl_sk_canvas.h",
72+
"skia/dl_sk_conversions.cc",
73+
"skia/dl_sk_conversions.h",
74+
"skia/dl_sk_dispatcher.cc",
75+
"skia/dl_sk_dispatcher.h",
76+
"skia/dl_sk_utils.cc",
77+
"skia/dl_sk_utils.h",
7378
"types.h",
7479
]
7580

@@ -99,16 +104,16 @@ if (enable_unittests) {
99104
"display_list_color_source_unittests.cc",
100105
"display_list_color_unittests.cc",
101106
"display_list_complexity_unittests.cc",
102-
"display_list_enum_unittests.cc",
103107
"display_list_image_filter_unittests.cc",
104108
"display_list_mask_filter_unittests.cc",
105109
"display_list_matrix_clip_tracker_unittests.cc",
106110
"display_list_paint_unittests.cc",
107111
"display_list_path_effect_unittests.cc",
108112
"display_list_rtree_unittests.cc",
109113
"display_list_unittests.cc",
110-
"display_list_utils_unittests.cc",
111114
"display_list_vertices_unittests.cc",
115+
"skia/dl_sk_conversions_unittests.cc",
116+
"skia/dl_sk_utils_unittests.cc",
112117
]
113118

114119
deps = [
@@ -136,7 +141,7 @@ if (enable_unittests) {
136141
executable("display_list_rendertests") {
137142
testonly = true
138143

139-
sources = [ "display_list_canvas_unittests.cc" ]
144+
sources = [ "dl_rendering_unittests.cc" ]
140145

141146
deps = [
142147
":display_list",

display_list/display_list.cc

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
#include "flutter/display_list/display_list.h"
88
#include "flutter/display_list/display_list_builder.h"
9-
#include "flutter/display_list/display_list_canvas_dispatcher.h"
109
#include "flutter/display_list/display_list_ops.h"
1110
#include "flutter/fml/trace_event.h"
1211

@@ -134,38 +133,40 @@ class VectorCuller final : public Culler {
134133
std::vector<int>::const_iterator end_;
135134
};
136135

137-
void DisplayList::Dispatch(Dispatcher& ctx) const {
136+
void DisplayList::Dispatch(DlOpReceiver& receiver) const {
138137
uint8_t* ptr = storage_.get();
139-
Dispatch(ctx, ptr, ptr + byte_count_, NopCuller::instance);
138+
Dispatch(receiver, ptr, ptr + byte_count_, NopCuller::instance);
140139
}
141-
void DisplayList::Dispatch(Dispatcher& ctx, const SkRect& cull_rect) const {
140+
141+
void DisplayList::Dispatch(DlOpReceiver& receiver,
142+
const SkRect& cull_rect) const {
142143
if (cull_rect.isEmpty()) {
143144
return;
144145
}
145146
if (cull_rect.contains(bounds())) {
146-
Dispatch(ctx);
147+
Dispatch(receiver);
147148
return;
148149
}
149150
const DlRTree* rtree = this->rtree().get();
150151
FML_DCHECK(rtree != nullptr);
151152
if (rtree == nullptr) {
152153
FML_LOG(ERROR) << "dispatched with culling rect on DL with no rtree";
153-
Dispatch(ctx);
154+
Dispatch(receiver);
154155
return;
155156
}
156157
uint8_t* ptr = storage_.get();
157158
std::vector<int> rect_indices;
158159
rtree->search(cull_rect, &rect_indices);
159160
VectorCuller culler(rtree, rect_indices);
160-
Dispatch(ctx, ptr, ptr + byte_count_, culler);
161+
Dispatch(receiver, ptr, ptr + byte_count_, culler);
161162
}
162163

163-
void DisplayList::Dispatch(Dispatcher& dispatcher,
164+
void DisplayList::Dispatch(DlOpReceiver& receiver,
164165
uint8_t* ptr,
165166
uint8_t* end,
166167
Culler& culler) const {
167168
DispatchContext context = {
168-
.dispatcher = dispatcher,
169+
.receiver = receiver,
169170
.cur_index = 0,
170171
// next_render_index will be initialized by culler.init()
171172
.next_restore_index = std::numeric_limits<int>::max(),
@@ -294,27 +295,6 @@ static bool CompareOps(uint8_t* ptrA,
294295
return true;
295296
}
296297

297-
void DisplayList::RenderTo(DisplayListBuilder* builder) const {
298-
if (!builder) {
299-
return;
300-
}
301-
if (has_rtree()) {
302-
Dispatch(builder->asDispatcher(), builder->GetLocalClipBounds());
303-
} else {
304-
Dispatch(builder->asDispatcher());
305-
}
306-
}
307-
308-
void DisplayList::RenderTo(SkCanvas* canvas, SkScalar opacity) const {
309-
FML_DCHECK(can_apply_group_opacity() || opacity >= SK_Scalar1);
310-
DisplayListCanvasDispatcher dispatcher(canvas, opacity);
311-
if (has_rtree()) {
312-
Dispatch(dispatcher, canvas->getLocalClipBounds());
313-
} else {
314-
Dispatch(dispatcher);
315-
}
316-
}
317-
318298
bool DisplayList::Equals(const DisplayList* other) const {
319299
if (this == other) {
320300
return true;

display_list/display_list.h

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,41 +18,36 @@
1818
//
1919
// This file contains the definitions for:
2020
// DisplayList: the base class that holds the information about the
21-
// sequence of operations and can dispatch them to a Dispatcher
22-
// Dispatcher: a pure virtual interface which can be implemented to field
23-
// the requests for purposes such as sending them to an SkCanvas
24-
// or detecting various rendering optimization scenarios
25-
// DisplayListBuilder: a class for constructing a DisplayList from the same
26-
// calls defined in the Dispatcher
21+
// sequence of operations and can dispatch them to a DlOpReceiver
22+
// DlOpReceiver: a pure virtual interface which can be implemented to field
23+
// the requests for purposes such as sending them to an SkCanvas
24+
// or detecting various rendering optimization scenarios
25+
// DisplayListBuilder: a class for constructing a DisplayList from DlCanvas
26+
// method calls and which can act as a DlOpReceiver as well
2727
//
2828
// Other files include various class definitions for dealing with display
2929
// lists, such as:
30-
// display_list_canvas.h: classes to interact between SkCanvas and DisplayList
31-
// (SkCanvas->DisplayList adapter and vice versa)
30+
// skia/dl_sk_*.h: classes to interact between SkCanvas and DisplayList
31+
// (SkCanvas->DisplayList adapter and vice versa)
3232
//
3333
// display_list_utils.h: various utility classes to ease implementing
34-
// a Dispatcher, including NOP implementations of
34+
// a DlOpReceiver, including NOP implementations of
3535
// the attribute, clip, and transform methods,
3636
// classes to track attributes, clips, and transforms
3737
// and a class to compute the bounds of a DisplayList
38-
// Any class implementing Dispatcher can inherit from
38+
// Any class implementing DlOpReceiver can inherit from
3939
// these utility classes to simplify its creation
4040
//
4141
// The Flutter DisplayList mechanism is used in a similar manner to the Skia
42-
// SkPicture mechanism. The primary means of communication into and out
43-
// of the DisplayList is through the Dispatcher virtual class which
44-
// provides a nearly 1:1 translation between the records of the DisplayList
45-
// to method calls.
42+
// SkPicture mechanism.
4643
//
47-
// A DisplayList must be created using a DisplayListBuilder using either its
48-
// stateful methods inherited from Dispatcher, or from its stateless methods
49-
// inherited from DlCanvas.
44+
// A DisplayList must be created using a DisplayListBuilder using its stateless
45+
// methods inherited from DlCanvas.
5046
//
51-
// A DisplayList can be read back by implementing the Dispatcher virtual
47+
// A DisplayList can be read back by implementing the DlOpReceiver virtual
5248
// methods (with help from some of the classes in the utils file) and
53-
// passing an instance to the dispatch() method, or it can be rendered
54-
// to Skia using a DisplayListCanvasDispatcher or simply by passing an
55-
// SkCanvas pointer to its renderTo() method.
49+
// passing an instance to the Dispatch() method, or it can be rendered
50+
// to Skia using a DlSkCanvasDispatcher.
5651
//
5752
// The mechanism is inspired by the SkLiteDL class that is not directly
5853
// supported by Skia, but has been recommended as a basis for custom
@@ -155,7 +150,7 @@ enum class DisplayListOpType {
155150
};
156151
#undef DL_OP_TO_ENUM_VALUE
157152

158-
class Dispatcher;
153+
class DlOpReceiver;
159154
class DisplayListBuilder;
160155

161156
class SaveLayerOptions {
@@ -231,20 +226,16 @@ class DisplayListStorage {
231226
class Culler;
232227

233228
// The base class that contains a sequence of rendering operations
234-
// for dispatch to a Dispatcher. These objects must be instantiated
229+
// for dispatch to a DlOpReceiver. These objects must be instantiated
235230
// through an instance of DisplayListBuilder::build().
236231
class DisplayList : public SkRefCnt {
237232
public:
238233
DisplayList();
239234

240235
~DisplayList();
241236

242-
void Dispatch(Dispatcher& ctx) const;
243-
void Dispatch(Dispatcher& ctx, const SkRect& cull_rect) const;
244-
245-
void RenderTo(DisplayListBuilder* builder) const;
246-
247-
void RenderTo(SkCanvas* canvas, SkScalar opacity = SK_Scalar1) const;
237+
void Dispatch(DlOpReceiver& ctx) const;
238+
void Dispatch(DlOpReceiver& ctx, const SkRect& cull_rect) const;
248239

249240
// From historical behavior, SkPicture always included nested bytes,
250241
// but nested ops are only included if requested. The defaults used
@@ -300,7 +291,7 @@ class DisplayList : public SkRefCnt {
300291
const bool can_apply_group_opacity_;
301292
const sk_sp<const DlRTree> rtree_;
302293

303-
void Dispatch(Dispatcher& ctx,
294+
void Dispatch(DlOpReceiver& ctx,
304295
uint8_t* ptr,
305296
uint8_t* end,
306297
Culler& culler) const;

0 commit comments

Comments
 (0)