@@ -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