summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--hwc2/common/base/Hwcomposer.cpp7
-rw-r--r--hwc2/common/devices/PhysicalDevice.cpp53
-rw-r--r--hwc2/common/hdmi/DisplayHdmi.cpp121
-rw-r--r--hwc2/common/hdmi/DisplayHdmi.h19
-rw-r--r--hwc2/platforms/Android.mk13
5 files changed, 175 insertions, 38 deletions
diff --git a/hwc2/common/hdmi/DisplayHdmi.cpp b/hwc2/common/hdmi/DisplayHdmi.cpp
index f49b826..50cd93a 100644
--- a/hwc2/common/hdmi/DisplayHdmi.cpp
+++ b/hwc2/common/hdmi/DisplayHdmi.cpp
@@ -6,26 +6,20 @@
#include <gui/SurfaceComposerClient.h>
#include <gui/ISurfaceComposer.h>
#include "DisplayHdmi.h"
+#include <cutils/properties.h>
namespace android {
namespace amlogic {
+void DisplayHdmi::SystemControlDeathRecipient::serviceDied(
+ uint64_t, const wp<::android::hidl::base::V1_0::IBase>&) {
+ ETRACE("system_control died, need reconnect it\n");
+}
+
DisplayHdmi::DisplayHdmi(hwc2_display_t id) {
mDisplayId = id;
- sp<IServiceManager> sm = defaultServiceManager();
- if (sm == NULL)
- {
- ETRACE("Couldn't get default ServiceManager\n");
- return ;
- }
-
- mSystemControlService = interface_cast<ISystemControlService>(sm->getService(String16("system_control")));
- if (mSystemControlService == NULL)
- {
- ETRACE("Couldn't get connection to SystemControlService\n");
- return ;
- }
+ mTrebleSystemControlEnable = property_get_bool("persist.system_control.treble", true);
initModes();
}
@@ -34,6 +28,39 @@ DisplayHdmi::~DisplayHdmi() {
mAllModes.clear();
}
+void DisplayHdmi::initBinderService() {
+ mTrebleSystemControl = nullptr;
+ sp<ISystemControl> control = nullptr;
+
+ if (mTrebleSystemControlEnable) {
+ control = ISystemControl::getService();
+ mDeathRecipient = new SystemControlDeathRecipient();
+ Return<bool> linked = control->linkToDeath(mDeathRecipient, /*cookie*/ 0);
+ if (!linked.isOk()) {
+ ETRACE("Transaction error in linking to system service death: %s", linked.description().c_str());
+ } else if (!linked) {
+ ETRACE("Unable to link to system service death notifications");
+ } else {
+ ITRACE("Link to system service death notification successful");
+ }
+
+ mTrebleSystemControl = control;
+ }
+ else {
+ sp<IServiceManager> sm = defaultServiceManager();
+ if (sm == NULL) {
+ ETRACE("Couldn't get default ServiceManager\n");
+ return ;
+ }
+
+ mSystemControlService = interface_cast<ISystemControlService>(sm->getService(String16("system_control")));
+ if (mSystemControlService == NULL) {
+ ETRACE("Couldn't get connection to SystemControlService\n");
+ return ;
+ }
+ }
+}
+
void DisplayHdmi::initialize() {
reset();
}
@@ -61,6 +88,7 @@ bool DisplayHdmi::updateHotplug(bool connected,
private_handle_t* framebufferHnd) {
bool ret = true;
int32_t rate;
+ initBinderService();
mConnected = connected;
@@ -76,7 +104,17 @@ bool DisplayHdmi::updateHotplug(bool connected,
//hdmi plug out when system is starting up
std::string dispMode;
int width, height;
- mSystemControlService->getActiveDispMode(&dispMode);
+ if (mTrebleSystemControlEnable) {
+ mTrebleSystemControl->getActiveDispMode([&dispMode](const Result &ret, const hidl_string& mode) {
+ if (Result::OK == ret) {
+ dispMode = mode.c_str();
+ }
+ });
+ }
+ else {
+ mSystemControlService->getActiveDispMode(&dispMode);
+ }
+
ret = calcMode2Config(dispMode.c_str(), &rate, &width, &height);
if (!ret) {
dispMode = std::string("1080p60hz");
@@ -113,9 +151,16 @@ bool DisplayHdmi::updateHotplug(bool connected,
updateDisplayConfigures();
updateActiveDisplayConfigure();
- ALOGD("updateHotplug setDisplayMode to %s", mActiveDisplaymode);
std::string strmode(mActiveDisplaymode);
- mSystemControlService->setActiveDispMode(strmode);
+ if (mTrebleSystemControlEnable) {
+ hidl_string mode(strmode);
+ Result ret = mTrebleSystemControl->setActiveDispMode(mode);
+ if (Result::OK == ret) {
+ }
+ }
+ else {
+ mSystemControlService->setActiveDispMode(strmode);
+ }
}
std::thread t1(&DisplayHdmi::setSurfaceFlingerActiveMode, this);
@@ -129,7 +174,7 @@ int DisplayHdmi::updateDisplayModeList() {
mSupportDispModes.clear();
bool fullActiveMode = Utils::get_bool_prop("ro.sf.full_activemode");
- bool isConfiged = readConfigFile("/system/etc/displayModeList.cfg", &mSupportDispModes);
+ bool isConfiged = readConfigFile("/vendor/etc/displayModeList.cfg", &mSupportDispModes);
if (isConfiged) {
return 0;
}
@@ -141,7 +186,20 @@ int DisplayHdmi::updateDisplayModeList() {
std::vector<std::string> getSupportDispModes;
std::string::size_type pos;
- mSystemControlService->getSupportDispModeList(&getSupportDispModes);
+ if (mTrebleSystemControlEnable) {
+ mTrebleSystemControl->getSupportDispModeList(
+ [&getSupportDispModes](const Result &ret, const hidl_vec<hidl_string>& modeList) {
+ if (Result::OK == ret) {
+ for (size_t i = 0; i < modeList.size(); i++) {
+ getSupportDispModes.push_back(modeList[i]);
+ }
+ }
+ });
+ }
+ else {
+ mSystemControlService->getSupportDispModeList(&getSupportDispModes);
+ }
+
if (getSupportDispModes.size() == 0) {
ALOGD("SupportDispModeList null!!!");
return -1;
@@ -177,7 +235,18 @@ int DisplayHdmi::updateDisplayModeList() {
int DisplayHdmi::updateActiveDisplayMode() {
std::string dispMode;
- mSystemControlService->getActiveDispMode(&dispMode);
+
+ if (mTrebleSystemControlEnable) {
+ mTrebleSystemControl->getActiveDispMode([&dispMode](const Result &ret, const hidl_string& mode) {
+ if (Result::OK == ret) {
+ dispMode = mode.c_str();
+ }
+ });
+ }
+ else {
+ mSystemControlService->getActiveDispMode(&dispMode);
+ }
+
strcpy(mActiveDisplaymode, dispMode.c_str());
int refreshRate = 60;
@@ -206,7 +275,15 @@ int DisplayHdmi::setDisplayMode(const char* displaymode) {
ALOGD("setDisplayMode to %s", displaymode);
std::string strmode(displaymode);
- mSystemControlService->setActiveDispMode(strmode);
+ if (mTrebleSystemControlEnable) {
+ hidl_string mode(strmode);
+ Result ret = mTrebleSystemControl->setActiveDispMode(mode);
+ if (Result::OK == ret) {
+ }
+ }
+ else {
+ mSystemControlService->setActiveDispMode(strmode);
+ }
updateActiveDisplayMode();
@@ -446,12 +523,12 @@ bool DisplayHdmi::readConfigFile(const char* configPath, std::vector<std::string
}
void DisplayHdmi::setSurfaceFlingerActiveMode() {
+ /*
sp<IBinder> dtoken(SurfaceComposerClient::getBuiltInDisplay(
ISurfaceComposer::eDisplayIdMain));
SurfaceComposerClient::setActiveConfig(dtoken, mDisplayConfigs.size()-mActiveDisplayConfigItem-1);
-
- return;
+ */
}
void DisplayHdmi::initModes() {