// 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,
std::string& 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_