--
-- 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)
);
