From: Ali Ijaz Sheikh Date: Fri, 30 Oct 2015 18:57:23 +0000 (-0700) Subject: deps: backport 9da3ab6 from V8 upstream X-Git-Tag: v4.4.0~93 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c0db8df18414e520d97df6c9880e2c3b0ab95fd4;p=platform%2Fupstream%2Fnodejs.git deps: backport 9da3ab6 from V8 upstream This patch exposes a new flag perf_basic_prof_only_functions (disabled by default) that can be useful for the use-case of running always-on profiling on long running production jobs. Original commit https://github.com/v8/v8/commit/9da3ab661fe7190fcb99bd99db30cf95913d3659 New flag --perf_basic_prof_only_functions Restricts linux perf-event code range reporting to functions only (i.e. on stubs.) While this makes the gathered ticks less accurate, it reduces the growth of the /tmp/perf-${pid}.map file. BUG=v8:3453 R=hablich@chromium.org,danno@chromium.org LOG=N Review URL: https://codereview.chromium.org/1292743002 Cr-Commit-Position: refs/heads/master@{#30179} PR-URL: https://github.com/nodejs/node/pull/3609 Reviewed-By: James M Snell Reviewed-By: Trevor Norris --- diff --git a/deps/v8/src/flag-definitions.h b/deps/v8/src/flag-definitions.h index 7961127..9a9c4a5 100644 --- a/deps/v8/src/flag-definitions.h +++ b/deps/v8/src/flag-definitions.h @@ -929,6 +929,9 @@ DEFINE_BOOL(ll_prof, false, "Enable low-level linux profiler.") DEFINE_BOOL(perf_basic_prof, false, "Enable perf linux profiler (basic support).") DEFINE_NEG_IMPLICATION(perf_basic_prof, compact_code_space) +DEFINE_BOOL(perf_basic_prof_only_functions, false, + "Only report function code ranges to perf (i.e. no stubs).") +DEFINE_IMPLICATION(perf_basic_prof_only_functions, perf_basic_prof) DEFINE_STRING(gc_fake_mmap, "/tmp/__v8_gc__", "Specify the name of the file for fake gc mmap used in ll_prof") DEFINE_BOOL(log_internal_timer_events, false, "Time internal events.") diff --git a/deps/v8/src/log.cc b/deps/v8/src/log.cc index d584259..52172f2 100644 --- a/deps/v8/src/log.cc +++ b/deps/v8/src/log.cc @@ -290,6 +290,12 @@ void PerfBasicLogger::LogRecordedBuffer(Code* code, int length) { DCHECK(code->instruction_start() == code->address() + Code::kHeaderSize); + if (FLAG_perf_basic_prof_only_functions && + (code->kind() != Code::FUNCTION && + code->kind() != Code::OPTIMIZED_FUNCTION)) { + return; + } + base::OS::FPrint(perf_output_handle_, "%llx %x %.*s\n", reinterpret_cast(code->instruction_start()), code->instruction_size(), length, name);