* 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.
* -------------------------------------------------------------------------*/
#ifndef ANALYSIS_UTILS_TIME_UTILS_H
#define ANALYSIS_UTILS_TIME_UTILS_H
#include <cstdint>
#include <string>
#include "analysis/csrc/infrastructure/utils/hp_float.h"
namespace Analysis {
namespace Utils {
const double DEFAULT_FREQ = 1000.0;
const uint64_t DEFAULT_DURATION_TIME_NS = 30ULL * 60 * 1000 * 1000 * 1000;
struct SyscntConversionParams {
double freq = DEFAULT_FREQ;
double hostFreq = DEFAULT_FREQ;
uint64_t sysCnt = UINT64_MAX;
uint64_t hostCnt = UINT64_MAX;
uint64_t hostMonotonic = UINT64_MAX;
SyscntConversionParams() = default;
SyscntConversionParams(double freq, uint64_t sysCnt, uint64_t hostMonotonic)
: freq(freq), sysCnt(sysCnt), hostMonotonic(hostMonotonic){};
};
struct ProfTimeRecord {
uint64_t startTimeNs = UINT64_MAX;
uint64_t endTimeNs = 0;
uint64_t baseTimeNs = UINT64_MAX;
ProfTimeRecord() = default;
ProfTimeRecord(uint64_t startTimeNs, uint64_t endTimeNs, uint64_t baseTimeNs)
: startTimeNs(startTimeNs), endTimeNs(endTimeNs), baseTimeNs(baseTimeNs){};
};
struct LocaltimeContext {
uint16_t deviceId = UINT16_MAX;
uint64_t hostMonotonic = UINT64_MAX;
uint64_t deviceMonotonic = UINT64_MAX;
Utils::ProfTimeRecord timeRecord;
};
HPFloat GetTimeFromCnt(uint64_t sysCnt, uint64_t hostMonotonic, uint64_t referenceCnt, double frequency);
std::string GetFormatLocalTime();
HPFloat GetTimeFromSyscnt(uint64_t syscnt, const SyscntConversionParams ¶ms);
HPFloat GetTimeFromHostCnt(uint64_t syscnt, const SyscntConversionParams ¶ms);
HPFloat GetDurTimeFromSyscnt(uint64_t syscnt, const SyscntConversionParams ¶ms);
HPFloat GetTimeBySamplingTimestamp(double timestamp, const uint64_t hostMonotonic, const uint64_t deviceMonotonic);
HPFloat GetLocalTime(HPFloat ×tamp, const ProfTimeRecord &record);
}
}
#endif