#ifndef V8_COMPILER_GRAPH_VISUALIZER_H_
#define V8_COMPILER_GRAPH_VISUALIZER_H_
#include <stdio.h>
#include <fstream>
#include <iosfwd>
#include <memory>
#include <optional>
#include <vector>
#include "src/common/globals.h"
#include "src/handles/handles.h"
#include "src/objects/code.h"
namespace v8 {
namespace internal {
class OptimizedCompilationInfo;
class SharedFunctionInfo;
class SourcePosition;
struct WasmInliningPosition;
namespace wasm {
struct WasmModule;
class WireBytesStorage;
}
namespace compiler {
class Graph;
class LiveRange;
class TopLevelLiveRange;
class Instruction;
class InstructionBlock;
class InstructionOperand;
class InstructionSequence;
class Node;
class NodeOrigin;
class NodeOriginTable;
class RegisterAllocationData;
class Schedule;
class SourcePositionTable;
class Type;
class JSONEscaped { … };
struct TurboJsonFile : public std::ofstream { … };
struct TurboCfgFile : public std::ofstream { … };
struct SourcePositionAsJSON { … };
V8_INLINE V8_EXPORT_PRIVATE SourcePositionAsJSON
AsJSON(const SourcePosition& sp) { … }
struct NodeOriginAsJSON { … };
V8_INLINE V8_EXPORT_PRIVATE NodeOriginAsJSON AsJSON(const NodeOrigin& no) { … }
std::ostream& operator<<(std::ostream& out, const SourcePositionAsJSON& pos);
std::ostream& operator<<(std::ostream& out, const NodeOriginAsJSON& asJSON);
class V8_EXPORT_PRIVATE SourceIdAssigner { … };
void JsonPrintFunctionSource(std::ostream& os, int source_id,
std::unique_ptr<char[]> function_name,
Handle<Script> script, Isolate* isolate,
Handle<SharedFunctionInfo> shared, bool with_key);
void JsonPrintAllBytecodeSources(std::ostream& os,
OptimizedCompilationInfo* info);
void JsonPrintBytecodeSource(std::ostream& os, int source_id,
std::unique_ptr<char[]> function_name,
DirectHandle<BytecodeArray> bytecode_array);
void JsonPrintAllSourceWithPositions(std::ostream& os,
OptimizedCompilationInfo* info,
Isolate* isolate);
#if V8_ENABLE_WEBASSEMBLY
void JsonPrintAllSourceWithPositionsWasm(
std::ostream& os, const wasm::WasmModule* module,
const wasm::WireBytesStorage* wire_bytes,
base::Vector<WasmInliningPosition> positions);
#endif
void JsonPrintFunctionSource(std::ostream& os, int source_id,
std::unique_ptr<char[]> function_name,
Handle<Script> script, Isolate* isolate,
Handle<SharedFunctionInfo> shared,
bool with_key = false);
std::unique_ptr<char[]> GetVisualizerLogFileName(OptimizedCompilationInfo* info,
const char* optional_base_dir,
const char* phase,
const char* suffix);
class JSONGraphWriter { … };
struct GraphAsJSON { … };
V8_INLINE V8_EXPORT_PRIVATE GraphAsJSON AsJSON(const Graph& g,
SourcePositionTable* p,
NodeOriginTable* o) { … }
V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
const GraphAsJSON& ad);
struct AsRPO { … };
V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, const AsRPO& ad);
struct AsC1VCompilation { … };
struct AsScheduledGraph { … };
std::ostream& operator<<(std::ostream& os, const AsScheduledGraph& scheduled);
struct AsC1V { … };
struct AsC1VRegisterAllocationData { … };
std::ostream& operator<<(std::ostream& os, const AsC1VCompilation& ac);
std::ostream& operator<<(std::ostream& os, const AsC1V& ac);
std::ostream& operator<<(std::ostream& os,
const AsC1VRegisterAllocationData& ac);
struct LiveRangeAsJSON { … };
std::ostream& operator<<(std::ostream& os,
const LiveRangeAsJSON& live_range_json);
struct TopLevelLiveRangeAsJSON { … };
std::ostream& operator<<(
std::ostream& os, const TopLevelLiveRangeAsJSON& top_level_live_range_json);
struct RegisterAllocationDataAsJSON { … };
std::ostream& operator<<(std::ostream& os,
const RegisterAllocationDataAsJSON& ac);
struct InstructionOperandAsJSON { … };
std::ostream& operator<<(std::ostream& os, const InstructionOperandAsJSON& o);
struct InstructionAsJSON { … };
std::ostream& operator<<(std::ostream& os, const InstructionAsJSON& i);
struct InstructionBlockAsJSON { … };
std::ostream& operator<<(std::ostream& os, const InstructionBlockAsJSON& b);
struct InstructionSequenceAsJSON { … };
std::ostream& operator<<(std::ostream& os, const InstructionSequenceAsJSON& s);
}
}
}
#endif