• 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(start_ts), upid
32  FROM process
33  WHERE name GLOB '*GoogleCamera*'
34  LIMIT 1
35) AS gca USING (upid);
36
37-- RSS of camera HAL.
38DROP VIEW IF EXISTS rss_camera_hal;
39CREATE PERFETTO VIEW rss_camera_hal AS
40SELECT ts, dur, rss_val AS hal_rss_val
41FROM rss_and_swap_span
42JOIN (
43  SELECT max(start_ts), upid
44  FROM process
45  WHERE name GLOB '*camera.provider*'
46  LIMIT 1
47) AS hal USING (upid);
48
49-- RSS of cameraserver.
50DROP VIEW IF EXISTS rss_cameraserver;
51CREATE PERFETTO VIEW rss_cameraserver AS
52SELECT ts, dur, rss_val AS cameraserver_rss_val
53FROM rss_and_swap_span
54JOIN (
55  SELECT max(start_ts), upid
56  FROM process
57  WHERE name GLOB '*cameraserver'
58  LIMIT 1
59) AS cameraserver USING (upid);
60
61-- RSS of GCA + HAL.
62DROP TABLE IF EXISTS rss_gca_hal;
63CREATE VIRTUAL TABLE rss_gca_hal
64USING SPAN_OUTER_JOIN(rss_gca, rss_camera_hal);
65
66-- RSS of GCA + HAL + cameraserver.
67DROP TABLE IF EXISTS rss_all_camera;
68CREATE VIRTUAL TABLE rss_all_camera
69USING SPAN_OUTER_JOIN(rss_gca_hal, rss_cameraserver);
70
71-- RSS of GCA + HAL + cameraserver + DMA.
72DROP TABLE IF EXISTS rss_and_dma_all_camera_join;
73CREATE VIRTUAL TABLE rss_and_dma_all_camera_join
74USING SPAN_OUTER_JOIN(dma_span, rss_all_camera);
75
76DROP VIEW IF EXISTS rss_and_dma_all_camera_span;
77CREATE PERFETTO VIEW rss_and_dma_all_camera_span AS
78SELECT
79  ts,
80  dur,
81  IFNULL(gca_rss_val, 0) as gca_rss_val,
82  IFNULL(hal_rss_val, 0) as hal_rss_val,
83  IFNULL(cameraserver_rss_val, 0) as cameraserver_rss_val,
84  IFNULL(dma_val, 0) as dma_val,
85  CAST(
86    IFNULL(gca_rss_val, 0)
87    + IFNULL(hal_rss_val, 0)
88    + IFNULL(cameraserver_rss_val, 0)
89    + IFNULL(dma_val, 0) AS int) AS rss_and_dma_val
90FROM rss_and_dma_all_camera_join;
91
92-- we are dividing and casting to real when calculating avg_value
93-- to avoid issues such as the one in b/203613535
94DROP VIEW IF EXISTS rss_and_dma_all_camera_stats;
95CREATE PERFETTO VIEW rss_and_dma_all_camera_stats AS
96SELECT
97  MIN(rss_and_dma_val) AS min_value,
98  MAX(rss_and_dma_val) AS max_value,
99  SUM(rss_and_dma_val * dur / 1e3) / SUM(dur / 1e3) AS avg_value
100FROM rss_and_dma_all_camera_span;
101
102DROP VIEW IF EXISTS android_camera_event;
103CREATE PERFETTO VIEW android_camera_event AS
104SELECT
105  'counter' AS track_type,
106  'Camera Memory' AS track_name,
107  ts,
108  rss_and_dma_val AS value
109FROM rss_and_dma_all_camera_span;
110
111DROP VIEW IF EXISTS android_camera_output;
112CREATE PERFETTO VIEW android_camera_output AS
113SELECT
114  AndroidCameraMetric(
115    'gc_rss_and_dma', AndroidCameraMetric_Counter(
116      'min', CAST(min_value AS real),
117      'max', CAST(max_value AS real),
118      'avg', CAST(avg_value AS real)
119    )
120  )
121FROM rss_and_dma_all_camera_stats;
122