1 |
|
|
#include "env-inl.h" |
2 |
|
|
#include "node_external_reference.h" |
3 |
|
|
#include "util-inl.h" |
4 |
|
|
#include "v8.h" |
5 |
|
|
|
6 |
|
|
#include <cstdint> |
7 |
|
|
|
8 |
|
|
namespace node { |
9 |
|
|
namespace { |
10 |
|
|
|
11 |
|
|
using v8::Context; |
12 |
|
|
using v8::Function; |
13 |
|
|
using v8::FunctionCallbackInfo; |
14 |
|
|
using v8::Local; |
15 |
|
|
using v8::Object; |
16 |
|
|
using v8::Value; |
17 |
|
|
|
18 |
✓✗ |
770 |
void SetupTimers(const FunctionCallbackInfo<Value>& args) { |
19 |
✗✓ |
770 |
CHECK(args[0]->IsFunction()); |
20 |
✗✓ |
770 |
CHECK(args[1]->IsFunction()); |
21 |
|
770 |
auto env = Environment::GetCurrent(args); |
22 |
|
|
|
23 |
✓✗ |
1540 |
env->set_immediate_callback_function(args[0].As<Function>()); |
24 |
|
1540 |
env->set_timers_callback_function(args[1].As<Function>()); |
25 |
|
770 |
} |
26 |
|
|
|
27 |
|
38062 |
void GetLibuvNow(const FunctionCallbackInfo<Value>& args) { |
28 |
|
38062 |
Environment* env = Environment::GetCurrent(args); |
29 |
|
38062 |
args.GetReturnValue().Set(env->GetNow()); |
30 |
|
38062 |
} |
31 |
|
|
|
32 |
|
2958 |
void ScheduleTimer(const FunctionCallbackInfo<Value>& args) { |
33 |
|
2958 |
auto env = Environment::GetCurrent(args); |
34 |
|
5916 |
env->ScheduleTimer(args[0]->IntegerValue(env->context()).FromJust()); |
35 |
|
2958 |
} |
36 |
|
|
|
37 |
|
3670 |
void ToggleTimerRef(const FunctionCallbackInfo<Value>& args) { |
38 |
|
7340 |
Environment::GetCurrent(args)->ToggleTimerRef(args[0]->IsTrue()); |
39 |
|
3670 |
} |
40 |
|
|
|
41 |
|
40425 |
void ToggleImmediateRef(const FunctionCallbackInfo<Value>& args) { |
42 |
|
80850 |
Environment::GetCurrent(args)->ToggleImmediateRef(args[0]->IsTrue()); |
43 |
|
40425 |
} |
44 |
|
|
|
45 |
|
770 |
void Initialize(Local<Object> target, |
46 |
|
|
Local<Value> unused, |
47 |
|
|
Local<Context> context, |
48 |
|
|
void* priv) { |
49 |
|
770 |
Environment* env = Environment::GetCurrent(context); |
50 |
|
|
|
51 |
|
770 |
SetMethod(context, target, "getLibuvNow", GetLibuvNow); |
52 |
|
770 |
SetMethod(context, target, "setupTimers", SetupTimers); |
53 |
|
770 |
SetMethod(context, target, "scheduleTimer", ScheduleTimer); |
54 |
|
770 |
SetMethod(context, target, "toggleTimerRef", ToggleTimerRef); |
55 |
|
770 |
SetMethod(context, target, "toggleImmediateRef", ToggleImmediateRef); |
56 |
|
|
|
57 |
|
|
target |
58 |
|
770 |
->Set(context, |
59 |
|
|
FIXED_ONE_BYTE_STRING(env->isolate(), "immediateInfo"), |
60 |
|
2310 |
env->immediate_info()->fields().GetJSArray()) |
61 |
|
|
.Check(); |
62 |
|
770 |
} |
63 |
|
|
} // anonymous namespace |
64 |
|
5338 |
void RegisterTimerExternalReferences(ExternalReferenceRegistry* registry) { |
65 |
|
5338 |
registry->Register(GetLibuvNow); |
66 |
|
5338 |
registry->Register(SetupTimers); |
67 |
|
5338 |
registry->Register(ScheduleTimer); |
68 |
|
5338 |
registry->Register(ToggleTimerRef); |
69 |
|
5338 |
registry->Register(ToggleImmediateRef); |
70 |
|
5338 |
} |
71 |
|
|
|
72 |
|
|
} // namespace node |
73 |
|
|
|
74 |
|
5410 |
NODE_MODULE_CONTEXT_AWARE_INTERNAL(timers, node::Initialize) |
75 |
|
5338 |
NODE_MODULE_EXTERNAL_REFERENCE(timers, node::RegisterTimerExternalReferences) |