@@ -58,12 +58,15 @@ sk_sp<SkImage> ConvertBufferToSkImage(
5858
5959void DoConvertImageToRasterImpeller (
6060 const sk_sp<DlImage>& dl_image,
61- std::function<void (sk_sp<SkImage>)> encode_task,
61+ std::function<void (fml::StatusOr< sk_sp<SkImage> >)> encode_task,
6262 const std::shared_ptr<const fml::SyncSwitch>& is_gpu_disabled_sync_switch,
6363 const std::shared_ptr<impeller::Context>& impeller_context) {
6464 is_gpu_disabled_sync_switch->Execute (
6565 fml::SyncSwitch::Handlers ()
66- .SetIfTrue ([&encode_task] { encode_task (nullptr ); })
66+ .SetIfTrue ([&encode_task] {
67+ encode_task (
68+ fml::Status (fml::StatusCode::kUnavailable , " gpu unavailable" ));
69+ })
6770 .SetIfFalse ([&dl_image, &encode_task, &impeller_context] {
6871 ImageEncodingImpeller::ConvertDlImageToSkImage (
6972 dl_image, std::move (encode_task), impeller_context);
@@ -74,19 +77,21 @@ void DoConvertImageToRasterImpeller(
7477
7578void ImageEncodingImpeller::ConvertDlImageToSkImage (
7679 const sk_sp<DlImage>& dl_image,
77- std::function<void (sk_sp<SkImage>)> encode_task,
80+ std::function<void (fml::StatusOr< sk_sp<SkImage> >)> encode_task,
7881 const std::shared_ptr<impeller::Context>& impeller_context) {
7982 auto texture = dl_image->impeller_texture ();
8083
8184 if (impeller_context == nullptr ) {
8285 FML_LOG (ERROR) << " Impeller context was null." ;
83- encode_task (nullptr );
86+ encode_task (fml::Status (fml::StatusCode::kFailedPrecondition ,
87+ " Impeller context was null." ));
8488 return ;
8589 }
8690
8791 if (texture == nullptr ) {
8892 FML_LOG (ERROR) << " Image was null." ;
89- encode_task (nullptr );
93+ encode_task (
94+ fml::Status (fml::StatusCode::kFailedPrecondition , " Image was null." ));
9095 return ;
9196 }
9297
@@ -95,13 +100,15 @@ void ImageEncodingImpeller::ConvertDlImageToSkImage(
95100
96101 if (dimensions.isEmpty ()) {
97102 FML_LOG (ERROR) << " Image dimensions were empty." ;
98- encode_task (nullptr );
103+ encode_task (fml::Status (fml::StatusCode::kFailedPrecondition ,
104+ " Image dimensions were empty." ));
99105 return ;
100106 }
101107
102108 if (!color_type.has_value ()) {
103109 FML_LOG (ERROR) << " Failed to get color type from pixel format." ;
104- encode_task (nullptr );
110+ encode_task (fml::Status (fml::StatusCode::kUnimplemented ,
111+ " Failed to get color type from pixel format." ));
105112 return ;
106113 }
107114
@@ -121,7 +128,7 @@ void ImageEncodingImpeller::ConvertDlImageToSkImage(
121128 encode_task = std::move (encode_task)](
122129 impeller::CommandBuffer::Status status) {
123130 if (status != impeller::CommandBuffer::Status::kCompleted ) {
124- encode_task (nullptr );
131+ encode_task (fml::Status (fml::StatusCode:: kUnknown , " " ) );
125132 return ;
126133 }
127134 auto sk_image = ConvertBufferToSkImage (buffer, color_type, dimensions);
@@ -135,14 +142,14 @@ void ImageEncodingImpeller::ConvertDlImageToSkImage(
135142
136143void ImageEncodingImpeller::ConvertImageToRaster (
137144 const sk_sp<DlImage>& dl_image,
138- std::function<void (sk_sp<SkImage>)> encode_task,
145+ std::function<void (fml::StatusOr< sk_sp<SkImage> >)> encode_task,
139146 const fml::RefPtr<fml::TaskRunner>& raster_task_runner,
140147 const fml::RefPtr<fml::TaskRunner>& io_task_runner,
141148 const std::shared_ptr<const fml::SyncSwitch>& is_gpu_disabled_sync_switch,
142149 const std::shared_ptr<impeller::Context>& impeller_context) {
143150 auto original_encode_task = std::move (encode_task);
144151 encode_task = [original_encode_task = std::move (original_encode_task),
145- io_task_runner](sk_sp<SkImage> image) mutable {
152+ io_task_runner](fml::StatusOr< sk_sp<SkImage> > image) mutable {
146153 fml::TaskRunner::RunNowOrPostTask (
147154 io_task_runner,
148155 [original_encode_task = std::move (original_encode_task),
0 commit comments