summaryrefslogtreecommitdiffstats
path: root/chromium/gpu/config/gpu_info_collector_ozone.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/gpu/config/gpu_info_collector_ozone.cc')
-rw-r--r--chromium/gpu/config/gpu_info_collector_ozone.cc67
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