diff options
author | scottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-16 07:45:36 +0000 |
---|---|---|
committer | scottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-16 07:45:36 +0000 |
commit | d7a2d89aee556017139f6bea76e328423e60277d (patch) | |
tree | 018c1358276c3c551e888568f1a0e19ab840da25 /content/gpu | |
parent | ed522c341e491b8aad34f3ac2d9c06669971627e (diff) | |
download | chromium_src-d7a2d89aee556017139f6bea76e328423e60277d.zip chromium_src-d7a2d89aee556017139f6bea76e328423e60277d.tar.gz chromium_src-d7a2d89aee556017139f6bea76e328423e60277d.tar.bz2 |
Set up content in-process main threads via factory
This code was previously #ifdef'd out based on CHROME_MULTIPLE_DLL. This works
for chrome, but not for test targets which link content_browser. content_browser
needs to not link against child-only targets (as they'll cause linking blink
into the browser dll).
Instead of having utility_process_host_impl, et al. own the in-process
implementation, use a factory to create them that's installed in test code, and
in chrome for supporting --single-process.
At the same time, remove the global CHROME_MULTIPLE_DLL define and localize it
to chrome_exe.gypi because it's too easy to use incorrectly.
TBR=darin
R=piman@chromium.org,jam@chromium.org
BUG=237249
Review URL: https://chromiumcodereview.appspot.com/23235002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@217968 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/gpu')
-rw-r--r-- | content/gpu/gpu_main_thread.cc | 37 | ||||
-rw-r--r-- | content/gpu/gpu_main_thread.h | 38 |
2 files changed, 75 insertions, 0 deletions
diff --git a/content/gpu/gpu_main_thread.cc b/content/gpu/gpu_main_thread.cc new file mode 100644 index 0000000..65fef13 --- /dev/null +++ b/content/gpu/gpu_main_thread.cc @@ -0,0 +1,37 @@ +// Copyright 2013 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. + +#include "content/gpu/gpu_main_thread.h" + +#include "content/gpu/gpu_child_thread.h" +#include "content/gpu/gpu_process.h" + +namespace content { + +GpuMainThread::GpuMainThread(const std::string& channel_id) + : base::Thread("Chrome_InProcGpuThread"), + channel_id_(channel_id), + gpu_process_(NULL) { +} + +GpuMainThread::~GpuMainThread() { + Stop(); +} + +void GpuMainThread::Init() { + 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_)); +} + +void GpuMainThread::CleanUp() { + delete gpu_process_; +} + +base::Thread* CreateGpuMainThread(const std::string& channel_id) { + return new GpuMainThread(channel_id); +} + +} // namespace content diff --git a/content/gpu/gpu_main_thread.h b/content/gpu/gpu_main_thread.h new file mode 100644 index 0000000..f34f431 --- /dev/null +++ b/content/gpu/gpu_main_thread.h @@ -0,0 +1,38 @@ +// Copyright 2013 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 CONTENT_GPU_GPU_MAIN_THREAD_H_ +#define CONTENT_GPU_GPU_MAIN_THREAD_H_ + +#include "base/threading/thread.h" +#include "content/common/content_export.h" + +namespace content { + +class GpuProcess; + +// 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); + virtual ~GpuMainThread(); + + protected: + virtual void Init() OVERRIDE; + virtual void CleanUp() OVERRIDE; + + 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); +}; + +CONTENT_EXPORT base::Thread* CreateGpuMainThread(const std::string& channel_id); + +} // namespace content + +#endif // CONTENT_GPU_GPU_MAIN_THREAD_H_ |