15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BASE_SINGLE_THREAD_TASK_RUNNER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_SINGLE_THREAD_TASK_RUNNER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_export.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sequenced_task_runner.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A SingleThreadTaskRunner is a SequencedTaskRunner with one more 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// guarantee; namely, that all tasks are run on a single dedicated 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// thread. Most use cases require only a SequencedTaskRunner, unless 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// there is a specific need to run tasks on only a single thread. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// SingleThreadTaskRunner implementations might: 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// - Post tasks to an existing thread's MessageLoop (see MessageLoopProxy). 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// - Create their own worker thread and MessageLoop to post tasks to. 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// - Add tasks to a FIFO and signal to a non-MessageLoop thread for them to 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// be processed. This allows TaskRunner-oriented code run on threads 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// running other kinds of message loop, e.g. Jingle threads. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BASE_EXPORT SingleThreadTaskRunner : public SequencedTaskRunner { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A more explicit alias to RunsTasksOnCurrentThread(). 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool BelongsToCurrentThread() const { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return RunsTasksOnCurrentThread(); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SingleThreadTaskRunner() {} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // BASE_SINGLE_THREAD_TASK_RUNNER_H_ 38