summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLong Ling <longling@google.com>2021-06-11 09:48:12 -0700
committerLong Ling <longling@google.com>2021-07-07 15:31:58 -0700
commit9ebb39f623383eb7e556f930e571813ee30c0f0b (patch)
tree3a259eafdcb9a3cb8447c200c1d3aee032b6bca0
parentcbe2177d18f3032493b53cb391fbfa3736003177 (diff)
downloadgs101-9ebb39f623383eb7e556f930e571813ee30c0f0b.tar.gz
libhwc2.1: support smooth display compensation
1. update scene after during presentDisplay. 2. check if early wakeup is needed. Bug: 187763532 Change-Id: I3c912e27b69ab67dc6e7a5ff2ea6df4bd2e31621
-rw-r--r--libhwc2.1/ExynosHWCModule.h1
-rw-r--r--libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp19
-rw-r--r--libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h5
3 files changed, 25 insertions, 0 deletions
diff --git a/libhwc2.1/ExynosHWCModule.h b/libhwc2.1/ExynosHWCModule.h
index f1fb196..01ed9b5 100644
--- a/libhwc2.1/ExynosHWCModule.h
+++ b/libhwc2.1/ExynosHWCModule.h
@@ -32,6 +32,7 @@
#define DP_CABLE_STATE_NAME "/sys/devices/platform/%s/extcon/extcon0/cable.0/state"
#define BRIGHTNESS_NODE_BASE "/sys/class/backlight/panel0-backlight/brightness"
#define MAX_BRIGHTNESS_NODE_BASE "/sys/class/backlight/panel0-backlight/max_brightness"
+#define EARLY_WAKUP_NODE_BASE "/sys/devices/platform/1c300000.drmdecon/early_wakeup"
#define IDMA(x) static_cast<decon_idma_type>(x)
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp
index 4d75ebc..074e0a5 100644
--- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp
+++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp
@@ -642,6 +642,25 @@ int32_t ExynosPrimaryDisplayModule::updateColorConversionInfo()
return ret;
}
+int32_t ExynosPrimaryDisplayModule::updatePresentColorConversionInfo()
+{
+ ExynosDisplayDrmInterfaceModule *moduleDisplayInterface =
+ (ExynosDisplayDrmInterfaceModule*)(mDisplayInterface.get());
+ auto refresh_rate = moduleDisplayInterface->getDesiredRefreshRate();
+ if (refresh_rate > 0) {
+ mDisplaySceneInfo.displayScene.refresh_rate = refresh_rate;
+ }
+
+ int ret = OK;
+ if ((ret = mDisplayColorInterface->UpdatePresent(DisplayType::DISPLAY_PRIMARY,
+ mDisplaySceneInfo.displayScene)) != 0) {
+ DISPLAY_LOGE("Display Scene update error (%d)", ret);
+ return ret;
+ }
+
+ return ret;
+}
+
int32_t ExynosPrimaryDisplayModule::getColorAdjustedDbv(uint32_t &dbv_adj) {
dbv_adj = mDisplayColorInterface->GetPipelineData(DisplayType::DISPLAY_PRIMARY)
->Panel()
diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h
index dc4ccc4..53805ff 100644
--- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h
+++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h
@@ -111,6 +111,11 @@ class ExynosPrimaryDisplayModule : public ExynosPrimaryDisplay {
virtual int32_t setColorTransform(const float* matrix, int32_t hint);
virtual int deliverWinConfigData();
virtual int32_t updateColorConversionInfo();
+ virtual int32_t updatePresentColorConversionInfo();
+ virtual bool checkEarlyWakeupNeeded(float refresh_rate) {
+ return mDisplayColorInterface->IsRrCompensationEnabled(
+ DisplayType::DISPLAY_PRIMARY, refresh_rate);
+ }
virtual int32_t getColorAdjustedDbv(uint32_t &dbv_adj);
virtual void initLbe();