36 using v8::FunctionCallbackInfo;
37 using v8::FunctionTemplate;
38 using v8::HandleScope;
45 const uint32_t kOnTimeout = 0;
47 class TimerWrap :
public HandleWrap {
51 Local<Context> context) {
52 Environment* env = Environment::GetCurrent(context);
53 Local<FunctionTemplate> constructor = env->NewFunctionTemplate(
New);
54 Local<String> timerString = FIXED_ONE_BYTE_STRING(env->isolate(),
"Timer");
55 constructor->InstanceTemplate()->SetInternalFieldCount(1);
56 constructor->SetClassName(timerString);
57 constructor->Set(FIXED_ONE_BYTE_STRING(env->isolate(),
"kOnTimeout"),
60 env->SetTemplateMethod(constructor,
"now", Now);
62 AsyncWrap::AddWrapMethods(env, constructor);
64 env->SetProtoMethod(constructor,
"close", HandleWrap::Close);
65 env->SetProtoMethod(constructor,
"ref", HandleWrap::Ref);
66 env->SetProtoMethod(constructor,
"unref", HandleWrap::Unref);
67 env->SetProtoMethod(constructor,
"hasRef", HandleWrap::HasRef);
69 env->SetProtoMethod(constructor,
"start",
Start);
70 env->SetProtoMethod(constructor,
"stop", Stop);
72 target->Set(timerString, constructor->GetFunction());
75 size_t self_size()
const override {
return sizeof(*this); }
78 static void New(
const FunctionCallbackInfo<Value>& args) {
82 CHECK(args.IsConstructCall());
83 Environment* env = Environment::GetCurrent(args);
84 new TimerWrap(env, args.This());
87 TimerWrap(Environment* env, Local<Object>
object)
90 reinterpret_cast<uv_handle_t*>(&handle_),
91 AsyncWrap::PROVIDER_TIMERWRAP) {
92 int r = uv_timer_init(env->event_loop(), &handle_);
96 static void Start(
const FunctionCallbackInfo<Value>& args) {
97 TimerWrap*
wrap = Unwrap<TimerWrap>(args.Holder());
99 CHECK(HandleWrap::IsAlive(wrap));
101 int64_t timeout = args[0]->IntegerValue();
102 int err = uv_timer_start(&wrap->handle_, OnTimeout, timeout, 0);
103 args.GetReturnValue().Set(err);
106 static void Stop(
const FunctionCallbackInfo<Value>& args) {
107 TimerWrap* wrap = Unwrap<TimerWrap>(args.Holder());
109 CHECK(HandleWrap::IsAlive(wrap));
111 int err = uv_timer_stop(&wrap->handle_);
112 args.GetReturnValue().Set(err);
115 static void OnTimeout(uv_timer_t* handle) {
116 TimerWrap* wrap =
static_cast<TimerWrap*
>(handle->data);
117 Environment* env = wrap->env();
118 HandleScope handle_scope(env->isolate());
119 Context::Scope context_scope(env->context());
120 wrap->MakeCallback(kOnTimeout, 0,
nullptr);
123 static void Now(
const FunctionCallbackInfo<Value>& args) {
124 Environment* env = Environment::GetCurrent(args);
125 uv_update_time(env->event_loop());
126 uint64_t now = uv_now(env->event_loop());
127 CHECK(now >= env->timer_base());
128 now -= env->timer_base();
129 if (now <= 0xfffffff)
130 args.GetReturnValue().Set(static_cast<uint32_t>(now));
132 args.GetReturnValue().Set(static_cast<double>(now));
NODE_MODULE_CONTEXT_AWARE_BUILTIN(inspector, node::inspector::Agent::InitInspector)
void Initialize(Local< Object > target, Local< Value > unused, Local< Context > context, void *priv)
MaybeLocal< Object > New(Isolate *isolate, Local< String > string, enum encoding enc)
int Start(Isolate *isolate, IsolateData *isolate_data, int argc, const char *const *argv, int exec_argc, const char *const *exec_argv)