| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 065e8cd commit b407692
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,5 +1,7 @@ | |||
| 1 | 1 | #include "timers.h" | |
| 2 | + | ||
| 2 | 3 | #include "env-inl.h" | |
| 4 | + #include "node_debug.h" | ||
| 3 | 5 | #include "node_external_reference.h" | |
| 4 | 6 | #include "util-inl.h" | |
| 5 | 7 | #include "v8.h" | |
@@ -33,8 +35,8 @@ void BindingData::SlowGetLibuvNow(const FunctionCallbackInfo<Value>& args) { | |||
| 33 | 35 | args.GetReturnValue().Set(Number::New(args.GetIsolate(), now)); | |
| 34 | 36 | } | |
| 35 | 37 | ||
| 36 | - double BindingData::FastGetLibuvNow(Local<Object> unused, | ||
| 37 | - Local<Object> receiver) { | ||
| 38 | + double BindingData::FastGetLibuvNow(Local<Value> receiver) { | ||
| 39 | + TRACK_V8_FAST_API_CALL("timers.getLibuvNow"); | ||
| 38 | 40 | return GetLibuvNowImpl(FromJSObject<BindingData>(receiver)); | |
| 39 | 41 | } | |
| 40 | 42 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -26,8 +26,7 @@ class BindingData : public SnapshotableObject { | |||
| 26 | 26 | static void SetupTimers(const v8::FunctionCallbackInfo<v8::Value>& args); | |
| 27 | 27 | ||
| 28 | 28 | static void SlowGetLibuvNow(const v8::FunctionCallbackInfo<v8::Value>& args); | |
| 29 | - static double FastGetLibuvNow(v8::Local<v8::Object> unused, | ||
| 30 | - v8::Local<v8::Object> receiver); | ||
| 29 | + static double FastGetLibuvNow(v8::Local<v8::Value> receiver); | ||
| 31 | 30 | static double GetLibuvNowImpl(BindingData* data); | |
| 32 | 31 | ||
| 33 | 32 | static void SlowScheduleTimer( | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,11 +1,29 @@ | |||
| 1 | + // Flags: --expose-internals --no-warnings --allow-natives-syntax | ||
| 1 | 2 | 'use strict'; | |
| 2 | - // Flags: --expose-internals | ||
| 3 | 3 | ||
| 4 | - require('../common'); | ||
| 5 | - const assert = require('assert'); | ||
| 4 | + const common = require('../common'); | ||
| 5 | + const assert = require('node:assert'); | ||
| 6 | 6 | const { internalBinding } = require('internal/test/binding'); | |
| 7 | 7 | const binding = internalBinding('timers'); | |
| 8 | 8 | ||
| 9 | 9 | // Return value of getLibuvNow() should easily fit in a SMI after start-up. | |
| 10 | 10 | // We need to use the binding as the receiver for fast API calls. | |
| 11 | 11 | assert(binding.getLibuvNow() < 0x3ffffff); | |
| 12 | + | ||
| 13 | + { | ||
| 14 | + // Only javascript methods can be optimized through %OptimizeFunctionOnNextCall | ||
| 15 | + // This is why we surround the C++ method we want to optimize with a JS function. | ||
| 16 | + function getLibuvNow() { | ||
| 17 | + return binding.getLibuvNow(); | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + eval('%PrepareFunctionForOptimization(getLibuvNow)'); | ||
| 21 | + getLibuvNow(); | ||
| 22 | + eval('%OptimizeFunctionOnNextCall(getLibuvNow)'); | ||
| 23 | + assert(getLibuvNow() < 0x3ffffff); | ||
| 24 | + | ||
| 25 | + if (common.isDebug) { | ||
| 26 | + const { getV8FastApiCallCount } = internalBinding('debug'); | ||
| 27 | + assert.strictEqual(getV8FastApiCallCount('timers.getLibuvNow'), 1); | ||
| 28 | + } | ||
| 29 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments