147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/*
247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Copyright 2009 The WebRTC Project Authors. All rights reserved.
347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *
447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Use of this source code is governed by a BSD-style license
547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  that can be found in the LICENSE file in the root of the source
647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  tree. An additional intellectual property rights grant can be found
747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  in the file PATENTS.  All contributing project authors may
847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */
1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/gunit.h"
1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/stringutils.h"
1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/systeminfo.h"
1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(CPU_X86) || defined(CPU_ARM)
1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuVendorNonEmpty) {
1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "CpuVendor: " << info.GetCpuVendor();
1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(info.GetCpuVendor().empty());
2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests Vendor identification is Intel or AMD.
2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// See Also http://en.wikipedia.org/wiki/CPUID
2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuVendorIntelAMDARM) {
2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(CPU_X86)
2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(rtc::string_match(info.GetCpuVendor().c_str(),
2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                                      "GenuineIntel") ||
2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org              rtc::string_match(info.GetCpuVendor().c_str(),
3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                                      "AuthenticAMD"));
3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#elif defined(CPU_ARM)
3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(rtc::string_match(info.GetCpuVendor().c_str(), "ARM"));
3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif  // defined(CPU_X86) || defined(CPU_ARM)
3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests CpuArchitecture matches expectations.
3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, GetCpuArchitecture) {
3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "CpuArchitecture: " << info.GetCpuArchitecture();
4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo::Architecture architecture = info.GetCpuArchitecture();
4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(CPU_X86) || defined(CPU_ARM)
4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  if (sizeof(intptr_t) == 8) {
4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(rtc::SystemInfo::SI_ARCH_X64, architecture);
4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  } else if (sizeof(intptr_t) == 4) {
4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(CPU_ARM)
4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(rtc::SystemInfo::SI_ARCH_ARM, architecture);
4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#else
4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(rtc::SystemInfo::SI_ARCH_X86, architecture);
5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  }
5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests Cpu Cache Size
5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuCacheSize) {
5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "CpuCacheSize: " << info.GetCpuCacheSize();
5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GE(info.GetCpuCacheSize(), 8192);  // 8 KB min cache
6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_LE(info.GetCpuCacheSize(), 1024 * 1024 * 1024);  // 1 GB max cache
6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests MachineModel is set.  On Mac test machine model is known.
6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, MachineModelKnown) {
6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(info.GetMachineModel().empty());
6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  const char *machine_model = info.GetMachineModel().c_str();
6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "MachineModel: " << machine_model;
6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  bool known = true;
7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Full list as of May 2012.  Update when new OSX based models are added.
7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  known = rtc::string_match(machine_model, "MacBookPro*") ||
7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org          rtc::string_match(machine_model, "MacBookAir*") ||
7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org          rtc::string_match(machine_model, "MacBook*") ||
7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org          rtc::string_match(machine_model, "MacPro*") ||
7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org          rtc::string_match(machine_model, "Macmini*") ||
7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org          rtc::string_match(machine_model, "iMac*") ||
7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org          rtc::string_match(machine_model, "Xserve*");
7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#elif !defined(WEBRTC_IOS)
8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // All other machines return Not available.
8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  known = rtc::string_match(info.GetMachineModel().c_str(),
8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                                  "Not available");
8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  if (!known) {
8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    LOG(LS_WARNING) << "Machine Model Unknown: " << machine_model;
8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  }
8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests maximum cpu clockrate.
9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuMaxCpuSpeed) {
9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "MaxCpuSpeed: " << info.GetMaxCpuSpeed();
9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GT(info.GetMaxCpuSpeed(), 0);
9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_LT(info.GetMaxCpuSpeed(), 100000);  // 100 Ghz
9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests current cpu clockrate.
9847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuCurCpuSpeed) {
9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "MaxCurSpeed: " << info.GetCurCpuSpeed();
10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GT(info.GetCurCpuSpeed(), 0);
10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_LT(info.GetMaxCpuSpeed(), 100000);
10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests physical memory size.
10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, MemorySize) {
10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "MemorySize: " << info.GetMemorySize();
10947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GT(info.GetMemorySize(), -1);
11047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
11147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
11247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests number of logical cpus available to the system.
11347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, MaxCpus) {
11447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
11547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "MaxCpus: " << info.GetMaxCpus();
11647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GT(info.GetMaxCpus(), 0);
11747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
11847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
11947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests number of physical cpus available to the system.
12047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, MaxPhysicalCpus) {
12147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
12247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "MaxPhysicalCpus: " << info.GetMaxPhysicalCpus();
12347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GT(info.GetMaxPhysicalCpus(), 0);
12447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_LE(info.GetMaxPhysicalCpus(), info.GetMaxCpus());
12547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
12647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
12747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests number of logical cpus available to the process.
12847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CurCpus) {
12947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
13047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "CurCpus: " << info.GetCurCpus();
13147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GT(info.GetCurCpus(), 0);
13247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_LE(info.GetCurCpus(), info.GetMaxCpus());
13347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
13447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
13547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifdef CPU_X86
13647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// CPU family/model/stepping is only available on X86. The following tests
13747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// that they are set when running on x86 CPUs. Valid Family/Model/Stepping
13847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// values are non-zero on known CPUs.
13947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
14047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests Intel CPU Family identification.
14147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuFamily) {
14247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
14347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "CpuFamily: " << info.GetCpuFamily();
14447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GT(info.GetCpuFamily(), 0);
14547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
14647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
14747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests Intel CPU Model identification.
14847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuModel) {
14947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
15047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "CpuModel: " << info.GetCpuModel();
15147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GT(info.GetCpuModel(), 0);
15247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
15347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
15447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests Intel CPU Stepping identification.
15547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuStepping) {
15647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
15747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "CpuStepping: " << info.GetCpuStepping();
15847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GT(info.GetCpuStepping(), 0);
15947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
16047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#else  // CPU_X86
16147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// If not running on x86 CPU the following tests expect the functions to
16247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// return 0.
16347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuFamily) {
16447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
16547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "CpuFamily: " << info.GetCpuFamily();
16647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(0, info.GetCpuFamily());
16747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
16847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
16947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests Intel CPU Model identification.
17047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuModel) {
17147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
17247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "CpuModel: " << info.GetCpuModel();
17347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(0, info.GetCpuModel());
17447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
17547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
17647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Tests Intel CPU Stepping identification.
17747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, CpuStepping) {
17847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
17947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "CpuStepping: " << info.GetCpuStepping();
18047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(0, info.GetCpuStepping());
18147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
18247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif  // CPU_X86
18347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
18447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if WEBRTC_WIN && !defined(EXCLUDE_D3D9)
18547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(SystemInfoTest, GpuInfo) {
18647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo info;
18747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  rtc::SystemInfo::GpuInfo gi;
18847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(info.GetGpuInfo(&gi));
18947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "GpuDriver: " << gi.driver;
19047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(gi.driver.empty());
19147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  LOG(LS_INFO) << "GpuDriverVersion: " << gi.driver_version;
19247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(gi.driver_version.empty());
19347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
19447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
195