[Impeller] dont use concurrent runner to decode images on Android. (flutter/engine#42944)

Even with separate allocators and queues, I think that using the concurrent runner is just overloading the phone.

On Android force it all onto the I/O thread.

https://github.com/flutter/flutter/issues/128919
This commit is contained in:
Jonah Williams 2023-06-17 20:54:04 -07:00 committed by GitHub
parent e0fb29293e
commit 93351f1448

View File

@ -456,7 +456,11 @@ void ImageDecoderImpeller::Decode(fml::RefPtr<ImageDescriptor> descriptor,
});
};
#ifdef FML_OS_ANDROID
runners_.GetIOTaskRunner()->PostTask(
#else
concurrent_task_runner_->PostTask(
#endif
[raw_descriptor, //
context = context_.get(), //
target_size = SkISize::Make(target_width, target_height), //
@ -495,12 +499,16 @@ void ImageDecoderImpeller::Decode(fml::RefPtr<ImageDescriptor> descriptor,
result(image, decode_error);
}
};
// TODO(jonahwilliams):
// https://github.com/flutter/flutter/issues/123058 Technically we
// don't need to post tasks to the io runner, but without this
// forced serialization we can end up overloading the GPU and/or
// competing with raster workloads.
// TODO(jonahwilliams):
// https://github.com/flutter/flutter/issues/123058 Technically we
// don't need to post tasks to the io runner, but without this
// forced serialization we can end up overloading the GPU and/or
// competing with raster workloads.
#ifdef FML_OS_ANDROID
upload_texture_and_invoke_result();
#else
io_runner->PostTask(upload_texture_and_invoke_result);
#endif
});
}