v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
etw-isolate-load-script-data-win.h
Go to the documentation of this file.
1// Copyright 2024 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_DIAGNOSTICS_ETW_ISOLATE_LOAD_SCRIPT_DATA_WIN_H_
6#define V8_DIAGNOSTICS_ETW_ISOLATE_LOAD_SCRIPT_DATA_WIN_H_
7
8#include <windows.h>
9
10#include <memory>
11#include <string>
12#include <unordered_map>
13#include <unordered_set>
14
15#include "include/v8-isolate.h"
18
19namespace v8 {
20namespace internal {
21namespace ETWJITInterface {
22
24 public:
25 explicit IsolateLoadScriptData(Isolate* isolate);
27
28 static void AddIsolate(Isolate* isolate);
29 static void RemoveIsolate(Isolate* isolate);
30 static void UpdateAllIsolates(bool etw_enabled, uint32_t options);
31 static bool MaybeAddLoadedScript(Isolate* isolate, int script_id);
32 static void EnableLog(
33 Isolate* isolate, size_t event_id,
34 std::weak_ptr<EtwIsolateCaptureStateMonitor> weak_monitor,
35 uint32_t options);
36 static void DisableLog(Isolate* isolate, size_t event_id);
37
38 static void EnableLogWithFilterDataOnAllIsolates(const uint8_t* data,
39 size_t size,
40 uint32_t options);
41 static void EnableLogWithFilterData(
42 Isolate* isolate, size_t event_id,
43 const std::string& EnableLogWithFilterData,
44 std::weak_ptr<EtwIsolateCaptureStateMonitor> weak_monitor,
45 uint32_t options);
46
47 private:
48 static IsolateLoadScriptData& GetData(Isolate* isolate);
49
51 size_t event_id;
52 std::weak_ptr<EtwIsolateCaptureStateMonitor> weak_monitor;
53 uint32_t options;
54 };
55
56 void EnqueueEnableLog(
57 std::weak_ptr<EtwIsolateCaptureStateMonitor> weak_monitor,
58 uint32_t options);
59
61 size_t event_id;
62 std::string payload;
63 std::weak_ptr<EtwIsolateCaptureStateMonitor> weak_monitor;
64 uint32_t options;
65 };
66
67 void EnqueueEnableLogWithFilterData(
68 const std::string& etw_filter_payload,
69 std::weak_ptr<EtwIsolateCaptureStateMonitor> weak_monitor,
70 uint32_t options);
71
72 void EnqueueDisableLog();
73
74 bool IsScriptLoaded(int script_id) const;
75 void AddLoadedScript(int script_id);
76 void RemoveAllLoadedScripts();
77
78 size_t CurrentEventId() const;
79
80 Isolate* isolate_ = nullptr;
81 std::unordered_set<int> loaded_scripts_ids_;
82 std::atomic<size_t> event_id_ = 0;
83};
84
86
88 std::unordered_map<v8::internal::Isolate*, IsolateLoadScriptData>;
90
91using FilterDataType = std::string;
92// Used when Isolates are created during an ETW tracing session.
94
95} // namespace ETWJITInterface
96} // namespace internal
97} // namespace v8
98
99#endif // V8_DIAGNOSTICS_ETW_ISOLATE_LOAD_SCRIPT_DATA_WIN_H_
Isolate * isolate_
base::LazyInstance< IsolateMapType >::type isolate_map
void AddIsolate(Isolate *isolate)
void RemoveIsolate(Isolate *isolate)
base::LazyInstance< FilterDataType >::type etw_filter_payload_glob
std::unordered_map< v8::internal::Isolate *, IsolateLoadScriptData > IsolateMapType
#define V8_NOEXCEPT
#define V8_EXPORT_PRIVATE
Definition macros.h:460
typename LazyStaticInstance< T, CreateTrait, InitOnceTrait, DestroyTrait >::type type