// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "flutter/shell/platform/windows/task_runner_winuwp.h" #include #include namespace flutter { // static std::unique_ptr TaskRunner::Create( DWORD main_thread_id, CurrentTimeProc get_current_time, const TaskExpiredCallback& on_task_expired) { return std::make_unique(main_thread_id, on_task_expired); } TaskRunnerWinUwp::TaskRunnerWinUwp(DWORD main_thread_id, const TaskExpiredCallback& on_task_expired) : main_thread_id_(main_thread_id), on_task_expired_(std::move(on_task_expired)) { dispatcher_ = winrt::Windows::UI::Core::CoreWindow::GetForCurrentThread().Dispatcher(); } TaskRunnerWinUwp::~TaskRunnerWinUwp() = default; bool TaskRunnerWinUwp::RunsTasksOnCurrentThread() const { return GetCurrentThreadId() == main_thread_id_; } void TaskRunnerWinUwp::PostFlutterTask(FlutterTask flutter_task, uint64_t flutter_target_time_nanos) { // TODO: Handle the target time. See // https://github.com/flutter/flutter/issues/70890. dispatcher_.RunAsync( winrt::Windows::UI::Core::CoreDispatcherPriority::Normal, [this, flutter_task]() { on_task_expired_(&flutter_task); }); } void TaskRunnerWinUwp::PostTask(TaskClosure task) { // TODO: Handle the target time. See PostFlutterTask() dispatcher_.RunAsync(winrt::Windows::UI::Core::CoreDispatcherPriority::Normal, [task]() { task() }); } } // namespace flutter