Skip to content

Commit b3e314e

Browse files
Revert "Sequester all Skia<->DL interactions into the skia sub-module (flutter#40083)" (flutter#40103)
Revert "Sequester all Skia<->DL interactions into the skia sub-module (flutter#40083)"
1 parent e086a8f commit b3e314e

File tree

90 files changed

+3764
-4597
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

+3764
-4597
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
3233
../../../flutter/display_list/display_list_color_filter_unittests.cc
3334
../../../flutter/display_list/display_list_color_source_unittests.cc
3435
../../../flutter/display_list/display_list_color_unittests.cc
3536
../../../flutter/display_list/display_list_complexity_unittests.cc
37+
../../../flutter/display_list/display_list_enum_unittests.cc
3638
../../../flutter/display_list/display_list_image_filter_unittests.cc
3739
../../../flutter/display_list/display_list_mask_filter_unittests.cc
3840
../../../flutter/display_list/display_list_matrix_clip_tracker_unittests.cc
3941
../../../flutter/display_list/display_list_paint_unittests.cc
4042
../../../flutter/display_list/display_list_path_effect_unittests.cc
4143
../../../flutter/display_list/display_list_rtree_unittests.cc
4244
../../../flutter/display_list/display_list_unittests.cc
45+
../../../flutter/display_list/display_list_utils_unittests.cc
4346
../../../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: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,8 @@ 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
717719
ORIGIN: ../../../flutter/display_list/display_list_color.h + ../../../flutter/LICENSE
718720
ORIGIN: ../../../flutter/display_list/display_list_color_filter.cc + ../../../flutter/LICENSE
719721
ORIGIN: ../../../flutter/display_list/display_list_color_filter.h + ../../../flutter/LICENSE
@@ -727,6 +729,8 @@ ORIGIN: ../../../flutter/display_list/display_list_complexity_gl.h + ../../../fl
727729
ORIGIN: ../../../flutter/display_list/display_list_complexity_helper.h + ../../../flutter/LICENSE
728730
ORIGIN: ../../../flutter/display_list/display_list_complexity_metal.cc + ../../../flutter/LICENSE
729731
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
730734
ORIGIN: ../../../flutter/display_list/display_list_flags.cc + ../../../flutter/LICENSE
731735
ORIGIN: ../../../flutter/display_list/display_list_flags.h + ../../../flutter/LICENSE
732736
ORIGIN: ../../../flutter/display_list/display_list_image.cc + ../../../flutter/LICENSE
@@ -755,18 +759,9 @@ ORIGIN: ../../../flutter/display_list/display_list_utils.cc + ../../../flutter/L
755759
ORIGIN: ../../../flutter/display_list/display_list_utils.h + ../../../flutter/LICENSE
756760
ORIGIN: ../../../flutter/display_list/display_list_vertices.cc + ../../../flutter/LICENSE
757761
ORIGIN: ../../../flutter/display_list/display_list_vertices.h + ../../../flutter/LICENSE
758-
ORIGIN: ../../../flutter/display_list/dl_canvas.cc + ../../../flutter/LICENSE
759762
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
762763
ORIGIN: ../../../flutter/display_list/skia/dl_sk_canvas.cc + ../../../flutter/LICENSE
763764
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
770765
ORIGIN: ../../../flutter/display_list/types.h + ../../../flutter/LICENSE
771766
ORIGIN: ../../../flutter/flow/compositor_context.cc + ../../../flutter/LICENSE
772767
ORIGIN: ../../../flutter/flow/compositor_context.h + ../../../flutter/LICENSE
@@ -3247,6 +3242,8 @@ FILE: ../../../flutter/display_list/display_list_blend_mode.h
32473242
FILE: ../../../flutter/display_list/display_list_builder.cc
32483243
FILE: ../../../flutter/display_list/display_list_builder.h
32493244
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
32503247
FILE: ../../../flutter/display_list/display_list_color.h
32513248
FILE: ../../../flutter/display_list/display_list_color_filter.cc
32523249
FILE: ../../../flutter/display_list/display_list_color_filter.h
@@ -3260,6 +3257,8 @@ FILE: ../../../flutter/display_list/display_list_complexity_gl.h
32603257
FILE: ../../../flutter/display_list/display_list_complexity_helper.h
32613258
FILE: ../../../flutter/display_list/display_list_complexity_metal.cc
32623259
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
32633262
FILE: ../../../flutter/display_list/display_list_flags.cc
32643263
FILE: ../../../flutter/display_list/display_list_flags.h
32653264
FILE: ../../../flutter/display_list/display_list_image.cc
@@ -3288,18 +3287,9 @@ FILE: ../../../flutter/display_list/display_list_utils.cc
32883287
FILE: ../../../flutter/display_list/display_list_utils.h
32893288
FILE: ../../../flutter/display_list/display_list_vertices.cc
32903289
FILE: ../../../flutter/display_list/display_list_vertices.h
3291-
FILE: ../../../flutter/display_list/dl_canvas.cc
32923290
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
32953291
FILE: ../../../flutter/display_list/skia/dl_sk_canvas.cc
32963292
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
33033293
FILE: ../../../flutter/display_list/types.h
33043294
FILE: ../../../flutter/flow/compositor_context.cc
33053295
FILE: ../../../flutter/flow/compositor_context.h

display_list/BUILD.gn

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ 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",
1921
"display_list_color.h",
2022
"display_list_color_filter.cc",
2123
"display_list_color_filter.h",
@@ -27,6 +29,8 @@ source_set("display_list") {
2729
"display_list_complexity_gl.h",
2830
"display_list_complexity_metal.cc",
2931
"display_list_complexity_metal.h",
32+
"display_list_dispatcher.cc",
33+
"display_list_dispatcher.h",
3034
"display_list_flags.cc",
3135
"display_list_flags.h",
3236
"display_list_image.cc",
@@ -55,18 +59,9 @@ source_set("display_list") {
5559
"display_list_utils.h",
5660
"display_list_vertices.cc",
5761
"display_list_vertices.h",
58-
"dl_canvas.cc",
5962
"dl_canvas.h",
60-
"dl_op_receiver.cc",
61-
"dl_op_receiver.h",
6263
"skia/dl_sk_canvas.cc",
6364
"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",
7065
"types.h",
7166
]
7267

@@ -98,16 +93,16 @@ if (enable_unittests) {
9893
"display_list_color_source_unittests.cc",
9994
"display_list_color_unittests.cc",
10095
"display_list_complexity_unittests.cc",
96+
"display_list_enum_unittests.cc",
10197
"display_list_image_filter_unittests.cc",
10298
"display_list_mask_filter_unittests.cc",
10399
"display_list_matrix_clip_tracker_unittests.cc",
104100
"display_list_paint_unittests.cc",
105101
"display_list_path_effect_unittests.cc",
106102
"display_list_rtree_unittests.cc",
107103
"display_list_unittests.cc",
104+
"display_list_utils_unittests.cc",
108105
"display_list_vertices_unittests.cc",
109-
"skia/dl_sk_conversions_unittests.cc",
110-
"skia/dl_sk_utils_unittests.cc",
111106
]
112107

113108
deps = [
@@ -135,7 +130,7 @@ if (enable_unittests) {
135130
executable("display_list_rendertests") {
136131
testonly = true
137132

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

140135
deps = [
141136
":display_list",

display_list/display_list.cc

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
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"
910
#include "flutter/display_list/display_list_ops.h"
1011
#include "flutter/fml/trace_event.h"
1112

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

136-
void DisplayList::Dispatch(DlOpReceiver& receiver) const {
137+
void DisplayList::Dispatch(Dispatcher& ctx) const {
137138
uint8_t* ptr = storage_.get();
138-
Dispatch(receiver, ptr, ptr + byte_count_, NopCuller::instance);
139+
Dispatch(ctx, ptr, ptr + byte_count_, NopCuller::instance);
139140
}
140-
141-
void DisplayList::Dispatch(DlOpReceiver& receiver,
142-
const SkRect& cull_rect) const {
141+
void DisplayList::Dispatch(Dispatcher& ctx, const SkRect& cull_rect) const {
143142
if (cull_rect.isEmpty()) {
144143
return;
145144
}
146145
if (cull_rect.contains(bounds())) {
147-
Dispatch(receiver);
146+
Dispatch(ctx);
148147
return;
149148
}
150149
const DlRTree* rtree = this->rtree().get();
151150
FML_DCHECK(rtree != nullptr);
152151
if (rtree == nullptr) {
153152
FML_LOG(ERROR) << "dispatched with culling rect on DL with no rtree";
154-
Dispatch(receiver);
153+
Dispatch(ctx);
155154
return;
156155
}
157156
uint8_t* ptr = storage_.get();
158157
std::vector<int> rect_indices;
159158
rtree->search(cull_rect, &rect_indices);
160159
VectorCuller culler(rtree, rect_indices);
161-
Dispatch(receiver, ptr, ptr + byte_count_, culler);
160+
Dispatch(ctx, ptr, ptr + byte_count_, culler);
162161
}
163162

164-
void DisplayList::Dispatch(DlOpReceiver& receiver,
163+
void DisplayList::Dispatch(Dispatcher& dispatcher,
165164
uint8_t* ptr,
166165
uint8_t* end,
167166
Culler& culler) const {
168167
DispatchContext context = {
169-
.receiver = receiver,
168+
.dispatcher = dispatcher,
170169
.cur_index = 0,
171170
// next_render_index will be initialized by culler.init()
172171
.next_restore_index = std::numeric_limits<int>::max(),
@@ -295,6 +294,27 @@ static bool CompareOps(uint8_t* ptrA,
295294
return true;
296295
}
297296

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+
298318
bool DisplayList::Equals(const DisplayList* other) const {
299319
if (this == other) {
300320
return true;

display_list/display_list.h

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,36 +18,41 @@
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 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
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
2727
//
2828
// Other files include various class definitions for dealing with display
2929
// lists, such as:
30-
// skia/dl_sk_*.h: classes to interact between SkCanvas and DisplayList
31-
// (SkCanvas->DisplayList adapter and vice versa)
30+
// display_list_canvas.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 DlOpReceiver, including NOP implementations of
34+
// a Dispatcher, 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 DlOpReceiver can inherit from
38+
// Any class implementing Dispatcher 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.
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.
4346
//
44-
// A DisplayList must be created using a DisplayListBuilder using its stateless
45-
// methods inherited from DlCanvas.
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.
4650
//
47-
// A DisplayList can be read back by implementing the DlOpReceiver virtual
51+
// A DisplayList can be read back by implementing the Dispatcher virtual
4852
// methods (with help from some of the classes in the utils file) and
49-
// passing an instance to the Dispatch() method, or it can be rendered
50-
// to Skia using a DlSkCanvasDispatcher.
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.
5156
//
5257
// The mechanism is inspired by the SkLiteDL class that is not directly
5358
// supported by Skia, but has been recommended as a basis for custom
@@ -150,7 +155,7 @@ enum class DisplayListOpType {
150155
};
151156
#undef DL_OP_TO_ENUM_VALUE
152157

153-
class DlOpReceiver;
158+
class Dispatcher;
154159
class DisplayListBuilder;
155160

156161
class SaveLayerOptions {
@@ -226,16 +231,20 @@ class DisplayListStorage {
226231
class Culler;
227232

228233
// The base class that contains a sequence of rendering operations
229-
// for dispatch to a DlOpReceiver. These objects must be instantiated
234+
// for dispatch to a Dispatcher. These objects must be instantiated
230235
// through an instance of DisplayListBuilder::build().
231236
class DisplayList : public SkRefCnt {
232237
public:
233238
DisplayList();
234239

235240
~DisplayList();
236241

237-
void Dispatch(DlOpReceiver& ctx) const;
238-
void Dispatch(DlOpReceiver& ctx, const SkRect& cull_rect) const;
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;
239248

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

294-
void Dispatch(DlOpReceiver& ctx,
303+
void Dispatch(Dispatcher& ctx,
295304
uint8_t* ptr,
296305
uint8_t* end,
297306
Culler& culler) const;

0 commit comments

Comments
 (0)