mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Make LayerTree::Flatten use DisplayList (flutter/engine#34227)
This commit is contained in:
parent
727c66750e
commit
a33b1e7c6f
@ -113,15 +113,10 @@ void LayerTree::Paint(CompositorContext::ScopedFrame& frame,
|
||||
}
|
||||
}
|
||||
|
||||
sk_sp<SkPicture> LayerTree::Flatten(const SkRect& bounds) {
|
||||
sk_sp<DisplayList> LayerTree::Flatten(const SkRect& bounds) {
|
||||
TRACE_EVENT0("flutter", "LayerTree::Flatten");
|
||||
|
||||
SkPictureRecorder recorder;
|
||||
auto* canvas = recorder.beginRecording(bounds);
|
||||
|
||||
if (!canvas) {
|
||||
return nullptr;
|
||||
}
|
||||
DisplayListCanvasRecorder builder(bounds);
|
||||
|
||||
MutatorsStack unused_stack;
|
||||
const FixedRefreshRateStopwatch unused_stopwatch;
|
||||
@ -147,14 +142,14 @@ sk_sp<SkPicture> LayerTree::Flatten(const SkRect& bounds) {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
SkISize canvas_size = canvas->getBaseLayerSize();
|
||||
SkISize canvas_size = builder.getBaseLayerSize();
|
||||
SkNWayCanvas internal_nodes_canvas(canvas_size.width(), canvas_size.height());
|
||||
internal_nodes_canvas.addCanvas(canvas);
|
||||
internal_nodes_canvas.addCanvas(&builder);
|
||||
|
||||
Layer::PaintContext paint_context = {
|
||||
// clang-format off
|
||||
.internal_nodes_canvas = &internal_nodes_canvas,
|
||||
.leaf_nodes_canvas = canvas,
|
||||
.leaf_nodes_canvas = &builder,
|
||||
.gr_context = nullptr,
|
||||
.view_embedder = nullptr,
|
||||
.raster_time = unused_stopwatch,
|
||||
@ -178,7 +173,7 @@ sk_sp<SkPicture> LayerTree::Flatten(const SkRect& bounds) {
|
||||
}
|
||||
}
|
||||
|
||||
return recorder.finishRecordingAsPicture();
|
||||
return builder.Build();
|
||||
}
|
||||
|
||||
} // namespace flutter
|
||||
|
||||
@ -35,7 +35,7 @@ class LayerTree {
|
||||
void Paint(CompositorContext::ScopedFrame& frame,
|
||||
bool ignore_raster_cache = false) const;
|
||||
|
||||
sk_sp<SkPicture> Flatten(const SkRect& bounds);
|
||||
sk_sp<DisplayList> Flatten(const SkRect& bounds);
|
||||
|
||||
Layer* root_layer() const { return root_layer_.get(); }
|
||||
|
||||
|
||||
@ -58,17 +58,17 @@ Dart_Handle Picture::toImage(uint32_t width,
|
||||
uint32_t height,
|
||||
Dart_Handle raw_image_callback) {
|
||||
if (display_list_.skia_object()) {
|
||||
return RasterizeToImage(
|
||||
[display_list = display_list_.skia_object()](SkCanvas* canvas) {
|
||||
display_list->RenderTo(canvas);
|
||||
},
|
||||
width, height, raw_image_callback);
|
||||
return RasterizeToImage(display_list_.skia_object(), width, height,
|
||||
raw_image_callback);
|
||||
} else {
|
||||
if (!picture_.skia_object()) {
|
||||
return tonic::ToDart("Picture is null");
|
||||
}
|
||||
return RasterizeToImage(picture_.skia_object(), width, height,
|
||||
raw_image_callback);
|
||||
return RasterizeToImage(
|
||||
[picture = picture_.skia_object()](SkCanvas* canvas) {
|
||||
canvas->drawPicture(picture);
|
||||
},
|
||||
width, height, raw_image_callback);
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,13 +88,13 @@ size_t Picture::GetAllocationSize() const {
|
||||
}
|
||||
}
|
||||
|
||||
Dart_Handle Picture::RasterizeToImage(sk_sp<SkPicture> picture,
|
||||
Dart_Handle Picture::RasterizeToImage(sk_sp<DisplayList> display_list,
|
||||
uint32_t width,
|
||||
uint32_t height,
|
||||
Dart_Handle raw_image_callback) {
|
||||
return RasterizeToImage(
|
||||
[picture](SkCanvas* canvas) { canvas->drawPicture(picture); }, width,
|
||||
height, raw_image_callback);
|
||||
[display_list](SkCanvas* canvas) { display_list->RenderTo(canvas); },
|
||||
width, height, raw_image_callback);
|
||||
}
|
||||
|
||||
Dart_Handle Picture::RasterizeToImage(
|
||||
|
||||
@ -46,7 +46,7 @@ class Picture : public RefCountedDartWrappable<Picture> {
|
||||
|
||||
static void RegisterNatives(tonic::DartLibraryNatives* natives);
|
||||
|
||||
static Dart_Handle RasterizeToImage(sk_sp<SkPicture> picture,
|
||||
static Dart_Handle RasterizeToImage(sk_sp<DisplayList> display_list,
|
||||
uint32_t width,
|
||||
uint32_t height,
|
||||
Dart_Handle raw_image_callback);
|
||||
|
||||
@ -65,6 +65,6 @@ void main() {
|
||||
}
|
||||
}
|
||||
expect(saveLayerRecordCount, 3);
|
||||
expect(saveLayerCount, 3);
|
||||
expect(saveLayerCount, 6);
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user