Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/test-shared.yml
Original file line number Diff line number Diff line change
Expand Up @@ -141,20 +141,23 @@ jobs:
include:
- runner: ubuntu-24.04
system: x86_64-linux
# Exercise the trace-event code against a perfetto-enabled V8.
perfetto: true
# built separately in build-aarch64-linux-v8
# - runner: ubuntu-24.04-arm
# system: aarch64-linux
- runner: macos-15-intel
system: x86_64-darwin
- runner: macos-latest
system: aarch64-darwin
name: '${{ matrix.system }}: with shared libraries'
name: '${{ matrix.system }}: with shared libraries${{ matrix.perfetto && '' and perfetto'' || '''' }}'
uses: ./.github/workflows/build-shared.yml
with:
runner: ${{ matrix.runner }}
with-sccache: ${{ github.base_ref == 'main' || github.ref_name == 'main' }}
extra-nix-flags: |
--arg useSeparateDerivationForV8 true \
${{ matrix.perfetto && '--arg withPerfetto true \' || '\' }}
${{ endsWith(matrix.system, '-darwin') && '--arg withAmaro false --arg withLief false --arg withSQLite false --arg withFFI false --arg extraConfigFlags ''["--without-inspector" "--without-node-options"]'' \' || '\' }}
secrets:
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
Expand Down
4 changes: 2 additions & 2 deletions benchmark/misc/trace.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ const bench = common.createBenchmark(main, {
});

const {
TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN: kBeforeEvent,
TRACE_EVENT_PHASE_BEGIN: kBeginEvent,
} = common.binding('constants').trace;

function doTrace(n, trace) {
bench.start();
for (let i = 0; i < n; i++) {
trace(kBeforeEvent, 'foo', 'test', 0, 'test');
trace(kBeginEvent, 'foo', 'test', 0, 'test');
}
bench.end(n);
}
Expand Down
4 changes: 3 additions & 1 deletion shell.nix
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
withFFI ? true,
withSSL ? true,
withTemporal ? false,
withPerfetto ? false,
sharedLibDeps ? (
import ./tools/nix/sharedLibDeps.nix {
inherit
Expand Down Expand Up @@ -67,7 +68,8 @@ let
)
"--v8-${if withTemporal then "enable" else "disable"}-temporal-support"
]
++ pkgs.lib.optional (withTemporal && useSharedTemporal) "--shared-temporal_capi";
++ pkgs.lib.optional (withTemporal && useSharedTemporal) "--shared-temporal_capi"
++ pkgs.lib.optional withPerfetto "--with-perfetto";
in
pkgs.mkShell {
inherit nativeBuildInputs;
Expand Down
15 changes: 15 additions & 0 deletions test/common/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ const hasCrypto = Boolean(process.versions.openssl) &&
const hasInspector = Boolean(process.features.inspector);
const hasSQLite = Boolean(process.versions.sqlite);
const hasFFI = Boolean(process.config.variables.node_use_ffi);
const hasPerfetto = Boolean(process.config.variables.v8_use_perfetto);

const hasDtls = hasCrypto && !!process.features.dtls;
const hasQuic = hasCrypto && !!process.features.quic;
Expand Down Expand Up @@ -769,6 +770,18 @@ function skipIfFFIMissing() {
}
}

function skipIfPerfettoEnabled() {
if (hasPerfetto) {
skip('Perfetto is enabled');
}
}

function skipIfPerfettoDisabled() {
if (!hasPerfetto) {
skip('Perfetto is disabled');
}
}

function getArrayBufferViews(buf) {
const { buffer, byteOffset, byteLength } = buf;

Expand Down Expand Up @@ -1047,6 +1060,8 @@ const common = {
skipIfInspectorDisabled,
skipIfFFIMissing,
skipIfSQLiteMissing,
skipIfPerfettoEnabled,
skipIfPerfettoDisabled,
spawnPromisified,
sleepSync,
usesSharedLibrary,
Expand Down
1 change: 1 addition & 0 deletions test/parallel/test-inspector-tracing-domain.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
const common = require('../common');

common.skipIfInspectorDisabled();
common.skipIfPerfettoEnabled();

const { isMainThread } = require('worker_threads');

Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-all.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ const assert = require('assert');
const cp = require('child_process');
const fs = require('fs');

common.skipIfPerfettoEnabled();

const CODE =
'setTimeout(() => { for (let i = 0; i < 100000; i++) { "test" + i } }, 1)';

Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
const common = require('../common');
const { isMainThread } = require('worker_threads');

common.skipIfPerfettoEnabled();

if (!isMainThread) {
// https://github.com/nodejs/node/issues/22767
common.skip('This test only works on a main thread');
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-async-hooks-dynamic.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ try {
common.skip('missing trace events');
}

common.skipIfPerfettoEnabled();

const assert = require('assert');
const cp = require('child_process');
const fs = require('fs');
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-async-hooks-worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ try {
common.skip('missing trace events');
}

common.skipIfPerfettoEnabled();

const assert = require('assert');
const cp = require('child_process');
const fs = require('fs');
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-async-hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const util = require('util');

common.skipIfPerfettoEnabled();

const CODE =
'setTimeout(() => { for (let i = 0; i < 100000; i++) { "test" + i } }, 1)';

Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-binding.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ const assert = require('assert');
const cp = require('child_process');
const fs = require('fs');

common.skipIfPerfettoEnabled();

const CODE = `
const { internalBinding } = require('internal/test/binding');
const { trace } = internalBinding('trace_events');
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-bootstrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const tmpdir = require('../common/tmpdir');

common.skipIfPerfettoEnabled();

const names = [
'environment',
'nodeStart',
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-console.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const tmpdir = require('../common/tmpdir');

common.skipIfPerfettoEnabled();

// Tests that node.console trace events for counters and time methods are
// emitted as expected.

Expand Down
1 change: 1 addition & 0 deletions test/parallel/test-trace-events-dynamic-enable.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
const common = require('../common');

common.skipIfInspectorDisabled();
common.skipIfPerfettoEnabled();

const { isMainThread } = require('worker_threads');

Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-environment.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ const cp = require('child_process');
const fs = require('fs');
const tmpdir = require('../common/tmpdir');

common.skipIfPerfettoEnabled();

// This tests the emission of node.environment trace events

const names = new Set([
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-file-pattern.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const assert = require('assert');
const cp = require('child_process');
const fs = require('fs');

common.skipIfPerfettoEnabled();

tmpdir.refresh();

const CODE =
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-fs-async.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const util = require('util');

common.skipIfPerfettoEnabled();

const tests = { __proto__: null };

let gid = 1;
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-fs-sync.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const util = require('util');

common.skipIfPerfettoEnabled();

const tests = { __proto__: null };

let gid = 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ try {
common.skip('missing trace events');
}

common.skipIfPerfettoEnabled();

const { createTracing, getEnabledCategories } = require('trace_events');
const assert = require('assert');

Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-http.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const tmpdir = require('../common/tmpdir');

common.skipIfPerfettoEnabled();

const CODE = `
const http = require('http');
const server = http.createServer((req, res) => {
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-metadata.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ const assert = require('assert');
const cp = require('child_process');
const fs = require('fs');

common.skipIfPerfettoEnabled();

const CODE =
'setTimeout(() => { for (let i = 0; i < 100000; i++) { "test" + i } }, 1);' +
'process.title = "foo"';
Expand Down
1 change: 1 addition & 0 deletions test/parallel/test-trace-events-net-abstract-socket.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const fs = require('fs');
const tmpdir = require('../common/tmpdir');

if (!common.isLinux) common.skip();
common.skipIfPerfettoEnabled();

const CODE = `
const net = require('net');
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-net.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const tmpdir = require('../common/tmpdir');

common.skipIfPerfettoEnabled();

const CODE = `
const net = require('net');
const socket = net.connect('${common.PIPE}');
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-none.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ const assert = require('assert');
const cp = require('child_process');
const fs = require('fs');

common.skipIfPerfettoEnabled();

const CODE =
'setTimeout(() => { for (let i = 0; i < 100000; i++) { "test" + i } }, 1)';

Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-process-exit.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ const assert = require('assert');
const cp = require('child_process');
const fs = require('fs');

common.skipIfPerfettoEnabled();

const tmpdir = require('../common/tmpdir');
tmpdir.refresh();
const FILE_NAME = tmpdir.resolve('node_trace.1.log');
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-promises.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const tmpdir = require('../common/tmpdir');

common.skipIfPerfettoEnabled();

if (process.argv[2] === 'child') {
const p = Promise.reject(1); // Handled later
Promise.reject(2); // Unhandled
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-threadpool.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ const fs = require('fs');
const tmpdir = require('../common/tmpdir');
const { scheduler } = require('timers/promises');

common.skipIfPerfettoEnabled();

if (!common.hasCrypto)
common.skip('missing crypto');

Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-v8.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ const assert = require('assert');
const cp = require('child_process');
const fs = require('fs');

common.skipIfPerfettoEnabled();

const CODE =
'setTimeout(() => { for (let i = 0; i < 100000; i++) { "test" + i } }, 1)';

Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-vm.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const tmpdir = require('../common/tmpdir');

common.skipIfPerfettoEnabled();

const names = [
'ContextifyScript::New',
'RunInContext',
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-worker-metadata-with-name.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const { isMainThread } = require('worker_threads');

common.skipIfPerfettoEnabled();

if (isMainThread) {
const CODE = 'const { Worker } = require(\'worker_threads\'); ' +
`new Worker(${JSON.stringify(__filename)}, { name: 'foo' })`;
Expand Down
2 changes: 2 additions & 0 deletions test/parallel/test-trace-events-worker-metadata.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const cp = require('child_process');
const fs = require('fs');
const { isMainThread } = require('worker_threads');

common.skipIfPerfettoEnabled();

if (isMainThread) {
const CODE = 'const { Worker } = require(\'worker_threads\'); ' +
`new Worker(${JSON.stringify(__filename)})`;
Expand Down
3 changes: 3 additions & 0 deletions tools/nix/v8.nix
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ let
../../tools/v8_gypfiles/toolchain.gypi
../../tools/v8_gypfiles/v8.gyp
]
++ lib.optionals (builtins.elem "--with-perfetto" configureFlags) [
../../deps/perfetto
]
++ lib.optionals (icu != null) [
../../tools/icu/icu_versions.json
../../tools/icu/icu-system.gyp
Expand Down
4 changes: 2 additions & 2 deletions tools/v8_gypfiles/v8.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -1740,10 +1740,10 @@
}],
['v8_use_perfetto==1', {
'sources!': [
'<!@pymod_do_main(GN-scraper "<(V8_ROOT)/BUILD.gn" "\\"v8_libplatform.*?v8_use_perfetto.*?sources -= ")',
'<!@pymod_do_main(GN-scraper "<(V8_ROOT)/BUILD.gn" "\\"v8_libplatform.*?v8_use_perfetto.*?sources \\-= ")',
],
'sources': [
'<!@pymod_do_main(GN-scraper "<(V8_ROOT)/BUILD.gn" "\\"v8_libplatform.*?v8_use_perfetto.*?sources += ")',
'<!@pymod_do_main(GN-scraper "<(V8_ROOT)/BUILD.gn" "\\"v8_libplatform.*?v8_use_perfetto.*?sources \\+= ")',
],
'dependencies': [
'<(perfetto_gyp_file):perfetto_sdk',
Expand Down
Loading