// Definitions for SurfaceFlinger layers. syntax = "proto3"; option optimize_for = LITE_RUNTIME; package android.surfaceflinger; // Contains a list of all layers. message LayersProto { repeated LayerProto layers = 1; } // Must match definition in the IComposerClient HAL enum HwcCompositionType { // Invalid composition type INVALID = 0; // Layer was composited by the client into the client target buffer CLIENT = 1; // Layer was composited by the device through hardware overlays DEVICE = 2; // Layer was composited by the device using a color SOLID_COLOR = 3; // Similar to DEVICE, but the layer position may have been asynchronously set // through setCursorPosition CURSOR = 4; // Layer was composited by the device via a sideband stream. SIDEBAND = 5; } // Information about each layer. message LayerProto { // unique id per layer. int32 id = 1; // unique name per layer. string name = 2; // list of children this layer may have. May be empty. repeated int32 children = 3; // list of layers that are z order relative to this layer. repeated int32 relatives = 4; // The type of layer, ex Color, Layer string type = 5; RegionProto transparent_region = 6; RegionProto visible_region = 7; RegionProto damage_region = 8; 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. int32 z = 10; // The layer's position on the display. PositionProto position = 11; // The layer's requested position. PositionProto requested_position = 12; // The layer's size. SizeProto size = 13; // The layer's crop in it's own bounds. RectProto crop = 14; // The layer's crop in it's parent's bounds. RectProto final_crop = 15 [deprecated=true]; bool is_opaque = 16; bool invalidate = 17; string dataspace = 18; string pixel_format = 19; // The layer's actual color. ColorProto color = 20; // The layer's requested color. ColorProto requested_color = 21; // Can be any combination of // hidden = 0x01 // opaque = 0x02, // secure = 0x80, uint32 flags = 22; // The layer's actual transform TransformProto transform = 23; // The layer's requested transform. TransformProto requested_transform = 24; // The parent layer. This value can be null if there is no parent. int32 parent = 25; // The layer that this layer has a z order relative to. This value can be null. int32 z_order_relative_of = 26; // This value can be null if there's nothing to draw. ActiveBufferProto active_buffer = 27; // The number of frames available. int32 queued_frames = 28; bool refresh_pending = 29; // The layer's composer backend destination frame RectProto hwc_frame = 30; // The layer's composer backend source crop FloatRectProto hwc_crop = 31; // The layer's composer backend transform int32 hwc_transform = 32; int32 window_type = 33 [deprecated=true]; int32 app_id = 34 [deprecated=true]; // The layer's composition type HwcCompositionType hwc_composition_type = 35; // If it's a buffer layer, indicate if the content is protected bool is_protected = 36; // Current frame number being rendered. 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. TransformProto buffer_transform = 39; int32 effective_scaling_mode = 40; // Layer's corner radius. float corner_radius = 41; // Metadata map. May be empty. map metadata = 42; TransformProto effective_transform = 43; FloatRectProto source_bounds = 44; FloatRectProto bounds = 45; FloatRectProto screen_bounds = 46; InputWindowInfoProto input_window_info = 47; // Crop used to draw the rounded corner. 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. float shadow_radius = 49; ColorTransformProto color_transform = 50; bool is_relative_of = 51; // Layer's background blur radius in pixels. int32 background_blur_radius = 52; uint32 owner_uid = 53; // Regions of a layer, where blur should be applied. repeated BlurRegion blur_regions = 54; bool is_trusted_overlay = 55; } message PositionProto { float x = 1; float y = 2; } message SizeProto { int32 w = 1; int32 h = 2; } message TransformProto { float dsdx = 1; float dtdx = 2; float dsdy = 3; float dtdy = 4; int32 type = 5; } message RegionProto { reserved 1; // Previously: uint64 id repeated RectProto rect = 2; } message RectProto { int32 left = 1; int32 top = 2; int32 right = 3; int32 bottom = 4; } message FloatRectProto { float left = 1; float top = 2; float right = 3; float bottom = 4; } message ActiveBufferProto { uint32 width = 1; uint32 height = 2; uint32 stride = 3; int32 format = 4; } message ColorProto { float r = 1; float g = 2; float b = 3; float a = 4; } message BarrierLayerProto { // layer id the barrier is waiting on. int32 id = 1; // frame number the barrier is waiting on. uint64 frame_number = 2; } message InputWindowInfoProto { uint32 layout_params_flags = 1; uint32 layout_params_type = 2; RectProto frame = 3; RegionProto touchable_region = 4; uint32 surface_inset = 5; bool visible = 6; bool can_receive_keys = 7 [deprecated=true]; bool focusable = 8; bool has_wallpaper = 9; float global_scale_factor = 10; float window_x_scale = 11 [deprecated=true]; float window_y_scale = 12 [deprecated=true]; uint32 crop_layer_id = 13; bool replace_touchable_region_with_crop = 14; RectProto touchable_region_crop = 15; TransformProto transform = 16; } message ColorTransformProto { // This will be a 4x4 matrix of float values repeated float val = 1; } message BlurRegion { uint32 blur_radius = 1; uint32 corner_radius_tl = 2; uint32 corner_radius_tr = 3; uint32 corner_radius_bl = 4; float corner_radius_br = 5; float alpha = 6; int32 left = 7; int32 top = 8; int32 right = 9; int32 bottom = 10; }