OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/globals.h" | 5 #include "vm/globals.h" |
6 #if defined(TARGET_OS_MACOS) | 6 #if defined(TARGET_OS_MACOS) |
7 | 7 |
8 #include "vm/cpuinfo.h" | 8 #include "vm/cpuinfo.h" |
9 | 9 |
10 #include <errno.h> // NOLINT | 10 #include <errno.h> // NOLINT |
(...skipping 13 matching lines...) Expand all Loading... |
24 fields_[kCpuInfoProcessor] = "machdep.cpu.vendor"; | 24 fields_[kCpuInfoProcessor] = "machdep.cpu.vendor"; |
25 fields_[kCpuInfoModel] = "machdep.cpu.brand_string"; | 25 fields_[kCpuInfoModel] = "machdep.cpu.brand_string"; |
26 fields_[kCpuInfoHardware] = "machdep.cpu.brand_string"; | 26 fields_[kCpuInfoHardware] = "machdep.cpu.brand_string"; |
27 fields_[kCpuInfoFeatures] = "machdep.cpu.features"; | 27 fields_[kCpuInfoFeatures] = "machdep.cpu.features"; |
28 } | 28 } |
29 | 29 |
30 | 30 |
31 void CpuInfo::Cleanup() {} | 31 void CpuInfo::Cleanup() {} |
32 | 32 |
33 | 33 |
34 bool CpuInfo::FieldContainsByString(const char* field, | 34 bool CpuInfo::FieldContains(CpuInfoIndices idx, const char* search_string) { |
35 const char* search_string) { | |
36 ASSERT(method_ != kCpuInfoDefault); | 35 ASSERT(method_ != kCpuInfoDefault); |
37 ASSERT(search_string != NULL); | 36 ASSERT(search_string != NULL); |
| 37 const char* field = FieldName[idx]; |
38 char dest[1024]; | 38 char dest[1024]; |
39 size_t dest_len = 1024; | 39 size_t dest_len = 1024; |
40 | 40 |
41 ASSERT(HasField(field)); | 41 ASSERT(HasField(field)); |
42 if (sysctlbyname(field, dest, &dest_len, NULL, 0) != 0) { | 42 if (sysctlbyname(field, dest, &dest_len, NULL, 0) != 0) { |
43 UNREACHABLE(); | 43 UNREACHABLE(); |
44 return false; | 44 return false; |
45 } | 45 } |
46 | 46 |
47 return (strcasestr(dest, search_string) != NULL); | 47 return (strcasestr(dest, search_string) != NULL); |
48 } | 48 } |
49 | 49 |
50 | 50 |
51 bool CpuInfo::FieldContains(CpuInfoIndices idx, const char* search_string) { | 51 const char* CpuInfo::ExtractField(CpuInfoIndices idx) { |
52 ASSERT(method_ != kCpuInfoDefault); | 52 ASSERT(method_ != kCpuInfoDefault); |
53 return FieldContainsByString(FieldName(idx), search_string); | 53 const char* field = FieldName(idx); |
54 } | |
55 | |
56 | |
57 const char* CpuInfo::ExtractFieldByString(const char* field) { | |
58 ASSERT(method_ != kCpuInfoDefault); | |
59 ASSERT(field != NULL); | 54 ASSERT(field != NULL); |
60 size_t result_len; | 55 size_t result_len; |
61 | 56 |
62 ASSERT(HasField(field)); | 57 ASSERT(HasField(field)); |
63 if (sysctlbyname(field, NULL, &result_len, NULL, 0) != 0) { | 58 if (sysctlbyname(field, NULL, &result_len, NULL, 0) != 0) { |
64 UNREACHABLE(); | 59 UNREACHABLE(); |
65 return 0; | 60 return 0; |
66 } | 61 } |
67 | 62 |
68 char* result = new char[result_len]; | 63 char* result = reinterpret_cast<char*>(malloc(result_len)); |
69 if (sysctlbyname(field, result, &result_len, NULL, 0) != 0) { | 64 if (sysctlbyname(field, result, &result_len, NULL, 0) != 0) { |
70 UNREACHABLE(); | 65 UNREACHABLE(); |
71 return 0; | 66 return 0; |
72 } | 67 } |
73 | 68 |
74 return result; | 69 return result; |
75 } | 70 } |
76 | 71 |
77 | 72 |
78 const char* CpuInfo::ExtractField(CpuInfoIndices idx) { | |
79 ASSERT(method_ != kCpuInfoDefault); | |
80 return ExtractFieldByString(FieldName(idx)); | |
81 } | |
82 | |
83 | |
84 bool CpuInfo::HasField(const char* field) { | 73 bool CpuInfo::HasField(const char* field) { |
85 ASSERT(method_ != kCpuInfoDefault); | 74 ASSERT(method_ != kCpuInfoDefault); |
86 ASSERT(field != NULL); | 75 ASSERT(field != NULL); |
87 int ret = sysctlbyname(field, NULL, NULL, NULL, 0); | 76 int ret = sysctlbyname(field, NULL, NULL, NULL, 0); |
88 return (ret == 0); | 77 return (ret == 0); |
89 } | 78 } |
90 | 79 |
91 } // namespace dart | 80 } // namespace dart |
92 | 81 |
93 #endif // defined(TARGET_OS_MACOS) | 82 #endif // defined(TARGET_OS_MACOS) |
OLD | NEW |