diff options
Diffstat (limited to 'chromium/gpu/config/gpu_info_collector_ozone.cc')
-rw-r--r-- | chromium/gpu/config/gpu_info_collector_ozone.cc | 67 |
1 files changed, 51 insertions, 16 deletions
diff --git a/chromium/gpu/config/gpu_info_collector_ozone.cc b/chromium/gpu/config/gpu_info_collector_ozone.cc index 5e28e8ae61e..b8dac8478af 100644 --- a/chromium/gpu/config/gpu_info_collector_ozone.cc +++ b/chromium/gpu/config/gpu_info_collector_ozone.cc @@ -4,12 +4,33 @@ #include "gpu/config/gpu_info_collector.h" +#include "base/command_line.h" +#include "base/debug/trace_event.h" #include "base/logging.h" +#include "base/strings/string_split.h" +#include "ui/gl/gl_surface_egl.h" +#include "ui/gl/gl_switches.h" namespace gpu { -bool CollectContextGraphicsInfo(GPUInfo* gpu_info) { - return CollectBasicGraphicsInfo(gpu_info); +CollectInfoResult CollectContextGraphicsInfo(GPUInfo* gpu_info) { + DCHECK(gpu_info); + TRACE_EVENT0("gpu", "gpu_info_collector::CollectGraphicsInfo"); + CollectInfoResult result = CollectGraphicsInfoGL(gpu_info); + if (CommandLine::ForCurrentProcess()->HasSwitch( + switches::kGpuNoContextLost)) { + gpu_info->can_lose_context = false; + } else { +#if defined(OS_CHROMEOS) + gpu_info->can_lose_context = false; +#else + gpu_info->can_lose_context = + !gfx::GLSurfaceEGL::IsCreateContextRobustnessSupported(); +#endif + } + + gpu_info->finalized = true; + return result; } GpuIDResult CollectGpuID(uint32* vendor_id, uint32* device_id) { @@ -19,14 +40,36 @@ GpuIDResult CollectGpuID(uint32* vendor_id, uint32* device_id) { return kGpuIDNotSupported; } -bool CollectBasicGraphicsInfo(GPUInfo* gpu_info) { +CollectInfoResult CollectBasicGraphicsInfo(GPUInfo* gpu_info) { gpu_info->can_lose_context = false; - return true; + return kCollectInfoSuccess; } -bool CollectDriverInfoGL(GPUInfo* gpu_info) { - NOTIMPLEMENTED(); - return false; +CollectInfoResult CollectDriverInfoGL(GPUInfo* gpu_info) { + DCHECK(gpu_info); + // Extract driver vendor, version from a string like: + // "OpenGL ES 3.0 V@6.0 AU@ (CL@2946718)" + size_t begin = gpu_info->gl_version.find_first_of("0123456789"); + if (begin == std::string::npos) + return kCollectInfoNonFatalFailure; + + std::string sub_string = gpu_info->gl_version.substr(begin); + std::vector<std::string> pieces; + base::SplitStringAlongWhitespace(sub_string, &pieces); + if (pieces.size() < 3) + return kCollectInfoNonFatalFailure; + + std::string driver_version = pieces[2]; + size_t pos = driver_version.find_first_not_of("0123456789."); + if (pos == 0) + return kCollectInfoNonFatalFailure; + + if (pos != std::string::npos) + driver_version = driver_version.substr(0, pos); + + gpu_info->driver_vendor = pieces[1]; + gpu_info->driver_version = driver_version; + return kCollectInfoSuccess; } void MergeGPUInfo(GPUInfo* basic_gpu_info, @@ -34,12 +77,4 @@ void MergeGPUInfo(GPUInfo* basic_gpu_info, MergeGPUInfoGL(basic_gpu_info, context_gpu_info); } -bool DetermineActiveGPU(GPUInfo* gpu_info) { - DCHECK(gpu_info); - if (gpu_info->secondary_gpus.size() == 0) - return true; - // TODO(zmo): implement this. - return false; -} - -} // namespace gpu_info_collector +} // namespace gpu |