147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/* 247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Copyright 2008 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#ifndef WEBRTC_BASE_SYSTEMINFO_H__ 1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define WEBRTC_BASE_SYSTEMINFO_H__ 1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <string> 1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/basictypes.h" 1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc { 1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass SystemInfo { 2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org enum Architecture { 2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SI_ARCH_UNKNOWN = -1, 2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SI_ARCH_X86 = 0, 2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SI_ARCH_X64 = 1, 2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SI_ARCH_ARM = 2 2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org }; 2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org SystemInfo(); 3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // The number of CPU Cores in the system. 3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int GetMaxPhysicalCpus(); 3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // The number of CPU Threads in the system. 3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int GetMaxCpus(); 3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // The number of CPU Threads currently available to this process. 3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int GetCurCpus(); 3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Identity of the CPUs. 3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Architecture GetCpuArchitecture(); 3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string GetCpuVendor(); 4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int GetCpuFamily(); 4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int GetCpuModel(); 4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int GetCpuStepping(); 4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Return size of CPU cache in bytes. Uses largest available cache (L3). 4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int GetCpuCacheSize(); 4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Estimated speed of the CPUs, in MHz. e.g. 2400 for 2.4 GHz 4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int GetMaxCpuSpeed(); 4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int GetCurCpuSpeed(); 4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Total amount of physical memory, in bytes. 4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int64 GetMemorySize(); 5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // The model name of the machine, e.g. "MacBookAir1,1" 5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string GetMachineModel(); 5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // The gpu identifier 5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org struct GpuInfo { 5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org GpuInfo() : vendor_id(0), device_id(0) {} 5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string device_name; 5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string description; 5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int vendor_id; 5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int device_id; 6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string driver; 6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string driver_version; 6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org }; 6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool GetGpuInfo(GpuInfo *info); 6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private: 6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int physical_cpus_; 6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int logical_cpus_; 6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int cache_size_; 6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Architecture cpu_arch_; 7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string cpu_vendor_; 7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int cpu_family_; 7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int cpu_model_; 7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int cpu_stepping_; 7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int cpu_speed_; 7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int64 memory_; 7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string machine_model_; 7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} // namespace rtc 8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif // WEBRTC_BASE_SYSTEMINFO_H__ 82