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