Home | History | Annotate | Download | only in base
      1 /*
      2  *  Copyright 2009 The WebRTC Project Authors. All rights reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #include "webrtc/base/gunit.h"
     12 #include "webrtc/base/stringutils.h"
     13 #include "webrtc/base/systeminfo.h"
     14 
     15 #if defined(CPU_X86) || defined(CPU_ARM)
     16 TEST(SystemInfoTest, CpuVendorNonEmpty) {
     17   rtc::SystemInfo info;
     18   LOG(LS_INFO) << "CpuVendor: " << info.GetCpuVendor();
     19   EXPECT_FALSE(info.GetCpuVendor().empty());
     20 }
     21 
     22 // Tests Vendor identification is Intel or AMD.
     23 // See Also http://en.wikipedia.org/wiki/CPUID
     24 TEST(SystemInfoTest, CpuVendorIntelAMDARM) {
     25   rtc::SystemInfo info;
     26 #if defined(CPU_X86)
     27   EXPECT_TRUE(rtc::string_match(info.GetCpuVendor().c_str(),
     28                                       "GenuineIntel") ||
     29               rtc::string_match(info.GetCpuVendor().c_str(),
     30                                       "AuthenticAMD"));
     31 #elif defined(CPU_ARM)
     32   EXPECT_TRUE(rtc::string_match(info.GetCpuVendor().c_str(), "ARM"));
     33 #endif
     34 }
     35 #endif  // defined(CPU_X86) || defined(CPU_ARM)
     36 
     37 // Tests CpuArchitecture matches expectations.
     38 TEST(SystemInfoTest, GetCpuArchitecture) {
     39   rtc::SystemInfo info;
     40   LOG(LS_INFO) << "CpuArchitecture: " << info.GetCpuArchitecture();
     41   rtc::SystemInfo::Architecture architecture = info.GetCpuArchitecture();
     42 #if defined(CPU_X86) || defined(CPU_ARM)
     43   if (sizeof(intptr_t) == 8) {
     44     EXPECT_EQ(rtc::SystemInfo::SI_ARCH_X64, architecture);
     45   } else if (sizeof(intptr_t) == 4) {
     46 #if defined(CPU_ARM)
     47     EXPECT_EQ(rtc::SystemInfo::SI_ARCH_ARM, architecture);
     48 #else
     49     EXPECT_EQ(rtc::SystemInfo::SI_ARCH_X86, architecture);
     50 #endif
     51   }
     52 #endif
     53 }
     54 
     55 // Tests Cpu Cache Size
     56 TEST(SystemInfoTest, CpuCacheSize) {
     57   rtc::SystemInfo info;
     58   LOG(LS_INFO) << "CpuCacheSize: " << info.GetCpuCacheSize();
     59   EXPECT_GE(info.GetCpuCacheSize(), 8192);  // 8 KB min cache
     60   EXPECT_LE(info.GetCpuCacheSize(), 1024 * 1024 * 1024);  // 1 GB max cache
     61 }
     62 
     63 // Tests MachineModel is set.  On Mac test machine model is known.
     64 TEST(SystemInfoTest, MachineModelKnown) {
     65   rtc::SystemInfo info;
     66   EXPECT_FALSE(info.GetMachineModel().empty());
     67   const char *machine_model = info.GetMachineModel().c_str();
     68   LOG(LS_INFO) << "MachineModel: " << machine_model;
     69   bool known = true;
     70 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
     71   // Full list as of May 2012.  Update when new OSX based models are added.
     72   known = rtc::string_match(machine_model, "MacBookPro*") ||
     73           rtc::string_match(machine_model, "MacBookAir*") ||
     74           rtc::string_match(machine_model, "MacBook*") ||
     75           rtc::string_match(machine_model, "MacPro*") ||
     76           rtc::string_match(machine_model, "Macmini*") ||
     77           rtc::string_match(machine_model, "iMac*") ||
     78           rtc::string_match(machine_model, "Xserve*");
     79 #elif !defined(WEBRTC_IOS)
     80   // All other machines return Not available.
     81   known = rtc::string_match(info.GetMachineModel().c_str(),
     82                                   "Not available");
     83 #endif
     84   if (!known) {
     85     LOG(LS_WARNING) << "Machine Model Unknown: " << machine_model;
     86   }
     87 }
     88 
     89 // Tests maximum cpu clockrate.
     90 TEST(SystemInfoTest, CpuMaxCpuSpeed) {
     91   rtc::SystemInfo info;
     92   LOG(LS_INFO) << "MaxCpuSpeed: " << info.GetMaxCpuSpeed();
     93   EXPECT_GT(info.GetMaxCpuSpeed(), 0);
     94   EXPECT_LT(info.GetMaxCpuSpeed(), 100000);  // 100 Ghz
     95 }
     96 
     97 // Tests current cpu clockrate.
     98 TEST(SystemInfoTest, CpuCurCpuSpeed) {
     99   rtc::SystemInfo info;
    100   LOG(LS_INFO) << "MaxCurSpeed: " << info.GetCurCpuSpeed();
    101   EXPECT_GT(info.GetCurCpuSpeed(), 0);
    102   EXPECT_LT(info.GetMaxCpuSpeed(), 100000);
    103 }
    104 
    105 // Tests physical memory size.
    106 TEST(SystemInfoTest, MemorySize) {
    107   rtc::SystemInfo info;
    108   LOG(LS_INFO) << "MemorySize: " << info.GetMemorySize();
    109   EXPECT_GT(info.GetMemorySize(), -1);
    110 }
    111 
    112 // Tests number of logical cpus available to the system.
    113 TEST(SystemInfoTest, MaxCpus) {
    114   rtc::SystemInfo info;
    115   LOG(LS_INFO) << "MaxCpus: " << info.GetMaxCpus();
    116   EXPECT_GT(info.GetMaxCpus(), 0);
    117 }
    118 
    119 // Tests number of physical cpus available to the system.
    120 TEST(SystemInfoTest, MaxPhysicalCpus) {
    121   rtc::SystemInfo info;
    122   LOG(LS_INFO) << "MaxPhysicalCpus: " << info.GetMaxPhysicalCpus();
    123   EXPECT_GT(info.GetMaxPhysicalCpus(), 0);
    124   EXPECT_LE(info.GetMaxPhysicalCpus(), info.GetMaxCpus());
    125 }
    126 
    127 // Tests number of logical cpus available to the process.
    128 TEST(SystemInfoTest, CurCpus) {
    129   rtc::SystemInfo info;
    130   LOG(LS_INFO) << "CurCpus: " << info.GetCurCpus();
    131   EXPECT_GT(info.GetCurCpus(), 0);
    132   EXPECT_LE(info.GetCurCpus(), info.GetMaxCpus());
    133 }
    134 
    135 #ifdef CPU_X86
    136 // CPU family/model/stepping is only available on X86. The following tests
    137 // that they are set when running on x86 CPUs. Valid Family/Model/Stepping
    138 // values are non-zero on known CPUs.
    139 
    140 // Tests Intel CPU Family identification.
    141 TEST(SystemInfoTest, CpuFamily) {
    142   rtc::SystemInfo info;
    143   LOG(LS_INFO) << "CpuFamily: " << info.GetCpuFamily();
    144   EXPECT_GT(info.GetCpuFamily(), 0);
    145 }
    146 
    147 // Tests Intel CPU Model identification.
    148 TEST(SystemInfoTest, CpuModel) {
    149   rtc::SystemInfo info;
    150   LOG(LS_INFO) << "CpuModel: " << info.GetCpuModel();
    151   EXPECT_GT(info.GetCpuModel(), 0);
    152 }
    153 
    154 // Tests Intel CPU Stepping identification.
    155 TEST(SystemInfoTest, CpuStepping) {
    156   rtc::SystemInfo info;
    157   LOG(LS_INFO) << "CpuStepping: " << info.GetCpuStepping();
    158   EXPECT_GT(info.GetCpuStepping(), 0);
    159 }
    160 #else  // CPU_X86
    161 // If not running on x86 CPU the following tests expect the functions to
    162 // return 0.
    163 TEST(SystemInfoTest, CpuFamily) {
    164   rtc::SystemInfo info;
    165   LOG(LS_INFO) << "CpuFamily: " << info.GetCpuFamily();
    166   EXPECT_EQ(0, info.GetCpuFamily());
    167 }
    168 
    169 // Tests Intel CPU Model identification.
    170 TEST(SystemInfoTest, CpuModel) {
    171   rtc::SystemInfo info;
    172   LOG(LS_INFO) << "CpuModel: " << info.GetCpuModel();
    173   EXPECT_EQ(0, info.GetCpuModel());
    174 }
    175 
    176 // Tests Intel CPU Stepping identification.
    177 TEST(SystemInfoTest, CpuStepping) {
    178   rtc::SystemInfo info;
    179   LOG(LS_INFO) << "CpuStepping: " << info.GetCpuStepping();
    180   EXPECT_EQ(0, info.GetCpuStepping());
    181 }
    182 #endif  // CPU_X86
    183 
    184 #if WEBRTC_WIN && !defined(EXCLUDE_D3D9)
    185 TEST(SystemInfoTest, GpuInfo) {
    186   rtc::SystemInfo info;
    187   rtc::SystemInfo::GpuInfo gi;
    188   EXPECT_TRUE(info.GetGpuInfo(&gi));
    189   LOG(LS_INFO) << "GpuDriver: " << gi.driver;
    190   EXPECT_FALSE(gi.driver.empty());
    191   LOG(LS_INFO) << "GpuDriverVersion: " << gi.driver_version;
    192   EXPECT_FALSE(gi.driver_version.empty());
    193 }
    194 #endif
    195