Setelah Anda mengumpulkan beberapa rekaman aktivitas menggunakan ProfilingManager, menjelajahinya satu per satu untuk menemukan masalah performa menjadi tidak praktis. Analisis trace massal memungkinkan Anda mengkueri set data trace secara bersamaan untuk:
- Mengidentifikasi regresi performa umum.
- Menghitung distribusi statistik (misalnya, latensi P50, P90, P99).
- Menemukan pola di beberapa trace.
- Menemukan trace pencilan untuk memahami dan men-debug masalah performa.
Bagian ini menunjukkan cara menggunakan Perfetto Python Batch Trace Processor untuk menganalisis metrik startup di seluruh kumpulan rekaman aktivitas yang disimpan secara lokal dan menemukan rekaman aktivitas pencilan untuk analisis yang lebih mendalam.
Mendesain kueri
Pertama, buat kueri PerfettoSQL yang mengekstrak metrik yang ingin Anda bandingkan.
Contoh berikut mengukur latensi startup yang dikontrol aplikasi dari
activityStart hingga frame pertama yang dirender (Choreographer#doFrame), seperti yang ditunjukkan
pada Gambar 1.
activityStart hingga frame pertama yang dihasilkan.CREATE OR REPLACE PERFETTO FUNCTION find_slices(pattern STRING) RETURNS
TABLE (name STRING, ts LONG, dur LONG) AS
SELECT name,ts,dur FROM slice WHERE name GLOB $pattern;
CREATE OR REPLACE PERFETTO FUNCTION generate_start_to_end_slices(startSlicePattern STRING, endSlicePattern STRING, inclusive BOOL) RETURNS
TABLE(name STRING, ts LONG, dur LONG) AS
SELECT name, ts, MIN(startToEndDur) as dur
FROM
(SELECT S.name as name, S.ts as ts, E.ts + IIF($inclusive, E.dur, 0) - S.ts as startToEndDur
FROM find_slices($startSlicePattern) as S CROSS JOIN find_slices($endSlicePattern) as E
WHERE startToEndDur > 0)
GROUP BY name, ts;
SELECT ts,name,dur from generate_start_to_end_slices('activityStart','*Choreographer#doFrame [0-9]*', true)
Anda dapat menjalankan kueri dalam UI Perfetto, lalu menggunakan hasil kueri untuk membuat jalur debug (Gambar 2) dan memvisualisasikannya dalam linimasa (Gambar 3).
Menyiapkan lingkungan Python
Instal Python di komputer lokal Anda dan library yang diperlukan:
pip install perfetto pandas plotly
Membuat skrip analisis rekaman aktivitas massal
Contoh skrip berikut menjalankan kueri dalam beberapa rekaman aktivitas menggunakan
BatchTraceProcessor Python Perfetto.
from perfetto.batch_trace_processor import BatchTraceProcessor
import glob
import plotly.express as px
# Collect all trace files in the local directory
traces = glob.glob('*.perfetto-trace')
if not traces:
print("No .perfetto-trace files found in the current directory.")
exit(1)
if __name__ == '__main__':
# Process all traces in parallel to aggregate metrics across runs
with BatchTraceProcessor(traces) as btp:
query = """
CREATE OR REPLACE PERFETTO FUNCTION find_slices(pattern STRING) RETURNS
TABLE (name STRING, ts LONG, dur LONG) AS
SELECT name,ts,dur FROM slice WHERE name GLOB $pattern;
CREATE OR REPLACE PERFETTO FUNCTION generate_start_to_end_slices(startSlicePattern STRING, endSlicePattern STRING, inclusive BOOL) RETURNS
TABLE(name STRING, ts LONG, dur LONG) AS
SELECT name, ts, MIN(startToEndDur) as dur
FROM
(SELECT S.name as name, S.ts as ts, E.ts + IIF($inclusive, E.dur, 0) - S.ts as startToEndDur
FROM find_slices($startSlicePattern) as S CROSS JOIN find_slices($endSlicePattern) as E
WHERE startToEndDur > 0)
GROUP BY name, ts;
SELECT ts,name,dur / 1000000 as dur_ms from generate_start_to_end_slices('activityStart','*Choreographer#doFrame [0-9]*', true)
"""
df = btp.query_and_flatten(query)
# Plot the distribution of startup times, tracking trace file paths on
# hover
violin = px.violin(df, x='dur_ms', hover_data='_path', title='startup time', points='all')
violin.show()
Memahami skrip
Saat Anda menjalankan skrip Python, skrip tersebut akan melakukan tindakan berikut:
- Skrip ini menelusuri semua rekaman aktivitas Perfetto yang diakhiri dengan
.perfetto-tracedi direktori lokal Anda dan menggunakannya sebagai rekaman aktivitas sumber untuk analisis. - Alat ini menjalankan kueri rekaman aktivitas massal yang menghitung subset waktu startup
yang sesuai dengan waktu dari slice rekaman aktivitas
activityStarthingga frame pertama yang dihasilkan oleh aplikasi Anda. - Fungsi ini memetakan latensi dalam milidetik menggunakan plot violin untuk memvisualisasikan distribusi waktu startup.
Menafsirkan hasilnya
Menjalankan skrip akan menghasilkan plot violin yang menunjukkan distribusi bimodal dengan
dua puncak latensi yang berbeda (Gambar 4). Arahkan kursor ke setiap titik data dalam
plot untuk memeriksa nama file _path dan membandingkan rekaman aktivitas dari setiap puncak (Gambar
5):
- Rekaman aktivitas latensi tinggi (puncak kanan): Membuka rekaman aktivitas dari grup ini di
UI Perfetto akan menampilkan slice
MyFlaggedFeaturetambahan yang berjalan selama startup (Gambar 6). - Trace latensi rendah (puncak kiri): Membuka trace dari grup yang lebih cepat
mengonfirmasi bahwa
MyFlaggedFeaturetidak ada (Gambar 7), yang menunjukkan bahwa tombol fitur yang diaktifkan untuk sebagian pengguna menyebabkan regresi startup.
MyFlaggedFeature tambahan.
Contoh ini menunjukkan salah satu dari banyak cara menggunakan analisis trace massal. Kasus penggunaan lainnya mencakup mengekstrak statistik dari lapangan untuk mengukur dampak, mendeteksi regresi, dan lainnya.