Setelah Anda mengumpulkan beberapa rekaman aktivitas menggunakan ProfilingManager, menjelajahinya satu per satu untuk menemukan masalah performa menjadi tidak praktis. Analisis rekaman aktivitas massal memungkinkan Anda membuat kueri dataset rekaman aktivitas secara bersamaan untuk:
- Mengidentifikasi regresi performa umum.
- Menghitung distribusi statistik (misalnya, latensi P50, P90, P99).
- Menemukan pola di beberapa rekaman aktivitas.
- Temukan rekaman aktivitas pencilan untuk memahami dan men-debug masalah performa.
Bagian ini menunjukkan cara menggunakan Pemroses Rekaman Aktivitas Batch Python Perfetto untuk menganalisis metrik startup di seluruh rangkaian rekaman aktivitas yang disimpan secara lokal dan menemukan rekaman aktivitas pencilan untuk analisis lebih mendalam.
Mendesain kueri
Langkah pertama untuk melakukan analisis massal adalah membuat kueri PerfettoSQL.
Di bagian ini, kami menyajikan contoh kueri yang mengukur latensi peluncuran aplikasi.
Secara khusus, Anda dapat mengukur durasi dari activityStart hingga frame pertama yang dihasilkan (kemunculan pertama slice Choreographer#doFrame) untuk mengukur latensi peluncuran aplikasi yang berada dalam kontrol aplikasi Anda. Gambar 1 menunjukkan bagian yang akan dikueri.
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
Skrip contoh berikut menjalankan kueri di beberapa rekaman aktivitas menggunakan BatchTraceProcessor Python Perfetto.
from perfetto.batch_trace_processor import BatchTraceProcessor
import glob
import plotly.express as px
traces = glob.glob('*.perfetto-trace')
if __name__ == '__main__':
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)
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 akan melakukan tindakan berikut:
- Skrip menelusuri semua rekaman aktivitas Perfetto yang berakhiran
.perfetto-tracedi direktori lokal Anda dan menggunakannya sebagai rekaman aktivitas sumber untuk analisis. - Ini menjalankan kueri rekaman aktivitas massal yang menghitung subset waktu mulai
yang sesuai dengan waktu dari slice rekaman aktivitas
activityStarthingga frame pertama yang dihasilkan oleh aplikasi Anda. - Fungsi ini memetakan latensi dalam milidetik menggunakan plot biola untuk memvisualisasikan distribusi waktu mulai.
Menafsirkan hasilnya
Setelah Anda menjalankan skrip, skrip akan menghasilkan plot. Dalam hal ini, plot menunjukkan distribusi bimodal dengan dua puncak yang berbeda (Gambar 4).
Selanjutnya, temukan perbedaan antara kedua populasi. Hal ini membantu Anda memeriksa setiap rekaman aktivitas secara lebih mendetail. Dalam contoh ini, plot disiapkan sehingga saat Anda mengarahkan kursor ke titik data (latensi), Anda dapat mengidentifikasi nama file rekaman aktivitas. Kemudian, Anda dapat membuka salah satu rekaman aktivitas yang merupakan bagian dari grup latensi tinggi.
Saat membuka rekaman aktivitas dari grup latensi tinggi (Gambar 5), Anda akan menemukan slice tambahan bernama MyFlaggedFeature yang berjalan selama startup (Gambar 6).
Sebaliknya, memilih rekaman aktivitas dari populasi latensi yang lebih rendah (puncak paling kiri) mengonfirmasi tidak adanya slice yang sama (Gambar 7). Perbandingan ini menunjukkan bahwa tanda fitur tertentu, yang diaktifkan untuk sebagian pengguna, memicu regresi.
Contoh ini menunjukkan salah satu dari banyak cara Anda dapat menggunakan analisis rekaman aktivitas massal. Kasus penggunaan lainnya mencakup mengekstrak statistik dari kolom untuk mengukur dampak, mendeteksi regresi, dan lainnya.