blob: f32dc3172a0f6d71c586c0936244d86632857a12 [file] [log] [blame]
Alex Clarke7e275b82018-10-24 13:42:531// Copyright 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/android/task_scheduler/task_runner_android.h"
6
7#include "base/android/task_scheduler/post_task_android.h"
8#include "base/run_loop.h"
9#include "base/task/post_task.h"
10#include "jni/TaskRunnerImpl_jni.h"
11
12namespace base {
13
14jlong JNI_TaskRunnerImpl_Init(
15 JNIEnv* env,
Alex Clarke7e275b82018-10-24 13:42:5316 jboolean priority_set_explicitly,
17 jint priority,
18 jboolean may_block,
19 jbyte extension_id,
20 const base::android::JavaParamRef<jbyteArray>& extension_data) {
21 return reinterpret_cast<intptr_t>(new TaskRunnerAndroid(
22 CreateTaskRunnerWithTraits(PostTaskAndroid::CreateTaskTraits(
23 env, priority_set_explicitly, priority, may_block, extension_id,
24 extension_data))));
25}
26
27TaskRunnerAndroid::TaskRunnerAndroid(scoped_refptr<TaskRunner> task_runner)
28 : task_runner_(std::move(task_runner)) {}
29
30TaskRunnerAndroid::~TaskRunnerAndroid() = default;
31
32void TaskRunnerAndroid::Finalize(
33 JNIEnv* env,
34 const base::android::JavaRef<jobject>& caller) {
35 // This will happen on the Java finalizer thread.
36 delete this;
37}
38
39void TaskRunnerAndroid::PostTask(JNIEnv* env,
40 const base::android::JavaRef<jobject>& caller,
41 const base::android::JavaRef<jobject>& task) {
42 task_runner_->PostTask(
43 FROM_HERE,
44 base::BindOnce(&PostTaskAndroid::RunJavaTask,
45 base::android::ScopedJavaGlobalRef<jobject>(task)));
46}
47
48} // namespace base