@@ -50,6 +50,7 @@ constexpr double kMB = 1024 * 1024;
50
50
Worker::Worker (Environment* env,
51
51
Local<Object> wrap,
52
52
const std::string& url,
53
+ const std::string& name,
53
54
std::shared_ptr<PerIsolateOptions> per_isolate_opts,
54
55
std::vector<std::string>&& exec_argv,
55
56
std::shared_ptr<KVStore> env_vars,
@@ -59,6 +60,7 @@ Worker::Worker(Environment* env,
59
60
exec_argv_(exec_argv),
60
61
platform_(env->isolate_data ()->platform()),
61
62
thread_id_(AllocateEnvironmentThreadId()),
63
+ name_(name),
62
64
env_vars_(env_vars),
63
65
snapshot_data_(snapshot_data) {
64
66
Debug (this , " Creating new worker instance with thread id %llu" ,
@@ -83,8 +85,8 @@ Worker::Worker(Environment* env,
83
85
Number::New (env->isolate (), static_cast <double >(thread_id_.id )))
84
86
.Check ();
85
87
86
- inspector_parent_handle_ = GetInspectorParentHandle (
87
- env, thread_id_, url.c_str ());
88
+ inspector_parent_handle_ =
89
+ GetInspectorParentHandle ( env, thread_id_, url. c_str (), name .c_str ());
88
90
89
91
argv_ = std::vector<std::string>{env->argv ()[0 ]};
90
92
// Mark this Worker object as weak until we actually start the thread.
@@ -265,11 +267,10 @@ size_t Worker::NearHeapLimit(void* data, size_t current_heap_limit,
265
267
}
266
268
267
269
void Worker::Run () {
268
- std::string name = " WorkerThread " ;
269
- name += std::to_string (thread_id_. id );
270
+ std::string trace_name = " [worker " + std::to_string (thread_id_. id ) + " ] " +
271
+ (name_ == " " ? " " : " " + name_ );
270
272
TRACE_EVENT_METADATA1 (
271
- " __metadata" , " thread_name" , " name" ,
272
- TRACE_STR_COPY (name.c_str ()));
273
+ " __metadata" , " thread_name" , " name" , TRACE_STR_COPY (trace_name.c_str ()));
273
274
CHECK_NOT_NULL (platform_);
274
275
275
276
Debug (this , " Creating isolate for worker with id %llu" , thread_id_.id );
@@ -470,6 +471,7 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) {
470
471
}
471
472
472
473
std::string url;
474
+ std::string name;
473
475
std::shared_ptr<PerIsolateOptions> per_isolate_opts = nullptr ;
474
476
std::shared_ptr<KVStore> env_vars = nullptr ;
475
477
@@ -482,6 +484,12 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) {
482
484
url.append (value.out (), value.length ());
483
485
}
484
486
487
+ if (!args[5 ]->IsNullOrUndefined ()) {
488
+ Utf8Value value (
489
+ isolate, args[5 ]->ToString (env->context ()).FromMaybe (Local<String>()));
490
+ name.append (value.out (), value.length ());
491
+ }
492
+
485
493
if (args[1 ]->IsNull ()) {
486
494
// Means worker.env = { ...process.env }.
487
495
env_vars = env->env_vars ()->Clone (isolate);
@@ -592,6 +600,7 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) {
592
600
Worker* worker = new Worker (env,
593
601
args.This (),
594
602
url,
603
+ name,
595
604
per_isolate_opts,
596
605
std::move (exec_argv_out),
597
606
env_vars,
0 commit comments