"""
@author: meili
@contact: meili02@corp.netease.com
@file: uestats_utils.py
@date: 2023/7/28 16:21
@desc:
"""
import csv
import os.path
import subprocess
[docs]def get_stat_values_from_uestats_csv(uestats_csv_abs_path: str,
stat_metric_key: str or list) -> list or dict:
res_list = []
res_dict = {}
try:
with open(uestats_csv_abs_path, encoding='utf-16-le') as csvfile:
reader = csv.reader(csvfile)
if isinstance(stat_metric_key, str):
for row in reader:
if row[1] == stat_metric_key:
res_list.append(row[2])
return res_list
else:
res_dict = {metric_key: [] for metric_key in stat_metric_key}
for row in reader:
if row[1] in stat_metric_key:
if '.' in row[2]:
value = float(row[2])
else:
value = int(row[2])
res_dict[row[1]].append(value)
return res_dict
except Exception as error:
print("get_stat_values_from_uestats_csv failed", error)
return res_dict
[docs]def convert_uestats_to_csv(ue_root_path: str,
uestats_file_abs_path: str,
metrics_keys_list: list) -> str:
ue_root_path = ue_root_path.replace("\\", "/")
uestats_file_abs_path = uestats_file_abs_path.replace("\\", "/")
unreal_frontend_path = os.path.join(ue_root_path, "Engine/Binaries/Win64/UnrealFrontend.exe")
uestats_csv_abs_path = uestats_file_abs_path.replace(".uestats", ".csv")
cmd = f"{unreal_frontend_path} -RUN=CONVERT -INFILE={uestats_file_abs_path} -OUTFILE={uestats_csv_abs_path}"
if len(metrics_keys_list) != 0:
cmd += " -STATLIST=" + "+".join(metrics_keys_list)
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.wait()
return uestats_csv_abs_path
if __name__ == '__main__':
uestats_csv_abs_path = "D:/professionalSoftwareDatas/AutomationTest/Projects/Dayly/ProjectCryptid/Saved/Profiling/UnrealStats/Login-WindowsClient-07.20-16.00.45/Login-WindowsClient-20-16.00.45.csv"
uestats_file_abs_path = "D:/professionalSoftwareDatas/AutomationTest/Projects/Dayly/ProjectCryptid/Saved/Profiling/UnrealStats/Login-WindowsClient-07.20-16.00.45/Login-WindowsClient-20-16.00.45.uestats"
ue_root_path = "D://UE_5.0"
stat_metric_key = ["STAT_FrameTime", "STAT_UnitGPU", "STAT_UnitRender", "STAT_UnitRHIT",
"STAT_UnitGame", "STAT_RHIDrawPrimitiveCalls", "STAT_RHITriangles"]
STAT_FrameTime = get_stat_values_from_uestats_csv(uestats_csv_abs_path, "STAT_FrameTime")
STAT_UnitGPU = get_stat_values_from_uestats_csv(uestats_csv_abs_path, "STAT_UnitGPU")
STAT_UnitGame = get_stat_values_from_uestats_csv(uestats_csv_abs_path, "STAT_UnitGame")
STAT_UnitRHIT = get_stat_values_from_uestats_csv(uestats_csv_abs_path, "STAT_UnitRHIT")
STAT_UnitRender = get_stat_values_from_uestats_csv(uestats_csv_abs_path, "STAT_UnitRender")
STAT_RHIDrawPrimitiveCalls = get_stat_values_from_uestats_csv(uestats_csv_abs_path, "STAT_RHIDrawPrimitiveCalls")
STAT_RHITriangles = get_stat_values_from_uestats_csv(uestats_csv_abs_path, "STAT_RHITriangles")
res_dict = get_stat_values_from_uestats_csv(uestats_csv_abs_path, stat_metric_key)
convert_uestats_to_csv(ue_root_path, uestats_file_abs_path, stat_metric_key)
print("hello")
pass