Commit 525b3961 authored by Peter Marshall's avatar Peter Marshall Committed by Commit Bot

[cpu-profiler] Fix a leak caused by re-logging existing functions.

Don't re-log all existing functions during StartProcessorIfNotStarted().
They will already be in the CodeMap attached to the ProfileGenerator and
re-logging them causes leaks. See the linked bug for more details.

Bug: v8:8253
Change-Id: Ibb1a1ab2431c588e8c3a3a9ff714767cdf61a88e
Reviewed-on: https://chromium-review.googlesource.com/1256763
Commit-Queue: Peter Marshall <petermarshall@chromium.org>
Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#56336}
parent aabed218
...@@ -368,8 +368,11 @@ void CpuProfiler::StartProcessorIfNotStarted() { ...@@ -368,8 +368,11 @@ void CpuProfiler::StartProcessorIfNotStarted() {
// Disable logging when using the new implementation. // Disable logging when using the new implementation.
saved_is_logging_ = logger->is_logging_; saved_is_logging_ = logger->is_logging_;
logger->is_logging_ = false; logger->is_logging_ = false;
bool codemap_needs_initialization = false;
if (!generator_) { if (!generator_) {
generator_.reset(new ProfileGenerator(profiles_.get())); generator_.reset(new ProfileGenerator(profiles_.get()));
codemap_needs_initialization = true;
CreateEntriesForRuntimeCallStats(); CreateEntriesForRuntimeCallStats();
} }
processor_.reset(new ProfilerEventsProcessor(isolate_, generator_.get(), processor_.reset(new ProfilerEventsProcessor(isolate_, generator_.get(),
...@@ -382,12 +385,14 @@ void CpuProfiler::StartProcessorIfNotStarted() { ...@@ -382,12 +385,14 @@ void CpuProfiler::StartProcessorIfNotStarted() {
isolate_->set_is_profiling(true); isolate_->set_is_profiling(true);
// Enumerate stuff we already have in the heap. // Enumerate stuff we already have in the heap.
DCHECK(isolate_->heap()->HasBeenSetUp()); DCHECK(isolate_->heap()->HasBeenSetUp());
if (!FLAG_prof_browser_mode) { if (codemap_needs_initialization) {
logger->LogCodeObjects(); if (!FLAG_prof_browser_mode) {
logger->LogCodeObjects();
}
logger->LogCompiledFunctions();
logger->LogAccessorCallbacks();
LogBuiltins();
} }
logger->LogCompiledFunctions();
logger->LogAccessorCallbacks();
LogBuiltins();
// Enable stack sampling. // Enable stack sampling.
processor_->AddCurrentStack(isolate_); processor_->AddCurrentStack(isolate_);
processor_->StartSynchronously(); processor_->StartSynchronously();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment