Skip to content

Commit 4404d23

Browse files
jasnelladuh95
authored andcommitted
src: simplify c++ diagnostics channel API
Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: #65158 Reviewed-By: Xuguang Mei <meixuguang@gmail.com> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
1 parent 22f7018 commit 4404d23

4 files changed

Lines changed: 16 additions & 16 deletions

File tree

src/node_diagnostics_channel.cc

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,11 @@ void Channel::Unlink() {
178178
publish_fn_.Reset();
179179
}
180180

181-
Channel* Channel::Get(Environment* env, const char* name) {
181+
BaseObjectPtr<Channel> Channel::Get(Environment* env, std::string_view name) {
182182
Realm* realm = env->principal_realm();
183183
BindingData* binding = realm->GetBindingData<BindingData>();
184184
if (binding == nullptr) {
185-
return nullptr;
185+
return {};
186186
}
187187
uint32_t index = binding->GetOrCreateChannelIndex(std::string(name));
188188

@@ -208,22 +208,24 @@ Channel* Channel::Get(Environment* env, const char* name) {
208208
.ToLocalChecked()
209209
->NewInstance(context)
210210
.ToLocal(&wrap)) {
211-
return nullptr;
211+
return {};
212212
}
213213

214214
binding->channels_[index] = MakeDetachedBaseObject<Channel>(
215215
env, wrap, binding, index, std::string(name));
216216
}
217217

218-
Channel* channel = binding->channels_[index].get();
218+
auto& channel = binding->channels_[index];
219219

220220
// Late-bind: link to the JS channel when the callback is available.
221221
if (!binding->link_callback_.IsEmpty() && !channel->IsLinked()) {
222222
Isolate* isolate = env->isolate();
223223
HandleScope handle_scope(isolate);
224224
Local<Context> context = env->context();
225-
Local<String> js_name = String::NewFromUtf8(isolate, name).ToLocalChecked();
226-
Local<Value> argv[] = {js_name, Integer::NewFromUnsigned(isolate, index)};
225+
Local<Value> argv[] = {
226+
ToV8Value(context, name).ToLocalChecked(),
227+
Integer::NewFromUnsigned(isolate, index),
228+
};
227229
Local<Value> result;
228230
if (binding->link_callback_.Get(isolate)
229231
->Call(context, v8::Undefined(isolate), arraysize(argv), argv)

src/node_diagnostics_channel.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,7 @@ class Channel : public BaseObject {
7373
uint32_t index,
7474
std::string name);
7575

76-
// Returns a non-owning pointer. Lifetime is managed by BindingData.
77-
static Channel* Get(Environment* env, const char* name);
76+
static BaseObjectPtr<Channel> Get(Environment* env, std::string_view name);
7877

7978
inline bool HasSubscribers() const {
8079
return binding_data_ != nullptr && binding_data_->subscribers_[index_] > 0;

src/permission/permission.cc

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,12 +304,10 @@ BaseObjectPtr<diagnostics_channel::Channel> Permission::GetOrCreateChannel(
304304
channels_.erase(it);
305305
}
306306
auto channel_name = GetDiagnosticsChannelName(scope);
307-
diagnostics_channel::Channel* ch =
308-
diagnostics_channel::Channel::Get(env, channel_name.data());
309-
if (ch != nullptr) {
307+
if (auto ch = diagnostics_channel::Channel::Get(env, channel_name)) {
310308
channels_.emplace(scope,
311309
BaseObjectWeakPtr<diagnostics_channel::Channel>(ch));
312-
return BaseObjectPtr<diagnostics_channel::Channel>(ch);
310+
return ch;
313311
}
314312
return {};
315313
}

test/cctest/test_diagnostics_channel.cc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "gtest/gtest.h"
44
#include "node_test_fixture.h"
55

6+
using node::BaseObjectPtr;
67
using node::diagnostics_channel::Channel;
78

89
class DiagnosticsChannelTest : public EnvironmentTestFixture {};
@@ -279,15 +280,15 @@ TEST_F(DiagnosticsChannelTest, NativeChannelsGrowSubscriberStorage) {
279280
"globalThis.__dc.subscribe('test:cctest:grow:0', "
280281
" globalThis.__firstSubscriber);");
281282

282-
Channel* first = Channel::Get(*env, "test:cctest:grow:0");
283-
ASSERT_NE(first, nullptr);
283+
auto first = Channel::Get(*env, "test:cctest:grow:0");
284+
ASSERT_TRUE(first);
284285
ASSERT_TRUE(first->HasSubscribers());
285286

286-
Channel* last = nullptr;
287+
BaseObjectPtr<Channel> last;
287288
for (size_t i = 1; i <= 1024; i++) {
288289
std::string name = "test:cctest:grow:" + std::to_string(i);
289290
last = Channel::Get(*env, name.c_str());
290-
ASSERT_NE(last, nullptr);
291+
ASSERT_TRUE(last);
291292
}
292293

293294
RunJS(isolate_,

0 commit comments

Comments
 (0)