blob: 453258d28bc7f05ce46d62c575f7979de7eb8305 [file] [log] [blame]
// Copyright 2024 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_TRACING_PERFETTO_LOGGER_H_
#define V8_TRACING_PERFETTO_LOGGER_H_
#include "src/logging/code-events.h"
namespace v8 {
namespace internal {
class Isolate;
// Implementation that writes events to a Perfetto data source.
class PerfettoLogger : public LogEventListener {
public:
static void RegisterIsolate(Isolate* isolate);
static void UnregisterIsolate(Isolate* isolate);
static void OnCodeDataSourceStart();
static void OnCodeDataSourceStop();
explicit PerfettoLogger(Isolate* isolate);
~PerfettoLogger() override;
void LogExistingCode();
void CodeCreateEvent(CodeTag tag, Handle<AbstractCode> code,
const char* name) override;
void CodeCreateEvent(CodeTag tag, Handle<AbstractCode> code,
Handle<Name> name) override;
void CodeCreateEvent(CodeTag tag, Handle<AbstractCode> code,
Handle<SharedFunctionInfo> shared,
Handle<Name> script_name) override;
void CodeCreateEvent(CodeTag tag, Handle<AbstractCode> code,
Handle<SharedFunctionInfo> shared,
Handle<Name> script_name, int line, int column) override;
#if V8_ENABLE_WEBASSEMBLY
void CodeCreateEvent(CodeTag tag, const wasm::WasmCode* code,
wasm::WasmName name, const char* source_url,
int code_offset, int script_id) override;
#endif // V8_ENABLE_WEBASSEMBLY
void CallbackEvent(Handle<Name> name, Address entry_point) override;
void GetterCallbackEvent(Handle<Name> name, Address entry_point) override;
void SetterCallbackEvent(Handle<Name> name, Address entry_point) override;
void RegExpCodeCreateEvent(Handle<AbstractCode> code,
Handle<String> source) override;
void CodeMoveEvent(Tagged<InstructionStream> from,
Tagged<InstructionStream> to) override;
void BytecodeMoveEvent(Tagged<BytecodeArray> from,
Tagged<BytecodeArray> to) override;
void SharedFunctionInfoMoveEvent(Address from, Address to) override;
void NativeContextMoveEvent(Address from, Address to) override;
void CodeMovingGCEvent() override;
void CodeDisableOptEvent(Handle<AbstractCode> code,
Handle<SharedFunctionInfo> shared) override;
void CodeDeoptEvent(Handle<Code> code, DeoptimizeKind kind, Address pc,
int fp_to_sp_delta) override;
void CodeDependencyChangeEvent(Handle<Code> code,
Handle<SharedFunctionInfo> shared,
const char* reason) override;
void WeakCodeClearEvent() override;
bool is_listening_to_code_events() override;
private:
Isolate& isolate_;
};
} // namespace internal
} // namespace v8
#endif // V8_TRACING_PERFETTO_LOGGER_H_