Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "gpu/ipc/service/gpu_init.h" | 5 #include "gpu/ipc/service/gpu_init.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/metrics/histogram_macros.h" | 8 #include "base/metrics/histogram_macros.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" | 10 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 156 bool delayed_watchdog_enable = false; | 156 bool delayed_watchdog_enable = false; |
| 157 | 157 |
| 158 #if defined(OS_CHROMEOS) | 158 #if defined(OS_CHROMEOS) |
| 159 // Don't start watchdog immediately, to allow developers to switch to VT2 on | 159 // Don't start watchdog immediately, to allow developers to switch to VT2 on |
| 160 // startup. | 160 // startup. |
| 161 delayed_watchdog_enable = true; | 161 delayed_watchdog_enable = true; |
| 162 #endif | 162 #endif |
| 163 | 163 |
| 164 // Start the GPU watchdog only after anything that is expected to be time | 164 // Start the GPU watchdog only after anything that is expected to be time |
| 165 // consuming has completed, otherwise the process is liable to be aborted. | 165 // consuming has completed, otherwise the process is liable to be aborted. |
| 166 if (enable_watchdog && !delayed_watchdog_enable) | 166 if (enable_watchdog && !delayed_watchdog_enable) { |
| 167 watchdog_thread_ = gpu::GpuWatchdogThread::Create(); | 167 watchdog_thread_ = gpu::GpuWatchdogThread::Create(); |
| 168 #if defined(OS_WIN) | |
| 169 // This is a workaround for an occasional deadlock between watchdog and | |
| 170 // current thread. Watchdog hangs at thread initialization in | |
| 171 // __acrt_thread_attach() and current thread in std::setlocale(...) | |
| 172 // (during InitializeGLOneOff()). Source of the deadlock looks like an old | |
| 173 // UCRT bug that was supposed to be fixed in 10.0.10586 release of UCRT, | |
| 174 // but we might have come accross a not-yet-covered scenario. | |
|
Ken Russell (switch to Gerrit)
2017/05/04 17:18:48
Please refer to crbug.com/718388 in the comment, i
| |
| 175 // References: | |
| 176 // https://bugs.python.org/issue26624 | |
| 177 // http://stackoverflow.com/questions/35572792/setlocale-stuck-on-windows | |
| 178 auto watchdog_started = watchdog_thread_->WaitUntilThreadStarted(); | |
| 179 DCHECK(watchdog_started); | |
| 180 #endif // OS_WIN | |
| 181 } | |
| 168 | 182 |
| 169 // Get vendor_id, device_id, driver_version from browser process through | 183 // Get vendor_id, device_id, driver_version from browser process through |
| 170 // commandline switches. | 184 // commandline switches. |
| 171 GetGpuInfoFromCommandLine(gpu_info_, command_line); | 185 GetGpuInfoFromCommandLine(gpu_info_, command_line); |
| 172 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | 186 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 173 if (gpu_info_.gpu.vendor_id == 0x10de && // NVIDIA | 187 if (gpu_info_.gpu.vendor_id == 0x10de && // NVIDIA |
| 174 gpu_info_.driver_vendor == "NVIDIA" && !CanAccessNvidiaDeviceFile()) | 188 gpu_info_.driver_vendor == "NVIDIA" && !CanAccessNvidiaDeviceFile()) |
| 175 return false; | 189 return false; |
| 176 #endif | 190 #endif |
| 177 gpu_info_.in_process_gpu = false; | 191 gpu_info_.in_process_gpu = false; |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 264 | 278 |
| 265 if (!gpu_info_.sandboxed && !attempted_startsandbox) { | 279 if (!gpu_info_.sandboxed && !attempted_startsandbox) { |
| 266 gpu_info_.sandboxed = | 280 gpu_info_.sandboxed = |
| 267 sandbox_helper_->EnsureSandboxInitialized(watchdog_thread_.get()); | 281 sandbox_helper_->EnsureSandboxInitialized(watchdog_thread_.get()); |
| 268 } | 282 } |
| 269 | 283 |
| 270 return true; | 284 return true; |
| 271 } | 285 } |
| 272 | 286 |
| 273 } // namespace gpu | 287 } // namespace gpu |
| OLD | NEW |