-- -- Copyright 2021 The Android Open Source Project -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- https://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. -- Find all counters from track that satisfies regex 'slc/qurg2_(wr|rd):lvl=0x(0|1|3|7)%' DROP VIEW IF EXISTS all_qurg2; CREATE VIEW all_qurg2 AS SELECT ts, track_id, name, value FROM counters WHERE name GLOB 'slc/qurg2_??:lvl=0x_*'; -- Find all counters from track that satisfies regex 'slc/qurg2_(wr|rd):lvl=0x(1|3|7)%' DROP VIEW IF EXISTS non_zero_qurg2; CREATE VIEW non_zero_qurg2 AS SELECT * FROM all_qurg2 WHERE name NOT GLOB 'slc/qurg2_??:lvl=0x0*'; -- Find all event counters from simpleperf in the form of -- ( + '_tid' + + '_cpu' + ) DROP VIEW IF EXISTS simpleperf_event_raw; CREATE VIEW simpleperf_event_raw AS SELECT SUBSTR(name, 0, tid_pos) AS name, CAST(SUBSTR(name, tid_pos + 4, cpu_pos - tid_pos - 4) AS INT) AS tid, CAST(SUBSTR(name, cpu_pos + 4) AS INT) AS cpu, total FROM ( SELECT name, INSTR(name, '_tid') AS tid_pos, INSTR(name, '_cpu') AS cpu_pos, SUM(value) AS total FROM counters WHERE name GLOB '*_tid*_cpu*' GROUP BY name ); DROP VIEW IF EXISTS simpleperf_event_per_process; CREATE VIEW simpleperf_event_per_process AS SELECT e.name, t.upid, RepeatedField( AndroidSimpleperfMetric_PerfEventMetric_Thread( 'tid', e.tid, 'name', t.name, 'cpu', e.cpu, 'total', e.total ) ) AS threads, SUM(e.total) AS total FROM simpleperf_event_raw e JOIN thread t USING (tid) GROUP BY e.name, t.upid; DROP VIEW IF EXISTS simpleperf_event_metric; CREATE VIEW simpleperf_event_metric AS SELECT AndroidSimpleperfMetric_PerfEventMetric( 'name', e.name, 'processes', RepeatedField( AndroidSimpleperfMetric_PerfEventMetric_Process( 'pid', p.pid, 'name', p.name, 'threads', e.threads, 'total', e.total ) ), 'total', SUM(total) ) AS proto FROM simpleperf_event_per_process e JOIN process p USING (upid) GROUP BY e.name; DROP VIEW IF EXISTS android_simpleperf_output; CREATE VIEW android_simpleperf_output AS SELECT AndroidSimpleperfMetric( 'urgent_ratio', (SELECT sum(value) FROM non_zero_qurg2) / (SELECT sum(value) FROM all_qurg2), 'events', (SELECT RepeatedField(proto) FROM simpleperf_event_metric) );