Revert^2 Move proto definitions to external/perfetto
This commit moves the layer and transaction .proto files
to external/perfetto/protos/perfetto/trace/android/.
Test: atest libsurfaceflinger_unittest && atest transactiontrace_testsuite
Bug: b/284424784
Change-Id: Ia7e446c528d188c748a800fbf16ab3b8b9a7b9d1
diff --git a/services/surfaceflinger/layerproto/Android.bp b/services/surfaceflinger/layerproto/Android.bp
index 7287dd0..a4dc8a0 100644
--- a/services/surfaceflinger/layerproto/Android.bp
+++ b/services/surfaceflinger/layerproto/Android.bp
@@ -13,7 +13,20 @@
srcs: [
"LayerProtoParser.cpp",
- "*.proto",
+ ],
+
+ static_libs: [
+ "libperfetto_client_experimental",
+ ],
+
+ whole_static_libs: [
+ // TODO(b/169779783): move into "static_libs" when the soong issue is fixed
+ "perfetto_trace_protos",
+ ],
+
+ export_static_lib_headers: [
+ "libperfetto_client_experimental",
+ "perfetto_trace_protos",
],
shared_libs: [
@@ -24,10 +37,6 @@
"libbase",
],
- proto: {
- export_proto_headers: true,
- },
-
cppflags: [
"-Werror",
"-Wno-unused-parameter",
@@ -42,22 +51,3 @@
"-Wno-undef",
],
}
-
-java_library_static {
- name: "layersprotoslite",
- host_supported: true,
- proto: {
- type: "lite",
- include_dirs: ["external/protobuf/src"],
- },
- srcs: ["*.proto"],
- sdk_version: "core_platform",
- target: {
- android: {
- jarjar_rules: "jarjar-rules.txt",
- },
- host: {
- static_libs: ["libprotobuf-java-lite"],
- },
- },
-}
diff --git a/services/surfaceflinger/layerproto/LayerProtoParser.cpp b/services/surfaceflinger/layerproto/LayerProtoParser.cpp
index 854084e..8d48070 100644
--- a/services/surfaceflinger/layerproto/LayerProtoParser.cpp
+++ b/services/surfaceflinger/layerproto/LayerProtoParser.cpp
@@ -37,7 +37,8 @@
return lhs->id < rhs->id;
}
-LayerProtoParser::LayerTree LayerProtoParser::generateLayerTree(const LayersProto& layersProto) {
+LayerProtoParser::LayerTree LayerProtoParser::generateLayerTree(
+ const perfetto::protos::LayersProto& layersProto) {
LayerTree layerTree;
layerTree.allLayers = generateLayerList(layersProto);
@@ -53,7 +54,7 @@
}
std::vector<LayerProtoParser::Layer> LayerProtoParser::generateLayerList(
- const LayersProto& layersProto) {
+ const perfetto::protos::LayersProto& layersProto) {
std::vector<Layer> layerList;
std::unordered_map<int32_t, Layer*> layerMap;
@@ -74,7 +75,8 @@
return layerList;
}
-LayerProtoParser::Layer LayerProtoParser::generateLayer(const LayerProto& layerProto) {
+LayerProtoParser::Layer LayerProtoParser::generateLayer(
+ const perfetto::protos::LayerProto& layerProto) {
Layer layer;
layer.id = layerProto.id();
layer.name = layerProto.name();
@@ -120,17 +122,19 @@
return layer;
}
-LayerProtoParser::Region LayerProtoParser::generateRegion(const RegionProto& regionProto) {
+LayerProtoParser::Region LayerProtoParser::generateRegion(
+ const perfetto::protos::RegionProto& regionProto) {
LayerProtoParser::Region region;
for (int i = 0; i < regionProto.rect_size(); i++) {
- const RectProto& rectProto = regionProto.rect(i);
+ const perfetto::protos::RectProto& rectProto = regionProto.rect(i);
region.rects.push_back(generateRect(rectProto));
}
return region;
}
-LayerProtoParser::Rect LayerProtoParser::generateRect(const RectProto& rectProto) {
+LayerProtoParser::Rect LayerProtoParser::generateRect(
+ const perfetto::protos::RectProto& rectProto) {
LayerProtoParser::Rect rect;
rect.left = rectProto.left();
rect.top = rectProto.top();
@@ -140,7 +144,8 @@
return rect;
}
-LayerProtoParser::FloatRect LayerProtoParser::generateFloatRect(const FloatRectProto& rectProto) {
+LayerProtoParser::FloatRect LayerProtoParser::generateFloatRect(
+ const perfetto::protos::FloatRectProto& rectProto) {
LayerProtoParser::FloatRect rect;
rect.left = rectProto.left();
rect.top = rectProto.top();
@@ -151,7 +156,7 @@
}
LayerProtoParser::Transform LayerProtoParser::generateTransform(
- const TransformProto& transformProto) {
+ const perfetto::protos::TransformProto& transformProto) {
LayerProtoParser::Transform transform;
transform.dsdx = transformProto.dsdx();
transform.dtdx = transformProto.dtdx();
@@ -162,7 +167,7 @@
}
LayerProtoParser::ActiveBuffer LayerProtoParser::generateActiveBuffer(
- const ActiveBufferProto& activeBufferProto) {
+ const perfetto::protos::ActiveBufferProto& activeBufferProto) {
LayerProtoParser::ActiveBuffer activeBuffer;
activeBuffer.width = activeBufferProto.width();
activeBuffer.height = activeBufferProto.height();
@@ -172,7 +177,7 @@
return activeBuffer;
}
-void LayerProtoParser::updateChildrenAndRelative(const LayerProto& layerProto,
+void LayerProtoParser::updateChildrenAndRelative(const perfetto::protos::LayerProto& layerProto,
std::unordered_map<int32_t, Layer*>& layerMap) {
auto currLayer = layerMap[layerProto.id()];
diff --git a/services/surfaceflinger/layerproto/common.proto b/services/surfaceflinger/layerproto/common.proto
deleted file mode 100644
index 5e20d4d..0000000
--- a/services/surfaceflinger/layerproto/common.proto
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 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 = "proto3";
-option optimize_for = LITE_RUNTIME;
-package android.surfaceflinger;
-
-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 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 ColorProto {
- float r = 1;
- float g = 2;
- float b = 3;
- float a = 4;
-}
-
-message InputWindowInfoProto {
- uint32 layout_params_flags = 1;
- int32 layout_params_type = 2;
- RectProto frame = 3;
- RegionProto touchable_region = 4;
-
- int32 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];
-
- int32 crop_layer_id = 13;
- bool replace_touchable_region_with_crop = 14;
- RectProto touchable_region_crop = 15;
- TransformProto transform = 16;
- uint32 input_config = 17;
-}
-
-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;
-}
-
-message ColorTransformProto {
- // This will be a 4x4 matrix of float values
- repeated float val = 1;
-}
diff --git a/services/surfaceflinger/layerproto/display.proto b/services/surfaceflinger/layerproto/display.proto
deleted file mode 100644
index 64de775..0000000
--- a/services/surfaceflinger/layerproto/display.proto
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 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 = "proto3";
-option optimize_for = LITE_RUNTIME;
-
-import "frameworks/native/services/surfaceflinger/layerproto/common.proto";
-
-package android.surfaceflinger;
-
-message DisplayProto {
- uint64 id = 1;
-
- string name = 2;
-
- uint32 layer_stack = 3;
-
- SizeProto size = 4;
-
- RectProto layer_stack_space_rect = 5;
-
- TransformProto transform = 6;
-
- bool is_virtual = 7;
-
- double dpi_x = 8;
-
- double dpi_y = 9;
-}
diff --git a/services/surfaceflinger/layerproto/include/layerproto/LayerProtoHeader.h b/services/surfaceflinger/layerproto/include/layerproto/LayerProtoHeader.h
index f560562..4a2ef3d 100644
--- a/services/surfaceflinger/layerproto/include/layerproto/LayerProtoHeader.h
+++ b/services/surfaceflinger/layerproto/include/layerproto/LayerProtoHeader.h
@@ -14,11 +14,14 @@
* limitations under the License.
*/
+#pragma once
+
// pragma is used here to disable the warnings emitted from the protobuf
// headers. By adding #pragma before including layer.pb.h, it supresses
// protobuf warnings, but allows the rest of the files to continuing using
// the current flags.
// This file should be included instead of directly including layer.b.h
#pragma GCC system_header
-#include <layers.pb.h>
-#include <layerstrace.pb.h>
+#include <perfetto/config/android/surfaceflinger_layers_config.pbzero.h>
+#include <perfetto/trace/android/surfaceflinger_layers.pb.h>
+#include <perfetto/trace/android/surfaceflinger_layers.pbzero.h>
diff --git a/services/surfaceflinger/layerproto/include/layerproto/LayerProtoParser.h b/services/surfaceflinger/layerproto/include/layerproto/LayerProtoParser.h
index cdc2706..79c3982 100644
--- a/services/surfaceflinger/layerproto/include/layerproto/LayerProtoParser.h
+++ b/services/surfaceflinger/layerproto/include/layerproto/LayerProtoParser.h
@@ -131,19 +131,22 @@
std::vector<Layer*> topLevelLayers;
};
- static LayerTree generateLayerTree(const LayersProto& layersProto);
+ static LayerTree generateLayerTree(const perfetto::protos::LayersProto& layersProto);
static std::string layerTreeToString(const LayerTree& layerTree);
private:
- static std::vector<Layer> generateLayerList(const LayersProto& layersProto);
- static LayerProtoParser::Layer generateLayer(const LayerProto& layerProto);
- static LayerProtoParser::Region generateRegion(const RegionProto& regionProto);
- static LayerProtoParser::Rect generateRect(const RectProto& rectProto);
- static LayerProtoParser::FloatRect generateFloatRect(const FloatRectProto& rectProto);
- static LayerProtoParser::Transform generateTransform(const TransformProto& transformProto);
+ static std::vector<Layer> generateLayerList(const perfetto::protos::LayersProto& layersProto);
+ static LayerProtoParser::Layer generateLayer(const perfetto::protos::LayerProto& layerProto);
+ static LayerProtoParser::Region generateRegion(
+ const perfetto::protos::RegionProto& regionProto);
+ static LayerProtoParser::Rect generateRect(const perfetto::protos::RectProto& rectProto);
+ static LayerProtoParser::FloatRect generateFloatRect(
+ const perfetto::protos::FloatRectProto& rectProto);
+ static LayerProtoParser::Transform generateTransform(
+ const perfetto::protos::TransformProto& transformProto);
static LayerProtoParser::ActiveBuffer generateActiveBuffer(
- const ActiveBufferProto& activeBufferProto);
- static void updateChildrenAndRelative(const LayerProto& layerProto,
+ const perfetto::protos::ActiveBufferProto& activeBufferProto);
+ static void updateChildrenAndRelative(const perfetto::protos::LayerProto& layerProto,
std::unordered_map<int32_t, Layer*>& layerMap);
static std::string layerToString(const LayerProtoParser::Layer* layer);
diff --git a/services/surfaceflinger/layerproto/include/layerproto/TransactionProto.h b/services/surfaceflinger/layerproto/include/layerproto/TransactionProto.h
index 3e9ca52..ea80ad8 100644
--- a/services/surfaceflinger/layerproto/include/layerproto/TransactionProto.h
+++ b/services/surfaceflinger/layerproto/include/layerproto/TransactionProto.h
@@ -14,7 +14,11 @@
* limitations under the License.
*/
+#pragma once
+
// disable the warnings emitted from the protobuf headers. This file should be included instead of
// directly including the generated header file
#pragma GCC system_header
-#include <transactions.pb.h>
+#include <perfetto/config/android/surfaceflinger_transactions_config.pbzero.h>
+#include <perfetto/trace/android/surfaceflinger_transactions.pb.h>
+#include <perfetto/trace/android/surfaceflinger_transactions.pbzero.h>
diff --git a/services/surfaceflinger/layerproto/jarjar-rules.txt b/services/surfaceflinger/layerproto/jarjar-rules.txt
deleted file mode 100644
index 40043a8..0000000
--- a/services/surfaceflinger/layerproto/jarjar-rules.txt
+++ /dev/null
@@ -1 +0,0 @@
-rule com.google.protobuf.nano.** com.android.framework.protobuf.nano.@1
diff --git a/services/surfaceflinger/layerproto/layers.proto b/services/surfaceflinger/layerproto/layers.proto
deleted file mode 100644
index e9add2e..0000000
--- a/services/surfaceflinger/layerproto/layers.proto
+++ /dev/null
@@ -1,171 +0,0 @@
-// Definitions for SurfaceFlinger layers.
-
-syntax = "proto3";
-option optimize_for = LITE_RUNTIME;
-
-import "frameworks/native/services/surfaceflinger/layerproto/common.proto";
-
-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<int32, bytes> 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;
-
- // Corner radius explicitly set on layer rather than inherited
- float requested_corner_radius = 56;
-
- RectProto destination_frame = 57;
-
- uint32 original_id = 58;
-}
-
-message PositionProto {
- float x = 1;
- float y = 2;
-}
-
-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;
- uint64 usage = 5;
-}
-
-message BarrierLayerProto {
- // layer id the barrier is waiting on.
- int32 id = 1;
- // frame number the barrier is waiting on.
- uint64 frame_number = 2;
-}
-
diff --git a/services/surfaceflinger/layerproto/layerstrace.proto b/services/surfaceflinger/layerproto/layerstrace.proto
deleted file mode 100644
index 804a499..0000000
--- a/services/surfaceflinger/layerproto/layerstrace.proto
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2017 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;
-
-import "frameworks/native/services/surfaceflinger/layerproto/layers.proto";
-import "frameworks/native/services/surfaceflinger/layerproto/display.proto";
-
-package android.surfaceflinger;
-
-/* 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;
- MAGIC_NUMBER_L = 0x5452594c; /* LYRT (little-endian ASCII) */
- MAGIC_NUMBER_H = 0x45434152; /* RACE (little-endian ASCII) */
- }
-
- optional fixed64 magic_number = 1; /* Must be the first field, set to value in MagicNumber */
- repeated LayersTraceProto 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;
-}
-
-/* one layers trace entry. */
-message LayersTraceProto {
- /* required: elapsed realtime in nanos since boot of when this entry was logged */
- optional sfixed64 elapsed_realtime_nanos = 1;
-
- /* where the trace originated */
- optional string where = 2;
-
- optional LayersProto layers = 3;
-
- // Blob for the current HWC information for all layers, reported by dumpsys.
- optional string hwc_blob = 4;
-
- /* Includes 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;
-}
diff --git a/services/surfaceflinger/layerproto/transactions.proto b/services/surfaceflinger/layerproto/transactions.proto
deleted file mode 100644
index d03afa0..0000000
--- a/services/surfaceflinger/layerproto/transactions.proto
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Copyright (C) 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 = "proto3";
-option optimize_for = LITE_RUNTIME;
-
-import "frameworks/native/services/surfaceflinger/layerproto/common.proto";
-
-package android.surfaceflinger.proto;
-
-/* Represents a file full of surface flinger transactions.
- Encoded, it should start with 0x54 0x4E 0x58 0x54 0x52 0x41 0x43 0x45 (.TNXTRACE), such
- that they can be easily identified. */
-message TransactionTraceFile {
- /* 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;
- MAGIC_NUMBER_L = 0x54584E54; /* TNXT (little-endian ASCII) */
- MAGIC_NUMBER_H = 0x45434152; /* RACE (little-endian ASCII) */
- }
-
- fixed64 magic_number = 1; /* Must be the first field, set to value in MagicNumber */
- repeated TransactionTraceEntry entry = 2;
-
- /* offset between real-time clock and elapsed time clock in nanoseconds.
- Calculated as: systemTime(SYSTEM_TIME_REALTIME) - systemTime(SYSTEM_TIME_MONOTONIC) */
- fixed64 real_to_elapsed_time_offset_nanos = 3;
- uint32 version = 4;
-}
-
-message TransactionTraceEntry {
- int64 elapsed_realtime_nanos = 1;
- int64 vsync_id = 2;
- repeated TransactionState transactions = 3;
- repeated LayerCreationArgs added_layers = 4;
- repeated uint32 destroyed_layers = 5;
- repeated DisplayState added_displays = 6;
- repeated int32 removed_displays = 7;
- repeated uint32 destroyed_layer_handles = 8;
- bool displays_changed = 9;
- repeated DisplayInfo displays = 10;
-}
-
-message DisplayInfo {
- uint32 layer_stack = 1;
- int32 display_id = 2;
- int32 logical_width = 3;
- int32 logical_height = 4;
- Transform transform_inverse = 5;
- Transform transform = 6;
- bool receives_input = 7;
- bool is_secure = 8;
- bool is_primary = 9;
- bool is_virtual = 10;
- int32 rotation_flags = 11;
- int32 transform_hint = 12;
-
-}
-
-message LayerCreationArgs {
- uint32 layer_id = 1;
- string name = 2;
- uint32 flags = 3;
- uint32 parent_id = 4;
- uint32 mirror_from_id = 5;
- bool add_to_root = 6;
- uint32 layer_stack_to_mirror = 7;
-}
-
-message Transform {
- float dsdx = 1;
- float dtdx = 2;
- float dtdy = 3;
- float dsdy = 4;
- float tx = 5;
- float ty = 6;
-}
-
-message TransactionState {
- int32 pid = 1;
- int32 uid = 2;
- int64 vsync_id = 3;
- int32 input_event_id = 4;
- int64 post_time = 5;
- uint64 transaction_id = 6;
- repeated LayerState layer_changes = 7;
- repeated DisplayState display_changes = 8;
- repeated uint64 merged_transaction_ids = 9;
-}
-
-// Keep insync with layer_state_t
-message LayerState {
- uint32 layer_id = 1;
- // Changes are split into ChangesLsb and ChangesMsb. First 32 bits are in ChangesLsb
- // and the next 32 bits are in ChangesMsb. This is needed because enums have to be
- // 32 bits and there's no nice way to put 64bit constants into .proto files.
- enum ChangesLsb {
- eChangesLsbNone = 0;
- ePositionChanged = 0x00000001;
- eLayerChanged = 0x00000002;
- // unused = 0x00000004;
- eAlphaChanged = 0x00000008;
-
- eMatrixChanged = 0x00000010;
- eTransparentRegionChanged = 0x00000020;
- eFlagsChanged = 0x00000040;
- eLayerStackChanged = 0x00000080;
-
- eReleaseBufferListenerChanged = 0x00000400;
- eShadowRadiusChanged = 0x00000800;
-
- eBufferCropChanged = 0x00002000;
- eRelativeLayerChanged = 0x00004000;
- eReparent = 0x00008000;
-
- eColorChanged = 0x00010000;
- eBufferTransformChanged = 0x00040000;
- eTransformToDisplayInverseChanged = 0x00080000;
-
- eCropChanged = 0x00100000;
- eBufferChanged = 0x00200000;
- eAcquireFenceChanged = 0x00400000;
- eDataspaceChanged = 0x00800000;
-
- eHdrMetadataChanged = 0x01000000;
- eSurfaceDamageRegionChanged = 0x02000000;
- eApiChanged = 0x04000000;
- eSidebandStreamChanged = 0x08000000;
-
- eColorTransformChanged = 0x10000000;
- eHasListenerCallbacksChanged = 0x20000000;
- eInputInfoChanged = 0x40000000;
- eCornerRadiusChanged = -2147483648; // 0x80000000; (proto stores enums as signed int)
- };
- enum ChangesMsb {
- eChangesMsbNone = 0;
- eDestinationFrameChanged = 0x1;
- eCachedBufferChanged = 0x2;
- eBackgroundColorChanged = 0x4;
- eMetadataChanged = 0x8;
- eColorSpaceAgnosticChanged = 0x10;
- eFrameRateSelectionPriority = 0x20;
- eFrameRateChanged = 0x40;
- eBackgroundBlurRadiusChanged = 0x80;
- eProducerDisconnect = 0x100;
- eFixedTransformHintChanged = 0x200;
- eFrameNumberChanged = 0x400;
- eBlurRegionsChanged = 0x800;
- eAutoRefreshChanged = 0x1000;
- eStretchChanged = 0x2000;
- eTrustedOverlayChanged = 0x4000;
- eDropInputModeChanged = 0x8000;
- };
- uint64 what = 2;
- float x = 3;
- float y = 4;
- int32 z = 5;
- uint32 w = 6;
- uint32 h = 7;
- uint32 layer_stack = 8;
-
- enum Flags {
- eFlagsNone = 0;
- eLayerHidden = 0x01;
- eLayerOpaque = 0x02;
- eLayerSkipScreenshot = 0x40;
- eLayerSecure = 0x80;
- eEnableBackpressure = 0x100;
- eLayerIsDisplayDecoration = 0x200;
- };
- uint32 flags = 9;
- uint32 mask = 10;
-
- message Matrix22 {
- float dsdx = 1;
- float dtdx = 2;
- float dtdy = 3;
- float dsdy = 4;
- };
- Matrix22 matrix = 11;
- float corner_radius = 12;
- uint32 background_blur_radius = 13;
- uint32 parent_id = 14;
- uint32 relative_parent_id = 15;
-
- float alpha = 16;
- message Color3 {
- float r = 1;
- float g = 2;
- float b = 3;
- }
- Color3 color = 17;
- RegionProto transparent_region = 18;
- uint32 transform = 19;
- bool transform_to_display_inverse = 20;
- RectProto crop = 21;
-
- message BufferData {
- uint64 buffer_id = 1;
- uint32 width = 2;
- uint32 height = 3;
- uint64 frame_number = 4;
-
- enum BufferDataChange {
- BufferDataChangeNone = 0;
- fenceChanged = 0x01;
- frameNumberChanged = 0x02;
- cachedBufferChanged = 0x04;
- }
- uint32 flags = 5;
- uint64 cached_buffer_id = 6;
-
- enum PixelFormat {
- PIXEL_FORMAT_UNKNOWN = 0;
- PIXEL_FORMAT_CUSTOM = -4;
- PIXEL_FORMAT_TRANSLUCENT = -3;
- PIXEL_FORMAT_TRANSPARENT = -2;
- PIXEL_FORMAT_OPAQUE = -1;
- PIXEL_FORMAT_RGBA_8888 = 1;
- PIXEL_FORMAT_RGBX_8888 = 2;
- PIXEL_FORMAT_RGB_888 = 3;
- PIXEL_FORMAT_RGB_565 = 4;
- PIXEL_FORMAT_BGRA_8888 = 5;
- PIXEL_FORMAT_RGBA_5551 = 6;
- PIXEL_FORMAT_RGBA_4444 = 7;
- PIXEL_FORMAT_RGBA_FP16 = 22;
- PIXEL_FORMAT_RGBA_1010102 = 43;
- PIXEL_FORMAT_R_8 = 0x38;
- }
- PixelFormat pixel_format = 7;
- uint64 usage = 8;
- }
- BufferData buffer_data = 22;
- int32 api = 23;
- bool has_sideband_stream = 24;
- ColorTransformProto color_transform = 25;
- repeated BlurRegion blur_regions = 26;
-
- message WindowInfo {
- uint32 layout_params_flags = 1;
- int32 layout_params_type = 2;
- RegionProto touchable_region = 3;
- int32 surface_inset = 4;
- bool focusable = 5; // unused
- bool has_wallpaper = 6; // unused
- float global_scale_factor = 7;
- uint32 crop_layer_id = 8;
- bool replace_touchable_region_with_crop = 9;
- RectProto touchable_region_crop = 10;
- Transform transform = 11;
- uint32 input_config = 12;
- }
- WindowInfo window_info_handle = 27;
- float bg_color_alpha = 28;
- int32 bg_color_dataspace = 29;
- bool color_space_agnostic = 30;
- float shadow_radius = 31;
- int32 frame_rate_selection_priority = 32;
- float frame_rate = 33;
- int32 frame_rate_compatibility = 34;
- int32 change_frame_rate_strategy = 35;
- uint32 fixed_transform_hint = 36;
- uint64 frame_number = 37;
- bool auto_refresh = 38;
- bool is_trusted_overlay = 39;
- RectProto buffer_crop = 40;
- RectProto destination_frame = 41;
-
- enum DropInputMode {
- NONE = 0;
- ALL = 1;
- OBSCURED = 2;
- };
- DropInputMode drop_input_mode = 42;
-}
-
-message DisplayState {
- enum Changes {
- eChangesNone = 0;
- eSurfaceChanged = 0x01;
- eLayerStackChanged = 0x02;
- eDisplayProjectionChanged = 0x04;
- eDisplaySizeChanged = 0x08;
- eFlagsChanged = 0x10;
- };
- int32 id = 1;
- uint32 what = 2;
- uint32 flags = 3;
- uint32 layer_stack = 4;
- uint32 orientation = 5;
- RectProto layer_stack_space_rect = 6;
- RectProto oriented_display_space_rect = 7;
- uint32 width = 8;
- uint32 height = 9;
-}