blob: 181e39d14c41c49777a42ecb7102abf9d43870db [file] [log] [blame]
// Copyright 2023 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/maglev/maglev-pipeline-statistics.h"
#include "src/compiler/zone-stats.h"
#include "src/objects/js-function-inl.h"
#include "src/objects/shared-function-info.h"
namespace v8 {
namespace internal {
namespace maglev {
constexpr char MaglevPipelineStatistics::kTraceCategory[];
MaglevPipelineStatistics::MaglevPipelineStatistics(
maglev::MaglevCompilationInfo* info,
std::shared_ptr<CompilationStatistics> compilation_stats,
compiler::ZoneStats* zone_stats)
: Base(info->zone(), zone_stats, compilation_stats, CodeKind::MAGLEV) {
set_function_name(info->toplevel_function()->shared()->DebugNameCStr().get());
}
MaglevPipelineStatistics::~MaglevPipelineStatistics() {
if (Base::InPhaseKind()) EndPhaseKind();
}
void MaglevPipelineStatistics::BeginPhaseKind(const char* name) {
if (Base::InPhaseKind()) EndPhaseKind();
Base::BeginPhaseKind(name);
TRACE_EVENT_BEGIN1(kTraceCategory, name, "kind",
CodeKindToString(code_kind()));
}
void MaglevPipelineStatistics::EndPhaseKind() {
CompilationStatistics::BasicStats diff;
Base::EndPhaseKind(&diff);
TRACE_EVENT_END2(kTraceCategory, phase_kind_name(), "kind",
CodeKindToString(code_kind()), "stats",
TRACE_STR_COPY(diff.AsJSON().c_str()));
}
void MaglevPipelineStatistics::BeginPhase(const char* name) {
Base::BeginPhase(name);
TRACE_EVENT_BEGIN1(kTraceCategory, phase_name(), "kind",
CodeKindToString(code_kind()));
}
void MaglevPipelineStatistics::EndPhase() {
CompilationStatistics::BasicStats diff;
Base::EndPhase(&diff);
TRACE_EVENT_END2(kTraceCategory, phase_name(), "kind",
CodeKindToString(code_kind()), "stats",
TRACE_STR_COPY(diff.AsJSON().c_str()));
}
} // namespace maglev
} // namespace internal
} // namespace v8