Python解析Android systrace获取avg.fps,min.fps

import re

import numpy as np

def parse_trace_file(file_path):

    with open(file_path, 'r') as file:

        lines = file.readlines()

   

    pattern = re.compile(r"(\d+\.\d+): tracing_mark_write: C\|\d+\|SurfaceTexture.*\|1")

    timestamps = []

   

    for line in lines:

        match = pattern.search(line)

        if match:

            timestamp = float(match.group(1))

            timestamps.append(timestamp)

   

    return timestamps

def calculate_fps_statistics(timestamps):

    if len(timestamps) < 2:

        return None

    start_time = timestamps[0] + 1

    filtered_timestamps = [t for t in timestamps if t >= start_time]

    print('filtered_timestamps')

    print(filtered_timestamps)

    if len(filtered_timestamps) < 2:

        return None

    intervals = np.diff(filtered_timestamps)

    print(intervals)

    intervals_X_1000_list = np.round(intervals * 1000, 2)

    avg_fps_list_result = []

    temp_sum = 0

    temp_values = []

    for value in intervals:

        temp_sum += value

        temp_values.append(value)

        if temp_sum > 1:

            avg = float(1/np.mean(temp_values[:-1]) )

            avg_fps_list_result.append(avg)

            temp_sum = temp_values[-1]  

            temp_values = [temp_values[-1]]  

    if temp_values:

        avg = float(1/np.mean(temp_values))

        avg_fps_list_result.append(avg)

    print(avg_fps_list_result)

    # print(intervals_X_1000_list )

    average_fps = round(np.mean(avg_fps_list_result), 2)

    min_fps = round(np.min(avg_fps_list_result), 2)

    fps_variance = round(np.var(intervals_X_1000_list), 2)

    max_frame_interval = int(np.max(intervals_X_1000_list)+0.5)

   

    return average_fps, min_fps, fps_variance, max_frame_interval

def main():

    file_path = 'D://DemoTest//trace.systrace'

    timestamps = parse_trace_file(file_path)

   

    if timestamps:

        statistics = calculate_fps_statistics(timestamps)

        if statistics:

            average_fps, min_fps, fps_variance, max_frame_interval = statistics

            print(f"Average FPS: {average_fps}")

            print(f"Minimum FPS: {min_fps}")

            print(f"FPS Variance: {fps_variance}")

            print(f"Maximum frame interval: {max_frame_interval}")

        else:

            print("Not enough data after filtering out the first 5 seconds.")

    else:

        print("No valid SurfaceTexture lines found in the trace file.")

if __name__ == "__main__":

    main()


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值