drm_hwcomposer: Pass resource manager to drmdisplaycompositor
Signed-off-by: Alexandru Gheorghe <alexandru-cosmin.gheorghe@arm.com>
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
index 4291ad1..0d00bc0 100644
--- a/drmdisplaycompositor.cpp
+++ b/drmdisplaycompositor.cpp
@@ -39,7 +39,8 @@
namespace android {
DrmDisplayCompositor::DrmDisplayCompositor()
- : drm_(NULL),
+ : resource_manager_(NULL),
+ drm_(NULL),
display_(-1),
initialized_(false),
active_(false),
@@ -74,7 +75,9 @@
pthread_mutex_destroy(&lock_);
}
-int DrmDisplayCompositor::Init(DrmDevice *drm, int display) {
+int DrmDisplayCompositor::Init(ResourceManager *resource_manager,
+ DrmDevice *drm, int display) {
+ resource_manager_ = resource_manager;
drm_ = drm;
display_ = display;
diff --git a/drmdisplaycompositor.h b/drmdisplaycompositor.h
index 1866d43..6212597 100644
--- a/drmdisplaycompositor.h
+++ b/drmdisplaycompositor.h
@@ -20,6 +20,7 @@
#include "drmhwcomposer.h"
#include "drmdisplaycomposition.h"
#include "drmframebuffer.h"
+#include "resourcemanager.h"
#include <pthread.h>
#include <memory>
@@ -40,7 +41,7 @@
DrmDisplayCompositor();
~DrmDisplayCompositor();
- int Init(DrmDevice *drm, int display);
+ int Init(ResourceManager *resource_manager, DrmDevice *drm, int display);
std::unique_ptr<DrmDisplayComposition> CreateComposition() const;
int ApplyComposition(std::unique_ptr<DrmDisplayComposition> composition);
@@ -78,6 +79,7 @@
std::tuple<int, uint32_t> CreateModeBlob(const DrmMode &mode);
+ ResourceManager *resource_manager_;
DrmDevice *drm_;
int display_;
diff --git a/drmhwctwo.cpp b/drmhwctwo.cpp
index 56ba07b..a6b48e2 100644
--- a/drmhwctwo.cpp
+++ b/drmhwctwo.cpp
@@ -72,10 +72,10 @@
return HWC2::Error::NoResources;
}
- displays_.emplace(std::piecewise_construct,
- std::forward_as_tuple(HWC_DISPLAY_PRIMARY),
- std::forward_as_tuple(drm, importer, HWC_DISPLAY_PRIMARY,
- HWC2::DisplayType::Physical));
+ displays_.emplace(
+ std::piecewise_construct, std::forward_as_tuple(HWC_DISPLAY_PRIMARY),
+ std::forward_as_tuple(&resource_manager_, drm, importer,
+ HWC_DISPLAY_PRIMARY, HWC2::DisplayType::Physical));
DrmCrtc *crtc = drm->GetCrtcForDisplay(static_cast<int>(HWC_DISPLAY_PRIMARY));
if (!crtc) {
@@ -152,10 +152,15 @@
return HWC2::Error::None;
}
-DrmHwcTwo::HwcDisplay::HwcDisplay(DrmDevice *drm,
+DrmHwcTwo::HwcDisplay::HwcDisplay(ResourceManager *resource_manager,
+ DrmDevice *drm,
std::shared_ptr<Importer> importer,
hwc2_display_t handle, HWC2::DisplayType type)
- : drm_(drm), importer_(importer), handle_(handle), type_(type) {
+ : resource_manager_(resource_manager),
+ drm_(drm),
+ importer_(importer),
+ handle_(handle),
+ type_(type) {
supported(__func__);
}
@@ -168,7 +173,7 @@
}
int display = static_cast<int>(handle_);
- int ret = compositor_.Init(drm_, display);
+ int ret = compositor_.Init(resource_manager_, drm_, display);
if (ret) {
ALOGE("Failed display compositor init for display %d (%d)", display, ret);
return HWC2::Error::NoResources;
diff --git a/drmhwctwo.h b/drmhwctwo.h
index b65d37d..d987065 100644
--- a/drmhwctwo.h
+++ b/drmhwctwo.h
@@ -135,8 +135,9 @@
class HwcDisplay {
public:
- HwcDisplay(DrmDevice *drm, std::shared_ptr<Importer> importer,
- hwc2_display_t handle, HWC2::DisplayType type);
+ HwcDisplay(ResourceManager *resource_manager, DrmDevice *drm,
+ std::shared_ptr<Importer> importer, hwc2_display_t handle,
+ HWC2::DisplayType type);
HwcDisplay(const HwcDisplay &) = delete;
HWC2::Error Init(std::vector<DrmPlane *> *planes);
@@ -188,6 +189,7 @@
HWC2::Error CreateComposition(bool test);
void AddFenceToRetireFence(int fd);
+ ResourceManager *resource_manager_;
DrmDevice *drm_;
DrmDisplayCompositor compositor_;
std::shared_ptr<Importer> importer_;