blob: 9f8ebaf3bbd0027060fa383a4896db16d05b052d [file] [log] [blame]
// 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 <atomic>
#include <utility>
namespace flutter {
// static
std::unique_ptr<TaskRunner> TaskRunner::Create(
DWORD main_thread_id,
CurrentTimeProc get_current_time,
const TaskExpiredCallback& on_task_expired) {
return std::make_unique<TaskRunnerWinUwp>(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