Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ac31daa5 authored by Bryce Lee's avatar Bryce Lee Committed by android-build-merger
Browse files

Add method to explicitly create Surface. am: 4e623e25 am: 05e63358

am: e1446df6

Change-Id: Ibc151c3fc1ecefa670f74c316f978849fbf7c6ce
parents f1f31658 e1446df6
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -135,6 +135,7 @@ public:
            const sp<SurfaceControl>& control, Parcel* parcel);
            const sp<SurfaceControl>& control, Parcel* parcel);


    sp<Surface> getSurface() const;
    sp<Surface> getSurface() const;
    sp<Surface> createSurface() const;
    sp<IBinder> getHandle() const;
    sp<IBinder> getHandle() const;


    status_t clearLayerFrameStats() const;
    status_t clearLayerFrameStats() const;
@@ -155,6 +156,7 @@ private:


    ~SurfaceControl();
    ~SurfaceControl();


    sp<Surface> generateSurfaceLocked() const;
    status_t validate() const;
    status_t validate() const;
    void destroy();
    void destroy();


+16 −3
Original line number Original line Diff line number Diff line
@@ -237,17 +237,30 @@ status_t SurfaceControl::writeSurfaceToParcel(
    return parcel->writeStrongBinder(IInterface::asBinder(bp));
    return parcel->writeStrongBinder(IInterface::asBinder(bp));
}
}


sp<Surface> SurfaceControl::getSurface() const
sp<Surface> SurfaceControl::generateSurfaceLocked() const
{
{
    Mutex::Autolock _l(mLock);
    if (mSurfaceData == 0) {
    // This surface is always consumed by SurfaceFlinger, so the
    // This surface is always consumed by SurfaceFlinger, so the
    // producerControlledByApp value doesn't matter; using false.
    // producerControlledByApp value doesn't matter; using false.
    mSurfaceData = new Surface(mGraphicBufferProducer, false);
    mSurfaceData = new Surface(mGraphicBufferProducer, false);

    return mSurfaceData;
}

sp<Surface> SurfaceControl::getSurface() const
{
    Mutex::Autolock _l(mLock);
    if (mSurfaceData == 0) {
        return generateSurfaceLocked();
    }
    }
    return mSurfaceData;
    return mSurfaceData;
}
}


sp<Surface> SurfaceControl::createSurface() const
{
    Mutex::Autolock _l(mLock);
    return generateSurfaceLocked();
}

sp<IBinder> SurfaceControl::getHandle() const
sp<IBinder> SurfaceControl::getHandle() const
{
{
    Mutex::Autolock lock(mLock);
    Mutex::Autolock lock(mLock);