| from perfetto.trace_processor import TraceProcessor | |
| def analyze_trace(trace_path): | |
| print(f"Loading trace: {trace_path}") | |
| # Load the trace using the python API | |
| tp = TraceProcessor(trace=trace_path) | |
| print("\n--- Q1 & Q6: Sensor Call Count & Average Duration ---") | |
| q1_it = tp.query('SELECT count(1) as cnt, avg(dur) as avg_dur_ns, max(dur) as max_dur_ns FROM slice WHERE name LIKE "%onSensorChanged%"') | |
| for row in q1_it: | |
| cnt = row.cnt | |
| avg_dur_ms = row.avg_dur_ns / 1e6 if row.avg_dur_ns else 0 | |
| max_dur_ms = row.max_dur_ns / 1e6 if row.max_dur_ns else 0 | |
| print(f"Total onSensorChanged calls: {cnt}") | |
| print(f"Average Duration: {avg_dur_ms:.4f} ms") | |
| print(f"Max Duration: {max_dur_ms:.4f} ms") | |
| print("\n--- Q3: Actual Sampling Period ---") | |
| q3_it = tp.query(''' | |
| SELECT avg(diff) as avg_diff_ns | |
| FROM ( | |
| SELECT ts - lag(ts) OVER (ORDER BY ts) as diff | |
| FROM slice | |
| WHERE name LIKE "%onSensorChanged%" | |
| ) WHERE diff IS NOT NULL | |
| ''') | |
| for row in q3_it: | |
| avg_diff_ms = row.avg_diff_ns / 1e6 if row.avg_diff_ns else 0 | |
| print(f"Average time between sensor readings: {avg_diff_ms:.4f} ms") | |
| print("\n--- Q4 & Q10: Thread Statistics for com.airmouse ---") | |
| q4_it = tp.query(''' | |
| SELECT thread.name, sum(thread_state.dur) as total_dur_ns, thread_state.state | |
| FROM thread_state | |
| JOIN thread USING(utid) | |
| JOIN process USING(upid) | |
| WHERE process.name = 'com.airmouse' | |
| GROUP BY thread.name, thread_state.state | |
| ORDER BY total_dur_ns DESC | |
| LIMIT 10 | |
| ''') | |
| for row in q4_it: | |
| dur_ms = row.total_dur_ns / 1e6 if row.total_dur_ns else 0 | |
| print(f"Thread: {row.name}, State: {row.state}, Total Time: {dur_ms:.2f} ms") | |
| if __name__ == "__main__": | |
| analyze_trace('trace_file.perfetto-trace') | |
Xet Storage Details
- Size:
- 1.92 kB
- Xet hash:
- 084e0525be7ceb70b4779087aed9bee28538849350ddbcdab1675ae9ddefae5e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.