223 {
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240 auto raw_descriptor = descriptor_ref_ptr.get();
241 raw_descriptor->AddRef();
242
245
246
252 flow = std::move(flow)]() mutable {
253
254
256 flow.End();
258 raw_descriptor->Release();
259 }));
260 };
261
262 if (!raw_descriptor->data() || raw_descriptor->data()->size() == 0) {
263 result({}, std::move(flow));
264 return;
265 }
266
272 target_width = target_width,
273 target_height = target_height,
274 flow = std::move(flow)
275 ]() mutable {
276
277
278
279 auto decompressed = raw_descriptor->is_compressed()
280 ? ImageFromCompressedData(raw_descriptor,
281 target_width,
282 target_height,
283 flow)
284 : ImageFromDecompressedData(raw_descriptor,
285 target_width,
286 target_height,
287 flow);
288
289 if (!decompressed) {
290 FML_DLOG(ERROR) << "Could not decompress image.";
291 result({}, std::move(flow));
292 return;
293 }
294
295
296
297
299 flow =
300 std::move(flow)]() mutable {
301 if (!io_manager) {
302 FML_DLOG(ERROR) << "Could not acquire IO manager.";
303 result({}, std::move(flow));
304 return;
305 }
306
307
308
309
310 if (!io_manager->GetResourceContext()) {
311 result({std::move(decompressed), io_manager->GetSkiaUnrefQueue()},
312 std::move(flow));
313 return;
314 }
315
316 auto uploaded =
318
319 if (!uploaded.skia_object()) {
321 result({}, std::move(flow));
322 return;
323 }
324
325
326 result(std::move(uploaded), std::move(flow));
327 }));
328 }));
329}
static sk_sp< DlImageGPU > Make(SkiaGPUObject< SkImage > image)
std::shared_ptr< fml::ConcurrentTaskRunner > concurrent_task_runner_
fml::WeakPtr< IOManager > io_manager_
fml::RefPtr< fml::TaskRunner > GetUITaskRunner() const
fml::RefPtr< fml::TaskRunner > GetIOTaskRunner() const
virtual bool RunsTasksOnCurrentThread()
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback
#define FML_DLOG(severity)
#define FML_DCHECK(condition)
static SkiaGPUObject< SkImage > UploadRasterImage(sk_sp< SkImage > image, const fml::WeakPtr< IOManager > &io_manager, const fml::tracing::TraceFlow &flow)
internal::CopyableLambda< T > MakeCopyable(T lambda)
#define TRACE_EVENT0(category_group, name)