1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // Copyright 2015 The Chromium 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 CHROMECAST_PUBLIC_TASK_RUNNER_H_
- #define CHROMECAST_PUBLIC_TASK_RUNNER_H_
- #include <stdint.h>
- namespace chromecast {
- // Provides a way for vendor libraries to run code on a specific thread.
- // For example, cast_shell supplies an implementation of this interface through
- // media APIs (see MediaPipelineDeviceParams) to allow media backends to
- // schedule tasks to be run on the media thread.
- class TaskRunner {
- public:
- // Subclass and implement 'Run' to supply code to be run by PostTask or
- // PostDelayedTask. They both take ownership of the Task object passed in
- // and will delete after running the Task.
- class Task {
- public:
- virtual ~Task() {}
- virtual void Run() = 0;
- };
- // This class is intended for use with base callback type. A template has been
- // used to avoid introducing a hard dependency on Chromium base. It is used to
- // convert a chromium-style callback to a Task as defined above.
- template <typename T>
- class CallbackTask : public Task {
- public:
- CallbackTask(T callback) : callback_(std::move(callback)) {}
- ~CallbackTask() override = default;
- private:
- // TaskRunner::Task overrides:
- void Run() override { std::move(callback_).Run(); }
- T callback_;
- };
- // Posts a task to the thread's task queue. Delay of 0 could mean task
- // runs immediately (within the call to PostTask, if it's called on the
- // target thread) but there also could be some delay (the task could be added
- // to target thread's task queue).
- virtual bool PostTask(Task* task, uint64_t delay_milliseconds) = 0;
- protected:
- virtual ~TaskRunner() {}
- };
- } // namespace chromecast
- #endif // CHROMECAST_PUBLIC_TASK_RUNNER_H_
|