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

Side by Side Diff: chrome/gpu/gpu_thread.cc

Issue 6189008: GPU service respects --single-process (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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
« chrome/gpu/gpu_channel.h ('K') | « chrome/gpu/gpu_thread.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/gpu/gpu_thread.h" 5 #include "chrome/gpu/gpu_thread.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "app/gfx/gl/gl_context.h" 10 #include "app/gfx/gl/gl_context.h"
(...skipping 26 matching lines...) Expand all
37 return sandbox_wrapper.InitializeSandbox(*parsed_command_line, 37 return sandbox_wrapper.InitializeSandbox(*parsed_command_line,
38 switches::kGpuProcess); 38 switches::kGpuProcess);
39 #else 39 #else
40 // TODO(port): Create GPU sandbox for linux and windows. 40 // TODO(port): Create GPU sandbox for linux and windows.
41 return true; 41 return true;
42 #endif 42 #endif
43 } 43 }
44 44
45 } // namespace 45 } // namespace
46 46
47 GpuThread::GpuThread(const CommandLine& command_line) 47 GpuThread::GpuThread() {
48 : command_line_(command_line) {} 48 }
49
50 GpuThread::GpuThread(const std::string& channel_id)
51 : ChildThread(channel_id) {
52 }
49 53
50 GpuThread::~GpuThread() { 54 GpuThread::~GpuThread() {
51 } 55 }
52 56
53 void GpuThread::Init(const base::Time& process_start_time) { 57 void GpuThread::Init(const base::Time& process_start_time) {
54 process_start_time_ = process_start_time; 58 process_start_time_ = process_start_time;
55 } 59 }
56 60
57 void GpuThread::RemoveChannel(int renderer_id) { 61 void GpuThread::RemoveChannel(int renderer_id) {
58 gpu_channels_.erase(renderer_id); 62 gpu_channels_.erase(renderer_id);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 // Flag GPU info as complete if the DirectX diagnostics cannot be collected. 105 // Flag GPU info as complete if the DirectX diagnostics cannot be collected.
102 gpu_info_.SetProgress(GPUInfo::kComplete); 106 gpu_info_.SetProgress(GPUInfo::kComplete);
103 } 107 }
104 #endif 108 #endif
105 109
106 // Record initialization only after collecting the GPU info because that can 110 // Record initialization only after collecting the GPU info because that can
107 // take a significant amount of time. 111 // take a significant amount of time.
108 gpu_info_.SetInitializationTime(base::Time::Now() - process_start_time_); 112 gpu_info_.SetInitializationTime(base::Time::Now() - process_start_time_);
109 113
110 // Note that kNoSandbox will also disable the GPU sandbox. 114 // Note that kNoSandbox will also disable the GPU sandbox.
111 bool no_gpu_sandbox = command_line_.HasSwitch(switches::kNoGpuSandbox); 115 bool no_gpu_sandbox = CommandLine::ForCurrentProcess()->HasSwitch(
116 switches::kNoGpuSandbox);
112 if (!no_gpu_sandbox) { 117 if (!no_gpu_sandbox) {
113 if (!InitializeGpuSandbox()) { 118 if (!InitializeGpuSandbox()) {
114 LOG(ERROR) << "Failed to initialize the GPU sandbox"; 119 LOG(ERROR) << "Failed to initialize the GPU sandbox";
115 MessageLoop::current()->Quit(); 120 MessageLoop::current()->Quit();
116 return; 121 return;
117 } 122 }
118 } else { 123 } else {
119 LOG(ERROR) << "Running without GPU sandbox"; 124 LOG(ERROR) << "Running without GPU sandbox";
120 } 125 }
121 126
122 // In addition to disabling the watchdog if the command line switch is 127 // In addition to disabling the watchdog if the command line switch is
123 // present, disable it in two other cases. OSMesa is expected to run very 128 // present, disable it in two other cases. OSMesa is expected to run very
124 // slowly. Also disable the watchdog on valgrind because the code is expected 129 // slowly. Also disable the watchdog on valgrind because the code is expected
125 // to run slowly in that case. 130 // to run slowly in that case.
126 bool enable_watchdog = 131 bool enable_watchdog =
127 !command_line_.HasSwitch(switches::kDisableGpuWatchdog) && 132 !CommandLine::ForCurrentProcess()->HasSwitch(
133 switches::kDisableGpuWatchdog) &&
128 gfx::GetGLImplementation() != gfx::kGLImplementationOSMesaGL && 134 gfx::GetGLImplementation() != gfx::kGLImplementationOSMesaGL &&
129 !RunningOnValgrind(); 135 !RunningOnValgrind();
130 136
131 // Disable the watchdog in debug builds because they tend to only be run by 137 // Disable the watchdog in debug builds because they tend to only be run by
132 // developers who will not appreciate the watchdog killing the GPU process. 138 // developers who will not appreciate the watchdog killing the GPU process.
133 #ifndef NDEBUG 139 #ifndef NDEBUG
134 enable_watchdog = false; 140 enable_watchdog = false;
135 #endif 141 #endif
136 142
137 // Disable the watchdog for Windows. It tends to abort when the GPU process 143 // Disable the watchdog for Windows. It tends to abort when the GPU process
(...skipping 19 matching lines...) Expand all
157 } 163 }
158 } 164 }
159 165
160 void GpuThread::OnEstablishChannel(int renderer_id) { 166 void GpuThread::OnEstablishChannel(int renderer_id) {
161 scoped_refptr<GpuChannel> channel; 167 scoped_refptr<GpuChannel> channel;
162 IPC::ChannelHandle channel_handle; 168 IPC::ChannelHandle channel_handle;
163 GPUInfo gpu_info; 169 GPUInfo gpu_info;
164 170
165 GpuChannelMap::const_iterator iter = gpu_channels_.find(renderer_id); 171 GpuChannelMap::const_iterator iter = gpu_channels_.find(renderer_id);
166 if (iter == gpu_channels_.end()) 172 if (iter == gpu_channels_.end())
167 channel = new GpuChannel(renderer_id); 173 channel = new GpuChannel(this, renderer_id);
168 else 174 else
169 channel = iter->second; 175 channel = iter->second;
170 176
171 DCHECK(channel != NULL); 177 DCHECK(channel != NULL);
172 178
173 if (channel->Init()) 179 if (channel->Init())
174 gpu_channels_[renderer_id] = channel; 180 gpu_channels_[renderer_id] = channel;
175 else 181 else
176 channel = NULL; 182 channel = NULL;
177 183
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 NewRunnableFunction(&GpuThread::SetDxDiagnostics, thread, node)); 259 NewRunnableFunction(&GpuThread::SetDxDiagnostics, thread, node));
254 } 260 }
255 261
256 // Runs on the GPU thread. 262 // Runs on the GPU thread.
257 void GpuThread::SetDxDiagnostics(GpuThread* thread, const DxDiagNode& node) { 263 void GpuThread::SetDxDiagnostics(GpuThread* thread, const DxDiagNode& node) {
258 thread->gpu_info_.SetDxDiagnostics(node); 264 thread->gpu_info_.SetDxDiagnostics(node);
259 thread->gpu_info_.SetProgress(GPUInfo::kComplete); 265 thread->gpu_info_.SetProgress(GPUInfo::kComplete);
260 } 266 }
261 267
262 #endif 268 #endif
OLDNEW
« chrome/gpu/gpu_channel.h ('K') | « chrome/gpu/gpu_thread.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698