summaryrefslogtreecommitdiff
path: root/deps/v8/src/diagnostics/system-jit-win.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/diagnostics/system-jit-win.cc')
-rw-r--r--deps/v8/src/diagnostics/system-jit-win.cc23
1 files changed, 20 insertions, 3 deletions
diff --git a/deps/v8/src/diagnostics/system-jit-win.cc b/deps/v8/src/diagnostics/system-jit-win.cc
index a4c4237c16..120020597a 100644
--- a/deps/v8/src/diagnostics/system-jit-win.cc
+++ b/deps/v8/src/diagnostics/system-jit-win.cc
@@ -4,10 +4,12 @@
#include "src/diagnostics/system-jit-win.h"
+#include "src/api/api-inl.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"
+#include "src/objects/shared-function-info.h"
#if !defined(V8_ENABLE_SYSTEM_INSTRUMENTATION)
#error "This file is only compiled if v8_enable_system_instrumentation"
@@ -29,6 +31,20 @@ using ScriptMapType = std::unordered_set<int>;
static base::LazyInstance<ScriptMapType>::type script_map =
LAZY_INSTANCE_INITIALIZER;
+// TODO(v8/11911): UnboundScript::GetLineNumber should be replaced
+SharedFunctionInfo GetSharedFunctionInfo(const JitCodeEvent* event) {
+ return event->script.IsEmpty() ? SharedFunctionInfo()
+ : *Utils::OpenHandle(*event->script);
+}
+
+int GetScriptLineNumber(const JitCodeEvent* event) {
+ auto sfi = GetSharedFunctionInfo(event);
+ return sfi.is_null()
+ ? -1 // invalid sentinel number
+ : Script::cast(sfi.script()).GetLineNumber(sfi.StartPosition()) +
+ 1;
+}
+
void Register() {
DCHECK(!TraceLoggingProviderEnabled(g_v8Provider, 0, 0));
TraceLoggingRegister(g_v8Provider);
@@ -54,7 +70,7 @@ void EventHandler(const JitCodeEvent* event) {
static_cast<int>(method_name.size()));
v8::Isolate* script_context = event->isolate;
- auto script = event->script;
+ v8::Local<v8::UnboundScript> script = event->script;
int script_id = 0;
if (!script.IsEmpty()) {
// if the first time seeing this source file, log the SourceLoad event
@@ -62,7 +78,7 @@ void EventHandler(const JitCodeEvent* event) {
if (script_map.Pointer()->find(script_id) == script_map.Pointer()->end()) {
script_map.Pointer()->insert(script_id);
- auto script_name = script->GetScriptName();
+ v8::Local<v8::Value> script_name = script->GetScriptName();
std::wstring wstr_name(0, L'\0');
if (script_name->IsString()) {
auto v8str_name = script_name.As<v8::String>();
@@ -103,7 +119,8 @@ void EventHandler(const JitCodeEvent* event) {
(uint32_t)0, // MethodId
(uint16_t)0, // MethodFlags
(uint16_t)0, // MethodAddressRangeId
- (uint64_t)script_id, (uint32_t)0, (uint32_t)0, // Line & Column
+ (uint64_t)script_id, (uint32_t)GetScriptLineNumber(event),
+ (uint32_t)0, // Line & Column
method_name);
}