v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
profiler-listener.h
Go to the documentation of this file.
1// Copyright 2016 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_PROFILER_PROFILER_LISTENER_H_
6#define V8_PROFILER_PROFILER_LISTENER_H_
7
8#include <memory>
9
10#include "include/v8-profiler.h"
14
15namespace v8 {
16namespace internal {
17
18class CodeEventsContainer;
19class CodeDeoptEventRecord;
20
22 public:
23 virtual void CodeEventHandler(const CodeEventsContainer& evt_rec) = 0;
24 virtual ~CodeEventObserver() = default;
25};
26
29 public:
31 CodeEntryStorage& code_entry_storage,
32 WeakCodeRegistry& weak_code_registry,
37
38 void CodeCreateEvent(CodeTag tag, DirectHandle<AbstractCode> code,
39 const char* name) override;
40 void CodeCreateEvent(CodeTag tag, DirectHandle<AbstractCode> code,
41 DirectHandle<Name> name) override;
42 void CodeCreateEvent(CodeTag tag, DirectHandle<AbstractCode> code,
44 DirectHandle<Name> script_name) override;
45 void CodeCreateEvent(CodeTag tag, DirectHandle<AbstractCode> code,
47 DirectHandle<Name> script_name, int line,
48 int column) override;
49#if V8_ENABLE_WEBASSEMBLY
50 void CodeCreateEvent(CodeTag tag, const wasm::WasmCode* code,
51 wasm::WasmName name, const char* source_url,
52 int code_offset, int script_id) override;
53#endif // V8_ENABLE_WEBASSEMBLY
54
55 void CallbackEvent(DirectHandle<Name> name, Address entry_point) override;
56 void GetterCallbackEvent(DirectHandle<Name> name,
57 Address entry_point) override;
58 void SetterCallbackEvent(DirectHandle<Name> name,
59 Address entry_point) override;
60 void RegExpCodeCreateEvent(DirectHandle<AbstractCode> code,
62 RegExpFlags flags) override;
63 void CodeMoveEvent(Tagged<InstructionStream> from,
64 Tagged<InstructionStream> to) override;
65 void BytecodeMoveEvent(Tagged<BytecodeArray> from,
66 Tagged<BytecodeArray> to) override;
67 void SharedFunctionInfoMoveEvent(Address from, Address to) override {}
68 void NativeContextMoveEvent(Address from, Address to) override;
69 void CodeMovingGCEvent() override {}
70 void CodeDisableOptEvent(DirectHandle<AbstractCode> code,
71 DirectHandle<SharedFunctionInfo> shared) override;
72 void CodeDeoptEvent(DirectHandle<Code> code, DeoptimizeKind kind, Address pc,
73 int fp_to_sp_delta) override;
76 const char* reason) override {}
77 void WeakCodeClearEvent() override;
78
79 void OnHeapObjectDeletion(CodeEntry*) override;
80
81 // Invoked after a mark-sweep cycle.
82 void CodeSweepEvent();
83
84 const char* GetName(Tagged<Name> name) {
85 return code_entries_.strings().GetName(name);
86 }
87 const char* GetName(int args_count) {
88 return code_entries_.strings().GetName(args_count);
89 }
90 const char* GetName(const char* name) {
91 return code_entries_.strings().GetCopy(name);
92 }
93 const char* GetName(base::Vector<const char> name);
94 const char* GetConsName(const char* prefix, Tagged<Name> name) {
95 return code_entries_.strings().GetConsName(prefix, name);
96 }
97
98 void set_observer(CodeEventObserver* observer) { observer_ = observer; }
99
100 private:
101 const char* GetFunctionName(Tagged<SharedFunctionInfo>);
102
103 void AttachDeoptInlinedFrames(DirectHandle<Code> code,
105 Tagged<Name> InferScriptName(Tagged<Name> name,
108 observer_->CodeEventHandler(evt_rec);
109 }
110
116};
117
118} // namespace internal
119} // namespace v8
120
121#endif // V8_PROFILER_PROFILER_LISTENER_H_
Builtins::Kind kind
Definition builtins.cc:40
virtual void CodeEventHandler(const CodeEventsContainer &evt_rec)=0
virtual ~CodeEventObserver()=default
ProfilerListener(const ProfilerListener &)=delete
const char * GetName(int args_count)
void set_observer(CodeEventObserver *observer)
void CodeDependencyChangeEvent(DirectHandle< Code > code, DirectHandle< SharedFunctionInfo > sfi, const char *reason) override
const CpuProfilingNamingMode naming_mode_
const char * GetName(const char *name)
void SharedFunctionInfoMoveEvent(Address from, Address to) override
const char * GetName(Tagged< Name > name)
const char * GetConsName(const char *prefix, Tagged< Name > name)
V8_INLINE void DispatchCodeEvent(const CodeEventsContainer &evt_rec)
ProfilerListener & operator=(const ProfilerListener &)=delete
CpuProfilingNamingMode
@ kDebugNaming
#define V8_EXPORT_PRIVATE
Definition macros.h:460
#define V8_INLINE
Definition v8config.h:500