[diagnostics] Enable ETW stack-walking events build flag
Feedback from Microsoft partners indicates that it would be beneficial to enable ETW stack-walking events by default. This is difficult, because the --interpreted-frames-native-stack flag comes with a significant perf degradation. Ideally, we would turn this flag on dynamically, only when a ETW recorder is actively triggering the provider. Unfortunately, the flag in its current state cannot be enabled dynamically. In light of this, we have decided to only flip the build flag. Bug: v8:11043 Change-Id: Id883b9bcd635b41139450ab2d5c92511422525a3 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2773792 Reviewed-by: Camillo Bruni <cbruni@chromium.org> Commit-Queue: Sara Tang <sartang@microsoft.com> Cr-Commit-Position: refs/heads/master@{#73784}
This commit is contained in:
parent
4ec2951ee3
commit
f0061332ef
2
BUILD.gn
2
BUILD.gn
@ -41,7 +41,7 @@ declare_args() {
|
||||
v8_enable_future = false
|
||||
|
||||
# Sets -DSYSTEM_INSTRUMENTATION. Enables OS-dependent event tracing
|
||||
v8_enable_system_instrumentation = false
|
||||
v8_enable_system_instrumentation = true
|
||||
|
||||
# Sets the GUID for the ETW provider
|
||||
v8_etw_guid = ""
|
||||
|
@ -4055,7 +4055,7 @@ bool Shell::SetOptions(int argc, char* argv[]) {
|
||||
} else if (strcmp(argv[i], "--fuzzy-module-file-extensions") == 0) {
|
||||
options.fuzzy_module_file_extensions = true;
|
||||
argv[i] = nullptr;
|
||||
#ifdef V8_ENABLE_SYSTEM_INSTRUMENTATION
|
||||
#if defined(V8_OS_WIN) && defined(V8_ENABLE_SYSTEM_INSTRUMENTATION)
|
||||
} else if (strcmp(argv[i], "--enable-system-instrumentation") == 0) {
|
||||
options.enable_system_instrumentation = true;
|
||||
options.trace_enabled = true;
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include "src/diagnostics/system-jit-win.h"
|
||||
|
||||
#include "src/base/lazy-instance.h"
|
||||
#include "src/base/logging.h"
|
||||
#include "src/diagnostics/system-jit-metadata-win.h"
|
||||
#include "src/libplatform/tracing/recorder.h"
|
||||
@ -21,7 +22,8 @@ TRACELOGGING_DECLARE_PROVIDER(g_v8Provider);
|
||||
TRACELOGGING_DEFINE_PROVIDER(g_v8Provider, "V8.js", (V8_ETW_GUID));
|
||||
|
||||
using ScriptMapType = std::unordered_set<int>;
|
||||
ScriptMapType* script_map = new ScriptMapType();
|
||||
static base::LazyInstance<ScriptMapType>::type script_map =
|
||||
LAZY_INSTANCE_INITIALIZER;
|
||||
|
||||
void Register() {
|
||||
DCHECK(!TraceLoggingProviderEnabled(g_v8Provider, 0, 0));
|
||||
@ -53,8 +55,8 @@ void EventHandler(const JitCodeEvent* event) {
|
||||
if (!script.IsEmpty()) {
|
||||
// if the first time seeing this source file, log the SourceLoad event
|
||||
script_id = script->GetId();
|
||||
if (script_map->find(script_id) == script_map->end()) {
|
||||
script_map->insert(script_id);
|
||||
if (script_map.Pointer()->find(script_id) == script_map.Pointer()->end()) {
|
||||
script_map.Pointer()->insert(script_id);
|
||||
|
||||
auto script_name = script->GetScriptName();
|
||||
std::wstring wstr_name(0, L'\0');
|
||||
|
@ -17,24 +17,24 @@ namespace v8 {
|
||||
namespace platform {
|
||||
namespace tracing {
|
||||
|
||||
TRACELOGGING_DECLARE_PROVIDER(g_v8Provider);
|
||||
TRACELOGGING_DECLARE_PROVIDER(g_v8LibProvider);
|
||||
|
||||
TRACELOGGING_DEFINE_PROVIDER(g_v8Provider, "V8.js", (V8_ETW_GUID));
|
||||
TRACELOGGING_DEFINE_PROVIDER(g_v8LibProvider, "V8.js", (V8_ETW_GUID));
|
||||
|
||||
Recorder::Recorder() { TraceLoggingRegister(g_v8Provider); }
|
||||
Recorder::Recorder() { TraceLoggingRegister(g_v8LibProvider); }
|
||||
|
||||
Recorder::~Recorder() {
|
||||
if (g_v8Provider) {
|
||||
TraceLoggingUnregister(g_v8Provider);
|
||||
if (g_v8LibProvider) {
|
||||
TraceLoggingUnregister(g_v8LibProvider);
|
||||
}
|
||||
}
|
||||
|
||||
bool Recorder::IsEnabled() {
|
||||
return TraceLoggingProviderEnabled(g_v8Provider, 0, 0);
|
||||
return TraceLoggingProviderEnabled(g_v8LibProvider, 0, 0);
|
||||
}
|
||||
|
||||
bool Recorder::IsEnabled(const uint8_t level) {
|
||||
return TraceLoggingProviderEnabled(g_v8Provider, level, 0);
|
||||
return TraceLoggingProviderEnabled(g_v8LibProvider, level, 0);
|
||||
}
|
||||
|
||||
void Recorder::AddEvent(TraceObject* trace_event) {
|
||||
@ -49,7 +49,7 @@ void Recorder::AddEvent(TraceObject* trace_event) {
|
||||
trace_event->category_enabled_flag()),
|
||||
-1, wCategoryGroupName, 4096);
|
||||
|
||||
TraceLoggingWrite(g_v8Provider, "", TraceLoggingValue(wName, "Event Name"),
|
||||
TraceLoggingWrite(g_v8LibProvider, "", TraceLoggingValue(wName, "Event Name"),
|
||||
TraceLoggingValue(trace_event->pid(), "pid"),
|
||||
TraceLoggingValue(trace_event->tid(), "tid"),
|
||||
TraceLoggingValue(trace_event->ts(), "ts"),
|
||||
|
Loading…
Reference in New Issue
Block a user