1-- 2-- Copyright 2021 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 17INCLUDE PERFETTO MODULE android.memory.dmabuf; 18 19DROP VIEW IF EXISTS dma_heap_timeline; 20CREATE PERFETTO VIEW dma_heap_timeline AS 21SELECT 22 ts, 23 LEAD(ts, 1, trace_end()) 24 OVER(PARTITION BY track_id ORDER BY ts) - ts AS dur, 25 track_id, 26 value 27FROM counter JOIN counter_track 28 ON counter.track_id = counter_track.id 29WHERE (name = 'mem.dma_heap'); 30 31DROP VIEW IF EXISTS dma_heap_stats; 32CREATE PERFETTO VIEW dma_heap_stats AS 33SELECT 34 SUM(value * dur) / SUM(dur) AS avg_size, 35 MIN(value) AS min_size, 36 MAX(value) AS max_size 37FROM dma_heap_timeline; 38 39DROP VIEW IF EXISTS android_dma_heap_output; 40CREATE PERFETTO VIEW android_dma_heap_output AS 41WITH _process_stats AS ( 42 SELECT process_name, SUM(buf_size) delta 43 FROM android_dmabuf_allocs 44 GROUP BY 1 45) 46SELECT AndroidDmaHeapMetric( 47 'avg_size_bytes', (SELECT avg_size FROM dma_heap_stats), 48 'min_size_bytes', (SELECT min_size FROM dma_heap_stats), 49 'max_size_bytes', (SELECT max_size FROM dma_heap_stats), 50 'total_alloc_size_bytes', ( 51 SELECT CAST(SUM(buf_size) AS DOUBLE) FROM android_dmabuf_allocs WHERE buf_size > 0 52 ), 53 'total_delta_bytes', (SELECT SUM(buf_size) FROM android_dmabuf_allocs), 54 'process_stats', ( 55 SELECT RepeatedField(AndroidDmaHeapMetric_ProcessStats('process_name', process_name, 'delta_bytes', delta)) 56 FROM _process_stats 57 ) 58); 59