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

-- Stores sets of tables that make sense together (e.g. slices on the main thread
-- and frame boundaries on the main thread).
-- Used to simplify passing arguments to other functions / metrics.
DROP TABLE IF EXISTS android_jank_cuj_table_set;
CREATE TABLE android_jank_cuj_table_set(
  name TEXT,
  slice_table_name TEXT,
  frame_boundary_table_name TEXT,
  cuj_boundary_table_name TEXT,
  frame_table_name TEXT);

INSERT INTO android_jank_cuj_table_set(
  name,
  slice_table_name,
  frame_boundary_table_name,
  cuj_boundary_table_name,
  frame_table_name)
VALUES
('App threads',
  'android_jank_cuj_slice',
  'android_jank_cuj_frame',
  'android_jank_cuj_boundary',
  'android_jank_cuj_frame'),
('MainThread',
  'android_jank_cuj_main_thread_slice',
  'android_jank_cuj_main_thread_frame_boundary',
  'android_jank_cuj_main_thread_cuj_boundary',
  'android_jank_cuj_frame'),
('RenderThread',
  'android_jank_cuj_render_thread_slice',
  'android_jank_cuj_render_thread_frame_boundary',
  'android_jank_cuj_render_thread_cuj_boundary',
  'android_jank_cuj_frame'),
('SF threads',
  'android_jank_cuj_sf_slice',
  'android_jank_cuj_sf_frame',
  'android_jank_cuj_sf_boundary',
  'android_jank_cuj_sf_frame'),
('SF MainThread',
  'android_jank_cuj_sf_main_thread_slice',
  'android_jank_cuj_sf_main_thread_frame_boundary',
  'android_jank_cuj_sf_main_thread_cuj_boundary',
  'android_jank_cuj_sf_frame'),
('SF RenderEngine',
  'android_jank_cuj_sf_render_engine_slice',
  'android_jank_cuj_sf_render_engine_frame_boundary',
  'android_jank_cuj_sf_boundary',
  'android_jank_cuj_sf_frame');

-- Functions below retrieve specific columns for a given table set.

SELECT CREATE_FUNCTION(
  'ANDROID_JANK_CUJ_TABLE_SET_SLICE(table_set STRING)',
  'STRING',
  'SELECT slice_table_name FROM android_jank_cuj_table_set ts WHERE ts.name = $table_set'
);

SELECT CREATE_FUNCTION(
  'ANDROID_JANK_CUJ_TABLE_SET_FRAME_BOUNDARY(table_set STRING)',
  'STRING',
  'SELECT frame_boundary_table_name FROM android_jank_cuj_table_set ts WHERE ts.name = $table_set'
);

SELECT CREATE_FUNCTION(
  'ANDROID_JANK_CUJ_TABLE_SET_CUJ_BOUNDARY(table_set STRING)',
  'STRING',
  'SELECT cuj_boundary_table_name FROM android_jank_cuj_table_set ts WHERE ts.name = $table_set'
);

SELECT CREATE_FUNCTION(
  'ANDROID_JANK_CUJ_TABLE_SET_FRAME(table_set STRING)',
  'STRING',
  'SELECT frame_table_name FROM android_jank_cuj_table_set ts WHERE ts.name = $table_set'
);

-- Checks if two slices, described by ts and dur, ts_second and dur_second, overlap.
-- Does not handle cases where slices are unfinished (dur = -1).
SELECT
  CREATE_FUNCTION(
    'ANDROID_JANK_CUJ_SLICE_OVERLAPS(ts LONG, dur LONG, ts_second LONG, dur_second LONG)',
    'BOOL',
    'SELECT
      -- A starts before B ends and A ends after B starts
      ($ts < $ts_second + $dur_second AND $ts + $dur > $ts_second)
      -- or A starts after B starts and A ends before B ends
      OR ($ts > $ts_second AND $ts < $ts_second + $ts_dur)');
