src: fix GetCpuProfiler() deprecation warning
Replace `v8::Isolate::GetCpuProfiler()` with `v8::CpuProfiler::New()` and cache the instance; creating and disposing an instance every loop tick is too expensive. PR-URL: https://github.com/nodejs/node/pull/18534 Fixes: https://github.com/nodejs/node/issues/18039 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
This commit is contained in:
parent
4a881e04dc
commit
f02b74dfdb
14
src/env.cc
14
src/env.cc
@ -1,6 +1,5 @@
|
|||||||
#include "node_internals.h"
|
#include "node_internals.h"
|
||||||
#include "async_wrap.h"
|
#include "async_wrap.h"
|
||||||
#include "v8-profiler.h"
|
|
||||||
#include "node_buffer.h"
|
#include "node_buffer.h"
|
||||||
#include "node_platform.h"
|
#include "node_platform.h"
|
||||||
|
|
||||||
@ -67,6 +66,15 @@ IsolateData::IsolateData(Isolate* isolate,
|
|||||||
IsolateData::~IsolateData() {
|
IsolateData::~IsolateData() {
|
||||||
if (platform_ != nullptr)
|
if (platform_ != nullptr)
|
||||||
platform_->UnregisterIsolate(this);
|
platform_->UnregisterIsolate(this);
|
||||||
|
if (cpu_profiler_ != nullptr)
|
||||||
|
cpu_profiler_->Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
v8::CpuProfiler* IsolateData::GetCpuProfiler() {
|
||||||
|
if (cpu_profiler_ != nullptr) return cpu_profiler_;
|
||||||
|
cpu_profiler_ = v8::CpuProfiler::New(isolate());
|
||||||
|
CHECK_NE(cpu_profiler_, nullptr);
|
||||||
|
return cpu_profiler_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Environment::Start(int argc,
|
void Environment::Start(int argc,
|
||||||
@ -152,12 +160,12 @@ void Environment::CleanupHandles() {
|
|||||||
void Environment::StartProfilerIdleNotifier() {
|
void Environment::StartProfilerIdleNotifier() {
|
||||||
uv_prepare_start(&idle_prepare_handle_, [](uv_prepare_t* handle) {
|
uv_prepare_start(&idle_prepare_handle_, [](uv_prepare_t* handle) {
|
||||||
Environment* env = ContainerOf(&Environment::idle_prepare_handle_, handle);
|
Environment* env = ContainerOf(&Environment::idle_prepare_handle_, handle);
|
||||||
env->isolate()->GetCpuProfiler()->SetIdle(true);
|
env->isolate_data()->GetCpuProfiler()->SetIdle(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
uv_check_start(&idle_check_handle_, [](uv_check_t* handle) {
|
uv_check_start(&idle_check_handle_, [](uv_check_t* handle) {
|
||||||
Environment* env = ContainerOf(&Environment::idle_check_handle_, handle);
|
Environment* env = ContainerOf(&Environment::idle_check_handle_, handle);
|
||||||
env->isolate()->GetCpuProfiler()->SetIdle(false);
|
env->isolate_data()->GetCpuProfiler()->SetIdle(false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "req_wrap.h"
|
#include "req_wrap.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "uv.h"
|
#include "uv.h"
|
||||||
|
#include "v8-profiler.h"
|
||||||
#include "v8.h"
|
#include "v8.h"
|
||||||
#include "node.h"
|
#include "node.h"
|
||||||
#include "node_http2_state.h"
|
#include "node_http2_state.h"
|
||||||
@ -340,6 +341,8 @@ class IsolateData {
|
|||||||
std::unordered_map<nghttp2_rcbuf*, v8::Eternal<v8::String>> http2_static_strs;
|
std::unordered_map<nghttp2_rcbuf*, v8::Eternal<v8::String>> http2_static_strs;
|
||||||
inline v8::Isolate* isolate() const;
|
inline v8::Isolate* isolate() const;
|
||||||
|
|
||||||
|
v8::CpuProfiler* GetCpuProfiler();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#define VP(PropertyName, StringValue) V(v8::Private, PropertyName)
|
#define VP(PropertyName, StringValue) V(v8::Private, PropertyName)
|
||||||
#define VS(PropertyName, StringValue) V(v8::String, PropertyName)
|
#define VS(PropertyName, StringValue) V(v8::String, PropertyName)
|
||||||
@ -355,6 +358,7 @@ class IsolateData {
|
|||||||
uv_loop_t* const event_loop_;
|
uv_loop_t* const event_loop_;
|
||||||
uint32_t* const zero_fill_field_;
|
uint32_t* const zero_fill_field_;
|
||||||
MultiIsolatePlatform* platform_;
|
MultiIsolatePlatform* platform_;
|
||||||
|
v8::CpuProfiler* cpu_profiler_ = nullptr;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(IsolateData);
|
DISALLOW_COPY_AND_ASSIGN(IsolateData);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user