8000 Buffer, refactor: refactoring Buffer's built-in object binding model … · fibjs/fibjs@aaa204b · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit aaa204b

Browse files
committed
Buffer, refactor: refactoring Buffer's built-in object binding model to optimize the performance of Buffer member method calls.
1 parent b9cfd31 commit aaa204b

File tree

3 files changed

+6
-16
lines changed

3 files changed

+6
-16
lines changed

fibjs/include/v8_api.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ void WriteLcovData(v8::Isolate* isolate, FILE* file);
3030
bool isFrozen(v8::Local<v8::Object> object);
3131
void setAsyncFunctoin(v8::Local<v8::Function> func);
3232

33-
void* fetch_store_data(std::shared_ptr<v8::BackingStore>& backing_store);
34-
std::unique_ptr<v8::BackingStore> NewBackingStore(size_t byte_length, void* deleter_data);
33+
std::unique_ptr<v8::BackingStore> NewBackingStore(size_t byte_length);
3534

3635
void* get_instance_pointer(v8::Local<v8::Object> o, uint16_t buffer_type);
3736

fibjs/src/base/v8_api.cpp

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,22 +89,14 @@ static void s_store_deleter(void* data, size_t length, void* deleter_data)
8989
{
9090
}
9191

92-
void* fetch_store_data(std::shared_ptr<v8::BackingStore>& backing_store)
93-
{
94-
auto store = reinterpret_cast<const i::BackingStore*>(backing_store.get());
95-
if (s_store_deleter == store->type_specific_data_.deleter.callback)
96-
return store->type_specific_data_.deleter.data;
97-
return NULL;
98-
}
99-
100-
std::unique_ptr<v8::BackingStore> NewBackingStore(size_t byte_length, void* deleter_data)
92+
std::unique_ptr<v8::BackingStore> NewBackingStore(size_t byte_length)
10193
{
10294
CHECK_LE(byte_length, i::JSArrayBuffer::kMaxByteLength);
10395

10496
uint8_t* data = new uint8_t[byte_length + sizeof(i::BackingStore)];
10597
auto result = new ((i::BackingStore*)data) i::BackingStore(data + sizeof(i::BackingStore), byte_length, byte_length, byte_length,
10698
i::SharedFlag::kNotShared, i::ResizableFlag::kNotResizable, false, true, false, true, false);
107-
result->type_specific_data_.deleter = { s_store_deleter, deleter_data };
99+
result->type_specific_data_.deleter = { s_store_deleter, NULL };
108100

109101
return std::unique_ptr<v8::BackingStore>((v8::BackingStore*)result);
110102
}
@@ -134,9 +126,7 @@ void* get_instance_pointer(Local<Object> o, uint16_t buffer_type)
134126
if (instance_type != buffer_type)
135127
return NULL;
136128

137-
v8::Local<v8::ArrayBufferView> arr = o.As<v8::ArrayBufferView>();
138-
std::shared_ptr<v8::BackingStore> store = arr->Buffer()->GetBackingStore();
139-
return fetch_store_data(store);
129+
return o->GetAlignedPointerFromInternalField(0);
140130
}
141131

142132
return NULL;

fibjs/src/global/Buffer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ result_t Buffer_base::concat(v8::Local<v8::Array> buflist, int32_t cutLength, ob
223223

224224
void Buffer::init(const void* data, size_t length)
225225
{
226-
m_store = NewBackingStore(length, this);
226+
m_store = NewBackingStore(length);
227227
if (data)
228228
memcpy(Buffer::data(), data, Buffer::length());
229229

@@ -262,6 +262,7 @@ v8::Local<v8::Object> Buffer::wrap(Isolate* isolate, v8::Local<v8::Object> This)
262262
}
263263

264264
ui->SetPrototype(context, proto).IsJust();
265+
ui->SetAlignedPointerInInternalField(0, this);
265266

266267
return object_base::wrap(isolate, ui);
267268
}

0 commit comments

Comments
0 (0)
0