1DROP VIEW IF EXISTS fastrpc_timeline; 2CREATE PERFETTO VIEW fastrpc_timeline AS 3SELECT 4 ts, 5 LEAD(ts, 1, trace_end()) 6 OVER(PARTITION BY track_id ORDER BY ts) - ts AS dur, 7 RTRIM(SUBSTR(name, 13), ']') AS subsystem_name, 8 track_id, 9 value 10FROM counter JOIN counter_track 11 ON counter.track_id = counter_track.id 12WHERE (name GLOB 'mem.fastrpc[[]*'); 13 14DROP VIEW IF EXISTS fastrpc_subsystem_stats; 15CREATE PERFETTO VIEW fastrpc_subsystem_stats AS 16SELECT 17 subsystem_name, 18 SUM(value * dur) / SUM(dur) AS avg_size, 19 MIN(value) AS min_size, 20 MAX(value) AS max_size 21FROM fastrpc_timeline 22GROUP BY 1; 23 24DROP VIEW IF EXISTS fastrpc_raw_allocs; 25CREATE PERFETTO VIEW fastrpc_raw_allocs AS 26SELECT 27 RTRIM(SUBSTR(name, 20), ']') AS subsystem_name, 28 ts, 29 value AS instant_value, 30 SUM(value) OVER win AS value 31FROM counter c JOIN thread_counter_track t ON c.track_id = t.id 32WHERE name GLOB 'mem.fastrpc_change*' AND value > 0 33WINDOW win AS ( 34 PARTITION BY name ORDER BY ts 35 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 36); 37 38DROP VIEW IF EXISTS fastrpc_alloc_stats; 39CREATE PERFETTO VIEW fastrpc_alloc_stats AS 40SELECT 41 subsystem_name, 42 SUM(instant_value) AS total_alloc_size_bytes 43FROM fastrpc_raw_allocs 44GROUP BY 1; 45 46DROP VIEW IF EXISTS android_fastrpc_output; 47CREATE PERFETTO VIEW android_fastrpc_output AS 48SELECT AndroidFastrpcMetric( 49 'subsystem', RepeatedField( 50 AndroidFastrpcMetric_Subsystem( 51 'name', subsystem_name, 52 'avg_size_bytes', avg_size, 53 'min_size_bytes', min_size, 54 'max_size_bytes', max_size, 55 'total_alloc_size_bytes', total_alloc_size_bytes 56 ) 57 )) 58FROM fastrpc_subsystem_stats JOIN fastrpc_alloc_stats USING (subsystem_name); 59