author | baocheng sun <baocheng.sun@amlogic.com> | 2020-02-26 03:13:26 (GMT) |
---|---|---|
committer | sky zhou <sky.zhou@amlogic.com> | 2020-05-21 12:03:54 (GMT) |
commit | 0564fd8966311481ed9d1c3a548115e51258aaab (patch) | |
tree | b40cc70e639bf182cb094bef505291297cf7df6e | |
parent | 77582805274ba08fcfb9b4cb85dd2658493eaa5e (diff) | |
download | hwcomposer-0564fd8966311481ed9d1c3a548115e51258aaab.zip hwcomposer-0564fd8966311481ed9d1c3a548115e51258aaab.tar.gz hwcomposer-0564fd8966311481ed9d1c3a548115e51258aaab.tar.bz2 |
hwc: porting android p hotplut solution [1/5]
PD#SWPL-21279
Problem:
Porting android p hotplug solution
Solution:
Porting android p hotplug solution. The primary display in framework
will not be recreated.
Verify:
newton
Change-Id: I9b80c8524535afb4ad2b24da22ad9d45e74e85c9
Signed-off-by: baocheng sun <baocheng.sun@amlogic.com>
-rw-r--r-- | hwc2/FixedSizeModeMgr.cpp | 18 | ||||
-rw-r--r-- | hwc2/Hwc2Display.cpp | 28 |
2 files changed, 7 insertions, 39 deletions
diff --git a/hwc2/FixedSizeModeMgr.cpp b/hwc2/FixedSizeModeMgr.cpp index f512b3b..9913a35 100644 --- a/hwc2/FixedSizeModeMgr.cpp +++ b/hwc2/FixedSizeModeMgr.cpp @@ -16,15 +16,6 @@ #define DEFUALT_DPI (159) #define DEFAULT_REFRESH_RATE (60.0f) -static drm_mode_info_t defaultMode = { - "dummy_hdmi", - DEFUALT_DPI, - DEFUALT_DPI, - 720, - 480, - DEFAULT_REFRESH_RATE -}; - FixedSizeModeMgr::FixedSizeModeMgr() { } @@ -59,10 +50,8 @@ int32_t FixedSizeModeMgr::update() { if (mConnector->isConnected() && 0 == mCrtc->getMode(realMode)) { if (realMode.name[0] != 0) { mCurMode.refreshRate = realMode.refreshRate; - mCurMode.dpiX = realMode.dpiX; - mCurMode.dpiY = realMode.dpiY; - mCurMode.pixelW = mFbWidth; - mCurMode.pixelH = mFbHeight; + mCurMode.dpiX = ((float)mCurMode.pixelW / realMode.pixelW) * realMode.dpiX; + mCurMode.dpiY = ((float)mCurMode.pixelH / realMode.pixelH) * realMode.dpiY; strncpy(mCurMode.name, realMode.name , DRM_DISPLAY_MODE_LEN); MESON_LOGI("ModeMgr update to (%s)", mCurMode.name); useFakeMode = false; @@ -70,7 +59,8 @@ int32_t FixedSizeModeMgr::update() { } if (useFakeMode) { - mCurMode = defaultMode; + mCurMode.refreshRate = DEFAULT_REFRESH_RATE; + mCurMode.dpiX = mCurMode.dpiY = DEFUALT_DPI; strncpy(mCurMode.name, "NULL", DRM_DISPLAY_MODE_LEN); } diff --git a/hwc2/Hwc2Display.cpp b/hwc2/Hwc2Display.cpp index 3a5ceaa..25d8841 100644 --- a/hwc2/Hwc2Display.cpp +++ b/hwc2/Hwc2Display.cpp @@ -236,19 +236,9 @@ hwc2_error_t Hwc2Display::setVsyncEnable(hwc2_vsync_t enabled) { void Hwc2Display::onHotplug(bool connected) { bool bSendPlugOut = false; MESON_LOGD("On hot plug: [%s]", connected == true ? "Plug in" : "Plug out"); - /* - * call hotplug out of lock, SF may call some hwc function to cause deadlock. - * When a display is connected, First onHotplug DISCONNECT for the dummy config - * Swap out dummy display for the newly-connected display. OnHotplug CONNECT for - * the newly-connected display will be called onModeChanged function when the - * displayPip is Ready. - */ - if (connected) - mObserver->onHotplug(false); { std::lock_guard<std::mutex> lock(mMutex); - if (connected) { mSignalHpd = true; return; @@ -259,17 +249,9 @@ void Hwc2Display::onHotplug(bool connected) { } } - /* - * call hotplug out of lock, SF may call some hwc function to cause deadlock. - * When a display is disconnected: - * onHotplug DISCONNECT for the current display - * Swap in dummy config [only 1 config 720x480, with no HDR capabilities] - * onHotplug CONNECT for the dummy config - */ - if (mObserver) { + /*call hotplug out of lock, SF may call some hwc function to cause deadlock.*/ + if (bSendPlugOut) { mObserver->onHotplug(false); - mModeMgr->update(); - mObserver->onHotplug(true); } } @@ -315,6 +297,7 @@ void Hwc2Display::onModeChanged(int stage) { mPowerMode->setConnectorStatus(true); if (mSignalHpd) { bSendPlugIn = true; + mSignalHpd = false; } else { /*Workaround: needed for NTS test.*/ if (HwcConfig::primaryHotplugEnabled() @@ -335,11 +318,6 @@ void Hwc2Display::onModeChanged(int stage) { } /*call hotplug out of lock, SF may call some hwc function to cause deadlock.*/ if (bSendPlugIn && mModeMgr->needCallHotPlug()) { - if (mSignalHpd == false) - mObserver->onHotplug(false); - else - mSignalHpd = false; - MESON_LOGD("onModeChanged mObserver->onHotplug(true)"); mObserver->onHotplug(true); } else { |