Index: runtime/vm/cpuinfo.h |
=================================================================== |
--- runtime/vm/cpuinfo.h (revision 0) |
+++ runtime/vm/cpuinfo.h (revision 0) |
@@ -0,0 +1,75 @@ |
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+#ifndef VM_CPUINFO_H_ |
+#define VM_CPUINFO_H_ |
+ |
+#include "platform/assert.h" |
+#include "vm/allocation.h" |
+ |
+namespace dart { |
+ |
+// Indices into cpuinfo field name arrays. |
+enum CpuInfoIndices { |
+ kCpuInfoProcessor = 0, |
+ kCpuInfoModel = 1, |
+ kCpuInfoHardware = 2, |
+ kCpuInfoFeatures = 3, |
+ kCpuInfoMax = 4, |
+}; |
+ |
+// For Intel architectures, the method to use to get CPU information. |
+enum CpuInfoMethod { |
+ // Use the cpuid instruction. |
+ kCpuInfoCpuId, |
+ |
+ // Use system calls. |
+ kCpuInfoSystem, |
+ |
+ // Use whatever the default is for a particular OS: |
+ // Linux, Windows -> CpuId, |
+ // Android, MacOS -> System. |
+ kCpuInfoDefault, |
+}; |
+ |
+class CpuInfo : public AllStatic { |
+ public: |
+ static void InitOnce(); |
+ static void Cleanup(); |
+ |
+ static const char* FieldName(CpuInfoIndices idx) { |
+ ASSERT((idx >= 0) && (idx < kCpuInfoMax)); |
+ return fields_[idx]; |
+ } |
+ |
+ // Returns true if the cpuinfo field contains the string. |
+ static bool FieldContains(CpuInfoIndices idx, const char* search_string); |
+ static bool FieldContainsByString( |
+ const char* field, const char* search_string); |
+ |
+ // Returns true if the cpuinfo field [field] exists and is non-empty. |
+ static bool HasField(const char* field); |
+ |
+ // Returns the field. Caller is responsible for freeing the result. |
+ static const char* ExtractField(CpuInfoIndices idx); |
+ static const char* ExtractFieldByString(const char* field); |
+ |
+ // Returns the field describing the CPU model. Caller is responsible for |
+ // freeing the result. |
+ static const char* GetCpuModel() { |
+ ASSERT(HasField(FieldName(kCpuInfoModel))); |
+ return ExtractField(kCpuInfoModel); |
+ } |
+ |
+ private: |
+ // The method to use to acquire info about the CPU. |
+ static CpuInfoMethod method_; |
+ |
+ // Cpuinfo field names. |
+ static const char* fields_[kCpuInfoMax]; |
+}; |
+ |
+} // namespace dart |
+ |
+#endif // VM_CPUINFO_H_ |