Skip to content

Commit 25020cd

Browse files
committed
Reland "Sequester all Skia<->DL interactions into the skia sub-module (flutter#40083)"
This reverts commit b3e314e.
1 parent 2032f91 commit 25020cd

File tree

90 files changed

+4597
-3764
lines changed

Some content is hidden

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

90 files changed

+4597
-3764
lines changed

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
@@ -3242,8 +3247,6 @@ FILE: ../../../flutter/display_list/display_list_blend_mode.h
32423247
FILE: ../../../flutter/display_list/display_list_builder.cc
32433248
FILE: ../../../flutter/display_list/display_list_builder.h
32443249
FILE: ../../../flutter/display_list/display_list_builder_benchmarks.cc
3245-
FILE: ../../../flutter/display_list/display_list_canvas_dispatcher.cc
3246-
FILE: ../../../flutter/display_list/display_list_canvas_dispatcher.h
32473250
FILE: ../../../flutter/display_list/display_list_color.h
32483251
FILE: ../../../flutter/display_list/display_list_color_filter.cc
32493252
FILE: ../../../flutter/display_list/display_list_color_filter.h
@@ -3257,8 +3260,6 @@ FILE: ../../../flutter/display_list/display_list_complexity_gl.h
32573260
FILE: ../../../flutter/display_list/display_list_complexity_helper.h
32583261
FILE: ../../../flutter/display_list/display_list_complexity_metal.cc
32593262
FILE: ../../../flutter/display_list/display_list_complexity_metal.h
3260-
FILE: ../../../flutter/display_list/display_list_dispatcher.cc
3261-
FILE: ../../../flutter/display_list/display_list_dispatcher.h
32623263
FILE: ../../../flutter/display_list/display_list_flags.cc
32633264
FILE: ../../../flutter/display_list/display_list_flags.h
32643265
FILE: ../../../flutter/display_list/display_list_image.cc
@@ -3287,9 +3288,18 @@ FILE: ../../../flutter/display_list/display_list_utils.cc
32873288
FILE: ../../../flutter/display_list/display_list_utils.h
32883289
FILE: ../../../flutter/display_list/display_list_vertices.cc
32893290
FILE: ../../../flutter/display_list/display_list_vertices.h
3291+
FILE: ../../../flutter/display_list/dl_canvas.cc
32903292
FILE: ../../../flutter/display_list/dl_canvas.h
3293+
FILE: ../../../flutter/display_list/dl_op_receiver.cc
3294+
FILE: ../../../flutter/display_list/dl_op_receiver.h
32913295
FILE: ../../../flutter/display_list/skia/dl_sk_canvas.cc
32923296
FILE: ../../../flutter/display_list/skia/dl_sk_canvas.h
3297+
FILE: ../../../flutter/display_list/skia/dl_sk_conversions.cc
3298+
FILE: ../../../flutter/display_list/skia/dl_sk_conversions.h
3299+
FILE: ../../../flutter/display_list/skia/dl_sk_dispatcher.cc
3300+
FILE: ../../../flutter/display_list/skia/dl_sk_dispatcher.h
3301+
FILE: ../../../flutter/display_list/skia/dl_sk_utils.cc
3302+
FILE: ../../../flutter/display_list/skia/dl_sk_utils.h
32933303
FILE: ../../../flutter/display_list/types.h
32943304
FILE: ../../../flutter/flow/compositor_context.cc
32953305
FILE: ../../../flutter/flow/compositor_context.h

display_list/BUILD.gn

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ source_set("display_list") {
1616
"display_list_blend_mode.h",
1717
"display_list_builder.cc",
1818
"display_list_builder.h",
19-
"display_list_canvas_dispatcher.cc",
20-
"display_list_canvas_dispatcher.h",
2119
"display_list_color.h",
2220
"display_list_color_filter.cc",
2321
"display_list_color_filter.h",
@@ -29,8 +27,6 @@ source_set("display_list") {
2927
"display_list_complexity_gl.h",
3028
"display_list_complexity_metal.cc",
3129
"display_list_complexity_metal.h",
32-
"display_list_dispatcher.cc",
33-
"display_list_dispatcher.h",
3430
"display_list_flags.cc",
3531
"display_list_flags.h",
3632
"display_list_image.cc",
@@ -59,9 +55,18 @@ source_set("display_list") {
5955
"display_list_utils.h",
6056
"display_list_vertices.cc",
6157
"display_list_vertices.h",
58+
"dl_canvas.cc",
6259
"dl_canvas.h",
60+
"dl_op_receiver.cc",
61+
"dl_op_receiver.h",
6362
"skia/dl_sk_canvas.cc",
6463
"skia/dl_sk_canvas.h",
64+
"skia/dl_sk_conversions.cc",
65+
"skia/dl_sk_conversions.h",
66+
"skia/dl_sk_dispatcher.cc",
67+
"skia/dl_sk_dispatcher.h",
68+
"skia/dl_sk_utils.cc",
69+
"skia/dl_sk_utils.h",
6570
"types.h",
6671
]
6772

@@ -93,16 +98,16 @@ if (enable_unittests) {
9398
"display_list_color_source_unittests.cc",
9499
"display_list_color_unittests.cc",
95100
"display_list_complexity_unittests.cc",
96-
"display_list_enum_unittests.cc",
97101
"display_list_image_filter_unittests.cc",
98102
"display_list_mask_filter_unittests.cc",
99103
"display_list_matrix_clip_tracker_unittests.cc",
100104
"display_list_paint_unittests.cc",
101105
"display_list_path_effect_unittests.cc",
102106
"display_list_rtree_unittests.cc",
103107
"display_list_unittests.cc",
104-
"display_list_utils_unittests.cc",
105108
"display_list_vertices_unittests.cc",
109+
"skia/dl_sk_conversions_unittests.cc",
110+
"skia/dl_sk_utils_unittests.cc",
106111
]
107112

108113
deps = [
@@ -130,7 +135,7 @@ if (enable_unittests) {
130135
executable("display_list_rendertests") {
131136
testonly = true
132137

133-
sources = [ "display_list_canvas_unittests.cc" ]
138+
sources = [ "dl_rendering_unittests.cc" ]
134139

135140
deps = [
136141
":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)