@@ -48,6 +48,7 @@ constexpr double kMB = 1024 * 1024;
48
48
Worker::Worker (Environment* env,
49
49
Local<Object> wrap,
50
50
const std::string& url,
51
+ const std::string& name,
51
52
std::shared_ptr<PerIsolateOptions> per_isolate_opts,
52
53
std::vector<std::string>&& exec_argv,
53
54
std::shared_ptr<KVStore> env_vars,
@@ -57,6 +58,7 @@ Worker::Worker(Environment* env,
57
58
exec_argv_(exec_argv),
58
59
platform_(env->isolate_data ()->platform()),
59
60
thread_id_(AllocateEnvironmentThreadId()),
61
+ name_(name),
60
62
env_vars_(env_vars),
61
63
snapshot_data_(snapshot_data) {
62
64
Debug (this , " Creating new worker instance with thread id %llu" ,
@@ -81,8 +83,8 @@ Worker::Worker(Environment* env,
81
83
Number::New (env->isolate (), static_cast <double >(thread_id_.id )))
82
84
.Check ();
83
85
84
- inspector_parent_handle_ = GetInspectorParentHandle (
85
- env, thread_id_, url.c_str ());
86
+ inspector_parent_handle_ =
87
+ GetInspectorParentHandle ( env, thread_id_, url. c_str (), name .c_str ());
86
88
87
89
argv_ = std::vector<std::string>{env->argv ()[0 ]};
88
90
// Mark this Worker object as weak until we actually start the thread.
@@ -256,11 +258,10 @@ size_t Worker::NearHeapLimit(void* data, size_t current_heap_limit,
256
258
}
257
259
258
260
void Worker::Run () {
259
- std::string name = " WorkerThread " ;
260
- name += std::to_string (thread_id_. id );
261
+ std::string trace_name = " [worker " + std::to_string (thread_id_. id ) + " ] " +
262
+ (name_ == " " ? " " : " " + name_ );
261
263
TRACE_EVENT_METADATA1 (
262
- " __metadata" , " thread_name" , " name" ,
263
- TRACE_STR_COPY (name.c_str ()));
264
+ " __metadata" , " thread_name" , " name" , TRACE_STR_COPY (trace_name.c_str ()));
264
265
CHECK_NOT_NULL (platform_);
265
266
266
267
Debug (this , " Creating isolate for worker with id %llu" , thread_id_.id );
@@ -454,6 +455,7 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) {
454
455
}
455
456
456
457
std::string url;
458
+ std::string name;
457
459
std::shared_ptr<PerIsolateOptions> per_isolate_opts = nullptr ;
458
460
std::shared_ptr<KVStore> env_vars = nullptr ;
459
461
@@ -466,6 +468,12 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) {
466
468
url.append (value.out (), value.length ());
467
469
}
468
470
471
+ if (!args[5 ]->IsNullOrUndefined ()) {
472
+ Utf8Value value (
473
+ isolate, args[5 ]->ToString (env->context ()).FromMaybe (Local<String>()));
474
+ name.append (value.out (), value.length ());
475
+ }
476
+
469
477
if (args[1 ]->IsNull ()) {
470
478
// Means worker.env = { ...process.env }.
471
479
env_vars = env->env_vars ()->Clone (isolate);
@@ -579,6 +587,7 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) {
579
587
Worker* worker = new Worker (env,
580
588
args.This (),
581
589
url,
590
+ name,
582
591
per_isolate_opts,
583
592
std::move (exec_argv_out),
584
593
env_vars,
0 commit comments