drm_hwcomposer: HWC3: Support batched commands for layer create/destroy
This feature aims to reduce CPU time by reducing the number of SF<->HWC
binder transactions.
See [this SF commit][1] for more information.
[1]: https://android.googlesource.com/platform/frameworks/native/+/96f866c272765474f0f28b4090e15092f55796d8
Change-Id: I5eb1934b614ffabffed077d925c64946fae09050
Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
diff --git a/hwc3/ComposerClient.cpp b/hwc3/ComposerClient.cpp
index 09d8817..63a3d84 100644
--- a/hwc3/ComposerClient.cpp
+++ b/hwc3/ComposerClient.cpp
@@ -563,6 +563,24 @@
return;
}
+#if __ANDROID_API__ >= 35
+ auto batch_command = command.layerLifecycleBatchCommandType;
+ if (batch_command == LayerLifecycleBatchCommandType::CREATE) {
+ if (!display->CreateLayer(command.layer)) {
+ cmd_result_writer_->AddError(hwc3::Error::kBadLayer);
+ return;
+ }
+ }
+
+ if (batch_command == LayerLifecycleBatchCommandType::DESTROY) {
+ if (!display->DestroyLayer(command.layer)) {
+ cmd_result_writer_->AddError(hwc3::Error::kBadLayer);
+ }
+
+ return;
+ }
+#endif
+
auto* layer = display->get_layer(command.layer);
if (layer == nullptr) {
cmd_result_writer_->AddError(hwc3::Error::kBadLayer);