Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(578)

Side by Side Diff: content/browser/gpu/gpu_process_host.cc

Issue 17741010: Make ChildThread::current() and ChildProcess::current() only work on the main thread of the child... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync and also fix gpu single process case Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/gpu/gpu_process_host.h" 5 #include "content/browser/gpu/gpu_process_host.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/base_switches.h" 8 #include "base/base_switches.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 278
279 } // anonymous namespace 279 } // anonymous namespace
280 280
281 // This class creates a GPU thread (instead of a GPU process), when running 281 // This class creates a GPU thread (instead of a GPU process), when running
282 // with --in-process-gpu or --single-process. 282 // with --in-process-gpu or --single-process.
283 class GpuMainThread : public base::Thread { 283 class GpuMainThread : public base::Thread {
284 public: 284 public:
285 explicit GpuMainThread(const std::string& channel_id) 285 explicit GpuMainThread(const std::string& channel_id)
286 : base::Thread("Chrome_InProcGpuThread"), 286 : base::Thread("Chrome_InProcGpuThread"),
287 channel_id_(channel_id), 287 channel_id_(channel_id),
288 gpu_process_(NULL), 288 gpu_process_(NULL) {
289 child_thread_(NULL) {
290 } 289 }
291 290
292 virtual ~GpuMainThread() { 291 virtual ~GpuMainThread() {
293 Stop(); 292 Stop();
294 } 293 }
295 294
296 protected: 295 protected:
297 virtual void Init() OVERRIDE { 296 virtual void Init() OVERRIDE {
298 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess)) { 297 gpu_process_ = new GpuProcess();
299 child_thread_ = new GpuChildThread(channel_id_); 298 // The process object takes ownership of the thread object, so do not
300 } else { 299 // save and delete the pointer.
301 gpu_process_ = new GpuProcess(); 300 gpu_process_->set_main_thread(new GpuChildThread(channel_id_));
302 // The process object takes ownership of the thread object, so do not
303 // save and delete the pointer.
304 gpu_process_->set_main_thread(new GpuChildThread(channel_id_));
305 }
306 } 301 }
307 302
308 virtual void CleanUp() OVERRIDE { 303 virtual void CleanUp() OVERRIDE {
309 delete gpu_process_; 304 delete gpu_process_;
310 if (child_thread_)
311 delete child_thread_;
312 } 305 }
313 306
314 private: 307 private:
315 std::string channel_id_; 308 std::string channel_id_;
316 // Deleted in CleanUp() on the gpu thread, so don't use smart pointers. 309 // Deleted in CleanUp() on the gpu thread, so don't use smart pointers.
317 GpuProcess* gpu_process_; 310 GpuProcess* gpu_process_;
318 GpuChildThread* child_thread_;
319 311
320 DISALLOW_COPY_AND_ASSIGN(GpuMainThread); 312 DISALLOW_COPY_AND_ASSIGN(GpuMainThread);
321 }; 313 };
322 314
323 // static 315 // static
324 bool GpuProcessHost::ValidateHost(GpuProcessHost* host) { 316 bool GpuProcessHost::ValidateHost(GpuProcessHost* host) {
325 if (!host) 317 if (!host)
326 return false; 318 return false;
327 319
328 // The Gpu process is invalid if it's not using SwiftShader, the card is 320 // The Gpu process is invalid if it's not using SwiftShader, the card is
(...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); 1269 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader");
1278 ClientIdToShaderCacheMap::iterator iter = 1270 ClientIdToShaderCacheMap::iterator iter =
1279 client_id_to_shader_cache_.find(client_id); 1271 client_id_to_shader_cache_.find(client_id);
1280 // If the cache doesn't exist then this is an off the record profile. 1272 // If the cache doesn't exist then this is an off the record profile.
1281 if (iter == client_id_to_shader_cache_.end()) 1273 if (iter == client_id_to_shader_cache_.end())
1282 return; 1274 return;
1283 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); 1275 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader);
1284 } 1276 }
1285 1277
1286 } // namespace content 1278 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698