@@ -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,23 @@ 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 (
937- [taker = std::move (taker),
938- status = result.status ](Environment* env) mutable {
933+ [taker = std::move (taker), result = result](Environment* env) mutable {
939934 Isolate* isolate = env->isolate ();
940935 HandleScope handle_scope (isolate);
941936 Context::Scope context_scope (env->context ());
942937 AsyncHooks::DefaultTriggerAsyncIdScope trigger_id_scope (taker.get ());
943938 Local<Value> argv[] = {
944- Null (isolate), // error
939+ Null (isolate), // error
940+ Undefined (isolate), // profile id
945941 };
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 ) {
942+ if (result.status == CpuProfilingStatus::kErrorTooManyProfilers ) {
950943 argv[0 ] = ERR_CPU_PROFILE_TOO_MANY (
951944 isolate, " There are too many CPU profiles" );
945+ } else if (result.status == CpuProfilingStatus::kStarted ) {
946+ argv[1 ] = Number::New (isolate, result.id );
952947 }
953948 taker->MakeCallback (env->ondone_string (), arraysize (argv), argv);
954949 },
@@ -965,8 +960,8 @@ void Worker::StopCpuProfile(const FunctionCallbackInfo<Value>& args) {
965960 ASSIGN_OR_RETURN_UNWRAP (&w, args.This ());
966961
967962 Environment* env = w->env ();
968- CHECK (args[0 ]->IsString ());
969- node::Utf8Value name (env->isolate (), args[ 0 ] );
963+ CHECK (args[0 ]->IsUint32 ());
964+ uint32_t profile_id = args[ 0 ]-> Uint32Value (env->context ()). FromJust ( );
970965
971966 AsyncHooks::DefaultTriggerAsyncIdScope trigger_id_scope (w);
972967 Local<Object> wrap;
@@ -980,11 +975,11 @@ void Worker::StopCpuProfile(const FunctionCallbackInfo<Value>& args) {
980975 MakeDetachedBaseObject<WorkerCpuProfileTaker>(env, wrap);
981976
982977 bool scheduled = w->RequestInterrupt ([taker = std::move (taker),
983- name = name. ToString () ,
978+ profile_id = profile_id ,
984979 env](Environment* worker_env) mutable {
985980 bool found = false ;
986981 auto json_out_stream = std::make_unique<node::JSONOutputStream>();
987- CpuProfile* profile = worker_env->StopCpuProfile (name );
982+ CpuProfile* profile = worker_env->StopCpuProfile (profile_id );
988983 if (profile) {
989984 profile->Serialize (json_out_stream.get (),
990985 CpuProfile::SerializationFormat::kJSON );
0 commit comments