timers: fix binding fast call signatures

PR-URL: https://github.com/nodejs/node/pull/59600
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
Renegade334 2025-07-13 21:38:50 +01:00 committed by Node.js GitHub Bot
parent 4f4d5b348c
commit 8ca5fec567
3 changed files with 37 additions and 17 deletions

View File

@ -53,9 +53,8 @@ void BindingData::SlowScheduleTimer(const FunctionCallbackInfo<Value>& args) {
}
}
void BindingData::FastScheduleTimer(Local<Object> unused,
Local<Object> receiver,
int64_t duration) {
void BindingData::FastScheduleTimer(Local<Object> receiver, int64_t duration) {
TRACK_V8_FAST_API_CALL("timers.scheduleTimer");
ScheduleTimerImpl(FromJSObject<BindingData>(receiver), duration);
}
@ -69,9 +68,8 @@ void BindingData::SlowToggleTimerRef(
args[0]->IsTrue());
}
void BindingData::FastToggleTimerRef(Local<Object> unused,
Local<Object> receiver,
bool ref) {
void BindingData::FastToggleTimerRef(Local<Object> receiver, bool ref) {
TRACK_V8_FAST_API_CALL("timers.toggleTimerRef");
ToggleTimerRefImpl(FromJSObject<BindingData>(receiver), ref);
}
@ -85,9 +83,8 @@ void BindingData::SlowToggleImmediateRef(
args[0]->IsTrue());
}
void BindingData::FastToggleImmediateRef(Local<Object> unused,
Local<Object> receiver,
bool ref) {
void BindingData::FastToggleImmediateRef(Local<Object> receiver, bool ref) {
TRACK_V8_FAST_API_CALL("timers.toggleImmediateRef");
ToggleImmediateRefImpl(FromJSObject<BindingData>(receiver), ref);
}

View File

@ -31,23 +31,18 @@ class BindingData : public SnapshotableObject {
static void SlowScheduleTimer(
const v8::FunctionCallbackInfo<v8::Value>& args);
static void FastScheduleTimer(v8::Local<v8::Object> unused,
v8::Local<v8::Object> receiver,
static void FastScheduleTimer(v8::Local<v8::Object> receiver,
int64_t duration);
static void ScheduleTimerImpl(BindingData* data, int64_t duration);
static void SlowToggleTimerRef(
const v8::FunctionCallbackInfo<v8::Value>& args);
static void FastToggleTimerRef(v8::Local<v8::Object> unused,
v8::Local<v8::Object> receiver,
bool ref);
static void FastToggleTimerRef(v8::Local<v8::Object> receiver, bool ref);
static void ToggleTimerRefImpl(BindingData* data, bool ref);
static void SlowToggleImmediateRef(
const v8::FunctionCallbackInfo<v8::Value>& args);
static void FastToggleImmediateRef(v8::Local<v8::Object> unused,
v8::Local<v8::Object> receiver,
bool ref);
static void FastToggleImmediateRef(v8::Local<v8::Object> receiver, bool ref);
static void ToggleImmediateRefImpl(BindingData* data, bool ref);
static void CreatePerIsolateProperties(IsolateData* isolate_data,

View File

@ -0,0 +1,28 @@
// Flags: --allow-natives-syntax --expose-internals --no-warnings
'use strict';
const common = require('../common');
const assert = require('assert');
const { internalBinding } = require('internal/test/binding');
const binding = internalBinding('timers');
function testFastCalls() {
binding.scheduleTimer(1);
binding.toggleTimerRef(true);
binding.toggleTimerRef(false);
binding.toggleImmediateRef(true);
binding.toggleImmediateRef(false);
}
eval('%PrepareFunctionForOptimization(testFastCalls)');
testFastCalls();
eval('%OptimizeFunctionOnNextCall(testFastCalls)');
testFastCalls();
if (common.isDebug) {
const { getV8FastApiCallCount } = internalBinding('debug');
assert.strictEqual(getV8FastApiCallCount('timers.scheduleTimer'), 1);
assert.strictEqual(getV8FastApiCallCount('timers.toggleTimerRef'), 2);
assert.strictEqual(getV8FastApiCallCount('timers.toggleImmediateRef'), 2);
}