diff options
-rw-r--r-- | include/gui/SurfaceControl.h | 2 | ||||
-rw-r--r-- | libs/gui/SurfaceControl.cpp | 19 |
2 files changed, 18 insertions, 3 deletions
diff --git a/include/gui/SurfaceControl.h b/include/gui/SurfaceControl.h index 712a323337..8bb705cf77 100644 --- a/include/gui/SurfaceControl.h +++ b/include/gui/SurfaceControl.h @@ -135,6 +135,7 @@ public: const sp<SurfaceControl>& control, Parcel* parcel); sp<Surface> getSurface() const; + sp<Surface> createSurface() const; sp<IBinder> getHandle() const; status_t clearLayerFrameStats() const; @@ -155,6 +156,7 @@ private: ~SurfaceControl(); + sp<Surface> generateSurfaceLocked() const; status_t validate() const; void destroy(); diff --git a/libs/gui/SurfaceControl.cpp b/libs/gui/SurfaceControl.cpp index bf8a815fe6..58bd273de6 100644 --- a/libs/gui/SurfaceControl.cpp +++ b/libs/gui/SurfaceControl.cpp @@ -237,17 +237,30 @@ status_t SurfaceControl::writeSurfaceToParcel( return parcel->writeStrongBinder(IInterface::asBinder(bp)); } +sp<Surface> SurfaceControl::generateSurfaceLocked() const +{ + // This surface is always consumed by SurfaceFlinger, so the + // producerControlledByApp value doesn't matter; using false. + mSurfaceData = new Surface(mGraphicBufferProducer, false); + + return mSurfaceData; +} + sp<Surface> SurfaceControl::getSurface() const { Mutex::Autolock _l(mLock); if (mSurfaceData == 0) { - // This surface is always consumed by SurfaceFlinger, so the - // producerControlledByApp value doesn't matter; using false. - mSurfaceData = new Surface(mGraphicBufferProducer, false); + return generateSurfaceLocked(); } return mSurfaceData; } +sp<Surface> SurfaceControl::createSurface() const +{ + Mutex::Autolock _l(mLock); + return generateSurfaceLocked(); +} + sp<IBinder> SurfaceControl::getHandle() const { Mutex::Autolock lock(mLock); |