livedisplay: Convert controller singletons to regular objects
Change-Id: I9ea5b27348acbb6f9d2953d691d54c134b02dea1
diff --git a/livedisplay/1.0/default/controller/LegacyMMController.cpp b/livedisplay/1.0/default/controller/LegacyMMController.cpp
index 12a8e13..403692b 100644
--- a/livedisplay/1.0/default/controller/LegacyMMController.cpp
+++ b/livedisplay/1.0/default/controller/LegacyMMController.cpp
@@ -74,13 +74,6 @@
namespace implementation {
LegacyMMController::LegacyMMController() {
- mHandle = openlib();
- if (mHandle != nullptr) {
- FOR_EACH_FUNCTION(LOAD_MM_FUNCTION)
- }
-}
-
-std::shared_ptr<void> LegacyMMController::openlib() {
std::shared_ptr<void> handle(dlopen(kFilename, RTLD_NOW), [this](void* p) {
FOR_EACH_FUNCTION(CLOSE_MM_FUNCTION)
if (p != nullptr) {
@@ -93,14 +86,11 @@
});
if (handle == nullptr) {
LOG(ERROR) << "DLOPEN failed for " << kFilename << " (" << dlerror() << ")";
- return nullptr;
+ return;
}
- return handle;
-}
+ mHandle = handle;
-LegacyMMController& LegacyMMController::getInstance() {
- static LegacyMMController instance{};
- return instance;
+ FOR_EACH_FUNCTION(LOAD_MM_FUNCTION);
}
int32_t LegacyMMController::init(int32_t initialize) {
diff --git a/livedisplay/1.0/default/controller/SDMController.cpp b/livedisplay/1.0/default/controller/SDMController.cpp
index 31e0ec7..1355ce2 100644
--- a/livedisplay/1.0/default/controller/SDMController.cpp
+++ b/livedisplay/1.0/default/controller/SDMController.cpp
@@ -72,13 +72,6 @@
namespace implementation {
SDMController::SDMController() {
- mHandle = openlib();
- if (mHandle != nullptr) {
- FOR_EACH_FUNCTION(LOAD_SDM_FUNCTION)
- }
-}
-
-std::shared_ptr<void> SDMController::openlib() {
std::shared_ptr<void> handle(dlopen(kFilename, RTLD_NOW), [this](void* p) {
FOR_EACH_FUNCTION(CLOSE_SDM_FUNCTION)
if (p != nullptr) {
@@ -91,14 +84,11 @@
});
if (handle == nullptr) {
LOG(ERROR) << "DLOPEN failed for " << kFilename << " (" << dlerror() << ")";
- return nullptr;
+ return;
}
- return handle;
-}
+ mHandle = handle;
-SDMController& SDMController::getInstance() {
- static SDMController instance{};
- return instance;
+ FOR_EACH_FUNCTION(LOAD_SDM_FUNCTION)
}
int32_t SDMController::init(uint64_t* hctx, uint32_t flags) {
diff --git a/livedisplay/1.0/default/impl/LegacyMM.cpp b/livedisplay/1.0/default/impl/LegacyMM.cpp
index 95b1d98..a83a24e 100644
--- a/livedisplay/1.0/default/impl/LegacyMM.cpp
+++ b/livedisplay/1.0/default/impl/LegacyMM.cpp
@@ -63,11 +63,17 @@
using android::sp;
using android::status_t;
+LegacyMM::LegacyMM() : mController(nullptr) {
+}
+
+LegacyMM::~LegacyMM() {
+}
+
status_t LegacyMM::getColorBalanceRange(Range& range) {
struct mm_range r;
memset(&r, 0, sizeof(struct mm_range));
- status_t rc = LegacyMMController::getInstance().get_color_balance_range(0, &r);
+ status_t rc = mController->get_color_balance_range(0, &r);
if (rc == OK) {
range.min = r.min;
range.max = r.max;
@@ -76,12 +82,12 @@
}
status_t LegacyMM::setColorBalance(int32_t balance) {
- return LegacyMMController::getInstance().set_color_balance(0, balance);
+ return mController->set_color_balance(0, balance);
}
int32_t LegacyMM::getColorBalance() {
int32_t value = 0;
- if (LegacyMMController::getInstance().get_color_balance(0, &value) != 0) {
+ if (mController->get_color_balance(0, &value) != 0) {
value = 0;
}
return value;
@@ -111,7 +117,7 @@
d_mode tmp[count];
- rc = LegacyMMController::getInstance().get_display_modes(0, 0, tmp, count);
+ rc = mController->get_display_modes(0, 0, tmp, count);
if (rc == 0) {
for (uint32_t i = 0; i < count; i++) {
const sp<disp_mode> m = new disp_mode;
@@ -136,11 +142,11 @@
return BAD_VALUE;
}
- if (LegacyMMController::getInstance().set_active_display_mode(0, modeID) != 0) {
+ if (mController->set_active_display_mode(0, modeID) != 0) {
return BAD_VALUE;
}
- if (makeDefault && LegacyMMController::getInstance().set_default_display_mode(0, modeID) != 0) {
+ if (makeDefault && mController->set_default_display_mode(0, modeID) != 0) {
return BAD_VALUE;
}
@@ -156,7 +162,7 @@
int32_t id = 0;
uint32_t mask = 0;
- status_t rc = LegacyMMController::getInstance().get_active_display_mode(0, &id, &mask);
+ status_t rc = mController->get_active_display_mode(0, &id, &mask);
if (rc == OK && id >= 0) {
return getDisplayModeById(id);
}
@@ -174,7 +180,7 @@
return getDisplayModeById(id);
}
- status_t rc = LegacyMMController::getInstance().get_default_display_mode(0, &id);
+ status_t rc = mController->get_default_display_mode(0, &id);
if (rc == OK && id >= 0) {
return getDisplayModeById(id);
}
@@ -186,7 +192,7 @@
struct mm_pa_range r;
memset(&r, 0, sizeof(struct mm_pa_range));
- status_t rc = LegacyMMController::getInstance().get_pa_range(0, &r);
+ status_t rc = mController->get_pa_range(0, &r);
if (rc == OK) {
ranges.hue.min = r.min.hue;
ranges.hue.max = r.max.hue;
@@ -211,7 +217,7 @@
struct mm_pa_config config;
memset(&config, 0, sizeof(struct mm_pa_config));
- status_t rc = LegacyMMController::getInstance().get_pa_config(0, &config);
+ status_t rc = mController->get_pa_config(0, &config);
if (rc == OK) {
hsic.hue = config.data.hue;
hsic.saturation = config.data.saturation;
@@ -237,12 +243,16 @@
config.data.contrast = hsic.contrast;
config.data.saturationThreshold = hsic.saturationThreshold;
- return LegacyMMController::getInstance().set_pa_config(0, &config);
+ return mController->set_pa_config(0, &config);
}
status_t LegacyMM::initialize() {
- status_t rc = NO_INIT;
- rc = LegacyMMController::getInstance().init(0);
+ mController = std::make_unique<LegacyMMController>();
+ if (mController == nullptr) {
+ LOG(ERROR) << "Failed to create LegacyMMController";
+ return NO_INIT;
+ }
+ status_t rc = mController->init(0);
if (rc != OK) {
LOG(ERROR) << "Failed to initialize LegacyMMController";
return rc;
@@ -254,7 +264,7 @@
rc = Utils::readInitialModeId(&id);
if (rc != OK || id < 0) {
// Get controller default mode and save it
- rc = LegacyMMController::getInstance().get_default_display_mode(0, &id);
+ rc = mController->get_default_display_mode(0, &id);
if (rc == OK && id >= 0) {
Utils::writeInitialModeId(id);
} else {
@@ -272,7 +282,8 @@
status_t LegacyMM::deinitialize() {
status_t rc = NO_INIT;
- rc = LegacyMMController::getInstance().init(1);
+ rc = mController->init(1);
+ mController = nullptr;
if (rc != OK) {
return rc;
}
@@ -295,7 +306,7 @@
return false;
}
- if (LegacyMMController::getInstance().supported(0, id)) {
+ if (mController->supported(0, id)) {
// display modes and color balance depend on each other
if (feature == Feature::DISPLAY_MODES || feature == Feature::COLOR_BALANCE) {
if (getNumDisplayModes() > 0) {
@@ -322,7 +333,7 @@
uint32_t LegacyMM::getNumDisplayModes() {
uint32_t count = 0;
- if (LegacyMMController::getInstance().get_num_display_modes(0, 0, &count) != 0) {
+ if (mController->get_num_display_modes(0, 0, &count) != 0) {
count = 0;
}
return count;
diff --git a/livedisplay/1.0/default/impl/SDM.cpp b/livedisplay/1.0/default/impl/SDM.cpp
index 62a7ffe..22c199d 100644
--- a/livedisplay/1.0/default/impl/SDM.cpp
+++ b/livedisplay/1.0/default/impl/SDM.cpp
@@ -92,10 +92,20 @@
using ::android::sp;
using ::android::status_t;
-status_t SDM::initialize() {
- status_t rc = NO_INIT;
+SDM::SDM() : mController(nullptr) {
+}
- rc = SDMController::getInstance().init(&mHandle, 0);
+SDM::~SDM() {
+}
+
+status_t SDM::initialize() {
+ mController = std::make_unique<SDMController>();
+ if (mController == nullptr) {
+ LOG(ERROR) << "Failed to create SDMController";
+ return NO_INIT;
+ }
+
+ status_t rc = mController->init(&mHandle, 0);
if (rc != OK) {
return rc;
}
@@ -120,15 +130,16 @@
}
status_t SDM::deinitialize() {
- SDMController::getInstance().deinit(mHandle, 0);
+ mController->deinit(mHandle, 0);
mHandle = 0;
+ mController = nullptr;
return OK;
}
uint32_t SDM::getNumSDMDisplayModes() {
uint32_t flags = 0;
int32_t count = 0;
- if (SDMController::getInstance().get_num_display_modes(mHandle, 0, 0, &count, &flags)) {
+ if (mController->get_num_display_modes(mHandle, 0, 0, &count, &flags)) {
count = 0;
}
return count;
@@ -172,11 +183,11 @@
}
} else if (mode->privFlags == PRIV_MODE_FLAG_SDM) {
if (state) {
- return SDMController::getInstance().set_active_display_mode(mHandle, 0, mode->id, 0);
+ return mController->set_active_display_mode(mHandle, 0, mode->id, 0);
} else {
if (Utils::readInitialModeId(&id) == OK) {
LOG(VERBOSE) << "set sdm mode to default: id" << id;
- return SDMController::getInstance().set_active_display_mode(mHandle, 0, id, 0);
+ return mController->set_active_display_mode(mHandle, 0, id, 0);
}
}
}
@@ -216,7 +227,7 @@
sdm_mode tmp[sdm_count];
uint32_t flags = 0;
- rc = SDMController::getInstance().get_display_modes(mHandle, 0, 0, tmp, sdm_count, &flags);
+ rc = mController->get_display_modes(mHandle, 0, 0, tmp, sdm_count, &flags);
if (rc == 0) {
for (uint32_t i = 0; i < sdm_count; i++) {
const sp<disp_mode> m = new disp_mode;
@@ -283,7 +294,7 @@
hsic_ranges r;
memset(&r, 0, sizeof(struct hsic_ranges));
- status_t rc = SDMController::getInstance().get_global_pa_range(mHandle, 0, &r);
+ status_t rc = mController->get_global_pa_range(mHandle, 0, &r);
if (rc == OK) {
ranges.hue.min = r.hue.min;
ranges.hue.max = r.hue.max;
@@ -328,7 +339,7 @@
return false;
}
- if (SDMController::getInstance().get_feature_version(mHandle, id, &v, &flags) != OK) {
+ if (mController->get_feature_version(mHandle, id, &v, &flags) != OK) {
return false;
}
@@ -352,7 +363,7 @@
int32_t id = 0;
uint32_t flags = 0;
if (Utils::readInitialModeId(&id) != OK || id < 0) {
- if (SDMController::getInstance().get_default_display_mode(mHandle, 0, &id, &flags) == OK &&
+ if (mController->get_default_display_mode(mHandle, 0, &id, &flags) == OK &&
id >= 0) {
return Utils::writeInitialModeId(id);
} else {
@@ -367,7 +378,7 @@
hsic_config config;
memset(&config, 0, sizeof(struct hsic_config));
- status_t rc = SDMController::getInstance().get_global_pa_config(mHandle, 0, &enable, &config);
+ status_t rc = mController->get_global_pa_config(mHandle, 0, &enable, &config);
if (rc == OK) {
hsic.hue = config.data.hue;
hsic.saturation = config.data.saturation;
@@ -415,7 +426,7 @@
return rc;
}
if (mode->privFlags == PRIV_MODE_FLAG_SDM) {
- rc = SDMController::getInstance().set_default_display_mode(mHandle, 0, mode->id, 0);
+ rc = mController->set_default_display_mode(mHandle, 0, mode->id, 0);
if (rc != OK) {
LOG(ERROR) << "failed to save mode! err=" << rc;
return rc;
@@ -470,7 +481,7 @@
config.data.contrast = hsic.contrast;
config.data.saturationThreshold = hsic.saturationThreshold;
- return SDMController::getInstance().set_global_pa_config(mHandle, 0, 1, &config);
+ return mController->set_global_pa_config(mHandle, 0, 1, &config);
}
HSIC SDM::getDefaultPictureAdjustment() {
diff --git a/livedisplay/1.0/default/include/controller/LegacyMMController.h b/livedisplay/1.0/default/include/controller/LegacyMMController.h
index 48bb403..8265001 100644
--- a/livedisplay/1.0/default/include/controller/LegacyMMController.h
+++ b/livedisplay/1.0/default/include/controller/LegacyMMController.h
@@ -29,7 +29,7 @@
class LegacyMMController {
public:
- static LegacyMMController& getInstance();
+ LegacyMMController();
int32_t init(int32_t init);
int32_t get_color_balance_range(int32_t disp_id, void* range);
@@ -47,10 +47,6 @@
int32_t supported(int32_t disp_id, uint32_t feature_id);
private:
- LegacyMMController();
-
- std::shared_ptr<void> openlib();
-
typedef int32_t (*disp_api_init)(int32_t);
typedef int32_t (*disp_api_get_color_balance_range)(int32_t, void*);
typedef int32_t (*disp_api_set_color_balance)(int32_t, int32_t);
diff --git a/livedisplay/1.0/default/include/controller/SDMController.h b/livedisplay/1.0/default/include/controller/SDMController.h
index e44591a..2e634de 100644
--- a/livedisplay/1.0/default/include/controller/SDMController.h
+++ b/livedisplay/1.0/default/include/controller/SDMController.h
@@ -28,13 +28,8 @@
namespace implementation {
class SDMController {
- private:
- SDMController();
-
- std::shared_ptr<void> openlib();
-
public:
- static SDMController& getInstance();
+ SDMController();
int32_t init(uint64_t* hctx, uint32_t flags);
int32_t deinit(uint64_t hctx, uint32_t flags);
diff --git a/livedisplay/1.0/default/include/impl/LegacyMM.h b/livedisplay/1.0/default/include/impl/LegacyMM.h
index 7484f41..3401908 100644
--- a/livedisplay/1.0/default/include/impl/LegacyMM.h
+++ b/livedisplay/1.0/default/include/impl/LegacyMM.h
@@ -25,8 +25,13 @@
namespace V1_0 {
namespace implementation {
+class LegacyMMController;
+
class LegacyMM : public ColorBackend {
public:
+ LegacyMM();
+ ~LegacyMM();
+
virtual android::status_t setAdaptiveBacklightEnabled(bool /* enabled */) override {
return android::NO_INIT;
}
@@ -65,6 +70,7 @@
uint32_t getNumDisplayModes();
android::sp<disp_mode> getDisplayModeById(int32_t id);
+ std::unique_ptr<LegacyMMController> mController;
HSIC mDefaultPictureAdjustment;
};
diff --git a/livedisplay/1.0/default/include/impl/SDM.h b/livedisplay/1.0/default/include/impl/SDM.h
index b7fd02b..a5fc577 100644
--- a/livedisplay/1.0/default/include/impl/SDM.h
+++ b/livedisplay/1.0/default/include/impl/SDM.h
@@ -28,8 +28,13 @@
namespace V1_0 {
namespace implementation {
+class SDMController;
+
class SDM : public ColorBackend {
public:
+ SDM();
+ ~SDM();
+
virtual android::status_t getDisplayModes(std::vector<android::sp<disp_mode>>& profiles) override;
virtual android::sp<disp_mode> getCurrentDisplayMode() override;
virtual android::sp<disp_mode> getDefaultDisplayMode() override;
@@ -74,6 +79,7 @@
android::sp<disp_mode> getLocalSRGBMode();
android::sp<disp_mode> getLocalDCIP3Mode();
+ std::unique_ptr<SDMController> mController;
uint64_t mHandle;
bool mFOSSEnabled;
bool mCachedFOSSStatus;