* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* This file is part of the MindStudio project.
*
* MindStudio is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------*/
#include "analysis/csrc/application/timeline/timeline_factory.h"
#include "analysis/csrc/application/timeline/acc_pmu_assembler.h"
#include "analysis/csrc/application/timeline/ascend_hardware_assembler.h"
#include "analysis/csrc/application/timeline/biu_perf_assembler.h"
#include "analysis/csrc/application/timeline/block_detail_assembler.h"
#include "analysis/csrc/application/timeline/cann_assembler.h"
#include "analysis/csrc/application/timeline/ccu_assembler.h"
#include "analysis/csrc/application/timeline/chip_trans_assembler.h"
#include "analysis/csrc/application/timeline/ddr_assembler.h"
#include "analysis/csrc/application/timeline/device_tx_assembler.h"
#include "analysis/csrc/application/timeline/dpu_assembler.h"
#include "analysis/csrc/application/timeline/fusion_task_assembler.h"
#include "analysis/csrc/application/timeline/hbm_assembler.h"
#include "analysis/csrc/application/timeline/hccl_assembler.h"
#include "analysis/csrc/application/timeline/hccs_assembler.h"
#include "analysis/csrc/application/timeline/host_usage_assembler.h"
#include "analysis/csrc/application/timeline/llc_assembler.h"
#include "analysis/csrc/application/timeline/low_power_assembler.h"
#include "analysis/csrc/application/timeline/msprof_tx_assembler.h"
#include "analysis/csrc/application/timeline/npu_mem_assembler.h"
#include "analysis/csrc/application/timeline/overlap_analysis_assembler.h"
#include "analysis/csrc/application/timeline/pcie_assembler.h"
#include "analysis/csrc/application/timeline/qos_assembler.h"
#include "analysis/csrc/application/timeline/sio_assembler.h"
#include "analysis/csrc/application/timeline/stars_soc_assembler.h"
#include "analysis/csrc/application/timeline/step_trace_assembler.h"
#include "analysis/csrc/application/timeline/sys_io_assembler.h"
#include "analysis/csrc/application/timeline/ub_assembler.h"
namespace Analysis
{
namespace Application
{
std::unordered_map<std::string, AssemblerCreator> TimelineFactory::assemblerTable_{
{PROCESS_ACC_PMU,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, AccPmuAssembler); }},
{PROCESS_DPU,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, DPUAssembler); }},
{PROCESS_FUSION_TASK,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, FusionTaskAssembler); }},
{PROCESS_TASK,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, AscendHardwareAssembler); }},
{PROCESS_API,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, CannAssembler); }},
{PROCESS_DDR,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, DDRAssembler); }},
{PROCESS_STARS_CHIP_TRANS,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, ChipTransAssembler); }},
{PROCESS_HBM,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, HBMAssembler); }},
{PROCESS_HCCL,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, HcclAssembler); }},
{PROCESS_CCU,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, CCUAssembler); }},
{PROCESS_HCCS,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, HCCSAssembler); }},
{PROCESSOR_NAME_OSRT_API,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, OSRuntimeApiAssembler); }},
{PROCESS_NETWORK_USAGE,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, NetworkUsageAssembler); }},
{PROCESS_DISK_USAGE,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, DiskUsageAssembler); }},
{PROCESS_MEMORY_USAGE,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, MemUsageAssembler); }},
{PROCESS_CPU_USAGE,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, CpuUsageAssembler); }},
{PROCESS_MSPROFTX,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, MsprofTxAssembler); }},
{PROCESS_NPU_MEM,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, NpuMemAssembler); }},
{PROCESS_OVERLAP_ANALYSE,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, OverlapAnalysisAssembler); }},
{PROCESS_PCIE,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, PCIeAssembler); }},
{PROCESS_SIO,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, SioAssembler); }},
{PROCESS_STARS_SOC,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, StarsSocAssembler); }},
{PROCESS_STEP_TRACE,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, StepTraceAssembler); }},
{PROCESS_LLC,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, LLcAssembler); }},
{PROCESS_NIC,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, NicAssembler); }},
{PROCESS_ROCE,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, RoCEAssembler); }},
{PROCESS_QOS,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, QosAssembler); }},
{PROCESS_DEVICE_TX,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, DeviceTxAssembler); }},
{PROCESS_LOW_POWER,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, LowPowerAssembler); }},
{PROCESS_BIU_PERF,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, BiuPerfAssembler); }},
{PROCESS_UB, [](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, UbAssembler); }},
{PROCESS_BLOCK_DETAIL,
[](std::shared_ptr<JsonAssembler> &assembler) { MAKE_SHARED0_NO_OPERATION(assembler, BlockDetailAssembler); }}};
std::shared_ptr<JsonAssembler> TimelineFactory::GetAssemblerByName(const std::string &processName)
{
std::shared_ptr<JsonAssembler> assembler{nullptr};
auto it = assemblerTable_.find(processName);
if (it != assemblerTable_.end())
{
it->second(assembler);
}
return assembler;
}
}
}