diff options
author | Anatoli Papirovski <apapirovski@mac.com> | 2017-12-27 13:47:51 -0500 |
---|---|---|
committer | Anatoli Papirovski <apapirovski@mac.com> | 2017-12-30 19:05:58 -0500 |
commit | 58467864244924b705c6cb4e2e5c79ab9e031697 (patch) | |
tree | 0bb51cc579a45808d443280ae03ee3c61346e087 | |
parent | 2c94424a0d9941f7e2290f86f3417b66905acdef (diff) | |
download | android-node-v8-58467864244924b705c6cb4e2e5c79ab9e031697.tar.gz android-node-v8-58467864244924b705c6cb4e2e5c79ab9e031697.tar.bz2 android-node-v8-58467864244924b705c6cb4e2e5c79ab9e031697.zip |
src: use AliasedBuffer for TickInfo
PR-URL: https://github.com/nodejs/node/pull/17881
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Khaidi Chu <i@2333.moe>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
-rw-r--r-- | lib/internal/process/next_tick.js | 6 | ||||
-rw-r--r-- | src/env-inl.h | 17 | ||||
-rw-r--r-- | src/env.h | 11 | ||||
-rw-r--r-- | src/node.cc | 14 |
4 files changed, 17 insertions, 31 deletions
diff --git a/lib/internal/process/next_tick.js b/lib/internal/process/next_tick.js index 2f68783d91..9481bebd22 100644 --- a/lib/internal/process/next_tick.js +++ b/lib/internal/process/next_tick.js @@ -29,7 +29,7 @@ function setupNextTick() { ] = process._setupNextTick(_tickCallback); // *Must* match Environment::TickInfo::Fields in src/env.h. - const kScheduled = 0; + const kHasScheduled = 0; const nextTickQueue = { head: null, @@ -40,7 +40,7 @@ function setupNextTick() { this.tail.next = entry; } else { this.head = entry; - tickInfo[kScheduled] = 1; + tickInfo[kHasScheduled] = 1; } this.tail = entry; }, @@ -50,7 +50,7 @@ function setupNextTick() { const ret = this.head.data; if (this.head === this.tail) { this.head = this.tail = null; - tickInfo[kScheduled] = 0; + tickInfo[kHasScheduled] = 0; } else { this.head = this.head.next; } diff --git a/src/env-inl.h b/src/env-inl.h index 07fc359758..c25e126549 100644 --- a/src/env-inl.h +++ b/src/env-inl.h @@ -217,21 +217,15 @@ inline bool Environment::AsyncCallbackScope::in_makecallback() const { return env_->makecallback_cntr_ > 1; } -inline Environment::TickInfo::TickInfo() { - for (int i = 0; i < kFieldsCount; ++i) - fields_[i] = 0; -} +inline Environment::TickInfo::TickInfo(v8::Isolate* isolate) + : fields_(isolate, kFieldsCount) {} -inline uint8_t* Environment::TickInfo::fields() { +inline AliasedBuffer<uint8_t, v8::Uint8Array>& Environment::TickInfo::fields() { return fields_; } -inline int Environment::TickInfo::fields_count() const { - return kFieldsCount; -} - -inline uint8_t Environment::TickInfo::scheduled() const { - return fields_[kScheduled]; +inline bool Environment::TickInfo::has_scheduled() const { + return fields_[kHasScheduled] == 1; } inline void Environment::AssignToContext(v8::Local<v8::Context> context, @@ -269,6 +263,7 @@ inline Environment::Environment(IsolateData* isolate_data, v8::Local<v8::Context> context) : isolate_(context->GetIsolate()), isolate_data_(isolate_data), + tick_info_(context->GetIsolate()), timer_base_(uv_now(isolate_data->event_loop())), using_domains_(false), printed_error_(false), @@ -455,20 +455,19 @@ class Environment { class TickInfo { public: - inline uint8_t* fields(); - inline int fields_count() const; - inline uint8_t scheduled() const; + inline AliasedBuffer<uint8_t, v8::Uint8Array>& fields(); + inline bool has_scheduled() const; private: friend class Environment; // So we can call the constructor. - inline TickInfo(); + inline explicit TickInfo(v8::Isolate* isolate); enum Fields { - kScheduled, + kHasScheduled, kFieldsCount }; - uint8_t fields_[kFieldsCount]; + AliasedBuffer<uint8_t, v8::Uint8Array> fields_; DISALLOW_COPY_AND_ASSIGN(TickInfo); }; diff --git a/src/node.cc b/src/node.cc index 53c1001d4f..472ab81147 100644 --- a/src/node.cc +++ b/src/node.cc @@ -168,7 +168,6 @@ using v8::SealHandleScope; using v8::String; using v8::TryCatch; using v8::Uint32Array; -using v8::Uint8Array; using v8::Undefined; using v8::V8; using v8::Value; @@ -875,13 +874,6 @@ void SetupNextTick(const FunctionCallbackInfo<Value>& args) { env->context(), FIXED_ONE_BYTE_STRING(env->isolate(), "_setupNextTick")).FromJust(); - // Values use to cross communicate with processNextTick. - uint8_t* const fields = env->tick_info()->fields(); - uint8_t const fields_count = env->tick_info()->fields_count(); - - Local<ArrayBuffer> array_buffer = - ArrayBuffer::New(env->isolate(), fields, sizeof(*fields) * fields_count); - v8::Local<v8::Function> run_microtasks_fn = env->NewFunctionTemplate(RunMicrotasks)->GetFunction(env->context()) .ToLocalChecked(); @@ -890,7 +882,7 @@ void SetupNextTick(const FunctionCallbackInfo<Value>& args) { Local<Array> ret = Array::New(env->isolate(), 2); ret->Set(env->context(), 0, - Uint8Array::New(array_buffer, 0, fields_count)).FromJust(); + env->tick_info()->fields().GetJSArray()).FromJust(); ret->Set(env->context(), 1, run_microtasks_fn).FromJust(); args.GetReturnValue().Set(ret); @@ -1019,7 +1011,7 @@ void InternalCallbackScope::Close() { Environment::TickInfo* tick_info = env_->tick_info(); - if (tick_info->scheduled() == 0) { + if (!tick_info->has_scheduled()) { env_->isolate()->RunMicrotasks(); } @@ -1030,7 +1022,7 @@ void InternalCallbackScope::Close() { CHECK_EQ(env_->trigger_async_id(), 0); } - if (tick_info->scheduled() == 0) { + if (!tick_info->has_scheduled()) { return; } |