| Index: src/compiler/pipeline.cc
|
| diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc
|
| index 350de0b704c207e54908c95f835e45dfd57c9dd7..e53579a6feb4582d69727bfc9fdd80e169d2f64f 100644
|
| --- a/src/compiler/pipeline.cc
|
| +++ b/src/compiler/pipeline.cc
|
| @@ -400,23 +400,24 @@ struct TurboCfgFile : public std::ofstream {
|
| std::ios_base::app) {}
|
| };
|
|
|
| +struct TurboJsonFile : public std::ofstream {
|
| + TurboJsonFile(CompilationInfo* info, std::ios_base::openmode mode)
|
| + : std::ofstream(GetVisualizerLogFileName(info, nullptr, "json").get(),
|
| + mode) {}
|
| +};
|
|
|
| void TraceSchedule(CompilationInfo* info, Schedule* schedule) {
|
| if (FLAG_trace_turbo) {
|
| AllowHandleDereference allow_deref;
|
| - FILE* json_file = OpenVisualizerLogFile(info, nullptr, "json", "a+");
|
| - if (json_file != nullptr) {
|
| - OFStream json_of(json_file);
|
| - json_of << "{\"name\":\"Schedule\",\"type\":\"schedule\",\"data\":\"";
|
| - std::stringstream schedule_stream;
|
| - schedule_stream << *schedule;
|
| - std::string schedule_string(schedule_stream.str());
|
| - for (const auto& c : schedule_string) {
|
| - json_of << AsEscapedUC16ForJSON(c);
|
| - }
|
| - json_of << "\"},\n";
|
| - fclose(json_file);
|
| + TurboJsonFile json_of(info, std::ios_base::app);
|
| + json_of << "{\"name\":\"Schedule\",\"type\":\"schedule\",\"data\":\"";
|
| + std::stringstream schedule_stream;
|
| + schedule_stream << *schedule;
|
| + std::string schedule_string(schedule_stream.str());
|
| + for (const auto& c : schedule_string) {
|
| + json_of << AsEscapedUC16ForJSON(c);
|
| }
|
| + json_of << "\"},\n";
|
| }
|
| if (FLAG_trace_turbo_graph || FLAG_trace_turbo_scheduler) {
|
| AllowHandleDereference allow_deref;
|
| @@ -526,27 +527,22 @@ PipelineStatistics* CreatePipelineStatistics(CompilationInfo* info,
|
| }
|
|
|
| if (FLAG_trace_turbo) {
|
| - FILE* json_file = OpenVisualizerLogFile(info, nullptr, "json", "w+");
|
| - if (json_file != nullptr) {
|
| - OFStream json_of(json_file);
|
| - Handle<Script> script = info->script();
|
| - base::SmartArrayPointer<char> function_name = info->GetDebugName();
|
| - int pos = info->shared_info()->start_position();
|
| - json_of << "{\"function\":\"" << function_name.get()
|
| - << "\", \"sourcePosition\":" << pos << ", \"source\":\"";
|
| - if (!script->IsUndefined() && !script->source()->IsUndefined()) {
|
| - DisallowHeapAllocation no_allocation;
|
| - int start = info->shared_info()->start_position();
|
| - int len = info->shared_info()->end_position() - start;
|
| - String::SubStringRange source(String::cast(script->source()), start,
|
| - len);
|
| - for (const auto& c : source) {
|
| - json_of << AsEscapedUC16ForJSON(c);
|
| - }
|
| + TurboJsonFile json_of(info, std::ios_base::trunc);
|
| + Handle<Script> script = info->script();
|
| + base::SmartArrayPointer<char> function_name = info->GetDebugName();
|
| + int pos = info->shared_info()->start_position();
|
| + json_of << "{\"function\":\"" << function_name.get()
|
| + << "\", \"sourcePosition\":" << pos << ", \"source\":\"";
|
| + if (!script->IsUndefined() && !script->source()->IsUndefined()) {
|
| + DisallowHeapAllocation no_allocation;
|
| + int start = info->shared_info()->start_position();
|
| + int len = info->shared_info()->end_position() - start;
|
| + String::SubStringRange source(String::cast(script->source()), start, len);
|
| + for (const auto& c : source) {
|
| + json_of << AsEscapedUC16ForJSON(c);
|
| }
|
| - json_of << "\",\n\"phases\":[";
|
| - fclose(json_file);
|
| }
|
| + json_of << "\",\n\"phases\":[";
|
| }
|
|
|
| return pipeline_statistics;
|
| @@ -667,13 +663,9 @@ PipelineWasmCompilationJob::CreateGraphImpl() {
|
| PipelineWasmCompilationJob::Status
|
| PipelineWasmCompilationJob::OptimizeGraphImpl() {
|
| if (FLAG_trace_turbo) {
|
| - FILE* json_file = OpenVisualizerLogFile(info(), nullptr, "json", "w+");
|
| - if (json_file != nullptr) {
|
| - OFStream json_of(json_file);
|
| - json_of << "{\"function\":\"" << info()->GetDebugName().get()
|
| - << "\", \"source\":\"\",\n\"phases\":[";
|
| - fclose(json_file);
|
| - }
|
| + TurboJsonFile json_of(info(), std::ios_base::trunc);
|
| + json_of << "{\"function\":\"" << info()->GetDebugName().get()
|
| + << "\", \"source\":\"\",\n\"phases\":[";
|
| }
|
|
|
| pipeline_.RunPrintAndVerify("Machine", true);
|
| @@ -1309,12 +1301,9 @@ struct PrintGraphPhase {
|
|
|
| { // Print JSON.
|
| AllowHandleDereference allow_deref;
|
| - FILE* json_file = OpenVisualizerLogFile(info, nullptr, "json", "a+");
|
| - if (json_file == nullptr) return;
|
| - OFStream json_of(json_file);
|
| + TurboJsonFile json_of(info, std::ios_base::app);
|
| json_of << "{\"name\":\"" << phase << "\",\"type\":\"graph\",\"data\":"
|
| << AsJSON(*graph, data->source_positions()) << "},\n";
|
| - fclose(json_file);
|
| }
|
|
|
| if (FLAG_trace_turbo_graph) { // Simple textual RPO.
|
| @@ -1509,13 +1498,9 @@ Handle<Code> Pipeline::GenerateCodeForCodeStub(Isolate* isolate,
|
| DCHECK_NOT_NULL(data.schedule());
|
|
|
| if (FLAG_trace_turbo) {
|
| - FILE* json_file = OpenVisualizerLogFile(&info, nullptr, "json", "w+");
|
| - if (json_file != nullptr) {
|
| - OFStream json_of(json_file);
|
| - json_of << "{\"function\":\"" << info.GetDebugName().get()
|
| - << "\", \"source\":\"\",\n\"phases\":[";
|
| - fclose(json_file);
|
| - }
|
| + TurboJsonFile json_of(&info, std::ios_base::trunc);
|
| + json_of << "{\"function\":\"" << info.GetDebugName().get()
|
| + << "\", \"source\":\"\",\n\"phases\":[";
|
| pipeline.Run<PrintGraphPhase>("Machine");
|
| }
|
|
|
| @@ -1564,13 +1549,9 @@ Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info,
|
| PipelineImpl pipeline(&data);
|
|
|
| if (FLAG_trace_turbo) {
|
| - FILE* json_file = OpenVisualizerLogFile(info, nullptr, "json", "w+");
|
| - if (json_file != nullptr) {
|
| - OFStream json_of(json_file);
|
| - json_of << "{\"function\":\"" << info->GetDebugName().get()
|
| - << "\", \"source\":\"\",\n\"phases\":[";
|
| - fclose(json_file);
|
| - }
|
| + TurboJsonFile json_of(info, std::ios_base::trunc);
|
| + json_of << "{\"function\":\"" << info->GetDebugName().get()
|
| + << "\", \"source\":\"\",\n\"phases\":[";
|
| }
|
| // TODO(rossberg): Should this really be untyped?
|
| pipeline.RunPrintAndVerify("Machine", true);
|
| @@ -1689,25 +1670,21 @@ Handle<Code> PipelineImpl::GenerateCode(Linkage* linkage) {
|
| v8::internal::CodeGenerator::PrintCode(code, info());
|
|
|
| if (FLAG_trace_turbo) {
|
| - FILE* json_file = OpenVisualizerLogFile(info(), nullptr, "json", "a+");
|
| - if (json_file != nullptr) {
|
| - OFStream json_of(json_file);
|
| - json_of
|
| - << "{\"name\":\"disassembly\",\"type\":\"disassembly\",\"data\":\"";
|
| + TurboJsonFile json_of(info(), std::ios_base::app);
|
| + json_of << "{\"name\":\"disassembly\",\"type\":\"disassembly\",\"data\":\"";
|
| #if ENABLE_DISASSEMBLER
|
| - std::stringstream disassembly_stream;
|
| - code->Disassemble(nullptr, disassembly_stream);
|
| - std::string disassembly_string(disassembly_stream.str());
|
| - for (const auto& c : disassembly_string) {
|
| - json_of << AsEscapedUC16ForJSON(c);
|
| - }
|
| -#endif // ENABLE_DISASSEMBLER
|
| - json_of << "\"}\n],\n";
|
| - json_of << "\"nodePositions\":";
|
| - json_of << data->source_position_output();
|
| - json_of << "}";
|
| - fclose(json_file);
|
| + std::stringstream disassembly_stream;
|
| + code->Disassemble(nullptr, disassembly_stream);
|
| + std::string disassembly_string(disassembly_stream.str());
|
| + for (const auto& c : disassembly_string) {
|
| + json_of << AsEscapedUC16ForJSON(c);
|
| }
|
| +#endif // ENABLE_DISASSEMBLER
|
| + json_of << "\"}\n],\n";
|
| + json_of << "\"nodePositions\":";
|
| + json_of << data->source_position_output();
|
| + json_of << "}";
|
| +
|
| OFStream os(stdout);
|
| os << "---------------------------------------------------\n"
|
| << "Finished compiling method " << info()->GetDebugName().get()
|
|
|