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;