@@ -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,34 +77,34 @@ 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 ) {
82- FML_LOG (ERROR) << " Impeller context was null. " ;
83- encode_task ( nullptr );
85+ encode_task ( fml::Status (fml::StatusCode:: kFailedPrecondition ,
86+ " Impeller context was null. " ) );
8487 return ;
8588 }
8689
8790 if (texture == nullptr ) {
88- FML_LOG (ERROR) << " Image was null. " ;
89- encode_task ( nullptr );
91+ encode_task (
92+ fml::Status (fml::StatusCode:: kFailedPrecondition , " Image was null. " ) );
9093 return ;
9194 }
9295
9396 auto dimensions = dl_image->dimensions ();
9497 auto color_type = ToSkColorType (texture->GetTextureDescriptor ().format );
9598
9699 if (dimensions.isEmpty ()) {
97- FML_LOG (ERROR) << " Image dimensions were empty. " ;
98- encode_task ( nullptr );
100+ encode_task ( fml::Status (fml::StatusCode:: kFailedPrecondition ,
101+ " Image dimensions were empty. " ) );
99102 return ;
100103 }
101104
102105 if (!color_type.has_value ()) {
103- FML_LOG (ERROR) << " Failed to get color type from pixel format. " ;
104- encode_task ( nullptr );
106+ encode_task ( fml::Status (fml::StatusCode:: kUnimplemented ,
107+ " Failed to get color type from pixel format. " ) );
105108 return ;
106109 }
107110
@@ -121,7 +124,7 @@ void ImageEncodingImpeller::ConvertDlImageToSkImage(
121124 encode_task = std::move (encode_task)](
122125 impeller::CommandBuffer::Status status) {
123126 if (status != impeller::CommandBuffer::Status::kCompleted ) {
124- encode_task (nullptr );
127+ encode_task (fml::Status (fml::StatusCode:: kUnknown , " " ) );
125128 return ;
126129 }
127130 auto sk_image = ConvertBufferToSkImage (buffer, color_type, dimensions);
@@ -135,14 +138,14 @@ void ImageEncodingImpeller::ConvertDlImageToSkImage(
135138
136139void ImageEncodingImpeller::ConvertImageToRaster (
137140 const sk_sp<DlImage>& dl_image,
138- std::function<void (sk_sp<SkImage>)> encode_task,
141+ std::function<void (fml::StatusOr< sk_sp<SkImage> >)> encode_task,
139142 const fml::RefPtr<fml::TaskRunner>& raster_task_runner,
140143 const fml::RefPtr<fml::TaskRunner>& io_task_runner,
141144 const std::shared_ptr<const fml::SyncSwitch>& is_gpu_disabled_sync_switch,
142145 const std::shared_ptr<impeller::Context>& impeller_context) {
143146 auto original_encode_task = std::move (encode_task);
144147 encode_task = [original_encode_task = std::move (original_encode_task),
145- io_task_runner](sk_sp<SkImage> image) mutable {
148+ io_task_runner](fml::StatusOr< sk_sp<SkImage> > image) mutable {
146149 fml::TaskRunner::RunNowOrPostTask (
147150 io_task_runner,
148151 [original_encode_task = std::move (original_encode_task),
0 commit comments