diff options
Diffstat (limited to 'services/surfaceflinger/TimeStats/timestatsatomsproto/timestats_atoms.proto')
-rw-r--r-- | services/surfaceflinger/TimeStats/timestatsatomsproto/timestats_atoms.proto | 306 |
1 files changed, 0 insertions, 306 deletions
diff --git a/services/surfaceflinger/TimeStats/timestatsatomsproto/timestats_atoms.proto b/services/surfaceflinger/TimeStats/timestatsatomsproto/timestats_atoms.proto deleted file mode 100644 index e45757ddfd..0000000000 --- a/services/surfaceflinger/TimeStats/timestatsatomsproto/timestats_atoms.proto +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -syntax = "proto2"; -option optimize_for = LITE_RUNTIME; -package android.surfaceflinger; - -// This is a copy of surfaceflinger's atoms from frameworks/proto_logging/stats/atoms.proto. -// Pulled atoms for surfaceflinger must be routed through system server since surfaceflinger is -// in the bootstrap namespace. This copy is used to pass the atoms as protos to system server using -// proto lite to serialize/deserialize the atoms. - -// These wrappers are so that we can pass a List<Atom> as a single byte string. -// They are not in atoms.proto -message SurfaceflingerStatsGlobalInfoWrapper { - repeated SurfaceflingerStatsGlobalInfo atom = 1; -} - -message SurfaceflingerStatsLayerInfoWrapper { - repeated SurfaceflingerStatsLayerInfo atom = 1; -} - -/** - * Global display pipeline metrics reported by SurfaceFlinger. - * Metrics exist beginning in Android 11. - * Pulled from: - * frameworks/native/services/surfaceflinger/TimeStats/TimeStats.cpp - */ -message SurfaceflingerStatsGlobalInfo { - // Aggregated refresh rate buckets that layers were presenting at. Buckets - // are defined in SurfaceFlinger and are tracked per device. - // Introduced in Android 12. - // This is intended to be used as a dimenstion in collecting per-refresh rate - // jank statistics. - optional int32 display_refresh_rate_bucket = 18; - // Aggregated render rate buckets that layers were overridden to run at. - // Buckets are defined in SurfaceFlinger and are tracked per device. - // Introduced in Android 12. - // This is intended to be used as a dimension in collecting per-render rate - // jank statistics. - optional int32 render_rate_bucket = 21; - // Total number of frames presented during the tracing period - // Note: This stat is not sliced by dimension. It will be duplicated for metrics - // using render_rate_bucket as a dimension. - optional int64 total_frames = 1; - // Total number of frames missed - // Note: This stat is not sliced by dimension. It will be duplicated for metrics - // using render_rate_bucket as a dimension. - optional int64 missed_frames = 2; - // Total number of frames that fell back to client composition - // Note: This stat is not sliced by dimension. It will be duplicated for metrics - // using render_rate_bucket as a dimension. - optional int64 client_composition_frames = 3; - // Total time the display was turned on - // Note: This stat is not sliced by dimension. It will be duplicated for metrics - // using render_rate_bucket as a dimension. - optional int64 display_on_millis = 4; - // Total time that was spent performing animations. - // This is derived from the present-to-present layer histogram. - // Note: This stat is not sliced by dimension. It will be duplicated for metrics - // using render_rate_bucket as a dimension. - optional int64 animation_millis = 5; - // Total number of event connections tracked by SurfaceFlinger at the time - // of this pull. If this number grows prohibitively large, then this can - // cause jank due to resource contention. - // Note: This stat is not sliced by dimension. It will be duplicated for metrics - // using render_rate_bucket as a dimension. - optional int32 event_connection_count = 6; - // Set of timings measured from when SurfaceFlinger began compositing a - // frame, until the frame was requested to be presented to the display. This - // measures SurfaceFlinger's total CPU walltime on the critical path per - // frame. - // Note: This stat is not sliced by dimension. It will be duplicated for metrics - // using render_rate_bucket as a dimension. - optional FrameTimingHistogram frame_duration = 7; - // Set of timings measured from when SurfaceFlinger first began using the - // GPU to composite a frame, until the GPU has finished compositing that - // frame. This measures the total additional time SurfaceFlinger needed to - // perform due to falling back into GPU composition. - // Note: This stat is not sliced by dimension. It will be duplicated for metrics - // using render_rate_bucket as a dimension. - optional FrameTimingHistogram render_engine_timing = 8; - // Number of frames where SF saw a frame, based on its frame timeline. - // Frame timelines may include transactions without updating buffer contents. - // Introduced in Android 12. - optional int32 total_timeline_frames = 9; - // Number of frames where SF saw a janky frame. - // Introduced in Android 12. - optional int32 total_janky_frames = 10; - // Number of janky frames where SF spent a long time on the CPU. - // Introduced in Android 12. - optional int32 total_janky_frames_with_long_cpu = 11; - // Number of janky frames where SF spent a long time on the GPU. - // Introduced in Android 12. - optional int32 total_janky_frames_with_long_gpu = 12; - // Number of janky frames where SF missed the frame deadline, but there - // was not an attributed reason (e.g., maybe HWC missed?) - // Introduced in Android 12. - optional int32 total_janky_frames_sf_unattributed = 13; - // Number of janky frames where the app missed the frame deadline, but - // there was not an attributed reason - // Introduced in Android 12. - optional int32 total_janky_frames_app_unattributed = 14; - // Number of janky frames that were caused because of scheduling errors in - // SF that resulted in early present (e.g., SF sending a buffer to the - // composition engine earlier than expected, resulting in a present that is - // one vsync early) - // Introduced in Android 12. - optional int32 total_janky_frames_sf_scheduling = 15; - // Number of frames that were classified as jank because of possible drift in - // vsync predictions. - // Introduced in Android 12. - optional int32 total_jank_frames_sf_prediction_error = 16; - // Number of janky frames where the app was in a buffer stuffed state (more - // than one buffer ready to be presented at the same vsync). Usually caused - // when the first frame is unusually long, the following frames enter into a - // stuffed state. - // Introduced in Android 12. - optional int32 total_jank_frames_app_buffer_stuffing = 17; - // Buckets of timings in ms by which SurfaceFlinger's deadline was missed - // while latching and presenting frames. - // Introduced in Android 12. - optional FrameTimingHistogram sf_deadline_misses = 19; - // Buckets of timings in ms by which the Vsync prediction drifted, when - // compared to the actual hardware vsync. - // Introduced in Android 12. - optional FrameTimingHistogram sf_prediction_errors = 20; - - // Next ID: 22 -} - -/** - * Per-layer display pipeline metrics reported by SurfaceFlinger. - * Metrics exist beginning in Android 11. - * The number of layers uploaded may be restricted due to size limitations. - * Pulled from: - * frameworks/native/services/surfaceflinger/TimeStats/TimeStats.cpp - */ -message SurfaceflingerStatsLayerInfo { - // UID of the application who submitted this layer for presentation - // This is intended to be used as a dimension for surfacing rendering - // statistics to applications. - // Introduced in Android 12. - optional int32 uid = 12; - // Refresh rate bucket that the layer was presenting at. Buckets are - // defined in SurfaceFlinger and are tracked per device. - // Introduced in Android 12. - // This is intended to be used as a dimension in collecting per-refresh rate - // jank statistics - optional int32 display_refresh_rate_bucket = 22; - // Render rate bucket that the layer was submitting frames at. Buckets are - // defined in SurfaceFlinger and are tracked per device. - // Introduced in Android 12. - // This is intended to be used as a dimension in collecting per-render rate - // jank statistics. - optional int32 render_rate_bucket = 23; - - enum GameMode { - GAME_MODE_UNSPECIFIED = 0; - GAME_MODE_UNSUPPORTED = 1; - GAME_MODE_STANDARD = 2; - GAME_MODE_PERFORMANCE = 3; - GAME_MODE_BATTERY = 4; - } - - // Game mode that the layer was running at. Used to track user engagement - // in different modes. The modes are defined in GameManager.java - // Game modes are used only for integrating with GameManager. All non-game - // layers will have this field set to UNSUPPORTED. - // Introduced in Android 12 - // This is intended to be used as a dimension in collecting per-game mode - // fps and frame related metrics. - optional GameMode game_mode = 26; - // The layer for this set of metrics - // In many scenarios the package name is included in the layer name, e.g., - // layers created by Window Manager. But this is not a guarantee - in the - // general case layer names are arbitrary debug names. - optional string layer_name = 1; - // Total number of frames presented - optional int64 total_frames = 2; - // Total number of dropped frames while latching a buffer for this layer. - optional int64 dropped_frames = 3; - // Set of timings measured between successive presentation timestamps. - optional FrameTimingHistogram present_to_present = 4; - // Set of timings measured from when an app queued a buffer for - // presentation, until the buffer was actually presented to the - // display. - optional FrameTimingHistogram post_to_present = 5; - // Set of timings measured from when a buffer is ready to be presented, - // until the buffer was actually presented to the display. - optional FrameTimingHistogram acquire_to_present = 6; - // Set of timings measured from when a buffer was latched by - // SurfaceFlinger, until the buffer was presented to the display - optional FrameTimingHistogram latch_to_present = 7; - // Set of timings measured from the desired presentation to the actual - // presentation time - optional FrameTimingHistogram desired_to_present = 8; - // Set of timings measured from when an app queued a buffer for - // presentation, until the buffer was ready to be presented. - optional FrameTimingHistogram post_to_acquire = 9; - // Frames missed latch because the acquire fence didn't fire - optional int64 late_acquire_frames = 10; - // Frames latched early because the desired present time was bad - optional int64 bad_desired_present_frames = 11; - // Number of frames where SF saw a frame, based on its frame timeline. - // Frame timelines may include transactions without updating buffer contents. - // Introduced in Android 12. - optional int32 total_timeline_frames = 13; - // Number of frames where SF saw a janky frame. - // Introduced in Android 12. - optional int32 total_janky_frames = 14; - // Number of janky frames where SF spent a long time on the CPU. - // Introduced in Android 12. - optional int32 total_janky_frames_with_long_cpu = 15; - // Number of janky frames where SF spent a long time on the GPU. - // Introduced in Android 12. - optional int32 total_janky_frames_with_long_gpu = 16; - // Number of janky frames where SF missed the frame deadline, but there - // was not an attributed reason (e.g., maybe HWC missed?) - // Introduced in Android 12. - optional int32 total_janky_frames_sf_unattributed = 17; - // Number of janky frames where the app missed the frame deadline, but - // there was not an attributed reason - // Introduced in Android 12. - optional int32 total_janky_frames_app_unattributed = 18; - // Number of janky frames that were caused because of scheduling errors in - // SF that resulted in early present (e.g., SF sending a buffer to the - // composition engine earlier than expected, resulting in a present that is - // one vsync early) - // Introduced in Android 12. - optional int32 total_janky_frames_sf_scheduling = 19; - // Number of frames that were classified as jank because of possible drift in - // vsync predictions. - // Introduced in Android 12. - optional int32 total_jank_frames_sf_prediction_error = 20; - // Number of janky frames where the app was in a buffer stuffed state (more - // than one buffer ready to be presented at the same vsync). Usually caused - // when the first frame is unusually long, the following frames enter into a - // stuffed state. - // Introduced in Android 12. - optional int32 total_jank_frames_app_buffer_stuffing = 21; - - /** - * Encapsulates the FrameRateVote information sent by the application while - * calling setFrameRate. - * Metrics exist beginning in Android 12. - */ - message SetFrameRateVote { - // The desired frame rate the application wishes to run on. - optional float frame_rate = 1; - - enum FrameRateCompatibility { - FRAME_RATE_UNDEFINED = 0; - FRAME_RATE_DEFAULT = 1; - FRAME_RATE_EXACT_OR_MULTIPLE = 2; - } - - // Specifies how to interpret the frame rate associated with the layer. - // Defined in Layer.h - optional FrameRateCompatibility frame_rate_compatibility = 2; - - enum Seamlessness { - SEAMLESS_UNDEFINED = 0; - SEAMLESS_SHOULD_BE_SEAMLESS = 1; - SEAMLESS_NOT_REQUIRED = 2; - } - // Indicates whether seamless refresh rate switch is required or not. - optional Seamlessness seamlessness = 3; - } - - // The last frame rate vote set by the application. - // Introduced in Android 12. - optional SetFrameRateVote set_frame_rate_vote = 24; - // Buckets of timings in ms by which the app deadline was missed while - // submitting work for a frame. - // Introduced in Android 12. - optional FrameTimingHistogram app_deadline_misses = 25; - - // Next ID: 27 -} - -/** - * Histogram of frame counts bucketed by time in milliseconds. - * Because of size limitations, we hard-cap the number of buckets, with - * buckets for corresponding to larger milliseconds being less precise. - */ -message FrameTimingHistogram { - // Timings in milliseconds that describes a set of histogram buckets - repeated int32 time_millis_buckets = 1; - // Number of frames that match to each time_millis, i.e. the bucket - // contents - // It's required that len(time_millis) == len(frame_count) - repeated int64 frame_counts = 2; -} |