blob: 46a27baa5ed06b34cb814faae9bc16924ece7594 [file] [log] [blame]
--
-- 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
-- (<event_name> + '_tid' + <tid> + '_cpu' + <cpu_id>)
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)
);