Skip to content

Commit 174ab6f

Browse files
jasnelladdaleax
authored andcommitted
http2: use static allocated arrays
Backport-PR-URL: #14813 Backport-Reviewed-By: Anna Henningsen <[email protected]> Backport-Reviewed-By: Timothy Gu <[email protected]> PR-URL: #14239 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Matteo Collina <[email protected]>
1 parent 9a4be4a commit 174ab6f

File tree

3 files changed

+30
-127
lines changed

3 files changed

+30
-127
lines changed

src/env-inl.h

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -331,11 +331,6 @@ inline Environment::~Environment() {
331331
delete[] heap_space_statistics_buffer_;
332332
delete[] http_parser_buffer_;
333333
delete[] http2_socket_buffer_;
334-
delete[] http2_settings_buffer_;
335-
delete[] http2_options_buffer_;
336-
delete[] http2_session_state_buffer_;
337-
delete[] http2_stream_state_buffer_;
338-
delete[] http2_padding_buffer_;
339334
}
340335

341336
inline v8::Isolate* Environment::isolate() const {
@@ -476,56 +471,6 @@ inline void Environment::set_heap_space_statistics_buffer(double* pointer) {
476471
heap_space_statistics_buffer_ = pointer;
477472
}
478473

479-
inline uint32_t* Environment::http2_settings_buffer() const {
480-
CHECK_NE(http2_settings_buffer_, nullptr);
481-
return http2_settings_buffer_;
482-
}
483-
484-
inline void Environment::set_http2_settings_buffer(uint32_t* pointer) {
485-
CHECK_EQ(http2_settings_buffer_, nullptr); // Should be set only once
486-
http2_settings_buffer_ = pointer;
487-
}
488-
489-
inline uint32_t* Environment::http2_options_buffer() const {
490-
CHECK_NE(http2_options_buffer_, nullptr);
491-
return http2_options_buffer_;
492-
}
493-
494-
inline void Environment::set_http2_options_buffer(uint32_t* pointer) {
495-
CHECK_EQ(http2_options_buffer_, nullptr); // Should be set only once
496-
http2_options_buffer_ = pointer;
497-
}
498-
499-
inline double* Environment::http2_session_state_buffer() const {
500-
CHECK_NE(http2_session_state_buffer_, nullptr);
501-
return http2_session_state_buffer_;
502-
}
503-
504-
inline void Environment::set_http2_session_state_buffer(double* pointer) {
505-
CHECK_EQ(http2_session_state_buffer_, nullptr);
506-
http2_session_state_buffer_ = pointer;
507-
}
508-
509-
inline double* Environment::http2_stream_state_buffer() const {
510-
CHECK_NE(http2_stream_state_buffer_, nullptr);
511-
return http2_stream_state_buffer_;
512-
}
513-
514-
inline void Environment::set_http2_stream_state_buffer(double* pointer) {
515-
CHECK_EQ(http2_stream_state_buffer_, nullptr);
516-
http2_stream_state_buffer_ = pointer;
517-
}
518-
519-
inline uint32_t* Environment::http2_padding_buffer() const {
520-
CHECK_NE(http2_padding_buffer_, nullptr);
521-
return http2_padding_buffer_;
522-
}
523-
524-
inline void Environment::set_http2_padding_buffer(uint32_t* pointer) {
525-
CHECK_EQ(http2_padding_buffer_, nullptr);
526-
http2_padding_buffer_ = pointer;
527-
}
528-
529474
inline char* Environment::http_parser_buffer() const {
530475
return http_parser_buffer_;
531476
}

src/env.h

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -596,21 +596,6 @@ class Environment {
596596
inline double* heap_space_statistics_buffer() const;
597597
inline void set_heap_space_statistics_buffer(double* pointer);
598598

599-
inline uint32_t* http2_settings_buffer() const;
600-
inline void set_http2_settings_buffer(uint32_t* pointer);
601-
602-
inline uint32_t* http2_options_buffer() const;
603-
inline void set_http2_options_buffer(uint32_t* pointer);
604-
605-
inline double* http2_session_state_buffer() const;
606-
inline void set_http2_session_state_buffer(double* pointer);
607-
608-
inline double* http2_stream_state_buffer() const;
609-
inline void set_http2_stream_state_buffer(double* pointer);
610-
611-
inline uint32_t* http2_padding_buffer() const;
612-
inline void set_http2_padding_buffer(uint32_t* pointer);
613-
614599
inline char* http_parser_buffer() const;
615600
inline void set_http_parser_buffer(char* buffer);
616601
inline char* http2_socket_buffer() const;
@@ -720,11 +705,6 @@ class Environment {
720705

721706
double* heap_statistics_buffer_ = nullptr;
722707
double* heap_space_statistics_buffer_ = nullptr;
723-
uint32_t* http2_settings_buffer_ = nullptr;
724-
uint32_t* http2_options_buffer_ = nullptr;
725-
double* http2_session_state_buffer_ = nullptr;
726-
double* http2_stream_state_buffer_ = nullptr;
727-
uint32_t* http2_padding_buffer_ = nullptr;
728708

729709
char* http_parser_buffer_;
730710
char* http2_socket_buffer_;

src/node_http2.cc

Lines changed: 30 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,27 @@ enum Http2OptionsIndex {
5555
IDX_OPTIONS_FLAGS
5656
};
5757

58+
static uint32_t http2_padding_buffer[3];
59+
static uint32_t http2_options_buffer[IDX_OPTIONS_FLAGS + 1];
60+
static uint32_t http2_settings_buffer[IDX_SETTINGS_COUNT + 1];
61+
static double http2_session_state_buffer[IDX_SESSION_STATE_COUNT];
62+
static double http2_stream_state_buffer[IDX_STREAM_STATE_COUNT];
63+
64+
static const size_t http2_options_buffer_byte_length =
65+
sizeof(http2_options_buffer) * (IDX_OPTIONS_FLAGS + 1);
66+
static const size_t http2_settings_buffer_byte_length =
67+
sizeof(http2_settings_buffer) * (IDX_SETTINGS_COUNT + 1);
68+
static const size_t http2_padding_buffer_byte_length =
69+
sizeof(http2_padding_buffer) * 3;
70+
static const size_t http2_stream_state_buffer_byte_length =
71+
sizeof(http2_stream_state_buffer) * IDX_STREAM_STATE_COUNT;
72+
static const size_t http2_session_state_buffer_byte_length =
73+
sizeof(http2_session_state_buffer) * IDX_SESSION_STATE_COUNT;
74+
5875
Http2Options::Http2Options(Environment* env) {
5976
nghttp2_option_new(&options_);
6077

61-
uint32_t* buffer = env->http2_options_buffer();
78+
uint32_t* buffer = http2_options_buffer;
6279
uint32_t flags = buffer[IDX_OPTIONS_FLAGS];
6380

6481
if (flags & (1 << IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE)) {
@@ -148,7 +165,7 @@ ssize_t Http2Session::OnCallbackPadding(size_t frameLen,
148165
Context::Scope context_scope(context);
149166

150167
if (object()->Has(context, env()->ongetpadding_string()).FromJust()) {
151-
uint32_t* buffer = env()->http2_padding_buffer();
168+
uint32_t* buffer = http2_padding_buffer;
152169
buffer[0] = frameLen;
153170
buffer[1] = maxPayloadLen;
154171
MakeCallback(env()->ongetpadding_string(), 0, nullptr);
@@ -189,7 +206,7 @@ void PackSettings(const FunctionCallbackInfo<Value>& args) {
189206
std::vector<nghttp2_settings_entry> entries;
190207
entries.reserve(6);
191208

192-
uint32_t* const buffer = env->http2_settings_buffer();
209+
uint32_t* buffer = http2_settings_buffer;
193210
uint32_t flags = buffer[IDX_SETTINGS_COUNT];
194211

195212
if (flags & (1 << IDX_SETTINGS_HEADER_TABLE_SIZE)) {
@@ -248,8 +265,7 @@ void PackSettings(const FunctionCallbackInfo<Value>& args) {
248265
// Used to fill in the spec defined initial values for each setting.
249266
void RefreshDefaultSettings(const FunctionCallbackInfo<Value>& args) {
250267
DEBUG_HTTP2("Http2Session: refreshing default settings\n");
251-
Environment* env = Environment::GetCurrent(args);
252-
uint32_t* const buffer = env->http2_settings_buffer();
268+
uint32_t* buffer = http2_settings_buffer;
253269
buffer[IDX_SETTINGS_HEADER_TABLE_SIZE] =
254270
DEFAULT_SETTINGS_HEADER_TABLE_SIZE;
255271
buffer[IDX_SETTINGS_ENABLE_PUSH] =
@@ -272,10 +288,9 @@ void RefreshSettings(const FunctionCallbackInfo<Value>& args) {
272288
CHECK(args[0]->IsObject());
273289
Http2Session* session;
274290
ASSIGN_OR_RETURN_UNWRAP(&session, args[0].As<Object>());
275-
Environment* env = session->env();
276291
nghttp2_session* s = session->session();
277292

278-
uint32_t* const buffer = env->http2_settings_buffer();
293+
uint32_t* buffer = http2_settings_buffer;
279294
buffer[IDX_SETTINGS_HEADER_TABLE_SIZE] =
280295
fn(s, NGHTTP2_SETTINGS_HEADER_TABLE_SIZE);
281296
buffer[IDX_SETTINGS_MAX_CONCURRENT_STREAMS] =
@@ -295,8 +310,7 @@ void RefreshSessionState(const FunctionCallbackInfo<Value>& args) {
295310
DEBUG_HTTP2("Http2Session: refreshing session state\n");
296311
CHECK_EQ(args.Length(), 1);
297312
CHECK(args[0]->IsObject());
298-
Environment* env = Environment::GetCurrent(args);
299-
double* const buffer = env->http2_session_state_buffer();
313+
double* buffer = http2_session_state_buffer;
300314
Http2Session* session;
301315
ASSIGN_OR_RETURN_UNWRAP(&session, args[0].As<Object>());
302316
nghttp2_session* s = session->session();
@@ -333,7 +347,7 @@ void RefreshStreamState(const FunctionCallbackInfo<Value>& args) {
333347
nghttp2_session* s = session->session();
334348
Nghttp2Stream* stream;
335349

336-
double* const buffer = env->http2_stream_state_buffer();
350+
double* buffer = http2_stream_state_buffer;
337351

338352
if ((stream = session->FindStream(id)) == nullptr) {
339353
buffer[IDX_STREAM_STATE] = NGHTTP2_STREAM_STATE_IDLE;
@@ -438,9 +452,7 @@ void Http2Session::SubmitSettings(const FunctionCallbackInfo<Value>& args) {
438452
Http2Session* session;
439453
ASSIGN_OR_RETURN_UNWRAP(&session, args.Holder());
440454

441-
Environment* env = session->env();
442-
443-
uint32_t* const buffer = env->http2_settings_buffer();
455+
uint32_t* buffer = http2_settings_buffer;
444456
uint32_t flags = buffer[IDX_SETTINGS_COUNT];
445457

446458
std::vector<nghttp2_settings_entry> entries;
@@ -1107,74 +1119,40 @@ void Initialize(Local<Object> target,
11071119
HandleScope scope(isolate);
11081120

11091121
// Initialize the buffer used for padding callbacks
1110-
env->set_http2_padding_buffer(new uint32_t[3]);
1111-
const size_t http2_padding_buffer_byte_length =
1112-
sizeof(*env->http2_padding_buffer()) * 3;
1113-
11141122
target->Set(context,
11151123
FIXED_ONE_BYTE_STRING(env->isolate(), "paddingArrayBuffer"),
11161124
ArrayBuffer::New(env->isolate(),
1117-
env->http2_padding_buffer(),
1125+
&http2_padding_buffer,
11181126
http2_padding_buffer_byte_length))
11191127
.FromJust();
11201128

11211129
// Initialize the buffer used to store the session state
1122-
env->set_http2_session_state_buffer(
1123-
new double[IDX_SESSION_STATE_COUNT]);
1124-
1125-
const size_t http2_session_state_buffer_byte_length =
1126-
sizeof(*env->http2_session_state_buffer()) *
1127-
IDX_SESSION_STATE_COUNT;
1128-
11291130
target->Set(context,
11301131
FIXED_ONE_BYTE_STRING(env->isolate(), "sessionStateArrayBuffer"),
11311132
ArrayBuffer::New(env->isolate(),
1132-
env->http2_session_state_buffer(),
1133+
&http2_session_state_buffer,
11331134
http2_session_state_buffer_byte_length))
11341135
.FromJust();
11351136

11361137
// Initialize the buffer used to store the stream state
1137-
env->set_http2_stream_state_buffer(
1138-
new double[IDX_STREAM_STATE_COUNT]);
1139-
1140-
const size_t http2_stream_state_buffer_byte_length =
1141-
sizeof(*env->http2_stream_state_buffer()) *
1142-
IDX_STREAM_STATE_COUNT;
1143-
11441138
target->Set(context,
11451139
FIXED_ONE_BYTE_STRING(env->isolate(), "streamStateArrayBuffer"),
11461140
ArrayBuffer::New(env->isolate(),
1147-
env->http2_stream_state_buffer(),
1141+
&http2_stream_state_buffer,
11481142
http2_stream_state_buffer_byte_length))
11491143
.FromJust();
11501144

1151-
// Initialize the buffer used to store the current settings
1152-
env->set_http2_settings_buffer(
1153-
new uint32_t[IDX_SETTINGS_COUNT + 1]);
1154-
1155-
const size_t http2_settings_buffer_byte_length =
1156-
sizeof(*env->http2_settings_buffer()) *
1157-
(IDX_SETTINGS_COUNT + 1);
1158-
11591145
target->Set(context,
11601146
FIXED_ONE_BYTE_STRING(env->isolate(), "settingsArrayBuffer"),
11611147
ArrayBuffer::New(env->isolate(),
1162-
env->http2_settings_buffer(),
1148+
&http2_settings_buffer,
11631149
http2_settings_buffer_byte_length))
11641150
.FromJust();
11651151

1166-
// Initialize the buffer used to store the options
1167-
env->set_http2_options_buffer(
1168-
new uint32_t[IDX_OPTIONS_FLAGS + 1]);
1169-
1170-
const size_t http2_options_buffer_byte_length =
1171-
sizeof(*env->http2_options_buffer()) *
1172-
(IDX_OPTIONS_FLAGS + 1);
1173-
11741152
target->Set(context,
11751153
FIXED_ONE_BYTE_STRING(env->isolate(), "optionsArrayBuffer"),
11761154
ArrayBuffer::New(env->isolate(),
1177-
env->http2_options_buffer(),
1155+
&http2_options_buffer,
11781156
http2_options_buffer_byte_length))
11791157
.FromJust();
11801158

0 commit comments

Comments
 (0)