Add HWC vsync hook. Currently unused.

Change-Id: I849d56f375813a044c5e2d0b25f791476a60fa01
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index f17bf43..94d0021 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -53,7 +53,9 @@
             if (mHwc->registerProcs) {
                 mCBContext.hwc = this;
                 mCBContext.procs.invalidate = &hook_invalidate;
+                mCBContext.procs.vsync = &hook_vsync;
                 mHwc->registerProcs(mHwc, &mCBContext.procs);
+                memset(mCBContext.procs.zero, 0, sizeof(mCBContext.procs.zero));
             }
         }
     }
@@ -74,10 +76,17 @@
     reinterpret_cast<cb_context *>(procs)->hwc->invalidate();
 }
 
+void HWComposer::hook_vsync(struct hwc_procs* procs, int dpy, int64_t timestamp) {
+    reinterpret_cast<cb_context *>(procs)->hwc->vsync(dpy, timestamp);
+}
+
 void HWComposer::invalidate() {
     mFlinger->repaintEverything();
 }
 
+void HWComposer::vsync(int dpy, int64_t timestamp) {
+}
+
 void HWComposer::setFrameBuffer(EGLDisplay dpy, EGLSurface sur) {
     mDpy = (hwc_display_t)dpy;
     mSur = (hwc_surface_t)sur;
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h
index aa8ebe1..81e7359 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.h
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.h
@@ -72,12 +72,24 @@
             const Vector< sp<LayerBase> >& visibleLayersSortedByZ) const;
 
 private:
+
+    struct callbacks : public hwc_procs_t {
+        // these are here to facilitate the transition when adding
+        // new callbacks (an implementation can check for NULL before
+        // calling a new callback).
+        void (*zero[4])(void);
+    };
+
     struct cb_context {
-        hwc_procs_t procs;
+        callbacks procs;
         HWComposer* hwc;
     };
+
     static void hook_invalidate(struct hwc_procs* procs);
+    static void hook_vsync(struct hwc_procs* procs, int dpy, int64_t timestamp);
+
     void invalidate();
+    void vsync(int dpy, int64_t timestamp);
 
     sp<SurfaceFlinger>      mFlinger;
     hw_module_t const*      mModule;