diff options
| -rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.cpp | 9 | ||||
| -rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.h | 14 |
2 files changed, 22 insertions, 1 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index f17bf43bfc..94d0021679 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -53,7 +53,9 @@ HWComposer::HWComposer(const sp<SurfaceFlinger>& flinger) 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 @@ void HWComposer::hook_invalidate(struct hwc_procs* procs) { 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 aa8ebe1fd4..81e735998e 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.h +++ b/services/surfaceflinger/DisplayHardware/HWComposer.h @@ -72,12 +72,24 @@ public: 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; |