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

Side by Side Diff: content/gpu/gpu_main.cc

Issue 11227033: Move a bunch of code in content\common (as well as a few left in renderer) to the content namespace. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix cros Created 8 years, 2 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
« no previous file with comments | « content/gpu/gpu_child_thread.cc ('k') | content/gpu/gpu_process.h » ('j') | 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) 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 <stdlib.h> 5 #include <stdlib.h>
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #endif 9 #endif
10 10
(...skipping 28 matching lines...) Expand all
39 #endif 39 #endif
40 40
41 #if defined(USE_X11) 41 #if defined(USE_X11)
42 #include "ui/base/x/x11_util.h" 42 #include "ui/base/x/x11_util.h"
43 #endif 43 #endif
44 44
45 #if defined(OS_LINUX) 45 #if defined(OS_LINUX)
46 #include "content/public/common/sandbox_init.h" 46 #include "content/public/common/sandbox_init.h"
47 #endif 47 #endif
48 48
49 namespace content {
49 namespace { 50 namespace {
50 void WarmUpSandbox(const content::GPUInfo&, bool); 51 void WarmUpSandbox(const GPUInfo&, bool);
51 } 52 }
52 53
53 // Main function for starting the Gpu process. 54 // Main function for starting the Gpu process.
54 int GpuMain(const content::MainFunctionParams& parameters) { 55 int GpuMain(const MainFunctionParams& parameters) {
55 TRACE_EVENT0("gpu", "GpuMain"); 56 TRACE_EVENT0("gpu", "GpuMain");
56 57
57 base::Time start_time = base::Time::Now(); 58 base::Time start_time = base::Time::Now();
58 59
59 const CommandLine& command_line = parameters.command_line; 60 const CommandLine& command_line = parameters.command_line;
60 if (command_line.HasSwitch(switches::kGpuStartupDialog)) { 61 if (command_line.HasSwitch(switches::kGpuStartupDialog)) {
61 ChildProcess::WaitForDebugger("Gpu"); 62 ChildProcess::WaitForDebugger("Gpu");
62 } 63 }
63 64
64 if (!command_line.HasSwitch(switches::kSingleProcess)) { 65 if (!command_line.HasSwitch(switches::kSingleProcess)) {
(...skipping 23 matching lines...) Expand all
88 // will need to tear down this process. However, we can not do so 89 // will need to tear down this process. However, we can not do so
89 // safely until the IPC channel is set up, because the detection of 90 // safely until the IPC channel is set up, because the detection of
90 // early return of a child process is implemented using an IPC 91 // early return of a child process is implemented using an IPC
91 // channel error. If the IPC channel is not fully set up between the 92 // channel error. If the IPC channel is not fully set up between the
92 // browser and GPU process, and the GPU process crashes or exits 93 // browser and GPU process, and the GPU process crashes or exits
93 // early, the browser process will never detect it. For this reason 94 // early, the browser process will never detect it. For this reason
94 // we defer tearing down the GPU process until receiving the 95 // we defer tearing down the GPU process until receiving the
95 // GpuMsg_Initialize message from the browser. 96 // GpuMsg_Initialize message from the browser.
96 bool dead_on_arrival = false; 97 bool dead_on_arrival = false;
97 98
98 content::GPUInfo gpu_info; 99 GPUInfo gpu_info;
99 // Get vendor_id, device_id, driver_version from browser process through 100 // Get vendor_id, device_id, driver_version from browser process through
100 // commandline switches. 101 // commandline switches.
101 DCHECK(command_line.HasSwitch(switches::kGpuVendorID) && 102 DCHECK(command_line.HasSwitch(switches::kGpuVendorID) &&
102 command_line.HasSwitch(switches::kGpuDeviceID) && 103 command_line.HasSwitch(switches::kGpuDeviceID) &&
103 command_line.HasSwitch(switches::kGpuDriverVersion)); 104 command_line.HasSwitch(switches::kGpuDriverVersion));
104 bool success = base::HexStringToInt( 105 bool success = base::HexStringToInt(
105 command_line.GetSwitchValueASCII(switches::kGpuVendorID), 106 command_line.GetSwitchValueASCII(switches::kGpuVendorID),
106 reinterpret_cast<int*>(&(gpu_info.gpu.vendor_id))); 107 reinterpret_cast<int*>(&(gpu_info.gpu.vendor_id)));
107 DCHECK(success); 108 DCHECK(success);
108 success = base::HexStringToInt( 109 success = base::HexStringToInt(
109 command_line.GetSwitchValueASCII(switches::kGpuDeviceID), 110 command_line.GetSwitchValueASCII(switches::kGpuDeviceID),
110 reinterpret_cast<int*>(&(gpu_info.gpu.device_id))); 111 reinterpret_cast<int*>(&(gpu_info.gpu.device_id)));
111 DCHECK(success); 112 DCHECK(success);
112 gpu_info.driver_vendor = 113 gpu_info.driver_vendor =
113 command_line.GetSwitchValueASCII(switches::kGpuDriverVendor); 114 command_line.GetSwitchValueASCII(switches::kGpuDriverVendor);
114 gpu_info.driver_version = 115 gpu_info.driver_version =
115 command_line.GetSwitchValueASCII(switches::kGpuDriverVersion); 116 command_line.GetSwitchValueASCII(switches::kGpuDriverVersion);
116 content::GetContentClient()->SetGpuInfo(gpu_info); 117 GetContentClient()->SetGpuInfo(gpu_info);
117 118
118 // We need to track that information for the WarmUpSandbox function. 119 // We need to track that information for the WarmUpSandbox function.
119 bool initialized_gl_context = false; 120 bool initialized_gl_context = false;
120 // Load and initialize the GL implementation and locate the GL entry points. 121 // Load and initialize the GL implementation and locate the GL entry points.
121 if (gfx::GLSurface::InitializeOneOff()) { 122 if (gfx::GLSurface::InitializeOneOff()) {
122 if (!command_line.HasSwitch(switches::kSkipGpuFullInfoCollection)) { 123 if (!command_line.HasSwitch(switches::kSkipGpuFullInfoCollection)) {
123 if (!gpu_info_collector::CollectGraphicsInfo(&gpu_info)) 124 if (!gpu_info_collector::CollectGraphicsInfo(&gpu_info))
124 VLOG(1) << "gpu_info_collector::CollectGraphicsInfo failed"; 125 VLOG(1) << "gpu_info_collector::CollectGraphicsInfo failed";
125 content::GetContentClient()->SetGpuInfo(gpu_info); 126 GetContentClient()->SetGpuInfo(gpu_info);
126 127
127 // We know that CollectGraphicsInfo will initialize a GLContext. 128 // We know that CollectGraphicsInfo will initialize a GLContext.
128 initialized_gl_context = true; 129 initialized_gl_context = true;
129 } 130 }
130 131
131 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 132 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
132 if (gpu_info.gpu.vendor_id == 0x10de && // NVIDIA 133 if (gpu_info.gpu.vendor_id == 0x10de && // NVIDIA
133 gpu_info.driver_vendor == "NVIDIA") { 134 gpu_info.driver_vendor == "NVIDIA") {
134 base::ThreadRestrictions::AssertIOAllowed(); 135 base::ThreadRestrictions::AssertIOAllowed();
135 if (access("/dev/nvidiactl", R_OK) != 0) { 136 if (access("/dev/nvidiactl", R_OK) != 0) {
(...skipping 22 matching lines...) Expand all
158 TRACE_EVENT0("gpu", "Initialize sandbox"); 159 TRACE_EVENT0("gpu", "Initialize sandbox");
159 bool do_init_sandbox = true; 160 bool do_init_sandbox = true;
160 161
161 #if defined(OS_CHROMEOS) && defined(NDEBUG) 162 #if defined(OS_CHROMEOS) && defined(NDEBUG)
162 // On Chrome OS and when not on a debug build, initialize 163 // On Chrome OS and when not on a debug build, initialize
163 // the GPU process' sandbox only for Intel GPUs. 164 // the GPU process' sandbox only for Intel GPUs.
164 do_init_sandbox = gpu_info.gpu.vendor_id == 0x8086; // Intel GPU. 165 do_init_sandbox = gpu_info.gpu.vendor_id == 0x8086; // Intel GPU.
165 #endif 166 #endif
166 167
167 if (do_init_sandbox) { 168 if (do_init_sandbox) {
168 gpu_info.sandboxed = content::InitializeSandbox(); 169 gpu_info.sandboxed = InitializeSandbox();
169 } 170 }
170 } 171 }
171 #endif 172 #endif
172 173
173 #if defined(OS_WIN) 174 #if defined(OS_WIN)
174 { 175 {
175 TRACE_EVENT0("gpu", "Lower token"); 176 TRACE_EVENT0("gpu", "Lower token");
176 // For windows, if the target_services interface is not zero, the process 177 // For windows, if the target_services interface is not zero, the process
177 // is sandboxed and we must call LowerToken() before rendering untrusted 178 // is sandboxed and we must call LowerToken() before rendering untrusted
178 // content. 179 // content.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 245
245 // Similarly, this is needed for /dev/nvidia0. 246 // Similarly, this is needed for /dev/nvidia0.
246 if (context->MakeCurrent(surface)) { 247 if (context->MakeCurrent(surface)) {
247 context->ReleaseCurrent(surface.get()); 248 context->ReleaseCurrent(surface.get());
248 } else { 249 } else {
249 VLOG(1) << "gfx::GLContext::MakeCurrent failed"; 250 VLOG(1) << "gfx::GLContext::MakeCurrent failed";
250 } 251 }
251 } 252 }
252 #endif 253 #endif
253 254
254 void WarmUpSandbox(const content::GPUInfo& gpu_info, 255 void WarmUpSandbox(const GPUInfo& gpu_info,
255 bool should_initialize_gl_context) { 256 bool should_initialize_gl_context) {
256 { 257 {
257 TRACE_EVENT0("gpu", "Warm up rand"); 258 TRACE_EVENT0("gpu", "Warm up rand");
258 // Warm up the random subsystem, which needs to be done pre-sandbox on all 259 // Warm up the random subsystem, which needs to be done pre-sandbox on all
259 // platforms. 260 // platforms.
260 (void) base::RandUint64(); 261 (void) base::RandUint64();
261 } 262 }
262 { 263 {
263 TRACE_EVENT0("gpu", "Warm up HMAC"); 264 TRACE_EVENT0("gpu", "Warm up HMAC");
264 // Warm up the crypto subsystem, which needs to done pre-sandbox on all 265 // Warm up the crypto subsystem, which needs to done pre-sandbox on all
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 { 302 {
302 TRACE_EVENT0("gpu", "Initialize DXVA"); 303 TRACE_EVENT0("gpu", "Initialize DXVA");
303 // Initialize H/W video decoding stuff which fails in the sandbox. 304 // Initialize H/W video decoding stuff which fails in the sandbox.
304 DXVAVideoDecodeAccelerator::PreSandboxInitialization(); 305 DXVAVideoDecodeAccelerator::PreSandboxInitialization();
305 } 306 }
306 #endif 307 #endif
307 } 308 }
308 309
309 } // namespace. 310 } // namespace.
310 311
312 } // namespace content
OLDNEW
« no previous file with comments | « content/gpu/gpu_child_thread.cc ('k') | content/gpu/gpu_process.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698