11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
28bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
38bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// found in the LICENSE file.
48bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
58bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "mojo/shell/task_runners.h"
68bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/threading/sequenced_worker_pool.h"
88bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
98bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)namespace mojo {
108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)namespace shell {
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace {
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const size_t kMaxBlockingPoolThreads = 3;
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)scoped_ptr<base::Thread> CreateIOThread(const char* name) {
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<base::Thread> thread(new base::Thread(name));
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::Thread::Options options;
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  options.message_loop_type = base::MessageLoop::TYPE_IO;
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  thread->StartWithOptions(options);
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return thread.Pass();
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace
258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTaskRunners::TaskRunners(
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const scoped_refptr<base::SingleThreadTaskRunner>& shell_runner)
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : shell_runner_(shell_runner),
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      io_thread_(CreateIOThread("io_thread")),
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      blocking_pool_(new base::SequencedWorkerPool(kMaxBlockingPoolThreads,
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                                   "blocking_pool")) {
328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TaskRunners::~TaskRunners() {
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  blocking_pool_->Shutdown();
368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}  // namespace shell
398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}  // namespace mojo
40