diff options
author | Long Ling <longling@google.com> | 2021-06-11 09:48:12 -0700 |
---|---|---|
committer | Long Ling <longling@google.com> | 2021-07-07 15:31:58 -0700 |
commit | 9ebb39f623383eb7e556f930e571813ee30c0f0b (patch) | |
tree | 3a259eafdcb9a3cb8447c200c1d3aee032b6bca0 | |
parent | cbe2177d18f3032493b53cb391fbfa3736003177 (diff) | |
download | gs101-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.h | 1 | ||||
-rw-r--r-- | libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp | 19 | ||||
-rw-r--r-- | libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h | 5 |
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(); |