hwc: Use asynchronous commit ioctl for display post

bug: 7274951

Change-Id: I70b2a00d6a2558f533bd87c92038774126434f03
diff --git a/libgralloc/fb_priv.h b/libgralloc/fb_priv.h
index 340968c..8f1a09b 100644
--- a/libgralloc/fb_priv.h
+++ b/libgralloc/fb_priv.h
@@ -18,6 +18,7 @@
 #ifndef FB_PRIV_H
 #define FB_PRIV_H
 #include <linux/fb.h>
+#include <linux/msm_mdp.h>
 
 #define NUM_FRAMEBUFFERS_MIN  2
 #define NUM_FRAMEBUFFERS_MAX  3
@@ -44,6 +45,8 @@
     pthread_mutex_t lock;
     private_handle_t *currentBuffer;
     struct fb_var_screeninfo info;
+    struct mdp_buf_fence fence;
+    struct mdp_display_commit commit;
     struct fb_fix_screeninfo finfo;
     float xdpi;
     float ydpi;
diff --git a/libgralloc/framebuffer.cpp b/libgralloc/framebuffer.cpp
index 0f67b14..522de36 100644
--- a/libgralloc/framebuffer.cpp
+++ b/libgralloc/framebuffer.cpp
@@ -111,7 +111,8 @@
     if (hnd && hnd->flags & private_handle_t::PRIV_FLAGS_FRAMEBUFFER) {
         m->info.activate = FB_ACTIVATE_VBL | FB_ACTIVATE_FORCE;
         m->info.yoffset = hnd->offset / m->finfo.line_length;
-        if (ioctl(m->framebuffer->fd, FBIOPUT_VSCREENINFO, &m->info) == -1) {
+        m->commit.var = m->info;
+        if (ioctl(m->framebuffer->fd, MSMFB_DISPLAY_COMMIT, &m->commit) == -1) {
             ALOGE("%s: FBIOPUT_VSCREENINFO failed for external, err: %s", __FUNCTION__,
                     strerror(errno));
             return -errno;
@@ -152,6 +153,9 @@
     if (fd < 0)
         return -errno;
 
+    memset(&module->fence, 0, sizeof(struct mdp_buf_fence));
+    memset(&module->commit, 0, sizeof(struct mdp_display_commit));
+
     struct fb_fix_screeninfo finfo;
     if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo) == -1)
         return -errno;