stream: reuse unexposed managed read buffers · nodejs/node@a77f9f7 · GitHub
Skip to content

Commit a77f9f7

Browse files
GetThatCookieaduh95
authored andcommitted
stream: reuse unexposed managed read buffers
Signed-off-by: GetThatCookie <NimmenKeks@gmx.de> PR-URL: #64990 Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
1 parent 01cb4f9 commit a77f9f7

4 files changed

Lines changed: 43 additions & 4 deletions

File tree

src/env.cc

Lines changed: 17 additions & 4 deletions

src/env.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,6 +1063,8 @@ class Environment final : public MemoryRetainer {
10631063

10641064
uv_buf_t allocate_managed_buffer(const size_t suggested_size);
10651065
std::unique_ptr<v8::BackingStore> release_managed_buffer(const uv_buf_t& buf);
1066+
// Only buffers that were not exposed externally may be recycled.
1067+
void recycle_managed_buffer(std::unique_ptr<v8::BackingStore> bs);
10661068

10671069
void AddUnmanagedFd(int fd);
10681070
void RemoveUnmanagedFd(int fd);
@@ -1279,6 +1281,7 @@ class Environment final : public MemoryRetainer {
12791281
// track of the BackingStore for a given pointer.
12801282
std::unordered_map<char*, std::unique_ptr<v8::BackingStore>>
12811283
released_allocated_buffers_;
1284+
std::unique_ptr<v8::BackingStore> managed_buffer_cache_;
12821285

12831286
v8::CpuProfiler* cpu_profiler_ = nullptr;
12841287
std::vector<v8::ProfilerId> pending_profiles_;

src/stream_base.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,7 @@ void EmitToJSStreamListener::OnStreamRead(ssize_t nread, const uv_buf_t& buf_) {
697697
std::unique_ptr<BackingStore> bs = env->release_managed_buffer(buf_);
698698

699699
if (nread <= 0) {
700+
env->recycle_managed_buffer(std::move(bs));
700701
if (nread < 0)
701702
stream->CallJSOnreadMethod(nread, Local<ArrayBuffer>());
702703
return;
@@ -708,6 +709,7 @@ void EmitToJSStreamListener::OnStreamRead(ssize_t nread, const uv_buf_t& buf_) {
708709
bs = ArrayBuffer::NewBackingStore(
709710
isolate, nread, BackingStoreInitializationMode::kUninitialized);
710711
memcpy(bs->Data(), old_bs->Data(), nread);
712+
env->recycle_managed_buffer(std::move(old_bs));
711713
}
712714

713715
stream->CallJSOnreadMethod(nread, ArrayBuffer::New(isolate, std::move(bs)));

test/cctest/test_environment.cc

Lines changed: 21 additions & 0 deletions

0 commit comments

Comments
 (0)