diff --git a/ets2panda/compiler/core/compileJob.cpp b/ets2panda/compiler/core/compileJob.cpp index 1c1bbcea20c859430a09615526333f39c8b6e0ee..bc28669544c7198de45f3e2c6a713c693f08dd5a 100644 --- a/ets2panda/compiler/core/compileJob.cpp +++ b/ets2panda/compiler/core/compileJob.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 - 2024 Huawei Device Co., Ltd. + * Copyright (c) 2021 - 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -20,6 +20,8 @@ namespace ark::es2panda::compiler { void CompileJob::Run() { + ES2PANDA_PERF_FN_SCOPE(); + std::unique_lock lock(m_); cond_.wait(lock, [this] { return dependencies_ == 0; }); diff --git a/ets2panda/compiler/lowering/phase.cpp b/ets2panda/compiler/lowering/phase.cpp index 35d0a0f540ec1fcf9171c5b73b770cbd01222aa8..d8411bc96b1f99af9f2533abe86b28d00e578fc4 100644 --- a/ets2panda/compiler/lowering/phase.cpp +++ b/ets2panda/compiler/lowering/phase.cpp @@ -232,6 +232,8 @@ bool Phase::Apply(public_lib::Context *ctx, parser::Program *program) SetPhaseManager(ctx->phaseManager); GetPhaseManager()->SetCurrentPhaseId(id_); + ES2PANDA_PERF_EVENT_SCOPE("@lowering-phase/" + std::string(Name())); + #ifndef NDEBUG if (!Precondition(ctx, program)) { ctx->GetChecker()->LogError(diagnostic::PRECOND_FAILED, {Name()}, lexer::SourcePosition {}); diff --git a/ets2panda/driver/build_system/src/build/base_mode.ts b/ets2panda/driver/build_system/src/build/base_mode.ts index 231eaa73492433aa195173e9d409202725f39fc8..e24b32324077f360773d1d229f105b635f499d00 100644 --- a/ets2panda/driver/build_system/src/build/base_mode.ts +++ b/ets2panda/driver/build_system/src/build/base_mode.ts @@ -205,6 +205,7 @@ export abstract class BaseMode { '_', '--extension', 'ets', + '--dump-perf-metrics', '--arktsconfig', fileInfo.arktsConfigFile, fileInfo.filePath @@ -260,6 +261,7 @@ export abstract class BaseMode { '_', '--extension', 'ets', + '--dump-perf-metrics', '--arktsconfig', fileInfo.arktsConfigFile, '--output', @@ -356,6 +358,7 @@ export abstract class BaseMode { '_', '--extension', 'ets', + '--dump-perf-metrics', '--arktsconfig', moduleInfo.arktsConfigFile, '--output', @@ -1369,6 +1372,7 @@ export abstract class BaseMode { '_', '--extension', 'ets', + '--dump-perf-metrics', '--arktsconfig', fileInfo.arktsConfigFile, '--output', diff --git a/ets2panda/driver/build_system/src/build/build_mode.ts b/ets2panda/driver/build_system/src/build/build_mode.ts index ceb492b3e0f88aa17def45387fe45b5893d5eac3..5228675b60bb32d97ee52efbc13f56d9d648cdd9 100644 --- a/ets2panda/driver/build_system/src/build/build_mode.ts +++ b/ets2panda/driver/build_system/src/build/build_mode.ts @@ -31,12 +31,15 @@ export class BuildMode extends BaseMode { public async run(): Promise { if (this.es2pandaMode === ES2PANDA_MODE.RUN_PARALLEL) { // RUN_PARALLEL: Executes tasks using multiple processes + console.log(' run parallel '); await super.runParallel(); } else if (this.es2pandaMode === ES2PANDA_MODE.RUN_CONCURRENT) { // RUN_CONCURRENT: Executes tasks using multiple threads with astcache + console.log(' run concurrently '); await super.runConcurrent(); } else if (this.es2pandaMode === ES2PANDA_MODE.RUN) { // RUN: Executes tasks sequentially in a single process and single thread + console.log(' run sequentially '); await super.run(); } else { // Default fallback: Uses parallel execution (same as RUN_PARALLEL) diff --git a/ets2panda/driver/build_system/src/utils/record_time_mem.ts b/ets2panda/driver/build_system/src/utils/record_time_mem.ts index 3998068a44ccd4c058e1e43f0ec7ffc3fc47d9ac..f0ba60c29fd98a592e7ccf815ea158a8de886b94 100644 --- a/ets2panda/driver/build_system/src/utils/record_time_mem.ts +++ b/ets2panda/driver/build_system/src/utils/record_time_mem.ts @@ -59,7 +59,7 @@ export class CompileSingleData { this.file = file; this.timeMemMap = new Map(); // close by default - this.recordType = recordType ?? RECORD_TYPE.DEFAULT_TYPE; + this.recordType = recordType ?? RECORD_TYPE.ON_TYPE; } public record(startKey: string, lastEndKey: string = '') { diff --git a/ets2panda/parser/parserImpl.cpp b/ets2panda/parser/parserImpl.cpp index 1496bd4dbd3f668748262382d76dc9f0cc937ff2..c014c06080d21cfda5e36a0368221ab53fe087f2 100644 --- a/ets2panda/parser/parserImpl.cpp +++ b/ets2panda/parser/parserImpl.cpp @@ -74,6 +74,8 @@ void ParserImpl::ParseScript(const SourceFile &sourceFile, bool genStdLib) void ParserImpl::ParseProgram(ScriptKind kind) { + ES2PANDA_PERF_FN_SCOPE(); + lexer::SourcePosition startLoc = lexer_->GetToken().Start(); lexer_->NextToken(); program_->SetKind(kind); diff --git a/ets2panda/public/es2panda_lib.cpp b/ets2panda/public/es2panda_lib.cpp index ea052d5e3db5af155a51433bd6f289da2e13ba95..911a1ac0b228559ffabcfb0ca49cf21f0f88bcc7 100644 --- a/ets2panda/public/es2panda_lib.cpp +++ b/ets2panda/public/es2panda_lib.cpp @@ -741,6 +741,9 @@ extern "C" __attribute__((unused)) es2panda_Context *ProceedToState(es2panda_Con ctx->state = ES2PANDA_STATE_ERROR; break; } + if (ctx->config != nullptr && ctx->config->options != nullptr && ctx->config->options->IsDumpPerfMetrics()) { + util::DumpPerfMetrics(); + } return reinterpret_cast(ctx); } diff --git a/ets2panda/util/perfMetrics.cpp b/ets2panda/util/perfMetrics.cpp index 981ec934c40d631b1461b4f71c4f1e24e5b40a8e..311ff32df922f62480e417020edaab795bb7dbb7 100644 --- a/ets2panda/util/perfMetrics.cpp +++ b/ets2panda/util/perfMetrics.cpp @@ -272,7 +272,7 @@ static void DumpPerfMetricsImpl(std::optional prefix) } } - std::cout << ss.str(); + std::cout << ss.str() << std::flush; } void DumpPerfMetrics()