|  | // Copyright 2015 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef SKY_SHELL_SHELL_H_ | 
|  | #define SKY_SHELL_SHELL_H_ | 
|  |  | 
|  | #include "base/macros.h" | 
|  | #include "base/memory/ref_counted.h" | 
|  | #include "base/memory/scoped_ptr.h" | 
|  | #include "base/message_loop/message_loop.h" | 
|  | #include "base/threading/thread.h" | 
|  | #include "sky/shell/service_provider.h" | 
|  | #include "sky/shell/tracing_controller.h" | 
|  |  | 
|  | namespace sky { | 
|  | namespace shell { | 
|  | class ServiceProviderContext; | 
|  |  | 
|  | class Shell { | 
|  | public: | 
|  | ~Shell(); | 
|  |  | 
|  | static void Init( | 
|  | scoped_ptr<ServiceProviderContext> service_provider_context); | 
|  | static Shell& Shared(); | 
|  |  | 
|  | scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner() const { | 
|  | return gpu_thread_->message_loop()->task_runner(); | 
|  | } | 
|  |  | 
|  | scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const { | 
|  | return ui_thread_->message_loop()->task_runner(); | 
|  | } | 
|  |  | 
|  | ServiceProviderContext* service_provider_context() const { | 
|  | return service_provider_context_.get(); | 
|  | } | 
|  |  | 
|  | TracingController& tracing_controller(); | 
|  |  | 
|  | private: | 
|  | explicit Shell(scoped_ptr<ServiceProviderContext> service_provider_context); | 
|  |  | 
|  | void InitGPU(const base::Thread::Options& options); | 
|  | void InitUI(const base::Thread::Options& options); | 
|  |  | 
|  | scoped_ptr<base::Thread> gpu_thread_; | 
|  | scoped_ptr<base::Thread> ui_thread_; | 
|  | scoped_ptr<ServiceProviderContext> service_provider_context_; | 
|  | TracingController tracing_controller_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(Shell); | 
|  | }; | 
|  |  | 
|  | }  // namespace shell | 
|  | }  // namespace sky | 
|  |  | 
|  | #endif  // SKY_SHELL_SHELL_H_ |