| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BASE_ANDROID_TASK_SCHEDULER_TASK_RUNNER_ANDROID_H_ |
| #define BASE_ANDROID_TASK_SCHEDULER_TASK_RUNNER_ANDROID_H_ |
| |
| #include <memory> |
| |
| #include "base/android/jni_weak_ref.h" |
| #include "base/android/task_scheduler/task_traits_android.h" |
| #include "base/base_export.h" |
| #include "base/functional/callback_forward.h" |
| #include "base/task/single_thread_task_runner.h" |
| |
| namespace base { |
| |
| // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.base.task |
| enum class TaskRunnerType { BASE, SEQUENCED, SINGLE_THREAD }; |
| |
| // Native implementation backing TaskRunnerImpl.java which posts java tasks onto |
| // a C++ TaskRunner. |
| class BASE_EXPORT TaskRunnerAndroid { |
| public: |
| explicit TaskRunnerAndroid(scoped_refptr<TaskRunner> task_runner, |
| TaskRunnerType type); |
| |
| TaskRunnerAndroid(const TaskRunnerAndroid&) = delete; |
| TaskRunnerAndroid& operator=(const TaskRunnerAndroid&) = delete; |
| |
| ~TaskRunnerAndroid(); |
| |
| void Destroy(JNIEnv* env); |
| |
| void PostDelayedTask(JNIEnv* env, |
| const base::android::JavaRef<jobject>& task, |
| jlong delay, |
| jstring runnable_class_name); |
| |
| bool BelongsToCurrentThread(JNIEnv* env); |
| |
| static std::unique_ptr<TaskRunnerAndroid> Create(jint task_runner_type, |
| jint j_task_traits); |
| |
| using UiThreadTaskRunnerCallback = |
| RepeatingCallback<scoped_refptr<base::SingleThreadTaskRunner>( |
| ::TaskTraits)>; |
| |
| static void SetUiThreadTaskRunnerCallback( |
| UiThreadTaskRunnerCallback callback); |
| |
| private: |
| const scoped_refptr<TaskRunner> task_runner_; |
| const TaskRunnerType type_; |
| }; |
| |
| } // namespace base |
| |
| #endif // BASE_ANDROID_TASK_SCHEDULER_TASK_RUNNER_ANDROID_H_ |