Skip to content

Commit 619b5e7

Browse files
gireeshpunathilrvagg
authored andcommitted
src: simplify loop arithmetic in GetCPUInfo
Cache the repeated operations and reuse; potentially generating efficient code in some platforms, and improving readability. PR-URL: #26183 Reviewed-By: Richard Lau <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]> Reviewed-By: Anatoli Papirovski <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent ddd71f4 commit 619b5e7

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

lib/os.js

+9-8
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,17 @@ function cpus() {
9292
// [] is a bugfix for a regression introduced in 51cea61
9393
const data = getCPUs() || [];
9494
const result = [];
95-
for (var i = 0; i < data.length; i += 7) {
95+
let i = 0;
96+
while (i < data.length) {
9697
result.push({
97-
model: data[i],
98-
speed: data[i + 1],
98+
model: data[i++],
99+
speed: data[i++],
99100
times: {
100-
user: data[i + 2],
101-
nice: data[i + 3],
102-
sys: data[i + 4],
103-
idle: data[i + 5],
104-
irq: data[i + 6]
101+
user: data[i++],
102+
nice: data[i++],
103+
sys: data[i++],
104+
idle: data[i++],
105+
irq: data[i++]
105106
}
106107
});
107108
}

src/node_os.cc

+8-8
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,15 @@ static void GetCPUInfo(const FunctionCallbackInfo<Value>& args) {
126126
// The array is in the format
127127
// [model, speed, (5 entries of cpu_times), model2, speed2, ...]
128128
std::vector<Local<Value>> result(count * 7);
129-
for (int i = 0; i < count; i++) {
129+
for (int i = 0, j = 0; i < count; i++) {
130130
uv_cpu_info_t* ci = cpu_infos + i;
131-
result[i * 7] = OneByteString(isolate, ci->model);
132-
result[i * 7 + 1] = Number::New(isolate, ci->speed);
133-
result[i * 7 + 2] = Number::New(isolate, ci->cpu_times.user);
134-
result[i * 7 + 3] = Number::New(isolate, ci->cpu_times.nice);
135-
result[i * 7 + 4] = Number::New(isolate, ci->cpu_times.sys);
136-
result[i * 7 + 5] = Number::New(isolate, ci->cpu_times.idle);
137-
result[i * 7 + 6] = Number::New(isolate, ci->cpu_times.irq);
131+
result[j++] = OneByteString(isolate, ci->model);
132+
result[j++] = Number::New(isolate, ci->speed);
133+
result[j++] = Number::New(isolate, ci->cpu_times.user);
134+
result[j++] = Number::New(isolate, ci->cpu_times.nice);
135+
result[j++] = Number::New(isolate, ci->cpu_times.sys);
136+
result[j++] = Number::New(isolate, ci->cpu_times.idle);
137+
result[j++] = Number::New(isolate, ci->cpu_times.irq);
138138
}
139139

140140
uv_free_cpu_info(cpu_infos, count);

0 commit comments

Comments
 (0)