drm_hwcomposer: implement the safe handling of layers
This is a sweeping change to discard our usage of struct hwc_layer_t outside
hwcomposer.cpp. That was a dangerous struct that was a source of many of our
errors. Replacing it with safer RAII-style classes reduces the amount and
complexity of our code.
Change-Id: I580cafdf89bd1e7e6583f3073858b8e78e6018ba
diff --git a/drmcomposition.h b/drmcomposition.h
index 426ced0..a5d9cf1 100644
--- a/drmcomposition.h
+++ b/drmcomposition.h
@@ -22,7 +22,6 @@
#include "drmplane.h"
#include "importer.h"
-#include <deque>
#include <map>
#include <vector>
@@ -33,9 +32,11 @@
struct DrmCompositionDisplayLayersMap {
int display;
- size_t num_layers;
- hwc_layer_1_t *layers;
- size_t *layer_indices;
+ std::vector<DrmHwcLayer> layers;
+
+ DrmCompositionDisplayLayersMap() = default;
+ DrmCompositionDisplayLayersMap(DrmCompositionDisplayLayersMap &&rhs) =
+ default;
};
class DrmComposition {
@@ -44,8 +45,7 @@
int Init(uint64_t frame_no);
- int SetLayers(size_t num_displays,
- const DrmCompositionDisplayLayersMap *maps);
+ int SetLayers(size_t num_displays, DrmCompositionDisplayLayersMap *maps);
int SetDpmsMode(int display, uint32_t dpms_mode);
std::unique_ptr<DrmDisplayComposition> TakeDisplayComposition(int display);