Index: content/browser/gpu/gpu_process_host.cc |
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc |
index 8cbb7aa1d82982cb163c286a63874e84527af708..7839ea7824cf2d335ed1c1bc93f5b42e3d1a379f 100644 |
--- a/content/browser/gpu/gpu_process_host.cc |
+++ b/content/browser/gpu/gpu_process_host.cc |
@@ -278,43 +278,6 @@ class GpuSandboxedProcessLauncherDelegate |
} // anonymous namespace |
-// Single process not supported in multiple dll mode currently. |
-#if !defined(CHROME_MULTIPLE_DLL) |
-// This class creates a GPU thread (instead of a GPU process), when running |
-// with --in-process-gpu or --single-process. |
-class GpuMainThread : public base::Thread { |
- public: |
- explicit GpuMainThread(const std::string& channel_id) |
- : base::Thread("Chrome_InProcGpuThread"), |
- channel_id_(channel_id), |
- gpu_process_(NULL) { |
- } |
- |
- virtual ~GpuMainThread() { |
- Stop(); |
- } |
- |
- protected: |
- virtual void Init() OVERRIDE { |
- gpu_process_ = new GpuProcess(); |
- // The process object takes ownership of the thread object, so do not |
- // save and delete the pointer. |
- gpu_process_->set_main_thread(new GpuChildThread(channel_id_)); |
- } |
- |
- virtual void CleanUp() OVERRIDE { |
- delete gpu_process_; |
- } |
- |
- private: |
- std::string channel_id_; |
- // Deleted in CleanUp() on the gpu thread, so don't use smart pointers. |
- GpuProcess* gpu_process_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GpuMainThread); |
-}; |
-#endif // !CHROME_MULTIPLE_DLL |
- |
// static |
bool GpuProcessHost::ValidateHost(GpuProcessHost* host) { |
if (!host) |
@@ -401,6 +364,13 @@ void GpuProcessHost::SendOnIO(GpuProcessKind kind, |
} |
} |
+GpuMainThreadFactoryFunction g_gpu_main_thread_factory = NULL; |
+ |
+void GpuProcessHost::RegisterGpuMainThreadFactory( |
+ GpuMainThreadFactoryFunction create) { |
+ g_gpu_main_thread_factory = create; |
+} |
+ |
// static |
GpuProcessHost* GpuProcessHost::FromID(int host_id) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
@@ -598,19 +568,15 @@ bool GpuProcessHost::Init() { |
if (channel_id.empty()) |
return false; |
- // Single process not supported in multiple dll mode currently. |
-#if !defined(CHROME_MULTIPLE_DLL) |
- if (in_process_) { |
+ if (in_process_ && g_gpu_main_thread_factory) { |
CommandLine::ForCurrentProcess()->AppendSwitch( |
switches::kDisableGpuWatchdog); |
- in_process_gpu_thread_.reset(new GpuMainThread(channel_id)); |
+ in_process_gpu_thread_.reset(g_gpu_main_thread_factory(channel_id)); |
in_process_gpu_thread_->Start(); |
OnProcessLaunched(); // Fake a callback that the process is ready. |
- } else |
-#endif // !CHROME_MULTIPLE_DLL |
- if (!LaunchGpuProcess(channel_id)) { |
+ } else if (!LaunchGpuProcess(channel_id)) { |
return false; |
} |