1syntax = "proto2"; 2 3package perfetto.protos; 4 5import "protos/perfetto/metrics/metrics.proto"; 6import "protos/perfetto/metrics/android/hwui_metric.proto"; 7 8// Android HWUI graphics performance and graphics memory usage metrics augmented with 9// perf data which is specific to the Skottie player. Skottie app has an additional 10// render thread named "SkottieAnimator" in the traces. Perf metrics are filtered for 11// 'org.skia.skottie' process only. 12message ProcessRenderInfoEx { 13 // original HWUI metric as defined by built-in perfetto proto. 14 optional ProcessRenderInfo hwui_process_info = 1; 15 16 // Number of times the Skottie GL thread rendered a frame and max/min/avg time for Skottie GL 17 // renderer to finish rendering in 18 // in nanoseconds. These values have 0 value for lottie player, because it does it renders only 19 // in RenderThread. 20 optional uint32 skottie_animator_count = 2; 21 optional int64 skottie_animator_max = 3; 22 optional int64 skottie_animator_min = 4; 23 optional double skottie_animator_avg = 5; 24 25 optional uint32 dequeue_buffer_count = 6; 26 optional int64 dequeue_buffer_max = 7; 27 optional int64 dequeue_buffer_min = 8; 28 optional double dequeue_buffer_avg = 9; 29 30 // The following 2 fields are useful to compare render thread performance between Lottie and 31 // Skottie players. 32 // Skottie metric is a sum of the time on RenderThread and SkottieAnimator threads, while Lottie 33 // is only the time on RenderThread. 34 optional double render_time_avg = 10; // draw_frame_avg + skottie_animator_avg 35 36 // "render_time_avg_no_dequeue" tries to compensate the time spent to wait for a new buffer. 37 // It equals draw_frame_avg + skottie_animator_avg - dequeue_buffer_avg. 38 optional double render_time_avg_no_dequeue = 11; 39 40 optional int64 ui_thread_cpu_time = 12; // CPU time spent on UI thread in nanoseconds 41 optional int64 rt_thread_cpu_time = 13; // CPU time spent on RenderThread in nanoseconds 42 optional int64 hwui_tasks_cpu_time = 14; // CPU time spent on hwuiTask0/1 threads in nanoseconds 43 optional int64 skottie_animator_cpu_time = 15; // CPU time spent on SkottieAnimator in ns 44 45 optional int64 total_cpu_time = 16; // Total CPU time in nanoseconds. Equals 46 // ui_thread_cpu_time + rt_thread_cpu_time + skottie_animator_cpu_time + hwui_tasks_cpu_time 47 48 optional int64 total_gpu_time = 17; // GPU time spent to render all content in nanoseconds. 49 50 // This one number is the "ultimate" benchmark to compare airbnb lottie vs skottie player. 51 // performance. It is the total time for any rendering related work on CPU and GPU combined. 52 optional int64 total_time = 18; // This is total_cpu_time + total_gpu_time in nanoseconds. 53 54 // time between setSurface and second DrawFrame tag. 55 optional int64 startup_time = 19; 56} 57 58message SkottieMetric { 59 repeated ProcessRenderInfoEx process_info = 1; 60} 61 62extend TraceMetrics { 63 optional SkottieMetric skottie_metric = 460; 64} 65