Home | History | Annotate | Download | only in config
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "gpu/config/gpu_info_collector.h"
      6 
      7 #include "base/command_line.h"
      8 #include "base/debug/trace_event.h"
      9 #include "base/logging.h"
     10 #include "base/strings/string_split.h"
     11 #include "ui/gl/gl_surface_egl.h"
     12 #include "ui/gl/gl_switches.h"
     13 
     14 namespace gpu {
     15 
     16 CollectInfoResult CollectContextGraphicsInfo(GPUInfo* gpu_info) {
     17   DCHECK(gpu_info);
     18   TRACE_EVENT0("gpu", "gpu_info_collector::CollectGraphicsInfo");
     19   CollectInfoResult result = CollectGraphicsInfoGL(gpu_info);
     20   if (CommandLine::ForCurrentProcess()->HasSwitch(
     21           switches::kGpuNoContextLost)) {
     22     gpu_info->can_lose_context = false;
     23   } else {
     24 #if defined(OS_CHROMEOS)
     25     gpu_info->can_lose_context = false;
     26 #else
     27     gpu_info->can_lose_context =
     28         !gfx::GLSurfaceEGL::IsCreateContextRobustnessSupported();
     29 #endif
     30   }
     31 
     32   gpu_info->finalized = true;
     33   return result;
     34 }
     35 
     36 GpuIDResult CollectGpuID(uint32* vendor_id, uint32* device_id) {
     37   DCHECK(vendor_id && device_id);
     38   *vendor_id = 0;
     39   *device_id = 0;
     40   return kGpuIDNotSupported;
     41 }
     42 
     43 CollectInfoResult CollectBasicGraphicsInfo(GPUInfo* gpu_info) {
     44   gpu_info->can_lose_context = false;
     45   return kCollectInfoSuccess;
     46 }
     47 
     48 CollectInfoResult CollectDriverInfoGL(GPUInfo* gpu_info) {
     49   DCHECK(gpu_info);
     50   // Extract driver vendor, version from a string like:
     51   // "OpenGL ES 3.0 V (at) 6.0 AU@ (CL@2946718)"
     52   size_t begin = gpu_info->gl_version.find_first_of("0123456789");
     53   if (begin == std::string::npos)
     54     return kCollectInfoNonFatalFailure;
     55 
     56   std::string sub_string = gpu_info->gl_version.substr(begin);
     57   std::vector<std::string> pieces;
     58   base::SplitStringAlongWhitespace(sub_string, &pieces);
     59   if (pieces.size() < 3)
     60     return kCollectInfoNonFatalFailure;
     61 
     62   std::string driver_version = pieces[2];
     63   size_t pos = driver_version.find_first_not_of("0123456789.");
     64   if (pos == 0)
     65     return kCollectInfoNonFatalFailure;
     66 
     67   if (pos != std::string::npos)
     68     driver_version = driver_version.substr(0, pos);
     69 
     70   gpu_info->driver_vendor = pieces[1];
     71   gpu_info->driver_version = driver_version;
     72   return kCollectInfoSuccess;
     73 }
     74 
     75 void MergeGPUInfo(GPUInfo* basic_gpu_info,
     76                   const GPUInfo& context_gpu_info) {
     77   MergeGPUInfoGL(basic_gpu_info, context_gpu_info);
     78 }
     79 
     80 }  // namespace gpu
     81