| /* |
| * Copyright (C) 2023 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"; |
| |
| package perfetto.protos; |
| |
| import "protos/perfetto/trace/android/surfaceflinger_common.proto"; |
| import "protos/perfetto/trace/android/graphics/rect.proto"; |
| |
| // Message used by Winscope to process legacy trace files. |
| // Represents a file full of surface flinger trace entries. |
| // Encoded, it should start with 0x4c 0x59 0x52 0x54 0x52 0x41 0x43 0x45 |
| // (.LYRTRACE), such that they can be easily identified. |
| message LayersTraceFileProto { |
| // constant; MAGIC_NUMBER = (long) MAGIC_NUMBER_H << 32 | |
| // MagicNumber.MAGIC_NUMBER_L (this is needed because enums have to be 32 bits |
| // and there's no nice way to put 64bit constants into .proto files. |
| enum MagicNumber { |
| INVALID = 0; |
| // LYRT (little-endian ASCII) |
| MAGIC_NUMBER_L = 0x5452594c; |
| // RACE (little-endian ASCII) |
| MAGIC_NUMBER_H = 0x45434152; |
| } |
| |
| // Must be the first field, set to value in MagicNumber |
| optional fixed64 magic_number = 1; |
| |
| repeated LayersSnapshotProto entry = 2; |
| |
| // Offset between real-time clock and elapsed time clock in nanoseconds. |
| // Calculated as: systemTime(SYSTEM_TIME_REALTIME) - |
| // systemTime(SYSTEM_TIME_MONOTONIC) |
| optional fixed64 real_to_elapsed_time_offset_nanos = 3; |
| } |
| |
| message LayersSnapshotProto { |
| // elapsed realtime in nanos since boot of when this entry was logged |
| optional sfixed64 elapsed_realtime_nanos = 1; |
| |
| // SurfaceFlinger's stage where the snapshot was triggered. |
| // Currently either "visibleRegionsDirty" or "bufferLatched". |
| optional string where = 2; |
| |
| optional LayersProto layers = 3; |
| |
| // Blob for the current HWC information for all layers, reported by dumpsys. |
| // Example: |
| // "maxDownScale: 4, maxFullWidth: 8192, HWState: 1, AssignedState: 3, ..." |
| optional string hwc_blob = 4; |
| |
| // Excludes state sent during composition like visible region and composition |
| // type. |
| optional bool excludes_composition_state = 5; |
| |
| // Number of missed entries since the last entry was recorded. |
| optional uint32 missed_entries = 6; |
| |
| repeated DisplayProto displays = 7; |
| |
| optional int64 vsync_id = 8; |
| } |
| |
| // Contains a list of all layers. |
| message LayersProto { |
| repeated LayerProto layers = 1; |
| } |
| |
| message DisplayProto { |
| optional uint64 id = 1; |
| // Display descriptor, e.g. "Built-In Screen" |
| optional string name = 2; |
| optional uint32 layer_stack = 3; |
| optional SizeProto size = 4; |
| optional RectProto layer_stack_space_rect = 5; |
| optional TransformProto transform = 6; |
| optional bool is_virtual = 7; |
| optional double dpi_x = 8; |
| optional double dpi_y = 9; |
| } |
| |
| // Must match definition in the IComposerClient HAL |
| enum HwcCompositionType { |
| // Invalid composition type |
| HWC_TYPE_UNSPECIFIED = 0; |
| // Layer was composited by the client into the client target buffer |
| HWC_TYPE_CLIENT = 1; |
| // Layer was composited by the device through hardware overlays |
| HWC_TYPE_DEVICE = 2; |
| // Layer was composited by the device using a color |
| HWC_TYPE_SOLID_COLOR = 3; |
| // Similar to DEVICE, but the layer position may have been asynchronously set |
| // through setCursorPosition |
| HWC_TYPE_CURSOR = 4; |
| // Layer was composited by the device via a sideband stream |
| HWC_TYPE_SIDEBAND = 5; |
| // Layer was composited by hardware optimized for display decoration |
| HWC_TYPE_DISPLAY_DECORATION = 6; |
| } |
| |
| // Information about each layer. |
| message LayerProto { |
| // unique id per layer. |
| optional int32 id = 1; |
| // unique name per layer. |
| // Example: "Wallpaper". |
| optional string name = 2; |
| // list of children this layer may have. May be empty. |
| repeated int32 children = 3 [packed = true]; |
| // list of layers that are z order relative to this layer. |
| repeated int32 relatives = 4 [packed = true]; |
| // The type of layer. |
| // Examples: "ContainerLayer", "BufferStateLayer". |
| optional string type = 5; |
| optional RegionProto transparent_region = 6; |
| optional RegionProto visible_region = 7; |
| optional RegionProto damage_region = 8; |
| optional uint32 layer_stack = 9; |
| // The layer's z order. Can be z order in layer stack, relative to parent, |
| // or relative to another layer specified in zOrderRelative. |
| optional int32 z = 10; |
| // The layer's position on the display. |
| optional PositionProto position = 11; |
| // The layer's requested position. |
| optional PositionProto requested_position = 12; |
| // The layer's size. |
| optional SizeProto size = 13; |
| // The layer's crop in its own bounds. |
| optional RectProto crop = 14; |
| // The layer's crop in its parent's bounds. |
| optional RectProto final_crop = 15 [deprecated = true]; |
| optional bool is_opaque = 16; |
| optional bool invalidate = 17; |
| // Composition states's dataspace. |
| // Examples: "STANDARD_BT709", "STANDARD_BT601_625". |
| // See full enum in |
| // frameworks/native/libs/nativewindow/include/android/data_space.h |
| optional string dataspace = 18; |
| // Buffer's pixel format |
| // Examples: "PIXEL_FORMAT_TRANSLUCENT", "PIXEL_FORMAT_RGBA_8888". |
| // See full enum in frameworks/native/libs/ui/include/ui/PixelFormat.h |
| optional string pixel_format = 19; |
| // The layer's actual color. |
| optional ColorProto color = 20; |
| // The layer's requested color. |
| optional ColorProto requested_color = 21; |
| // Can be any combination of |
| // hidden = 0x01 |
| // opaque = 0x02, |
| // secure = 0x80, |
| optional uint32 flags = 22; |
| // The layer's actual transform |
| optional TransformProto transform = 23; |
| // The layer's requested transform. |
| optional TransformProto requested_transform = 24; |
| // The parent layer. This value can be null if there is no parent. |
| optional int32 parent = 25; |
| // The layer that this layer has a z order relative to. This value can be |
| // null. |
| optional int32 z_order_relative_of = 26; |
| // This value can be null if there's nothing to draw. |
| optional ActiveBufferProto active_buffer = 27; |
| // The number of frames available. |
| optional int32 queued_frames = 28; |
| optional bool refresh_pending = 29; |
| // The layer's composer backend destination frame |
| optional RectProto hwc_frame = 30; |
| // The layer's composer backend source crop |
| optional FloatRectProto hwc_crop = 31; |
| // The layer's composer backend transform |
| optional int32 hwc_transform = 32; |
| optional int32 window_type = 33 [deprecated = true]; |
| optional int32 app_id = 34 [deprecated = true]; |
| // The layer's composition type |
| optional HwcCompositionType hwc_composition_type = 35; |
| // If it's a buffer layer, indicate if the content is protected |
| optional bool is_protected = 36; |
| // Current frame number being rendered. |
| optional uint64 curr_frame = 37; |
| // A list of barriers that the layer is waiting to update state. |
| repeated BarrierLayerProto barrier_layer = 38; |
| // If active_buffer is not null, record its transform. |
| optional TransformProto buffer_transform = 39; |
| optional int32 effective_scaling_mode = 40; |
| // Layer's corner radius. |
| optional float corner_radius = 41; |
| // Metadata map. May be empty. |
| map<int32, string> metadata = 42; |
| |
| optional TransformProto effective_transform = 43; |
| optional FloatRectProto source_bounds = 44; |
| optional FloatRectProto bounds = 45; |
| optional FloatRectProto screen_bounds = 46; |
| |
| optional InputWindowInfoProto input_window_info = 47; |
| |
| // Crop used to draw the rounded corner. |
| optional FloatRectProto corner_radius_crop = 48; |
| |
| // length of the shadow to draw around the layer, it may be set on the |
| // layer or set by a parent layer. |
| optional float shadow_radius = 49; |
| optional ColorTransformProto color_transform = 50; |
| |
| optional bool is_relative_of = 51; |
| // Layer's background blur radius in pixels. |
| optional int32 background_blur_radius = 52; |
| |
| optional uint32 owner_uid = 53; |
| |
| // Regions of a layer, where blur should be applied. |
| repeated BlurRegion blur_regions = 54; |
| |
| optional bool is_trusted_overlay = 55; |
| |
| // Corner radius explicitly set on layer rather than inherited |
| optional float requested_corner_radius = 56; |
| |
| optional RectProto destination_frame = 57; |
| |
| optional uint32 original_id = 58; |
| } |
| |
| message PositionProto { |
| optional float x = 1; |
| optional float y = 2; |
| } |
| |
| message FloatRectProto { |
| optional float left = 1; |
| optional float top = 2; |
| optional float right = 3; |
| optional float bottom = 4; |
| } |
| |
| message ActiveBufferProto { |
| optional uint32 width = 1; |
| optional uint32 height = 2; |
| optional uint32 stride = 3; |
| optional int32 format = 4; |
| optional uint64 usage = 5; |
| } |
| |
| message BarrierLayerProto { |
| // layer id the barrier is waiting on. |
| optional int32 id = 1; |
| // frame number the barrier is waiting on. |
| optional uint64 frame_number = 2; |
| } |