// Copyright 2013 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. #include "src/compiler/graph-visualizer.h" #include #include #include #include "src/base/vector.h" #include "src/codegen/optimized-compilation-info.h" #include "src/codegen/source-position.h" #include "src/compiler/all-nodes.h" #include "src/compiler/backend/register-allocation.h" #include "src/compiler/backend/register-allocator.h" #include "src/compiler/compiler-source-position-table.h" #include "src/compiler/graph.h" #include "src/compiler/node-origin-table.h" #include "src/compiler/node-properties.h" #include "src/compiler/node.h" #include "src/compiler/opcodes.h" #include "src/compiler/operator-properties.h" #include "src/compiler/operator.h" #include "src/compiler/schedule.h" #include "src/objects/script-inl.h" #include "src/objects/shared-function-info.h" #include "src/utils/ostreams.h" #if V8_ENABLE_WEBASSEMBLY #include "src/wasm/function-body-decoder.h" #include "src/wasm/names-provider.h" #include "src/wasm/string-builder.h" #endif namespace v8 { namespace internal { namespace compiler { const char* get_cached_trace_turbo_filename(OptimizedCompilationInfo* info) { if (!info->trace_turbo_filename()) { info->set_trace_turbo_filename(GetVisualizerLogFileName( info, v8_flags.trace_turbo_path, nullptr, "json")); } return info->trace_turbo_filename(); } TurboJsonFile::TurboJsonFile(OptimizedCompilationInfo* info, std::ios_base::openmode mode) : std::ofstream(get_cached_trace_turbo_filename(info), mode) {} TurboJsonFile::~TurboJsonFile() { flush(); } TurboCfgFile::TurboCfgFile(Isolate* isolate) : std::ofstream(Isolate::GetTurboCfgFileName(isolate).c_str(), std::ios_base::app) {} TurboCfgFile::~TurboCfgFile() { flush(); } std::ostream& operator<<(std::ostream& out, const SourcePositionAsJSON& asJSON) { asJSON.sp.PrintJson(out); return out; } std::ostream& operator<<(std::ostream& out, const NodeOriginAsJSON& asJSON) { asJSON.no.PrintJson(out); return out; } void JsonPrintBytecodeSource(std::ostream& os, int source_id, std::unique_ptr function_name, Handle bytecode_array) { os << "\"" << source_id << "\" : {"; os << "\"sourceId\": " << source_id; os << ", \"functionName\": \"" << function_name.get() << "\""; os << ", \"bytecodeSource\": "; bytecode_array->PrintJson(os); os << "}"; } void JsonPrintFunctionSource(std::ostream& os, int source_id, std::unique_ptr function_name, Handle