• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.base.task;
6 
7 /**
8  * The {@link TaskExecutor} for ThreadPool tasks.
9  * TODO(crbug.com/1026641): Provide direct Java APIs for ThreadPool vs UI thread
10  * task posting instead of sharding based on {@link TaskTraits}.
11  */
12 class ThreadPoolTaskExecutor implements TaskExecutor {
13     private static final int TRAITS_COUNT =
14             TaskTraits.THREAD_POOL_TRAITS_END - TaskTraits.THREAD_POOL_TRAITS_START + 1;
15     private final TaskRunner mTraitsToRunnerMap[] = new TaskRunner[TRAITS_COUNT];
16 
ThreadPoolTaskExecutor()17     public ThreadPoolTaskExecutor() {
18         for (int i = 0; i < TRAITS_COUNT; i++) {
19             mTraitsToRunnerMap[i] = createTaskRunner(TaskTraits.THREAD_POOL_TRAITS_START + i);
20         }
21     }
22 
23     @Override
createTaskRunner(@askTraits int taskTraits)24     public TaskRunner createTaskRunner(@TaskTraits int taskTraits) {
25         return new TaskRunnerImpl(taskTraits);
26     }
27 
28     @Override
createSequencedTaskRunner(@askTraits int taskTraits)29     public SequencedTaskRunner createSequencedTaskRunner(@TaskTraits int taskTraits) {
30         return new SequencedTaskRunnerImpl(taskTraits);
31     }
32 
33     /**
34      * If CurrentThread is not specified, or we are being called from within a threadpool task
35      * this maps to a single thread within the native thread pool. If so we can't run tasks
36      * posted on it until native has started.
37      */
38     @Override
createSingleThreadTaskRunner(@askTraits int taskTraits)39     public SingleThreadTaskRunner createSingleThreadTaskRunner(@TaskTraits int taskTraits) {
40         // Tasks posted via this API will not execute until after native has started.
41         return new SingleThreadTaskRunnerImpl(null, taskTraits);
42     }
43 
44     @Override
postDelayedTask(@askTraits int taskTraits, Runnable task, long delay)45     public void postDelayedTask(@TaskTraits int taskTraits, Runnable task, long delay) {
46         int index = taskTraits - TaskTraits.THREAD_POOL_TRAITS_START;
47         mTraitsToRunnerMap[index].postDelayedTask(task, delay);
48     }
49 
50     @Override
canRunTaskImmediately(@askTraits int traits)51     public boolean canRunTaskImmediately(@TaskTraits int traits) {
52         return false;
53     }
54 }
55