1/* 2 * Copyright (C) 2021 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 * http://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 17syntax = "proto3"; 18option optimize_for = LITE_RUNTIME; 19 20import "frameworks/native/services/surfaceflinger/layerproto/common.proto"; 21 22package android.surfaceflinger.proto; 23 24/* Represents a file full of surface flinger transactions. 25 Encoded, it should start with 0x54 0x4E 0x58 0x54 0x52 0x41 0x43 0x45 (.TNXTRACE), such 26 that they can be easily identified. */ 27message TransactionTraceFile { 28 /* constant; MAGIC_NUMBER = (long) MAGIC_NUMBER_H << 32 | MagicNumber.MAGIC_NUMBER_L 29 (this is needed because enums have to be 32 bits and there's no nice way to put 64bit 30 constants into .proto files. */ 31 enum MagicNumber { 32 INVALID = 0; 33 MAGIC_NUMBER_L = 0x54584E54; /* TNXT (little-endian ASCII) */ 34 MAGIC_NUMBER_H = 0x45434152; /* RACE (little-endian ASCII) */ 35 } 36 37 fixed64 magic_number = 1; /* Must be the first field, set to value in MagicNumber */ 38 repeated TransactionTraceEntry entry = 2; 39 40 /* offset between real-time clock and elapsed time clock in nanoseconds. 41 Calculated as: systemTime(SYSTEM_TIME_REALTIME) - systemTime(SYSTEM_TIME_MONOTONIC) */ 42 fixed64 real_to_elapsed_time_offset_nanos = 3; 43 uint32 version = 4; 44} 45 46message TransactionTraceEntry { 47 int64 elapsed_realtime_nanos = 1; 48 int64 vsync_id = 2; 49 repeated TransactionState transactions = 3; 50 repeated LayerCreationArgs added_layers = 4; 51 repeated uint32 destroyed_layers = 5; 52 repeated DisplayState added_displays = 6; 53 repeated int32 removed_displays = 7; 54 repeated uint32 destroyed_layer_handles = 8; 55 bool displays_changed = 9; 56 repeated DisplayInfo displays = 10; 57} 58 59message DisplayInfo { 60 uint32 layer_stack = 1; 61 int32 display_id = 2; 62 int32 logical_width = 3; 63 int32 logical_height = 4; 64 Transform transform_inverse = 5; 65 Transform transform = 6; 66 bool receives_input = 7; 67 bool is_secure = 8; 68 bool is_primary = 9; 69 bool is_virtual = 10; 70 int32 rotation_flags = 11; 71 int32 transform_hint = 12; 72 73} 74 75message LayerCreationArgs { 76 uint32 layer_id = 1; 77 string name = 2; 78 uint32 flags = 3; 79 uint32 parent_id = 4; 80 uint32 mirror_from_id = 5; 81 bool add_to_root = 6; 82 uint32 layer_stack_to_mirror = 7; 83} 84 85message Transform { 86 float dsdx = 1; 87 float dtdx = 2; 88 float dtdy = 3; 89 float dsdy = 4; 90 float tx = 5; 91 float ty = 6; 92} 93 94message TransactionState { 95 int32 pid = 1; 96 int32 uid = 2; 97 int64 vsync_id = 3; 98 int32 input_event_id = 4; 99 int64 post_time = 5; 100 uint64 transaction_id = 6; 101 repeated LayerState layer_changes = 7; 102 repeated DisplayState display_changes = 8; 103 repeated uint64 merged_transaction_ids = 9; 104} 105 106// Keep insync with layer_state_t 107message LayerState { 108 uint32 layer_id = 1; 109 // Changes are split into ChangesLsb and ChangesMsb. First 32 bits are in ChangesLsb 110 // and the next 32 bits are in ChangesMsb. This is needed because enums have to be 111 // 32 bits and there's no nice way to put 64bit constants into .proto files. 112 enum ChangesLsb { 113 eChangesLsbNone = 0; 114 ePositionChanged = 0x00000001; 115 eLayerChanged = 0x00000002; 116 // unused = 0x00000004; 117 eAlphaChanged = 0x00000008; 118 119 eMatrixChanged = 0x00000010; 120 eTransparentRegionChanged = 0x00000020; 121 eFlagsChanged = 0x00000040; 122 eLayerStackChanged = 0x00000080; 123 124 eReleaseBufferListenerChanged = 0x00000400; 125 eShadowRadiusChanged = 0x00000800; 126 127 eBufferCropChanged = 0x00002000; 128 eRelativeLayerChanged = 0x00004000; 129 eReparent = 0x00008000; 130 131 eColorChanged = 0x00010000; 132 eBufferTransformChanged = 0x00040000; 133 eTransformToDisplayInverseChanged = 0x00080000; 134 135 eCropChanged = 0x00100000; 136 eBufferChanged = 0x00200000; 137 eAcquireFenceChanged = 0x00400000; 138 eDataspaceChanged = 0x00800000; 139 140 eHdrMetadataChanged = 0x01000000; 141 eSurfaceDamageRegionChanged = 0x02000000; 142 eApiChanged = 0x04000000; 143 eSidebandStreamChanged = 0x08000000; 144 145 eColorTransformChanged = 0x10000000; 146 eHasListenerCallbacksChanged = 0x20000000; 147 eInputInfoChanged = 0x40000000; 148 eCornerRadiusChanged = -2147483648; // 0x80000000; (proto stores enums as signed int) 149 }; 150 enum ChangesMsb { 151 eChangesMsbNone = 0; 152 eDestinationFrameChanged = 0x1; 153 eCachedBufferChanged = 0x2; 154 eBackgroundColorChanged = 0x4; 155 eMetadataChanged = 0x8; 156 eColorSpaceAgnosticChanged = 0x10; 157 eFrameRateSelectionPriority = 0x20; 158 eFrameRateChanged = 0x40; 159 eBackgroundBlurRadiusChanged = 0x80; 160 eProducerDisconnect = 0x100; 161 eFixedTransformHintChanged = 0x200; 162 eFrameNumberChanged = 0x400; 163 eBlurRegionsChanged = 0x800; 164 eAutoRefreshChanged = 0x1000; 165 eStretchChanged = 0x2000; 166 eTrustedOverlayChanged = 0x4000; 167 eDropInputModeChanged = 0x8000; 168 }; 169 uint64 what = 2; 170 float x = 3; 171 float y = 4; 172 int32 z = 5; 173 uint32 w = 6; 174 uint32 h = 7; 175 uint32 layer_stack = 8; 176 177 enum Flags { 178 eFlagsNone = 0; 179 eLayerHidden = 0x01; 180 eLayerOpaque = 0x02; 181 eLayerSkipScreenshot = 0x40; 182 eLayerSecure = 0x80; 183 eEnableBackpressure = 0x100; 184 eLayerIsDisplayDecoration = 0x200; 185 }; 186 uint32 flags = 9; 187 uint32 mask = 10; 188 189 message Matrix22 { 190 float dsdx = 1; 191 float dtdx = 2; 192 float dtdy = 3; 193 float dsdy = 4; 194 }; 195 Matrix22 matrix = 11; 196 float corner_radius = 12; 197 uint32 background_blur_radius = 13; 198 uint32 parent_id = 14; 199 uint32 relative_parent_id = 15; 200 201 float alpha = 16; 202 message Color3 { 203 float r = 1; 204 float g = 2; 205 float b = 3; 206 } 207 Color3 color = 17; 208 RegionProto transparent_region = 18; 209 uint32 transform = 19; 210 bool transform_to_display_inverse = 20; 211 RectProto crop = 21; 212 213 message BufferData { 214 uint64 buffer_id = 1; 215 uint32 width = 2; 216 uint32 height = 3; 217 uint64 frame_number = 4; 218 219 enum BufferDataChange { 220 BufferDataChangeNone = 0; 221 fenceChanged = 0x01; 222 frameNumberChanged = 0x02; 223 cachedBufferChanged = 0x04; 224 } 225 uint32 flags = 5; 226 uint64 cached_buffer_id = 6; 227 228 enum PixelFormat { 229 PIXEL_FORMAT_UNKNOWN = 0; 230 PIXEL_FORMAT_CUSTOM = -4; 231 PIXEL_FORMAT_TRANSLUCENT = -3; 232 PIXEL_FORMAT_TRANSPARENT = -2; 233 PIXEL_FORMAT_OPAQUE = -1; 234 PIXEL_FORMAT_RGBA_8888 = 1; 235 PIXEL_FORMAT_RGBX_8888 = 2; 236 PIXEL_FORMAT_RGB_888 = 3; 237 PIXEL_FORMAT_RGB_565 = 4; 238 PIXEL_FORMAT_BGRA_8888 = 5; 239 PIXEL_FORMAT_RGBA_5551 = 6; 240 PIXEL_FORMAT_RGBA_4444 = 7; 241 PIXEL_FORMAT_RGBA_FP16 = 22; 242 PIXEL_FORMAT_RGBA_1010102 = 43; 243 PIXEL_FORMAT_R_8 = 0x38; 244 } 245 PixelFormat pixel_format = 7; 246 uint64 usage = 8; 247 } 248 BufferData buffer_data = 22; 249 int32 api = 23; 250 bool has_sideband_stream = 24; 251 ColorTransformProto color_transform = 25; 252 repeated BlurRegion blur_regions = 26; 253 254 message WindowInfo { 255 uint32 layout_params_flags = 1; 256 int32 layout_params_type = 2; 257 RegionProto touchable_region = 3; 258 int32 surface_inset = 4; 259 bool focusable = 5; // unused 260 bool has_wallpaper = 6; // unused 261 float global_scale_factor = 7; 262 uint32 crop_layer_id = 8; 263 bool replace_touchable_region_with_crop = 9; 264 RectProto touchable_region_crop = 10; 265 Transform transform = 11; 266 uint32 input_config = 12; 267 } 268 WindowInfo window_info_handle = 27; 269 float bg_color_alpha = 28; 270 int32 bg_color_dataspace = 29; 271 bool color_space_agnostic = 30; 272 float shadow_radius = 31; 273 int32 frame_rate_selection_priority = 32; 274 float frame_rate = 33; 275 int32 frame_rate_compatibility = 34; 276 int32 change_frame_rate_strategy = 35; 277 uint32 fixed_transform_hint = 36; 278 uint64 frame_number = 37; 279 bool auto_refresh = 38; 280 bool is_trusted_overlay = 39; 281 RectProto buffer_crop = 40; 282 RectProto destination_frame = 41; 283 284 enum DropInputMode { 285 NONE = 0; 286 ALL = 1; 287 OBSCURED = 2; 288 }; 289 DropInputMode drop_input_mode = 42; 290} 291 292message DisplayState { 293 enum Changes { 294 eChangesNone = 0; 295 eSurfaceChanged = 0x01; 296 eLayerStackChanged = 0x02; 297 eDisplayProjectionChanged = 0x04; 298 eDisplaySizeChanged = 0x08; 299 eFlagsChanged = 0x10; 300 }; 301 int32 id = 1; 302 uint32 what = 2; 303 uint32 flags = 3; 304 uint32 layer_stack = 4; 305 uint32 orientation = 5; 306 RectProto layer_stack_space_rect = 6; 307 RectProto oriented_display_space_rect = 7; 308 uint32 width = 8; 309 uint32 height = 9; 310} 311