[api] Add v8::BackingStore::IsShared
The new predicate indicates whether the backing store was created for an ArrayBuffer or a SharedArrayBuffer. It is useful for some embedders. Bug: v8:9380 Change-Id: I804063bb8c4c17815defd6538ce6a1b32f6a4531 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1873689 Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Reviewed-by: Andreas Haas <ahaas@chromium.org> Cr-Commit-Position: refs/heads/master@{#64479}
This commit is contained in:
parent
077cdf44c0
commit
10b5e80637
@ -4868,6 +4868,12 @@ class V8_EXPORT BackingStore : public v8::internal::BackingStoreBase {
|
||||
*/
|
||||
size_t ByteLength() const;
|
||||
|
||||
/**
|
||||
* Indicates whether the backing store was created for an ArrayBuffer or
|
||||
* a SharedArrayBuffer.
|
||||
*/
|
||||
bool IsShared() const;
|
||||
|
||||
private:
|
||||
BackingStore();
|
||||
};
|
||||
|
@ -3750,6 +3750,10 @@ size_t v8::BackingStore::ByteLength() const {
|
||||
return reinterpret_cast<const i::BackingStore*>(this)->byte_length();
|
||||
}
|
||||
|
||||
bool v8::BackingStore::IsShared() const {
|
||||
return reinterpret_cast<const i::BackingStore*>(this)->is_shared();
|
||||
}
|
||||
|
||||
std::shared_ptr<v8::BackingStore> v8::ArrayBuffer::GetBackingStore() {
|
||||
i::Handle<i::JSArrayBuffer> self = Utils::OpenHandle(this);
|
||||
std::shared_ptr<i::BackingStore> backing_store = self->GetBackingStore();
|
||||
|
@ -608,3 +608,37 @@ TEST(SharedArrayBuffer_NewBackingStore_CustomDeleter) {
|
||||
}
|
||||
CHECK(backing_store_custom_called);
|
||||
}
|
||||
|
||||
THREADED_TEST(BackingStore_NotShared) {
|
||||
LocalContext env;
|
||||
v8::Isolate* isolate = env->GetIsolate();
|
||||
v8::HandleScope handle_scope(isolate);
|
||||
Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(isolate, 8);
|
||||
CHECK(!ab->GetBackingStore()->IsShared());
|
||||
CHECK(!v8::ArrayBuffer::NewBackingStore(isolate, 8)->IsShared());
|
||||
backing_store_custom_called = false;
|
||||
backing_store_custom_data = malloc(100);
|
||||
backing_store_custom_length = 100;
|
||||
CHECK(!v8::ArrayBuffer::NewBackingStore(
|
||||
backing_store_custom_data, backing_store_custom_length,
|
||||
BackingStoreCustomDeleter,
|
||||
reinterpret_cast<void*>(backing_store_custom_deleter_data))
|
||||
->IsShared());
|
||||
}
|
||||
|
||||
THREADED_TEST(BackingStore_Shared) {
|
||||
LocalContext env;
|
||||
v8::Isolate* isolate = env->GetIsolate();
|
||||
v8::HandleScope handle_scope(isolate);
|
||||
Local<v8::SharedArrayBuffer> ab = v8::SharedArrayBuffer::New(isolate, 8);
|
||||
CHECK(ab->GetBackingStore()->IsShared());
|
||||
CHECK(v8::SharedArrayBuffer::NewBackingStore(isolate, 8)->IsShared());
|
||||
backing_store_custom_called = false;
|
||||
backing_store_custom_data = malloc(100);
|
||||
backing_store_custom_length = 100;
|
||||
CHECK(v8::SharedArrayBuffer::NewBackingStore(
|
||||
backing_store_custom_data, backing_store_custom_length,
|
||||
BackingStoreCustomDeleter,
|
||||
reinterpret_cast<void*>(backing_store_custom_deleter_data))
|
||||
->IsShared());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user