Skip to content

Commit

Permalink
src: fix GetCpuProfiler() deprecation warning
Browse files Browse the repository at this point in the history
Replace `v8::Isolate::GetCpuProfiler()` with `v8::CpuProfiler::New()`
and cache the instance; creating and disposing an instance every loop
tick is too expensive.

Backport-PR-URL: #18959
PR-URL: #18534
Fixes: #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>
  • Loading branch information
bnoordhuis authored and addaleax committed Feb 27, 2018
1 parent 484e06d commit e33b9fa
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
14 changes: 11 additions & 3 deletions src/env.cc
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#include "node_internals.h"
#include "async_wrap.h"
#include "v8-profiler.h"

#include <stdio.h>
#include <algorithm>
Expand Down Expand Up @@ -65,6 +64,15 @@ IsolateData::IsolateData(Isolate* isolate,
IsolateData::~IsolateData() {
if (platform_ != nullptr)
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,
Expand Down Expand Up @@ -150,12 +158,12 @@ void Environment::CleanupHandles() {
void Environment::StartProfilerIdleNotifier() {
uv_prepare_start(&idle_prepare_handle_, [](uv_prepare_t* 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) {
Environment* env = ContainerOf(&Environment::idle_check_handle_, handle);
env->isolate()->GetCpuProfiler()->SetIdle(false);
env->isolate_data()->GetCpuProfiler()->SetIdle(false);
});
}

Expand Down
4 changes: 4 additions & 0 deletions src/env.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#include "req_wrap.h"
#include "util.h"
#include "uv.h"
#include "v8-profiler.h"
#include "v8.h"
#include "node.h"
#include "node_http2_state.h"
Expand Down Expand Up @@ -338,6 +339,8 @@ class IsolateData {
std::unordered_map<nghttp2_rcbuf*, v8::Eternal<v8::String>> http2_static_strs;
inline v8::Isolate* isolate() const;

v8::CpuProfiler* GetCpuProfiler();

private:
#define VP(PropertyName, StringValue) V(v8::Private, PropertyName)
#define VS(PropertyName, StringValue) V(v8::String, PropertyName)
Expand All @@ -353,6 +356,7 @@ class IsolateData {
uv_loop_t* const event_loop_;
uint32_t* const zero_fill_field_;
MultiIsolatePlatform* platform_;
v8::CpuProfiler* cpu_profiler_ = nullptr;

DISALLOW_COPY_AND_ASSIGN(IsolateData);
};
Expand Down

0 comments on commit e33b9fa

Please sign in to comment.