blob: cffb4ebf408f74ede8e0084221780220a292df11 [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.
DROP VIEW IF EXISTS freq_slice;
CREATE VIEW freq_slice AS
SELECT
counter.track_id AS track_id,
track.name AS freq_name,
ts,
value AS freq_value,
LEAD(ts, 1, (SELECT end_ts + 1 FROM trace_bounds))
OVER (PARTITION BY track.id ORDER BY ts) - ts AS duration
FROM counter
LEFT JOIN track ON counter.track_id = track.id
WHERE track.name GLOB "* Frequency"
ORDER BY ts;
DROP VIEW IF EXISTS freq_total_duration;
CREATE VIEW freq_total_duration AS
SELECT
track_id,
freq_name,
SUM(duration) AS total_duration
FROM freq_slice
WHERE duration > 0
GROUP BY track_id, freq_name;
DROP VIEW IF EXISTS dvfs_per_band_view;
CREATE VIEW dvfs_per_band_view AS
WITH
freq_duration AS (
SELECT
track_id,
freq_name,
CAST(freq_value AS int) AS freq_value,
SUM(duration) AS duration_ns
FROM freq_slice
WHERE duration > 0
GROUP BY track_id, freq_name, freq_value
)
SELECT
freq_duration.track_id,
freq_duration.freq_name,
AndroidDvfsMetric_BandStat(
'freq_value', freq_value,
'percentage', duration_ns / (total_duration / 1e2),
'duration_ns', duration_ns
) AS proto
FROM freq_duration
LEFT JOIN freq_total_duration
USING(track_id)
ORDER BY freq_duration.freq_name, freq_duration.freq_value;
DROP VIEW IF EXISTS dvfs_per_freq_view;
CREATE VIEW dvfs_per_freq_view AS
SELECT
AndroidDvfsMetric_FrequencyResidency(
'freq_name', freq_total_duration.freq_name,
'band_stat', (
SELECT
RepeatedField(proto)
FROM dvfs_per_band_view
WHERE dvfs_per_band_view.track_id = freq_total_duration.track_id
)
) AS proto
FROM freq_total_duration
GROUP BY track_id, freq_name
ORDER BY freq_name;
DROP VIEW IF EXISTS android_dvfs_output;
CREATE VIEW android_dvfs_output AS
SELECT AndroidDVFSMetric(
'freq_residencies', (
SELECT
RepeatedField(proto)
FROM dvfs_per_freq_view
)
);