[sf] Pass metadata to layer during composition
Adds the simple bits of code to grab a snapshot of the front-end Layer
generic metadata, storing a copy in LayerFECompositionState, and then
sending int to the HWC2::Layer along with other "geometry update"
settings.
As the metadata stored in the layers uses integer keys, they need to be
translated to name strings. For hard-coded mapping is defined, with a
TODO left to remove the hard-coded mapping.
A test is added to ensure that the metadata is written by OutputLayer
when present, and that it is not set as part of a "per-frame" update.
Bug: 139747351
Test: atest libcompositionengine_test
Change-Id: I63f2a34e1fb70e1aefc5aa7e97ce56b7c2579a29
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 7ed6342..084251c 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -5851,6 +5851,21 @@
return NO_ERROR;
}
+const std::unordered_map<std::string, uint32_t>& SurfaceFlinger::getGenericLayerMetadataKeyMap()
+ const {
+ // TODO(b/149500060): Remove this fixed/static mapping. Please prefer taking
+ // on the work to remove the table in that bug rather than adding more to
+ // it.
+ static const std::unordered_map<std::string, uint32_t> genericLayerMetadataKeyMap{
+ // Note: METADATA_OWNER_UID and METADATA_WINDOW_TYPE are officially
+ // supported, and exposed via the
+ // IVrComposerClient::VrCommand::SET_LAYER_INFO command.
+ {"org.chromium.arc.V1_0.TaskId", METADATA_TASK_ID},
+ {"org.chromium.arc.V1_0.CursorInfo", METADATA_MOUSE_CURSOR},
+ };
+ return genericLayerMetadataKeyMap;
+}
+
} // namespace android
#if defined(__gl_h_)