summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libhwc2.1/libdevice/ExynosDevice.cpp3
-rw-r--r--libhwc2.1/libhwcService/ExynosHWCService.cpp5
-rw-r--r--libhwc2.1/libhwcService/ExynosHWCService.h2
-rw-r--r--libhwc2.1/libhwcService/IExynosHWC.cpp14
-rw-r--r--libhwc2.1/libhwcService/IExynosHWC.h2
-rw-r--r--libhwc2.1/libresource/ExynosResourceManager.cpp30
-rw-r--r--libhwc2.1/libresource/ExynosResourceManager.h2
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);