drm_hwcomposer: Rework HWC frontends buffer management

Change summary:

- Use BufferInfo instead of native_buffer to configure the HwcLayer.
- Extend buffer properties with slot info.
- Provide fence and active slot ID separate from the buffer.
- Move swapchain tracking into HWC2. HWC3 doesn't need that.

Why:

- Support more flexible resource management control from the frontend
  side,  which is required by HWC3 API.
- Move more Android-specific data types to the frontend module.

Change-Id: Idaa4c552f600f78d6f0ad21997cfa7f3a6c6cbd8
Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
diff --git a/hwc2_device/HwcDisplay.cpp b/hwc2_device/HwcDisplay.cpp
index da40416..252276f 100644
--- a/hwc2_device/HwcDisplay.cpp
+++ b/hwc2_device/HwcDisplay.cpp
@@ -262,7 +262,19 @@
     if (modeset_buffer != nullptr) {
       auto modeset_layer = std::make_unique<HwcLayer>(this);
       HwcLayer::LayerProperties properties;
-      properties.buffer = {.buffer_handle = modeset_buffer};
+      auto bi = BufferInfoGetter::GetInstance()->GetBoInfo(modeset_buffer);
+      if (!bi) {
+        ALOGE("Failed to get buffer info for modeset buffer.");
+        return ConfigError::kBadConfig;
+      }
+      properties.slot_buffer = {
+          .slot_id = 0,
+          .bi = bi,
+      };
+      properties.active_slot = {
+          .slot_id = 0,
+          .fence = {},
+      };
       properties.blend_mode = BufferBlendMode::kNone;
       modeset_layer->SetLayerProperties(properties);
       modeset_layer->PopulateLayerData();
@@ -422,7 +434,7 @@
     vsync_worker_ = {};
   }
 
-  client_layer_.SwChainClearCache();
+  client_layer_.ClearSlots();
 }
 
 HWC2::Error HwcDisplay::Init() {