218 {
219 static size_t trace_counter = 1;
220 const size_t trace_id = trace_counter++;
221
224 }
225
227
228 const auto& task_runners = dart_state->GetTaskRunners();
229
230 if (state_->frameCount_ == 0) {
231 std::string decode_error("Could not provide any frame.");
234 [trace_id, decode_error = std::move(decode_error),
235 callback = std::make_unique<tonic::DartPersistentValue>(
238 trace_id);
239 }));
241 }
242
244 [
callback = std::make_unique<tonic::DartPersistentValue>(
246 weak_state = std::weak_ptr<MultiFrameCodec::State>(state_), trace_id,
247 ui_task_runner = task_runners.GetUITaskRunner(),
248 io_manager = dart_state->GetIOManager()]() mutable {
249 auto state = weak_state.lock();
250 if (!state) {
251 ui_task_runner->PostTask(fml::MakeCopyable(
252 [callback = std::move(callback)]() { callback->Clear(); }));
253 return;
254 }
255 state->GetNextFrameAndInvokeCallback(
256 std::move(
callback), ui_task_runner,
257 io_manager->GetResourceContext(), io_manager->GetSkiaUnrefQueue(),
258 io_manager->GetIsGpuDisabledSyncSwitch(), trace_id,
259 io_manager->GetImpellerContext());
260 }));
261
263
264
265
266}
static UIDartState * Current()
static DartState * Current()
DART_EXPORT Dart_Handle Dart_Null(void)
DART_EXPORT bool Dart_IsClosure(Dart_Handle object)
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback
#define FML_LOG(severity)
static void InvokeNextFrameCallback(const fml::RefPtr< CanvasImage > &image, int duration, const std::string &decode_error, std::unique_ptr< tonic::DartPersistentValue > callback, size_t trace_id)
internal::CopyableLambda< T > MakeCopyable(T lambda)
Dart_Handle ToDart(const T &object)