• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1--
2-- Copyright 2022 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
16SELECT RUN_METRIC('android/process_metadata.sql');
17
18DROP VIEW IF EXISTS android_frame_timeline_metric_per_process;
19CREATE VIEW android_frame_timeline_metric_per_process AS
20WITH frames AS (
21  SELECT
22    process.upid,
23    process.name AS process_name,
24    timeline.name AS vsync,
25    jank_type GLOB '*App Deadline Missed*' AS missed_app_frame,
26    jank_type GLOB '*SurfaceFlinger CPU Deadline Missed*'
27      OR jank_type GLOB '*SurfaceFlinger GPU Deadline Missed*'
28      OR jank_type GLOB '*SurfaceFlinger Scheduling*'
29      OR jank_type GLOB '*Prediction Error*'
30      OR jank_type GLOB '*Display HAL*' AS missed_sf_frame,
31    jank_type GLOB '*App Deadline Missed*'
32      OR jank_type GLOB '*SurfaceFlinger CPU Deadline Missed*'
33      OR jank_type GLOB '*SurfaceFlinger GPU Deadline Missed*'
34      OR jank_type GLOB '*SurfaceFlinger Scheduling*'
35      OR jank_type GLOB '*Prediction Error*'
36      OR jank_type GLOB '*Display HAL*'
37      OR jank_type GLOB '*Dropped Frame*' AS missed_frame,
38    jank_type GLOB '*Dropped Frame*' AS dropped_frame,
39    dur,
40    dur / 1e6 AS dur_ms
41  FROM actual_frame_timeline_slice timeline
42  JOIN process USING (upid))
43SELECT
44  upid,
45  process_name,
46  process_metadata.metadata AS process_metadata,
47  COUNT(DISTINCT(vsync)) AS total_frames,
48  COUNT(DISTINCT(IIF(missed_app_frame, vsync, NULL))) AS missed_app_frames,
49  COUNT(DISTINCT(IIF(missed_sf_frame, vsync, NULL))) AS missed_sf_frames,
50  COUNT(DISTINCT(IIF(missed_frame, vsync, NULL))) AS missed_frames,
51  COUNT(DISTINCT(IIF(dropped_frame, vsync, NULL))) AS dropped_frames,
52  CAST(PERCENTILE(dur, 50) AS INTEGER) AS frame_dur_p50,
53  CAST(PERCENTILE(dur, 90) AS INTEGER) AS frame_dur_p90,
54  CAST(PERCENTILE(dur, 95) AS INTEGER) AS frame_dur_p95,
55  CAST(PERCENTILE(dur, 99) AS INTEGER) AS frame_dur_p99,
56  PERCENTILE(dur_ms, 50) AS frame_dur_ms_p50,
57  PERCENTILE(dur_ms, 90) AS frame_dur_ms_p90,
58  PERCENTILE(dur_ms, 95) AS frame_dur_ms_p95,
59  PERCENTILE(dur_ms, 99) AS frame_dur_ms_p99,
60  CAST(AVG(dur) AS INTEGER) AS frame_dur_avg,
61  MAX(dur) AS frame_dur_max
62FROM frames
63JOIN process_metadata USING (upid)
64GROUP BY upid, process_name;
65
66DROP VIEW IF EXISTS android_frame_timeline_metric_output;
67CREATE VIEW android_frame_timeline_metric_output
68AS
69SELECT
70  AndroidFrameTimelineMetric(
71    'total_frames', SUM(total_frames),
72    'missed_app_frames', SUM(missed_app_frames),
73    'dropped_frames', SUM(dropped_frames),
74    'process', (
75      SELECT
76        RepeatedField(
77          AndroidFrameTimelineMetric_ProcessBreakdown(
78            'process', process_metadata,
79            'total_frames', total_frames,
80            'missed_frames', missed_frames,
81            'missed_app_frames', missed_app_frames,
82            'missed_sf_frames', missed_sf_frames,
83            'frame_dur_max', frame_dur_max,
84            'frame_dur_avg', frame_dur_avg,
85            'frame_dur_p50', frame_dur_p50,
86            'frame_dur_p90', frame_dur_p90,
87            'frame_dur_p95', frame_dur_p95,
88            'frame_dur_p99', frame_dur_p99,
89            'frame_dur_ms_p50', frame_dur_ms_p50,
90            'frame_dur_ms_p90', frame_dur_ms_p90,
91            'frame_dur_ms_p95', frame_dur_ms_p95,
92            'frame_dur_ms_p99', frame_dur_ms_p99,
93            'dropped_frames', dropped_frames))
94      FROM android_frame_timeline_metric_per_process))
95FROM android_frame_timeline_metric_per_process;
96