1// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5#include "vm/globals.h"
6#if defined(HOST_OS_FUCHSIA)
7
8#include "vm/cpuinfo.h"
9
10#include "platform/assert.h"
11#include "vm/cpuid.h"
12
13namespace dart {
14
15CpuInfoMethod CpuInfo::method_ = kCpuInfoDefault;
16const char* CpuInfo::fields_[kCpuInfoMax] = {0};
17
18void CpuInfo::Init() {
19// TODO(zra): Add support for HOST_ARCH_ARM64
20#if defined(HOST_ARCH_IA32) || defined(HOST_ARCH_X64)
21 method_ = kCpuInfoCpuId;
22
23 // Initialize the CpuId information.
24 CpuId::Init();
25
26 fields_[kCpuInfoProcessor] = "Processor";
27 fields_[kCpuInfoModel] = "Hardware";
28 fields_[kCpuInfoHardware] = "Hardware";
29 fields_[kCpuInfoFeatures] = "Features";
30 fields_[kCpuInfoArchitecture] = "CPU architecture";
31#endif
32}
33
34void CpuInfo::Cleanup() {
35 if (method_ == kCpuInfoCpuId) {
36 CpuId::Cleanup();
37 }
38}
39
40bool CpuInfo::FieldContains(CpuInfoIndices idx, const char* search_string) {
41 if (method_ == kCpuInfoCpuId) {
42 return strstr(CpuId::field(idx), search_string);
43 } else {
44 return false;
45 }
46}
47
48const char* CpuInfo::ExtractField(CpuInfoIndices idx) {
49 if (method_ == kCpuInfoCpuId) {
50 return CpuId::field(idx);
51 } else {
52 return strdup("");
53 }
54}
55
56bool CpuInfo::HasField(const char* field) {
57 if (method_ == kCpuInfoCpuId) {
58 return (strcmp(field, fields_[kCpuInfoProcessor]) == 0) ||
59 (strcmp(field, fields_[kCpuInfoModel]) == 0) ||
60 (strcmp(field, fields_[kCpuInfoHardware]) == 0) ||
61 (strcmp(field, fields_[kCpuInfoFeatures]) == 0);
62 } else {
63 return false;
64 }
65}
66
67} // namespace dart
68
69#endif // defined(HOST_OS_FUCHSIA)
70