import copy
from collections import OrderedDict
from decimal import Decimal
from common_func.info_conf_reader import InfoConfReader
from common_func.ms_constant.number_constant import NumberConstant
from common_func.ms_constant.str_constant import StrConstant
from common_func.platform.chip_manager import ChipManager
from common_func.trace_view_header_constant import TraceViewHeaderConstant
from common_func.trace_view_manager import TraceViewManager
from msmodel.api.api_data_viewer_model import ApiDataViewModel
from msmodel.freq.freq_data_viewer_model import FreqDataViewModel
from viewer.lpm.lpm_viewer import LpmConvInfoViewer
class AiCoreFreqViewer(LpmConvInfoViewer):
"""
Read aicore freq and generate aicore freq view
"""
def __init__(self, params: dict):
super().__init__(params)
self._project_path = params.get(StrConstant.PARAM_RESULT_DIR)
self._pid = InfoConfReader().get_json_pid_data()
self.freq_model = FreqDataViewModel(params)
self.apidata_model = ApiDataViewModel(params)
def get_all_data(self: any) -> list:
"""
1、read the fixed aicore freq from info.json
2、read the floating aicore freq from freq.db
3、concat 1/2 freq
"""
result = []
flag = (not ChipManager().is_chip_v4() and not ChipManager().is_chip_v1_1_1()
and not ChipManager().is_chip_v3_3() or InfoConfReader().is_host_profiling())
if flag:
return result
result.extend(TraceViewManager.metadata_event([["process_name", self._pid,
InfoConfReader().get_json_tid_data(),
TraceViewHeaderConstant.PROCESS_AI_CORE_FREQ]]))
freq_lists = []
with self.freq_model as _model:
freq_rows = _model.get_data()
if not freq_rows:
freq_rows.append((InfoConfReader().get_dev_cnt(),
InfoConfReader().get_freq(StrConstant.AIC) / NumberConstant.FREQ_TO_MHz))
for row in freq_rows:
to_local_ts = InfoConfReader().trans_syscnt_into_local_time(row[0])
data_list = [
TraceViewHeaderConstant.PROCESS_AI_CORE_FREQ,
to_local_ts, self._pid, 0,
OrderedDict({"MHz": row[1]})
]
freq_lists.append(data_list)
_, end_ts = InfoConfReader().get_collect_time()
if not end_ts:
end_ts = str(Decimal(freq_lists[-1][1]) + 1)
final_data = copy.deepcopy(freq_lists[-1])
final_data[1] = end_ts
freq_lists.append(final_data)
filled_freq = self._split_and_fill_data(freq_lists)
changed_frequency = TraceViewManager.column_graph_trace(
TraceViewHeaderConstant.COLUMN_GRAPH_HEAD_LEAST, filled_freq)
result.extend(changed_frequency)
return result