1/* 2 * Copyright 2008 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#ifndef WEBRTC_BASE_LINUX_H_ 12#define WEBRTC_BASE_LINUX_H_ 13 14#if defined(WEBRTC_LINUX) 15#include <string> 16#include <map> 17#include <vector> 18 19#include "webrtc/base/scoped_ptr.h" 20#include "webrtc/base/stream.h" 21 22namespace rtc { 23 24////////////////////////////////////////////////////////////////////////////// 25// ConfigParser parses a FileStream of an ".ini."-type format into a map. 26////////////////////////////////////////////////////////////////////////////// 27 28// Sample Usage: 29// ConfigParser parser; 30// ConfigParser::MapVector key_val_pairs; 31// if (parser.Open(inifile) && parser.Parse(&key_val_pairs)) { 32// for (int section_num=0; i < key_val_pairs.size(); ++section_num) { 33// std::string val1 = key_val_pairs[section_num][key1]; 34// std::string val2 = key_val_pairs[section_num][key2]; 35// // Do something with valn; 36// } 37// } 38 39class ConfigParser { 40 public: 41 typedef std::map<std::string, std::string> SimpleMap; 42 typedef std::vector<SimpleMap> MapVector; 43 44 ConfigParser(); 45 virtual ~ConfigParser(); 46 47 virtual bool Open(const std::string& filename); 48 virtual void Attach(StreamInterface* stream); 49 virtual bool Parse(MapVector* key_val_pairs); 50 virtual bool ParseSection(SimpleMap* key_val_pair); 51 virtual bool ParseLine(std::string* key, std::string* value); 52 53 private: 54 scoped_ptr<StreamInterface> instream_; 55}; 56 57////////////////////////////////////////////////////////////////////////////// 58// ProcCpuInfo reads CPU info from the /proc subsystem on any *NIX platform. 59////////////////////////////////////////////////////////////////////////////// 60 61// Sample Usage: 62// ProcCpuInfo proc_info; 63// int no_of_cpu; 64// if (proc_info.LoadFromSystem()) { 65// std::string out_str; 66// proc_info.GetNumCpus(&no_of_cpu); 67// proc_info.GetCpuStringValue(0, "vendor_id", &out_str); 68// } 69// } 70 71class ProcCpuInfo { 72 public: 73 ProcCpuInfo(); 74 virtual ~ProcCpuInfo(); 75 76 // Reads the proc subsystem's cpu info into memory. If this fails, this 77 // returns false; if it succeeds, it returns true. 78 virtual bool LoadFromSystem(); 79 80 // Obtains the number of logical CPU threads and places the value num. 81 virtual bool GetNumCpus(int* num); 82 83 // Obtains the number of physical CPU cores and places the value num. 84 virtual bool GetNumPhysicalCpus(int* num); 85 86 // Obtains the CPU family id. 87 virtual bool GetCpuFamily(int* id); 88 89 // Obtains the number of sections in /proc/cpuinfo, which may be greater 90 // than the number of CPUs (e.g. on ARM) 91 virtual bool GetSectionCount(size_t* count); 92 93 // Looks for the CPU proc item with the given name for the given section 94 // number and places the string value in result. 95 virtual bool GetSectionStringValue(size_t section_num, const std::string& key, 96 std::string* result); 97 98 // Looks for the CPU proc item with the given name for the given section 99 // number and places the int value in result. 100 virtual bool GetSectionIntValue(size_t section_num, const std::string& key, 101 int* result); 102 103 private: 104 ConfigParser::MapVector sections_; 105}; 106 107#if !defined(WEBRTC_CHROMIUM_BUILD) 108// Builds a string containing the info from lsb_release on a single line. 109std::string ReadLinuxLsbRelease(); 110#endif 111 112// Returns the output of "uname". 113std::string ReadLinuxUname(); 114 115// Returns the content (int) of 116// /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 117// Returns -1 on error. 118int ReadCpuMaxFreq(); 119 120} // namespace rtc 121 122#endif // defined(WEBRTC_LINUX) 123#endif // WEBRTC_BASE_LINUX_H_ 124