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_THREAD_TASK_RUNNER_HANDLE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_THREAD_TASK_RUNNER_HANDLE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_export.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SingleThreadTaskRunner; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// ThreadTaskRunnerHandle stores a reference to a thread's TaskRunner 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// in thread-local storage. Callers can then retrieve the TaskRunner 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// for the current thread by calling ThreadTaskRunnerHandle::Get(). 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// At most one TaskRunner may be bound to each thread at a time. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BASE_EXPORT ThreadTaskRunnerHandle { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the SingleThreadTaskRunner for the current thread. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static scoped_refptr<SingleThreadTaskRunner> Get(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns true if the SingleThreadTaskRunner is already created for 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the current thread. 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static bool IsSet(); 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Binds |task_runner| to the current thread. |task_runner| must belong 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // to the current thread for this to succeed. 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit ThreadTaskRunnerHandle( 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const scoped_refptr<SingleThreadTaskRunner>& task_runner); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ThreadTaskRunnerHandle(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SingleThreadTaskRunner> task_runner_; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // BASE_THREAD_TASK_RUNNER_HANDLE_H_ 41