Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/policy/device_status_collector.h" | 5 #include "chrome/browser/chromeos/policy/device_status_collector.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 149 if (line.compare(0, 4, "cpu ") == 0) | 149 if (line.compare(0, 4, "cpu ") == 0) |
| 150 return line; | 150 return line; |
| 151 } | 151 } |
| 152 // First line should always start with "cpu ". | 152 // First line should always start with "cpu ". |
| 153 NOTREACHED() << "Could not parse /proc/stat contents: " << contents; | 153 NOTREACHED() << "Could not parse /proc/stat contents: " << contents; |
| 154 } | 154 } |
| 155 LOG(WARNING) << "Unable to read CPU statistics from " << kProcStat; | 155 LOG(WARNING) << "Unable to read CPU statistics from " << kProcStat; |
| 156 return std::string(); | 156 return std::string(); |
| 157 } | 157 } |
| 158 | 158 |
| 159 // Reads the CPU temperature info from | 159 // Reads the CPU temperature info from |
|
pastarmovj
2016/09/23 09:28:11
Please update this comment to reflect the new logi
| |
| 160 // /sys/class/hwmon/hwmon*/device/temp*_input and | 160 // /sys/class/hwmon/hwmon*/device/temp*_input and |
| 161 // /sys/class/hwmon/hwmon*/device/temp*_label files. | 161 // /sys/class/hwmon/hwmon*/device/temp*_label files. |
| 162 // | 162 // |
| 163 // temp*_input contains CPU temperature in millidegree Celsius | 163 // temp*_input contains CPU temperature in millidegree Celsius |
| 164 // temp*_label contains appropriate temperature channel label. | 164 // temp*_label contains appropriate temperature channel label. |
| 165 std::vector<em::CPUTempInfo> ReadCPUTempInfo() { | 165 std::vector<em::CPUTempInfo> ReadCPUTempInfo() { |
| 166 std::vector<em::CPUTempInfo> contents; | 166 std::vector<em::CPUTempInfo> contents; |
| 167 // Get directories /sys/class/hwmon/hwmon* | 167 // Get directories /sys/class/hwmon/hwmon* |
| 168 base::FileEnumerator hwmon_enumerator(base::FilePath(kHwmonDir), false, | 168 base::FileEnumerator hwmon_enumerator(base::FilePath(kHwmonDir), false, |
| 169 base::FileEnumerator::DIRECTORIES, | 169 base::FileEnumerator::DIRECTORIES, |
| 170 kHwmonDirectoryPattern); | 170 kHwmonDirectoryPattern); |
| 171 | 171 |
| 172 for (base::FilePath hwmon_path = hwmon_enumerator.Next(); !hwmon_path.empty(); | 172 for (base::FilePath hwmon_path = hwmon_enumerator.Next(); !hwmon_path.empty(); |
| 173 hwmon_path = hwmon_enumerator.Next()) { | 173 hwmon_path = hwmon_enumerator.Next()) { |
| 174 // Get files /sys/class/hwmon/hwmon*/device/temp*_input | 174 // Get temp*_input files in hwmon*/ and hwmon*/device/ |
| 175 const base::FilePath hwmon_device_dir = hwmon_path.Append(kDeviceDir); | 175 if (base::PathExists(hwmon_path.Append(kDeviceDir))) { |
| 176 base::FileEnumerator enumerator(hwmon_device_dir, false, | 176 hwmon_path = hwmon_path.Append(kDeviceDir); |
| 177 base::FileEnumerator::FILES, | 177 } |
| 178 kCPUTempFilePattern); | 178 base::FileEnumerator enumerator( |
| 179 hwmon_path, false, base::FileEnumerator::FILES, kCPUTempFilePattern); | |
| 179 for (base::FilePath temperature_path = enumerator.Next(); | 180 for (base::FilePath temperature_path = enumerator.Next(); |
| 180 !temperature_path.empty(); temperature_path = enumerator.Next()) { | 181 !temperature_path.empty(); temperature_path = enumerator.Next()) { |
| 181 // Get appropriate temp*_label file. | 182 // Get appropriate temp*_label file. |
| 182 std::string label_path = temperature_path.MaybeAsASCII(); | 183 std::string label_path = temperature_path.MaybeAsASCII(); |
| 183 if (label_path.empty()) { | 184 if (label_path.empty()) { |
| 184 LOG(WARNING) << "Unable to parse a path to temp*_input file as ASCII"; | 185 LOG(WARNING) << "Unable to parse a path to temp*_input file as ASCII"; |
| 185 continue; | 186 continue; |
| 186 } | 187 } |
| 187 base::ReplaceSubstringsAfterOffset(&label_path, 0, "input", "label"); | 188 base::ReplaceSubstringsAfterOffset(&label_path, 0, "input", "label"); |
| 189 base::FilePath name_path = hwmon_path.Append("name"); | |
| 188 | 190 |
| 189 // Read label. | 191 // Get the label describing this temperature. Use temp*_label |
| 192 // if present, fall back on name file or blank. | |
| 190 std::string label; | 193 std::string label; |
| 191 if (!base::PathExists(base::FilePath(label_path)) || | 194 if (base::PathExists(base::FilePath(label_path))) { |
| 192 !base::ReadFileToString(base::FilePath(label_path), &label)) { | 195 base::ReadFileToString(base::FilePath(label_path), &label); |
|
Andrew T Wilson (Slow)
2016/09/06 18:10:45
I'm concerned that if ReadFileToString() returns a
Jay Lee
2016/09/14 15:24:54
As far as I can see at:
https://chromium.googleso
| |
| 196 } else if (base::PathExists(base::FilePath(name_path))) { | |
| 197 base::ReadFileToString(name_path, &label); | |
| 198 } else { | |
| 193 label = std::string(); | 199 label = std::string(); |
| 194 } | 200 } |
| 195 | 201 |
| 196 // Read temperature in millidegree Celsius. | 202 // Read temperature in millidegree Celsius. |
| 197 std::string temperature_string; | 203 std::string temperature_string; |
| 198 int32_t temperature = 0; | 204 int32_t temperature = 0; |
| 199 if (base::ReadFileToString(temperature_path, &temperature_string) && | 205 if (base::ReadFileToString(temperature_path, &temperature_string) && |
| 200 sscanf(temperature_string.c_str(), "%d", &temperature) == 1) { | 206 sscanf(temperature_string.c_str(), "%d", &temperature) == 1) { |
| 201 // CPU temp in millidegree Celsius to Celsius | 207 // CPU temp in millidegree Celsius to Celsius |
| 202 temperature /= 1000; | 208 temperature /= 1000; |
| (...skipping 851 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1054 ScheduleGeolocationUpdateRequest(); | 1060 ScheduleGeolocationUpdateRequest(); |
| 1055 } | 1061 } |
| 1056 | 1062 |
| 1057 void DeviceStatusCollector::ReceiveVolumeInfo( | 1063 void DeviceStatusCollector::ReceiveVolumeInfo( |
| 1058 const std::vector<em::VolumeInfo>& info) { | 1064 const std::vector<em::VolumeInfo>& info) { |
| 1059 if (report_hardware_status_) | 1065 if (report_hardware_status_) |
| 1060 volume_info_ = info; | 1066 volume_info_ = info; |
| 1061 } | 1067 } |
| 1062 | 1068 |
| 1063 } // namespace policy | 1069 } // namespace policy |
| OLD | NEW |