* -------------------------------------------------------------------------
* This file is part of the MindStudio project.
* Copyright (c) 2025 Huawei Technologies Co.,Ltd.
*
* 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 <gtest/gtest.h>
#include "PerformanceTest.h"
#include "FileUtil.h"
#include "DataBaseManager.h"
#include "JsonFileParserManager.h"
#include "ParserStatusManager.h"
using namespace Performance;
using namespace Dic;
using namespace Dic::Module;
using namespace Dic::Module::Timeline;
const std::string TIMELINE_MODULE = "Timeline";
const int TIME_REFERENCE_1S = 1000;
const int TIME_REFERENCE_2S = 2000;
class TraceParserTest : PerformanceTest {};
TEST_F(PerformanceTest, testTraceParser1P2GBTime) {
auto start = std::chrono::high_resolution_clock::now();
DataBaseManager::Instance().SetDataType(DataType::TEXT, "");
DataBaseManager::Instance().CreateTraceConnectionPool(
"0", FileUtil::SplicePath(test1P2GBRootPath, "ASCEND_PROFILER_OUTPUT", "mindstudio_insight_data.db"));
JsonFileParserManager::GetTraceFileParser().Parse(
{FileUtil::SplicePath(test1P2GBRootPath, "ASCEND_PROFILER_OUTPUT", "trace_view.json")}, "0", "", "");
while (true) {
ParserStatus status = ParserStatusManager::Instance().GetParserStatus("0");
if (status == ParserStatus::FINISH) {
break;
}
std::chrono::milliseconds duration(50);
std::this_thread::sleep_for(duration);
}
auto end = std::chrono::high_resolution_clock::now();
auto cost = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
status.module = TIMELINE_MODULE;
status.caseName = ::testing::UnitTest::GetInstance()->current_test_info()->name();
status.result = cost <= TIME_REFERENCE_1S ? "pass" : "failed";
status.refTime = std::to_string(TIME_REFERENCE_1S);
status.realTime = std::to_string(cost);
JsonFileParserManager::GetTraceFileParser().Reset();
}
TEST_F(PerformanceTest, testTraceParser1P5GBTime) {
auto start = std::chrono::high_resolution_clock::now();
DataBaseManager::Instance().SetDataType(DataType::TEXT, "");
DataBaseManager::Instance().CreateTraceConnectionPool(
"0", FileUtil::SplicePath(test1P5GBRootPath, "ASCEND_PROFILER_OUTPUT", "mindstudio_insight_data.db"));
JsonFileParserManager::GetTraceFileParser().Parse(
{FileUtil::SplicePath(test1P5GBRootPath, "ASCEND_PROFILER_OUTPUT", "trace_view.json")}, "0", "", "");
while (true) {
ParserStatus status = ParserStatusManager::Instance().GetParserStatus("0");
if (status == ParserStatus::FINISH) {
break;
}
std::chrono::milliseconds duration(50);
std::this_thread::sleep_for(duration);
}
auto end = std::chrono::high_resolution_clock::now();
auto cost = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
status.module = TIMELINE_MODULE;
status.caseName = ::testing::UnitTest::GetInstance()->current_test_info()->name();
status.result = cost <= TIME_REFERENCE_2S ? "pass" : "failed";
status.refTime = std::to_string(TIME_REFERENCE_2S);
status.realTime = std::to_string(cost);
JsonFileParserManager::GetTraceFileParser().Reset();
}