1-- 2-- Copyright 2019 The Android Open Source Project 3-- 4-- Licensed under the Apache License, Version 2.0 (the "License"); 5-- you may not use this file except in compliance with the License. 6-- You may obtain a copy of the License at 7-- 8-- https://www.apache.org/licenses/LICENSE-2.0 9-- 10-- Unless required by applicable law or agreed to in writing, software 11-- distributed under the License is distributed on an "AS IS" BASIS, 12-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13-- See the License for the specific language governing permissions and 14-- limitations under the License. 15-- 16 17DROP TABLE IF EXISTS {{table_name}}_delta; 18CREATE PERFETTO TABLE {{table_name}}_delta AS 19WITH rolling_delta AS ( 20 -- emits one row per ts point 21 SELECT 22 upid, 23 {{table_name}}_val - MIN({{table_name}}_val) OVER win AS delta 24 FROM {{table_name}}_span 25 WINDOW win AS ( 26 PARTITION BY upid 27 ORDER BY ts 28 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 29 ) 30) 31SELECT 32 upid, 33 -- max over all ts 34 MAX(delta) AS delta 35FROM rolling_delta 36GROUP BY 1; 37 38DROP TABLE IF EXISTS {{table_name}}_stats; 39CREATE PERFETTO TABLE {{table_name}}_stats AS 40SELECT 41 process.name AS process_name, 42 MIN(span.{{table_name}}_val) AS min_value, 43 MAX(span.{{table_name}}_val) AS max_value, 44 SUM(span.{{table_name}}_val * span.dur) / SUM(span.dur) AS avg_value, 45 MAX(delta.delta) AS max_delta_value 46FROM {{table_name}}_span AS span 47JOIN {{table_name}}_delta AS delta USING(upid) 48JOIN process USING(upid) 49WHERE process.name IS NOT NULL 50GROUP BY 1 51ORDER BY 1; 52 53DROP VIEW IF EXISTS {{table_name}}_stats_proto; 54CREATE PERFETTO VIEW {{table_name}}_stats_proto AS 55SELECT 56 process_name, 57 AndroidMemoryMetric_Counter( 58 'min', min_value, 59 'max', max_value, 60 'avg', avg_value, 61 'delta', max_delta_value 62 ) AS proto 63FROM {{table_name}}_stats; 64