blob: 7ee6d196ed91de8a3fbff348829744f3cae05fc5 [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.
#ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_WINRT_TASK_RUNNER_H_
#define FLUTTER_SHELL_PLATFORM_WINDOWS_WINRT_TASK_RUNNER_H_
#include <windows.h>
#include <third_party/cppwinrt/generated/winrt/Windows.UI.Core.h>
#include <chrono>
#include <functional>
#include <thread>
#include "flutter/shell/platform/embedder/embedder.h"
#include "flutter/shell/platform/windows/task_runner.h"
namespace flutter {
// A custom task runner that uses a CoreDispatcher to schedule
// flutter tasks.
class TaskRunnerWinUwp : public TaskRunner {
public:
TaskRunnerWinUwp(DWORD main_thread_id,
const TaskExpiredCallback& on_task_expired);
~TaskRunnerWinUwp();
TaskRunnerWinUwp(const TaskRunnerWinUwp&) = delete;
TaskRunnerWinUwp& operator=(const TaskRunnerWinUwp&) = delete;
// |TaskRunner|
bool RunsTasksOnCurrentThread() const override;
// |TaskRunner|
void PostFlutterTask(FlutterTask flutter_task,
uint64_t flutter_target_time_nanos) override;
// |TaskRunner|
void PostTask(TaskClosure task) override;
private:
DWORD main_thread_id_;
TaskExpiredCallback on_task_expired_;
winrt::Windows::UI::Core::CoreDispatcher dispatcher_{nullptr};
};
} // namespace flutter
#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_WINRT_TASK_RUNNER_H_