--
-- Copyright 2022 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('chrome/chrome_input_to_browser_intervals.sql');

-- Script params:
-- {{dur_causes_jank_ms}} : The duration of a task barrage on the Chrome
-- main thread that will delay input causing jank.

-- Filter intervals to only durations longer than {{dur_causes_jank_ms}}.
DROP VIEW IF EXISTS chrome_input_to_browser_longer_intervals;
CREATE VIEW chrome_input_to_browser_longer_intervals AS
SELECT
  *
FROM chrome_input_to_browser_intervals
WHERE
  (window_end_ts - window_start_ts) >= {{dur_causes_jank_ms}} * 1e6;

-- Assign tasks to each delay interval that we could have started
-- processing input but didn't on the main thread, and sum those
-- tasks.
-- We filter java out here as we're interested in tasks that delayed
-- yielding to java native work, and we filter tasks that are more
-- than 8ms here as those are handled separately and are not regarded
-- as scheduling issues.
DROP VIEW IF EXISTS chrome_task_barrages_per_interval;
CREATE VIEW chrome_task_barrages_per_interval AS
SELECT
  GROUP_CONCAT(DISTINCT full_name) AS full_name,
  SUM(dur / 1e6) AS total_duration_ms,
  SUM(thread_dur / 1e6) AS total_thread_duration_ms,
  MIN(id) AS first_id_per_task_barrage,
  MAX(id) AS last_id_per_task_barrage,
  COUNT(*) AS count,
  window_start_id,
  window_start_ts,
  window_end_id,
  window_end_ts,
  scroll_type
FROM
  (
    SELECT * FROM (
      SELECT
        chrome_tasks.full_name AS full_name,
        chrome_tasks.dur AS dur,
        chrome_tasks.thread_dur AS thread_dur,
        chrome_tasks.ts AS ts,
        chrome_tasks.id,
        chrome_tasks.upid
      FROM
        chrome_tasks
      WHERE
        chrome_tasks.thread_name = "CrBrowserMain"
        AND task_type != "java"
        AND task_type != "choreographer"
      ORDER BY chrome_tasks.ts
    ) tasks
    JOIN chrome_input_to_browser_longer_intervals
      ON (tasks.ts + tasks.dur)
        > chrome_input_to_browser_longer_intervals.window_start_ts
        AND (tasks.ts + tasks.dur)
        < chrome_input_to_browser_longer_intervals.window_end_ts
        AND tasks.ts > chrome_input_to_browser_longer_intervals.window_start_ts
        AND tasks.ts < chrome_input_to_browser_longer_intervals.window_end_ts
        -- For cases when there are multiple chrome instances.
        AND tasks.upid = chrome_input_to_browser_longer_intervals.upid
    ORDER BY window_start_ts, window_end_ts
  )
GROUP BY window_start_ts, window_end_ts;

-- Filter to task barrages that took more than 8ms, as barrages
-- that lasted less than that are unlikely to have caused jank.
DROP VIEW IF EXISTS chrome_scroll_jank_caused_by_scheduling;
CREATE VIEW chrome_scroll_jank_caused_by_scheduling AS
SELECT *
FROM chrome_task_barrages_per_interval
WHERE total_duration_ms > {{dur_causes_jank_ms}} AND count > 1
ORDER BY total_duration_ms DESC;
