--
-- 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.

SELECT RUN_METRIC(
  'android/composition_layers.sql',
  'track_name', 'HWComposer: Total Layer',
  'output', 'total_layers'
);

SELECT RUN_METRIC(
  'android/composition_layers.sql',
  'track_name', 'HWComposer: DPU Layer',
  'output', 'dpu_layers'
);

SELECT RUN_METRIC(
  'android/composition_layers.sql',
  'track_name', 'HWComposer: GPU Layer',
  'output', 'gpu_layers'
);

SELECT RUN_METRIC(
  'android/composition_layers.sql',
  'track_name', 'HWComposer: DPU Cached Layer',
  'output', 'dpu_cached_layers'
);

SELECT RUN_METRIC(
  'android/composition_layers.sql',
  'track_name', 'HWComposer: SF Cached Layer',
  'output', 'sf_cached_layers'
);

SELECT RUN_METRIC(
  'android/composition_layers.sql',
  'track_name', 'HWComposer: RCD Layer',
  'output', 'rcd_layers'
);

SELECT RUN_METRIC(
  'android/composer_execution.sql',
  'output', 'hwc_execution_spans'
);


DROP VIEW IF EXISTS display_ids;
CREATE VIEW display_ids AS
SELECT DISTINCT display_id
FROM (
  SELECT display_id FROM total_layers
  UNION
  SELECT display_id FROM dpu_layers
  UNION
  SELECT display_id FROM gpu_layers
  UNION
  SELECT display_id FROM dpu_cached_layers
  UNION
  SELECT display_id FROM sf_cached_layers
  UNION
  SELECT display_id FROM rcd_layers
  UNION
  SELECT display_id FROM hwc_execution_spans
);

DROP VIEW IF EXISTS metrics_per_display;
CREATE VIEW metrics_per_display AS
SELECT AndroidHwcomposerMetrics_MetricsPerDisplay(
  'display_id', display_id,
  'composition_total_layers',
  (SELECT AVG(value) FROM total_layers WHERE display_id = d.display_id),
  'composition_dpu_layers',
  (SELECT AVG(value) FROM dpu_layers WHERE display_id = d.display_id),
  'composition_gpu_layers',
  (SELECT AVG(value) FROM gpu_layers WHERE display_id = d.display_id),
  'composition_dpu_cached_layers',
  (SELECT AVG(value) FROM dpu_cached_layers WHERE display_id = d.display_id),
  'composition_sf_cached_layers',
  (SELECT AVG(value) FROM sf_cached_layers WHERE display_id = d.display_id),
  'composition_rcd_layers',
  (SELECT AVG(value) FROM rcd_layers WHERE display_id = d.display_id),
  'skipped_validation_count',
  (SELECT COUNT(*) FROM hwc_execution_spans
    WHERE display_id = d.display_id AND validation_type = 'skipped_validation'),
  'unskipped_validation_count',
  (SELECT COUNT(*) FROM hwc_execution_spans
    WHERE display_id = d.display_id AND validation_type = 'unskipped_validation'),
  'separated_validation_count',
  (SELECT COUNT(*) FROM hwc_execution_spans
    WHERE display_id = d.display_id AND validation_type = 'separated_validation'),
  'unknown_validation_count',
  (SELECT COUNT(*) FROM hwc_execution_spans
    WHERE display_id = d.display_id AND validation_type = 'unknown'),
  'avg_all_execution_time_ms',
  (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans
    WHERE display_id = d.display_id AND validation_type != 'unknown'),
  'avg_skipped_execution_time_ms',
  (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans
    WHERE display_id = d.display_id AND validation_type = 'skipped_validation'),
  'avg_unskipped_execution_time_ms',
  (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans
    WHERE display_id = d.display_id AND validation_type = 'unskipped_validation'),
  'avg_separated_execution_time_ms',
  (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans
    WHERE display_id = d.display_id AND validation_type = 'separated_validation')
) AS proto
FROM display_ids d;

SELECT RUN_METRIC('android/process_counter_span_view.sql',
  'table_name', 'dpu_vote_clock',
  'counter_name', 'dpu_vote_clock'
);

SELECT RUN_METRIC('android/process_counter_span_view.sql',
  'table_name', 'dpu_vote_avg_bw',
  'counter_name', 'dpu_vote_avg_bw'
);

SELECT RUN_METRIC('android/process_counter_span_view.sql',
  'table_name', 'dpu_vote_peak_bw',
  'counter_name', 'dpu_vote_peak_bw'
);

SELECT RUN_METRIC('android/process_counter_span_view.sql',
  'table_name', 'dpu_vote_rt_bw',
  'counter_name', 'dpu_vote_rt_bw'
);

DROP VIEW IF EXISTS dpu_vote_process;
CREATE VIEW dpu_vote_process AS
SELECT DISTINCT p.upid, p.pid
FROM (
  SELECT upid FROM dpu_vote_clock_span
  UNION
  SELECT upid FROM dpu_vote_avg_bw_span
  UNION
  SELECT upid FROM dpu_vote_peak_bw_span
) s JOIN process p USING (upid);

-- These systrace counters are coming from dedicated kernel threads, so we can
-- assume pid = tid.
DROP VIEW IF EXISTS dpu_vote_metrics;
CREATE VIEW dpu_vote_metrics AS
SELECT AndroidHwcomposerMetrics_DpuVoteMetrics(
  'tid', pid,
  'avg_dpu_vote_clock',
  (SELECT SUM(dpu_vote_clock_val * dur) / SUM(dur)
    FROM dpu_vote_clock_span s WHERE s.upid = p.upid),
  'avg_dpu_vote_avg_bw',
  (SELECT SUM(dpu_vote_avg_bw_val * dur) / SUM(dur)
    FROM dpu_vote_avg_bw_span s WHERE s.upid = p.upid),
  'avg_dpu_vote_peak_bw',
  (SELECT SUM(dpu_vote_peak_bw_val * dur) / SUM(dur)
    FROM dpu_vote_peak_bw_span s WHERE s.upid = p.upid),
  'avg_dpu_vote_rt_bw',
  (SELECT SUM(dpu_vote_rt_bw_val * dur) / SUM(dur)
    FROM dpu_vote_rt_bw_span s WHERE s.upid = p.upid)
) AS proto
FROM dpu_vote_process p
ORDER BY pid;

DROP VIEW IF EXISTS android_hwcomposer_output;
CREATE VIEW android_hwcomposer_output AS
SELECT AndroidHwcomposerMetrics(
  'composition_total_layers', (SELECT AVG(value) FROM total_layers),
  'composition_dpu_layers', (SELECT AVG(value) FROM dpu_layers),
  'composition_gpu_layers', (SELECT AVG(value) FROM gpu_layers),
  'composition_dpu_cached_layers', (SELECT AVG(value) FROM dpu_cached_layers),
  'composition_sf_cached_layers', (SELECT AVG(value) FROM sf_cached_layers),
  'composition_rcd_layers', (SELECT AVG(value) FROM rcd_layers),
  'skipped_validation_count',
  (SELECT COUNT(*) FROM hwc_execution_spans
    WHERE validation_type = 'skipped_validation'),
  'unskipped_validation_count',
  (SELECT COUNT(*) FROM hwc_execution_spans
    WHERE validation_type = 'unskipped_validation'),
  'separated_validation_count',
  (SELECT COUNT(*) FROM hwc_execution_spans
    WHERE validation_type = 'separated_validation'),
  'unknown_validation_count',
  (SELECT COUNT(*) FROM hwc_execution_spans
    WHERE validation_type = 'unknown'),
  'avg_all_execution_time_ms',
  (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans
    WHERE validation_type != 'unknown'),
  'avg_skipped_execution_time_ms',
  (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans
    WHERE validation_type = 'skipped_validation'),
  'avg_unskipped_execution_time_ms',
  (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans
    WHERE validation_type = 'unskipped_validation'),
  'avg_separated_execution_time_ms',
  (SELECT AVG(execution_time_ns) / 1e6 FROM hwc_execution_spans
    WHERE validation_type = 'separated_validation'),
  'dpu_vote_metrics', (SELECT RepeatedField(proto) FROM dpu_vote_metrics),
  'metrics_per_display', (SELECT RepeatedField(proto) FROM metrics_per_display)
);
