Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/deps
diff options
context:
space:
mode:
authorKeyhan Vakil <kvakil@sylph.kvakil.me>2022-07-27 01:38:16 +0300
committerRuy Adorno <ruyadorno@google.com>2022-08-23 02:37:08 +0300
commita0c57837c4d79b9bf45a65ee547043d46794b017 (patch)
tree7aa187164852510fd14acc702311b0f7593cffc5 /deps
parentd964b308ae25b292f155cb4b29aacf2abe094c3d (diff)
deps: cherry-pick 00704f5a from V8 upstream
Original commit message: Add more efficient API for accesssing ArrayBuffer raw data Raw data access is already possible via GetBackingStore()->GetData(). This API exposes a more efficient way for accessing JSArrayBuffer::backing_store (which, despite the confusing name, is no the BackingStore but its raw data pointer). Bug: v8:10343 Change-Id: I695cea91e2c3de75ce6c86bac6e413ce6617958b Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3764341 Reviewed-by: Camillo Bruni <cbruni@chromium.org> Commit-Queue: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/main@{#81745} Refs: https://github.com/v8/v8/commit/00704f5a03d9db02c14c4f4c35188effc46e82ab Refs: https://github.com/nodejs/node/issues/32226 PR-URL: https://github.com/nodejs/node/pull/43921 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Feng Yu <F3n67u@outlook.com>
Diffstat (limited to 'deps')
-rw-r--r--deps/v8/include/v8-array-buffer.h12
-rw-r--r--deps/v8/src/api/api.cc10
-rw-r--r--deps/v8/test/cctest/test-api-array-buffer.cc5
3 files changed, 26 insertions, 1 deletions
diff --git a/deps/v8/include/v8-array-buffer.h b/deps/v8/include/v8-array-buffer.h
index e9047b79ce3..bab840f82c1 100644
--- a/deps/v8/include/v8-array-buffer.h
+++ b/deps/v8/include/v8-array-buffer.h
@@ -256,6 +256,12 @@ class V8_EXPORT ArrayBuffer : public Object {
*/
std::shared_ptr<BackingStore> GetBackingStore();
+ /**
+ * More efficient shortcut for GetBackingStore()->Data(). The returned pointer
+ * is valid as long as the ArrayBuffer is alive.
+ */
+ void* Data() const;
+
V8_INLINE static ArrayBuffer* Cast(Value* value) {
#ifdef V8_ENABLE_CHECKS
CheckCast(value);
@@ -414,6 +420,12 @@ class V8_EXPORT SharedArrayBuffer : public Object {
*/
std::shared_ptr<BackingStore> GetBackingStore();
+ /**
+ * More efficient shortcut for GetBackingStore()->Data(). The returned pointer
+ * is valid as long as the ArrayBuffer is alive.
+ */
+ void* Data() const;
+
V8_INLINE static SharedArrayBuffer* Cast(Value* value) {
#ifdef V8_ENABLE_CHECKS
CheckCast(value);
diff --git a/deps/v8/src/api/api.cc b/deps/v8/src/api/api.cc
index 393f5471914..580ba47f1a7 100644
--- a/deps/v8/src/api/api.cc
+++ b/deps/v8/src/api/api.cc
@@ -4038,6 +4038,11 @@ std::shared_ptr<v8::BackingStore> v8::ArrayBuffer::GetBackingStore() {
return std::static_pointer_cast<v8::BackingStore>(bs_base);
}
+void* v8::ArrayBuffer::Data() const {
+ i::Handle<i::JSArrayBuffer> self = Utils::OpenHandle(this);
+ return self->backing_store();
+}
+
std::shared_ptr<v8::BackingStore> v8::SharedArrayBuffer::GetBackingStore() {
i::Handle<i::JSArrayBuffer> self = Utils::OpenHandle(this);
std::shared_ptr<i::BackingStore> backing_store = self->GetBackingStore();
@@ -4048,6 +4053,11 @@ std::shared_ptr<v8::BackingStore> v8::SharedArrayBuffer::GetBackingStore() {
return std::static_pointer_cast<v8::BackingStore>(bs_base);
}
+void* v8::SharedArrayBuffer::Data() const {
+ i::Handle<i::JSArrayBuffer> self = Utils::OpenHandle(this);
+ return self->backing_store();
+}
+
void v8::ArrayBuffer::CheckCast(Value* that) {
i::Handle<i::Object> obj = Utils::OpenHandle(that);
Utils::ApiCheck(
diff --git a/deps/v8/test/cctest/test-api-array-buffer.cc b/deps/v8/test/cctest/test-api-array-buffer.cc
index d472ebcf320..b087274b311 100644
--- a/deps/v8/test/cctest/test-api-array-buffer.cc
+++ b/deps/v8/test/cctest/test-api-array-buffer.cc
@@ -366,6 +366,7 @@ THREADED_TEST(SkipArrayBufferBackingStoreDuringGC) {
// Should not move the pointer
CHECK_EQ(ab->GetBackingStore()->Data(), store_ptr);
+ CHECK_EQ(ab->Data(), store_ptr);
CcTest::array_buffer_allocator()->Free(buffer, 100);
}
@@ -394,8 +395,8 @@ THREADED_TEST(SkipArrayBufferDuringScavenge) {
CcTest::CollectGarbage(i::NEW_SPACE); // in survivor space now
CcTest::CollectGarbage(i::NEW_SPACE); // in old gen now
- // Use `ab` to silence compiler warning
CHECK_EQ(ab->GetBackingStore()->Data(), store_ptr);
+ CHECK_EQ(ab->Data(), store_ptr);
}
THREADED_TEST(Regress1006600) {
@@ -418,6 +419,7 @@ THREADED_TEST(ArrayBuffer_NewBackingStore) {
CHECK(!backing_store->IsShared());
Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(isolate, backing_store);
CHECK_EQ(backing_store.get(), ab->GetBackingStore().get());
+ CHECK_EQ(backing_store->Data(), ab->Data());
}
THREADED_TEST(SharedArrayBuffer_NewBackingStore) {
@@ -430,6 +432,7 @@ THREADED_TEST(SharedArrayBuffer_NewBackingStore) {
Local<v8::SharedArrayBuffer> ab =
v8::SharedArrayBuffer::New(isolate, backing_store);
CHECK_EQ(backing_store.get(), ab->GetBackingStore().get());
+ CHECK_EQ(backing_store->Data(), ab->Data());
}
static void* backing_store_custom_data = nullptr;