diff options
-rw-r--r-- | libhwc2.1/libdevice/ExynosDevice.cpp | 3 | ||||
-rw-r--r-- | libhwc2.1/libhwcService/ExynosHWCService.cpp | 5 | ||||
-rw-r--r-- | libhwc2.1/libhwcService/ExynosHWCService.h | 2 | ||||
-rw-r--r-- | libhwc2.1/libhwcService/IExynosHWC.cpp | 14 | ||||
-rw-r--r-- | libhwc2.1/libhwcService/IExynosHWC.h | 2 | ||||
-rw-r--r-- | libhwc2.1/libresource/ExynosResourceManager.cpp | 30 | ||||
-rw-r--r-- | libhwc2.1/libresource/ExynosResourceManager.h | 2 |
7 files changed, 33 insertions, 25 deletions
diff --git a/libhwc2.1/libdevice/ExynosDevice.cpp b/libhwc2.1/libdevice/ExynosDevice.cpp index dfe9038..7f0f5b1 100644 --- a/libhwc2.1/libdevice/ExynosDevice.cpp +++ b/libhwc2.1/libdevice/ExynosDevice.cpp @@ -475,7 +475,7 @@ int32_t ExynosDevice::registerCallback ( } } } - + /* TODO(b/265244856): called by register callback vsync. it's only hwc2. */ if (descriptor == HWC2_CALLBACK_VSYNC) mResourceManager->doPreProcessing(); @@ -879,6 +879,7 @@ bool ExynosDevice::validateFences(ExynosDisplay *display) { } void ExynosDevice::compareVsyncPeriod() { + /* TODO(b/265244856): to clarify what purpose of the function */ ExynosDisplay *primary_display = getDisplay(getDisplayId(HWC_DISPLAY_PRIMARY, 0)); ExynosDisplay *external_display = getDisplay(getDisplayId(HWC_DISPLAY_EXTERNAL, 0)); diff --git a/libhwc2.1/libhwcService/ExynosHWCService.cpp b/libhwc2.1/libhwcService/ExynosHWCService.cpp index aac4916..e257e3e 100644 --- a/libhwc2.1/libhwcService/ExynosHWCService.cpp +++ b/libhwc2.1/libhwcService/ExynosHWCService.cpp @@ -336,11 +336,10 @@ int ExynosHWCService::setHWCCtl(uint32_t display, uint32_t ctrl, int32_t val) return err; } -int ExynosHWCService::setDDIScaler(uint32_t width, uint32_t height) -{ +int ExynosHWCService::setDDIScaler(uint32_t display_id, uint32_t width, uint32_t height) { ALOGD_IF(HWC_SERVICE_DEBUG, "%s, width=%d, height=%d", __func__, width, height); if (mHWCCtx) { - ExynosDisplay *display = (ExynosDisplay*)mHWCCtx->device->getDisplay(getDisplayId(HWC_DISPLAY_PRIMARY, 0)); + ExynosDisplay *display = (ExynosDisplay *)mHWCCtx->device->getDisplay(display_id); if (display == NULL) return -EINVAL; diff --git a/libhwc2.1/libhwcService/ExynosHWCService.h b/libhwc2.1/libhwcService/ExynosHWCService.h index 586e335..8dd59c8 100644 --- a/libhwc2.1/libhwcService/ExynosHWCService.h +++ b/libhwc2.1/libhwcService/ExynosHWCService.h @@ -65,7 +65,7 @@ public: virtual void getHWCFenceDebug(); virtual int setHWCCtl(uint32_t display, uint32_t ctrl, int32_t val); - virtual int setDDIScaler(uint32_t width, uint32_t height); + virtual int setDDIScaler(uint32_t display_id, uint32_t width, uint32_t height); virtual void setLbeCtrl(uint32_t display_id, uint32_t state, uint32_t lux) override; #if 0 void setPSRExitCallback(void (*callback)(exynos_hwc_composer_device_1_t *)); diff --git a/libhwc2.1/libhwcService/IExynosHWC.cpp b/libhwc2.1/libhwcService/IExynosHWC.cpp index 9833e64..816e1c1 100644 --- a/libhwc2.1/libhwcService/IExynosHWC.cpp +++ b/libhwc2.1/libhwcService/IExynosHWC.cpp @@ -365,11 +365,12 @@ public: return result; }; - virtual int setDDIScaler(uint32_t width, uint32_t height) { + virtual int setDDIScaler(uint32_t displayId, uint32_t width, uint32_t height) { Parcel data, reply; data.writeInterfaceToken(IExynosHWCService::getInterfaceDescriptor()); - data.writeInt32(width); - data.writeInt32(height); + data.writeUint32(displayId); + data.writeUint32(width); + data.writeUint32(height); int result = remote()->transact(SET_DDISCALER, data, &reply); if (result == NO_ERROR) result = reply.readInt32(); @@ -635,9 +636,10 @@ status_t BnExynosHWCService::onTransact( } break; case SET_DDISCALER: { CHECK_INTERFACE(IExynosHWCService, data, reply); - uint32_t width = data.readInt32(); - uint32_t height = data.readInt32(); - int error = setDDIScaler(width, height); + uint32_t display_id = data.readUint32(); + uint32_t width = data.readUint32(); + uint32_t height = data.readUint32(); + int error = setDDIScaler(display_id, width, height); reply->writeInt32(error); return NO_ERROR; } break; diff --git a/libhwc2.1/libhwcService/IExynosHWC.h b/libhwc2.1/libhwcService/IExynosHWC.h index 640ca7d..6bc5254 100644 --- a/libhwc2.1/libhwcService/IExynosHWC.h +++ b/libhwc2.1/libhwcService/IExynosHWC.h @@ -62,7 +62,7 @@ public: virtual void getHWCFenceDebug() = 0; virtual int setHWCCtl(uint32_t display, uint32_t ctrl, int32_t val) = 0; - virtual int setDDIScaler(uint32_t width, uint32_t height) = 0; + virtual int setDDIScaler(uint32_t display_id, uint32_t width, uint32_t height) = 0; virtual int32_t setDisplayDeviceMode(int32_t display_id, int32_t mode) = 0; virtual int32_t setPanelGammaTableSource(int32_t display_id, int32_t type, int32_t source) = 0; diff --git a/libhwc2.1/libresource/ExynosResourceManager.cpp b/libhwc2.1/libresource/ExynosResourceManager.cpp index 3c94c2f..ba30526 100644 --- a/libhwc2.1/libresource/ExynosResourceManager.cpp +++ b/libhwc2.1/libresource/ExynosResourceManager.cpp @@ -326,6 +326,8 @@ bool ExynosResourceManager::DstBufMgrThread::threadLoop() ExynosDevice *device = mExynosResourceManager->mDevice; if (device == NULL) return false; + + /* TODO(b/265244856): to clarify which display size to alloc */ ExynosDisplay *display = device->getDisplay(getDisplayId(HWC_DISPLAY_PRIMARY, 0)); if (display == NULL) return false; @@ -447,7 +449,7 @@ int32_t ExynosResourceManager::assignResource(ExynosDisplay *display) __func__, ret); return ret; } - preAssignWindows(); + preAssignWindows(display); } @@ -1083,7 +1085,7 @@ int32_t ExynosResourceManager::validateLayer(uint32_t index, ExynosDisplay *disp return eDynamicRecomposition; if ((layer->mLayerBuffer != NULL) && - (display->mDisplayId == getDisplayId(HWC_DISPLAY_PRIMARY, 0)) && + (display->mType == HWC_DISPLAY_PRIMARY) && (mForceReallocState != DST_REALLOC_DONE)) { ALOGI("Device type assign skipping by dst reallocation...... "); return eReallocOnGoingForDDI; @@ -2007,18 +2009,22 @@ int32_t ExynosResourceManager::preAssignResources() return NO_ERROR; } -void ExynosResourceManager::preAssignWindows() -{ - ExynosDisplay *display = NULL; - ExynosPrimaryDisplayModule *primaryDisplay = - (ExynosPrimaryDisplayModule *)mDevice->getDisplay(getDisplayId(HWC_DISPLAY_PRIMARY, 0)); +void ExynosResourceManager::preAssignWindows(ExynosDisplay *display) { + ExynosPrimaryDisplayModule *primaryDisplay = NULL; + + if (display->mType == HWC_DISPLAY_PRIMARY) { + primaryDisplay = (ExynosPrimaryDisplayModule *)display; + } else { + primaryDisplay = (ExynosPrimaryDisplayModule *)mDevice->getDisplay( + getDisplayId(HWC_DISPLAY_PRIMARY, 0)); + } + primaryDisplay->usePreDefinedWindow(false); for (size_t i = 1; i < mDevice->mDisplays.size(); i++) { - display = mDevice->mDisplays[i]; - if ((display == NULL) || (display->mType != HWC_DISPLAY_EXTERNAL)) - continue; - if (display->mPlugState == true) { + ExynosDisplay *disp = mDevice->mDisplays[i]; + if ((disp == NULL) || (display->mType != HWC_DISPLAY_EXTERNAL)) continue; + if (disp->mPlugState == true) { primaryDisplay->usePreDefinedWindow(true); } } @@ -2359,7 +2365,7 @@ int32_t ExynosResourceManager::initResourcesState(ExynosDisplay *display) __func__, ret); return ret; } - preAssignWindows(); + preAssignWindows(display); } diff --git a/libhwc2.1/libresource/ExynosResourceManager.h b/libhwc2.1/libresource/ExynosResourceManager.h index baf9bb3..badb6c7 100644 --- a/libhwc2.1/libresource/ExynosResourceManager.h +++ b/libhwc2.1/libresource/ExynosResourceManager.h @@ -133,7 +133,7 @@ class ExynosResourceManager { int32_t updateSupportedMPPFlag(ExynosDisplay * display); int32_t resetResources(); int32_t preAssignResources(); - void preAssignWindows(); + void preAssignWindows(ExynosDisplay *display); int32_t preProcessLayer(ExynosDisplay *display); int32_t resetAssignedResources(ExynosDisplay *display, bool forceReset = false); virtual int32_t assignCompositionTarget(ExynosDisplay *display, uint32_t targetType); |