summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatoli Papirovski <apapirovski@mac.com>2017-12-27 13:47:51 -0500
committerAnatoli Papirovski <apapirovski@mac.com>2017-12-30 19:05:58 -0500
commit58467864244924b705c6cb4e2e5c79ab9e031697 (patch)
tree0bb51cc579a45808d443280ae03ee3c61346e087
parent2c94424a0d9941f7e2290f86f3417b66905acdef (diff)
downloadandroid-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.js6
-rw-r--r--src/env-inl.h17
-rw-r--r--src/env.h11
-rw-r--r--src/node.cc14
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),
diff --git a/src/env.h b/src/env.h
index cf118ac8d7..268abd441d 100644
--- a/src/env.h
+++ b/src/env.h
@@ -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;
}