@@ -915,9 +915,6 @@ void Worker::StartCpuProfile(const FunctionCallbackInfo<Value>& args) {
915915  ASSIGN_OR_RETURN_UNWRAP (&w, args.This ());
916916  Environment* env = w->env ();
917917
918-   CHECK (args[0 ]->IsString ());
919-   node::Utf8Value name (env->isolate (), args[0 ]);
920- 
921918  AsyncHooks::DefaultTriggerAsyncIdScope trigger_id_scope (w);
922919  Local<Object> wrap;
923920  if  (!env->worker_cpu_profile_taker_template ()
@@ -930,25 +927,24 @@ void Worker::StartCpuProfile(const FunctionCallbackInfo<Value>& args) {
930927      MakeDetachedBaseObject<WorkerCpuProfileTaker>(env, wrap);
931928
932929  bool  scheduled = w->RequestInterrupt ([taker = std::move (taker),
933-                                         name = name.ToString (),
934930                                        env](Environment* worker_env) mutable  {
935-     CpuProfilingResult result = worker_env->StartCpuProfile (name );
931+     CpuProfilingResult result = worker_env->StartCpuProfile ();
936932    env->SetImmediateThreadsafe (
937933        [taker = std::move (taker),
938-          status  = result. status ](Environment* env) mutable  {
934+           result  = result](Environment* env) mutable  {
939935          Isolate* isolate = env->isolate ();
940936          HandleScope handle_scope (isolate);
941937          Context::Scope context_scope (env->context ());
942938          AsyncHooks::DefaultTriggerAsyncIdScope trigger_id_scope (taker.get ());
943939          Local<Value> argv[] = {
944940              Null (isolate),  //  error
941+               Undefined (isolate),  //  profile id
945942          };
946-           if  (status == CpuProfilingStatus::kAlreadyStarted ) {
947-             argv[0 ] = ERR_CPU_PROFILE_ALREADY_STARTED (
948-                 isolate, " CPU profile already started"  );
949-           } else  if  (status == CpuProfilingStatus::kErrorTooManyProfilers ) {
943+           if  (result.status  == CpuProfilingStatus::kErrorTooManyProfilers ) {
950944            argv[0 ] = ERR_CPU_PROFILE_TOO_MANY (
951945                isolate, " There are too many CPU profiles"  );
946+           } else  if  (result.status  == CpuProfilingStatus::kStarted ) {
947+             argv[1 ] = Number::New (isolate, static_cast <uint32_t >(result.id ));
952948          }
953949          taker->MakeCallback (env->ondone_string (), arraysize (argv), argv);
954950        },
@@ -965,8 +961,8 @@ void Worker::StopCpuProfile(const FunctionCallbackInfo<Value>& args) {
965961  ASSIGN_OR_RETURN_UNWRAP (&w, args.This ());
966962
967963  Environment* env = w->env ();
968-   CHECK (args[0 ]->IsString ());
969-   node::Utf8Value  name (env->isolate (), args[ 0 ] );
964+   CHECK (args[0 ]->IsUint32 ());
965+   uint32_t  profile_id = args[ 0 ]-> Uint32Value (env->context ()). FromJust ( );
970966
971967  AsyncHooks::DefaultTriggerAsyncIdScope trigger_id_scope (w);
972968  Local<Object> wrap;
@@ -980,11 +976,11 @@ void Worker::StopCpuProfile(const FunctionCallbackInfo<Value>& args) {
980976      MakeDetachedBaseObject<WorkerCpuProfileTaker>(env, wrap);
981977
982978  bool  scheduled = w->RequestInterrupt ([taker = std::move (taker),
983-                                         name  = name. ToString () ,
979+                                         profile_id  = profile_id ,
984980                                        env](Environment* worker_env) mutable  {
985981    bool  found = false ;
986982    auto  json_out_stream = std::make_unique<node::JSONOutputStream>();
987-     CpuProfile* profile = worker_env->StopCpuProfile (name );
983+     CpuProfile* profile = worker_env->StopCpuProfile (profile_id );
988984    if  (profile) {
989985      profile->Serialize (json_out_stream.get (),
990986                         CpuProfile::SerializationFormat::kJSON );
0 commit comments