• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
17-- This gives us access to the RSS breakdowns.
18SELECT RUN_METRIC('android/process_mem.sql');
19
20-- Compute DMA spans.
21SELECT RUN_METRIC('android/global_counter_span_view.sql',
22  'table_name', 'dma',
23  'counter_name', 'mem.dma_heap');
24
25-- RSS of GCA.
26DROP VIEW IF EXISTS rss_gca;
27CREATE PERFETTO VIEW rss_gca AS
28SELECT ts, dur, rss_val AS gca_rss_val
29FROM rss_and_swap_span
30JOIN (
31  SELECT max(rss), upid
32  FROM process
33  JOIN (
34    SELECT max(rss_val) as rss, upid FROM rss_and_swap_span GROUP BY upid
35  ) USING (upid)
36  WHERE name GLOB '*GoogleCamera'
37    OR name GLOB '*googlecamera.fishfood'
38    OR name GLOB '*GoogleCameraEng'
39  LIMIT 1
40) AS gca USING (upid);
41
42-- RSS of camera HAL.
43DROP VIEW IF EXISTS rss_camera_hal;
44CREATE PERFETTO VIEW rss_camera_hal AS
45SELECT ts, dur, rss_val AS hal_rss_val
46FROM rss_and_swap_span
47JOIN (
48  SELECT max(start_ts), upid
49  FROM process
50  WHERE name GLOB '*camera.provider*'
51  LIMIT 1
52) AS hal USING (upid);
53
54-- RSS of cameraserver.
55DROP VIEW IF EXISTS rss_cameraserver;
56CREATE PERFETTO VIEW rss_cameraserver AS
57SELECT ts, dur, rss_val AS cameraserver_rss_val
58FROM rss_and_swap_span
59JOIN (
60  SELECT max(start_ts), upid
61  FROM process
62  WHERE name GLOB '*cameraserver'
63  LIMIT 1
64) AS cameraserver USING (upid);
65
66-- RSS of GCA + HAL.
67DROP TABLE IF EXISTS rss_gca_hal;
68CREATE VIRTUAL TABLE rss_gca_hal
69USING SPAN_OUTER_JOIN(rss_gca, rss_camera_hal);
70
71-- RSS of GCA + HAL + cameraserver.
72DROP TABLE IF EXISTS rss_all_camera;
73CREATE VIRTUAL TABLE rss_all_camera
74USING SPAN_OUTER_JOIN(rss_gca_hal, rss_cameraserver);
75
76-- RSS of GCA + HAL + cameraserver + DMA.
77DROP TABLE IF EXISTS rss_and_dma_all_camera_join;
78CREATE VIRTUAL TABLE rss_and_dma_all_camera_join
79USING SPAN_OUTER_JOIN(dma_span, rss_all_camera);
80
81DROP VIEW IF EXISTS rss_and_dma_all_camera_span;
82CREATE PERFETTO VIEW rss_and_dma_all_camera_span AS
83SELECT
84  ts,
85  dur,
86  IFNULL(gca_rss_val, 0) as gca_rss_val,
87  IFNULL(hal_rss_val, 0) as hal_rss_val,
88  IFNULL(cameraserver_rss_val, 0) as cameraserver_rss_val,
89  IFNULL(dma_val, 0) as dma_val,
90  CAST(
91    IFNULL(gca_rss_val, 0)
92    + IFNULL(hal_rss_val, 0)
93    + IFNULL(cameraserver_rss_val, 0)
94    + IFNULL(dma_val, 0) AS int) AS rss_and_dma_val
95FROM rss_and_dma_all_camera_join;
96
97-- we are dividing and casting to real when calculating avg_value
98-- to avoid issues such as the one in b/203613535
99DROP VIEW IF EXISTS rss_and_dma_all_camera_stats;
100CREATE PERFETTO VIEW rss_and_dma_all_camera_stats AS
101SELECT
102  MIN(rss_and_dma_val) AS min_value,
103  MAX(rss_and_dma_val) AS max_value,
104  SUM(rss_and_dma_val * dur / 1e3) / SUM(dur / 1e3) AS avg_value
105FROM rss_and_dma_all_camera_span;
106
107DROP VIEW IF EXISTS android_camera_output;
108CREATE PERFETTO VIEW android_camera_output AS
109SELECT
110  AndroidCameraMetric(
111    'gc_rss_and_dma', AndroidCameraMetric_Counter(
112      'min', CAST(min_value AS real),
113      'max', CAST(max_value AS real),
114      'avg', CAST(avg_value AS real)
115    )
116  )
117FROM rss_and_dma_all_camera_stats;
118