Skip to content

Commit

Permalink
os: cache homedir, remove getCheckedFunction
Browse files Browse the repository at this point in the history
  • Loading branch information
Uzlopak committed Oct 4, 2023
1 parent 95b8f5d commit 344e221
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 15 deletions.
31 changes: 31 additions & 0 deletions benchmark/os/homedir.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
'use strict';

const common = require('../common.js');
const homedir = require('os').homedir;
const assert = require('assert');

const bench = common.createBenchmark(main, {
n: [1e6],
});

function main({ n }) {
// Warm up.
const length = 1024;
const array = [];
for (let i = 0; i < length; ++i) {
array.push(homedir());
}

bench.start();
for (let i = 0; i < n; ++i) {
const index = i % length;
array[index] = homedir();
}
bench.end(n);

// Verify the entries to prevent dead code elimination from making
// the benchmark invalid.
for (let i = 0; i < length; ++i) {
assert.strictEqual(typeof array[i], 'string');
}
}
31 changes: 31 additions & 0 deletions benchmark/os/hostname.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
'use strict';

const common = require('../common.js');
const hostname = require('os').hostname;
const assert = require('assert');

const bench = common.createBenchmark(main, {
n: [1e6],
});

function main({ n }) {
// Warm up.
const length = 1024;
const array = [];
for (let i = 0; i < length; ++i) {
array.push(hostname());
}

bench.start();
for (let i = 0; i < n; ++i) {
const index = i % length;
array[index] = hostname();
}
bench.end(n);

// Verify the entries to prevent dead code elimination from making
// the benchmark invalid.
for (let i = 0; i < length; ++i) {
assert.strictEqual(typeof array[i], 'string');
}
}
31 changes: 31 additions & 0 deletions benchmark/os/uptime.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
'use strict';

const common = require('../common.js');
const uptime = require('os').uptime;
const assert = require('assert');

const bench = common.createBenchmark(main, {
n: [1e5],
});

function main({ n }) {
// Warm up.
const length = 1024;
const array = [];
for (let i = 0; i < length; ++i) {
array.push(uptime());
}

bench.start();
for (let i = 0; i < n; ++i) {
const index = i % length;
array[index] = uptime();
}
bench.end(n);

// Verify the entries to prevent dead code elimination from making
// the benchmark invalid.
for (let i = 0; i < length; ++i) {
assert.strictEqual(typeof array[i], 'number');
}
}
50 changes: 35 additions & 15 deletions lib/os.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,28 +60,48 @@ const {
setPriority: _setPriority,
} = internalBinding('os');

function getCheckedFunction(fn) {
return hideStackFrames(function checkError(...args) {
const ctx = {};
const ret = fn(...args, ctx);
if (ret === undefined) {
throw new ERR_SYSTEM_ERROR(ctx);
}
return ret;
});
}

const {
0: type,
1: version,
2: release,
3: machine,
} = _getOSInformation();

const getHomeDirectory = getCheckedFunction(_getHomeDirectory);
const getHostname = getCheckedFunction(_getHostname);
const getInterfaceAddresses = getCheckedFunction(_getInterfaceAddresses);
const getUptime = getCheckedFunction(_getUptime);
const getHomeDirectory = hideStackFrames(() => {
const ctx = {};
const ret = _getHomeDirectory(ctx);
if (ret === undefined) {
throw new ERR_SYSTEM_ERROR(ctx);
}
return ret;
});

const getHostname = hideStackFrames(() => {
const ctx = {};
const ret = _getHostname(ctx);
if (ret === undefined) {
throw new ERR_SYSTEM_ERROR(ctx);
}
return ret;
});

const getInterfaceAddresses = hideStackFrames(() => {
const ctx = {};
const ret = _getInterfaceAddresses(ctx);
if (ret === undefined) {
throw new ERR_SYSTEM_ERROR(ctx);
}
return ret;
});

const getUptime = hideStackFrames(() => {
const ctx = {};
const ret = _getUptime(ctx);
if (ret === undefined) {
throw new ERR_SYSTEM_ERROR(ctx);
}
return ret;
});

/**
* @returns {string}
Expand Down

0 comments on commit 344e221

Please sign in to comment.