dart-sdk/runtime/vm/cpuinfo.h
Ben Konyi 07852532e3 [ VM ] Additional cleanup in Dart_Initialize and Dart_Cleanup
Change-Id: I6dc02b3d9de16cc176eb97613bc0c7f0bb9b16eb
Reviewed-on: https://dart-review.googlesource.com/77013
Commit-Queue: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Auto-Submit: Ben Konyi <bkonyi@google.com>
2018-09-28 23:18:59 +00:00

77 lines
2 KiB
C++

// 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 RUNTIME_VM_CPUINFO_H_
#define RUNTIME_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,
kCpuInfoArchitecture = 4,
kCpuInfoMax = 5,
};
// 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 Init();
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);
// Returns true if the cpuinfo field [field] exists and is non-empty.
static bool HasField(const char* field);
// Returns the field describing the CPU model. Caller is responsible for
// freeing the result.
static const char* GetCpuModel() {
if (HasField(FieldName(kCpuInfoHardware))) {
return ExtractField(kCpuInfoHardware);
} else {
return strdup("Unknown");
}
}
private:
// Returns the field. Caller is responsible for freeing the result.
static const char* ExtractField(CpuInfoIndices idx);
// The method to use to acquire info about the CPU.
static CpuInfoMethod method_;
// Cpuinfo field names.
static const char* fields_[kCpuInfoMax];
};
} // namespace dart
#endif // RUNTIME_VM_CPUINFO_H_