From 3a49ea0b85cd8de08337e12a9f143c100efdf967 Mon Sep 17 00:00:00 2001 From: Martin Kustermann Date: Fri, 3 Nov 2023 23:44:19 +0100 Subject: [PATCH] Fix incorrect C++ return value of PictureRecorder::endRecording() (flutter/engine#47645) The Dart code has the following declaration: ```dart @Native, Handle)>(symbol: 'PictureRecorder::endRecording') external void _endRecording(_NativePicture outPicture); ``` => Dart doesn't expect to get a return value, so C++ shouldn't return anything. --- engine/src/flutter/lib/ui/painting/picture.cc | 7 +++---- engine/src/flutter/lib/ui/painting/picture.h | 5 +++-- engine/src/flutter/lib/ui/painting/picture_recorder.cc | 10 ++++------ engine/src/flutter/lib/ui/painting/picture_recorder.h | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/engine/src/flutter/lib/ui/painting/picture.cc b/engine/src/flutter/lib/ui/painting/picture.cc index 74c7b0dc781..400c7665002 100644 --- a/engine/src/flutter/lib/ui/painting/picture.cc +++ b/engine/src/flutter/lib/ui/painting/picture.cc @@ -26,13 +26,12 @@ namespace flutter { IMPLEMENT_WRAPPERTYPEINFO(ui, Picture); -fml::RefPtr Picture::Create(Dart_Handle dart_handle, - sk_sp display_list) { +void Picture::CreateAndAssociateWithDartWrapper( + Dart_Handle dart_handle, + sk_sp display_list) { FML_DCHECK(display_list->isUIThreadSafe()); auto canvas_picture = fml::MakeRefCounted(std::move(display_list)); - canvas_picture->AssociateWithDartWrapper(dart_handle); - return canvas_picture; } Picture::Picture(sk_sp display_list) diff --git a/engine/src/flutter/lib/ui/painting/picture.h b/engine/src/flutter/lib/ui/painting/picture.h index 6d41cbe8dad..eb25b9a9278 100644 --- a/engine/src/flutter/lib/ui/painting/picture.h +++ b/engine/src/flutter/lib/ui/painting/picture.h @@ -20,8 +20,9 @@ class Picture : public RefCountedDartWrappable { public: ~Picture() override; - static fml::RefPtr Create(Dart_Handle dart_handle, - sk_sp display_list); + static void CreateAndAssociateWithDartWrapper( + Dart_Handle dart_handle, + sk_sp display_list); sk_sp display_list() const { return display_list_; } diff --git a/engine/src/flutter/lib/ui/painting/picture_recorder.cc b/engine/src/flutter/lib/ui/painting/picture_recorder.cc index a99b5e5855e..6a24e934699 100644 --- a/engine/src/flutter/lib/ui/painting/picture_recorder.cc +++ b/engine/src/flutter/lib/ui/painting/picture_recorder.cc @@ -31,20 +31,18 @@ sk_sp PictureRecorder::BeginRecording(SkRect bounds) { return display_list_builder_; } -fml::RefPtr PictureRecorder::endRecording(Dart_Handle dart_picture) { +void PictureRecorder::endRecording(Dart_Handle dart_picture) { if (!canvas_) { - return nullptr; + return; } - fml::RefPtr picture; - - picture = Picture::Create(dart_picture, display_list_builder_->Build()); + Picture::CreateAndAssociateWithDartWrapper(dart_picture, + display_list_builder_->Build()); display_list_builder_ = nullptr; canvas_->Invalidate(); canvas_ = nullptr; ClearDartWrapper(); - return picture; } } // namespace flutter diff --git a/engine/src/flutter/lib/ui/painting/picture_recorder.h b/engine/src/flutter/lib/ui/painting/picture_recorder.h index c5046a424a6..ccbc8d030e3 100644 --- a/engine/src/flutter/lib/ui/painting/picture_recorder.h +++ b/engine/src/flutter/lib/ui/painting/picture_recorder.h @@ -22,7 +22,7 @@ class PictureRecorder : public RefCountedDartWrappable { ~PictureRecorder() override; sk_sp BeginRecording(SkRect bounds); - fml::RefPtr endRecording(Dart_Handle dart_picture); + void endRecording(Dart_Handle dart_picture); void set_canvas(fml::RefPtr canvas) { canvas_ = std::move(canvas); }