hwc: Preserve dynamic partial update preference on framework reboot.
Dynamic partial update feature enabled post processing OR
partial update based on client preference. In case of framework
reboot, HWC needs to preserve the last set preference of these
features.
Change-Id: I4f53ac21f5404c7862d58248c86f23c45493f41b
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index 98cd1f4..4a04f60 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -194,6 +194,8 @@
enablePartialUpdateForMDP3 = true;
}
+ sIsPartialUpdateActive = getPartialUpdatePref(ctx);
+
return true;
}
@@ -2739,6 +2741,28 @@
return 0;
}
+bool MDPComp::getPartialUpdatePref(hwc_context_t *ctx) {
+ Locker::Autolock _l(ctx->mDrawLock);
+ const int fbNum = Overlay::getFbForDpy(Overlay::DPY_PRIMARY);
+ char path[MAX_SYSFS_FILE_PATH];
+ snprintf (path, sizeof(path), "sys/class/graphics/fb%d/dyn_pu", fbNum);
+ int fd = open(path, O_RDONLY);
+ if(fd < 0) {
+ ALOGE("%s: Failed to open sysfd node: %s", __FUNCTION__, path);
+ return -1;
+ }
+ char value[4];
+ ssize_t size_read = read(fd, value, sizeof(value)-1);
+ if(size_read <= 0) {
+ ALOGE("%s: Failed to read sysfd node: %s", __FUNCTION__, path);
+ close(fd);
+ return -1;
+ }
+ close(fd);
+ value[size_read] = '\0';
+ return atoi(value);
+}
+
int MDPComp::setPartialUpdatePref(hwc_context_t *ctx, bool enable) {
Locker::Autolock _l(ctx->mDrawLock);
const int fbNum = Overlay::getFbForDpy(Overlay::DPY_PRIMARY);
@@ -2746,14 +2770,14 @@
snprintf (path, sizeof(path), "sys/class/graphics/fb%d/dyn_pu", fbNum);
int fd = open(path, O_WRONLY);
if(fd < 0) {
- ALOGE("%s: Failed to open sysfd node", __FUNCTION__);
+ ALOGE("%s: Failed to open sysfd node: %s", __FUNCTION__, path);
return -1;
}
char value[4];
snprintf(value, sizeof(value), "%d", (int)enable);
ssize_t ret = write(fd, value, strlen(value));
if(ret <= 0) {
- ALOGE("%s: Failed to write to sysfd nodes", __FUNCTION__);
+ ALOGE("%s: Failed to write to sysfd nodes: %s", __FUNCTION__, path);
close(fd);
return -1;
}
diff --git a/libhwcomposer/hwc_mdpcomp.h b/libhwcomposer/hwc_mdpcomp.h
index 4ae7aa7..3ce4a64 100644
--- a/libhwcomposer/hwc_mdpcomp.h
+++ b/libhwcomposer/hwc_mdpcomp.h
@@ -57,7 +57,7 @@
static void setIdleTimeout(const uint32_t& timeout);
static void setMaxPipesPerMixer(const uint32_t value);
static int setPartialUpdatePref(hwc_context_t *ctx, bool enable);
-
+ static bool getPartialUpdatePref(hwc_context_t *ctx);
protected:
enum ePipeType {
MDPCOMP_OV_RGB = ovutils::OV_MDP_PIPE_RGB,