Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
dart-lang
sdk
runtime
vm
proccpuinfo.cc
Go to the documentation of this 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
3
// BSD-style license that can be found in the LICENSE file.
4
5
#include "
vm/globals.h
"
6
#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_ANDROID)
7
8
#include "
vm/proccpuinfo.h
"
9
10
#include <ctype.h>
// NOLINT
11
#include <string.h>
// NOLINT
12
13
#include "
platform/assert.h
"
14
15
namespace
dart
{
16
17
char
* ProcCpuInfo::data_ =
nullptr
;
18
intptr_t ProcCpuInfo::datalen_ = 0;
19
20
void
ProcCpuInfo::Init() {
21
// Get the size of the cpuinfo file by reading it until the end. This is
22
// required because files under /proc do not always return a valid size
23
// when using fseek(0, SEEK_END) + ftell(). Nor can they be mmap()-ed.
24
static
const
char
PATHNAME[] =
"/proc/cpuinfo"
;
25
FILE*
fp
= fopen(PATHNAME,
"r"
);
26
if
(
fp
!=
nullptr
) {
27
for
(;;) {
28
char
buffer
[256];
29
size_t
n = fread(
buffer
, 1,
sizeof
(
buffer
),
fp
);
30
if
(n == 0) {
31
break
;
32
}
33
datalen_ += n;
34
}
35
fclose(
fp
);
36
}
37
38
// Read the contents of the cpuinfo file.
39
data_ =
reinterpret_cast<
char
*
>
(
malloc
(datalen_ + 1));
40
fp
= fopen(PATHNAME,
"r"
);
41
if
(
fp
!=
nullptr
) {
42
for
(intptr_t
offset
= 0;
offset
< datalen_;) {
43
size_t
n = fread(data_ +
offset
, 1, datalen_ -
offset
,
fp
);
44
if
(n == 0) {
45
break
;
46
}
47
offset
+= n;
48
}
49
fclose(
fp
);
50
}
51
52
// Zero-terminate the data.
53
data_[datalen_] =
'\0'
;
54
}
55
56
void
ProcCpuInfo::Cleanup() {
57
ASSERT
(data_);
58
free(data_);
59
data_ =
nullptr
;
60
}
61
62
char
* ProcCpuInfo::FieldStart(
const
char
* field) {
63
// Look for first field occurrence, and ensure it starts the line.
64
size_t
fieldlen = strlen(field);
65
char
*
p
= data_;
66
for
(;;) {
67
p
= strstr(p, field);
68
if
(p ==
nullptr
) {
69
return
nullptr
;
70
}
71
if
(p == data_ || p[-1] ==
'\n'
) {
72
break
;
73
}
74
p
+= fieldlen;
75
}
76
77
// Skip to the first colon followed by a space.
78
p
= strchr(p + fieldlen,
':'
);
79
if
(p ==
nullptr
|| (isspace(p[1]) == 0)) {
80
return
nullptr
;
81
}
82
p
+= 2;
83
84
return
p
;
85
}
86
87
bool
ProcCpuInfo::FieldContains(
const
char
* field,
const
char
* search_string) {
88
ASSERT
(data_ !=
nullptr
);
89
ASSERT
(search_string !=
nullptr
);
90
91
char
*
p
= FieldStart(field);
92
if
(p ==
nullptr
) {
93
return
false
;
94
}
95
96
// Find the end of the line.
97
char
* q = strchr(p,
'\n'
);
98
if
(q ==
nullptr
) {
99
q = data_ + datalen_;
100
}
101
102
char
saved_end = *q;
103
*q =
'\0'
;
104
bool
ret = (strcasestr(p, search_string) !=
nullptr
);
105
*q = saved_end;
106
107
return
ret;
108
}
109
110
// Extract the content of a the first occurrence of a given field in
111
// the content of the cpuinfo file and return it as a heap-allocated
112
// string that must be freed by the caller using free.
113
// Return nullptr if not found.
114
const
char
* ProcCpuInfo::ExtractField(
const
char
* field) {
115
ASSERT
(field !=
nullptr
);
116
ASSERT
(data_ !=
nullptr
);
117
118
char
*
p
= FieldStart(field);
119
if
(p ==
nullptr
) {
120
return
nullptr
;
121
}
122
123
// Find the end of the line.
124
char
* q = strchr(p,
'\n'
);
125
if
(q ==
nullptr
) {
126
q = data_ + datalen_;
127
}
128
129
intptr_t
len
= q -
p
;
130
char
*
result
=
reinterpret_cast<
char
*
>
(
malloc
(len + 1));
131
// Copy the line into result, leaving enough room for a null-terminator.
132
char
saved_end = *q;
133
*q =
'\0'
;
134
strncpy(
result
, p, len);
135
result
[
len
] =
'\0'
;
136
*q = saved_end;
137
138
return
result
;
139
}
140
141
bool
ProcCpuInfo::HasField(
const
char
* field) {
142
ASSERT
(field !=
nullptr
);
143
ASSERT
(data_ !=
nullptr
);
144
return
(FieldStart(field) !=
nullptr
);
145
}
146
147
}
// namespace dart
148
149
#endif
// defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_ANDROID)
assert.h
ASSERT
#define ASSERT(E)
Definition
entrypoints_verification_test.cc:25
buffer
static const uint8_t buffer[]
Definition
fl_pixel_buffer_texture_test.cc:44
result
GAsyncResult * result
Definition
fl_text_input_plugin.cc:106
dart_profiler_symbols.p
p
Definition
dart_profiler_symbols.py:55
dart
Definition
dart_vm.cc:33
dart::malloc
void * malloc(size_t size)
Definition
allocation.cc:19
dart::fp
const uint32_t fp
Definition
method_recognizer.cc:136
gn.find_headers.len
len
Definition
find_headers.py:30
proccpuinfo.h
offset
Point offset
Definition
stroke_path_geometry.cc:256
globals.h
Generated on Fri Apr 26 2024 06:15:16 for Flutter Engine by
1.9.8