diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 5a0f115ca..fde68f6e0 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -804,7 +804,7 @@ Layer::ClientRef::Access::~Access() Layer::BufferManager::BufferManager(TextureManager& tm) : mNumBuffers(NUM_BUFFERS), mTextureManager(tm), - mActiveBuffer(-1), mFailover(false) + mActiveBufferIndex(-1), mFailover(false) { } @@ -819,10 +819,10 @@ status_t Layer::BufferManager::resize(size_t size, if (size < mNumBuffers) { // Move the active texture into slot 0 - BufferData activeBufferData = mBufferData[mActiveBuffer]; - mBufferData[mActiveBuffer] = mBufferData[0]; + BufferData activeBufferData = mBufferData[mActiveBufferIndex]; + mBufferData[mActiveBufferIndex] = mBufferData[0]; mBufferData[0] = activeBufferData; - mActiveBuffer = 0; + mActiveBufferIndex = 0; // Free the buffers that are no longer needed. for (size_t i = size; i < mNumBuffers; i++) { @@ -868,37 +868,33 @@ sp Layer::BufferManager::getBuffer(size_t index) const { } status_t Layer::BufferManager::setActiveBufferIndex(size_t index) { - mActiveBuffer = index; + BufferData const * const buffers = mBufferData; + Mutex::Autolock _l(mLock); + mActiveBuffer = buffers[index].buffer; + mActiveBufferIndex = index; return NO_ERROR; } size_t Layer::BufferManager::getActiveBufferIndex() const { - return mActiveBuffer; + return mActiveBufferIndex; } Texture Layer::BufferManager::getActiveTexture() const { Texture res; - if (mFailover || mActiveBuffer<0) { + if (mFailover || mActiveBufferIndex<0) { res = mFailoverTexture; } else { - static_cast(res) = mBufferData[mActiveBuffer].texture; + static_cast(res) = mBufferData[mActiveBufferIndex].texture; } return res; } sp Layer::BufferManager::getActiveBuffer() const { - sp result; - const ssize_t activeBuffer = mActiveBuffer; - if (activeBuffer >= 0) { - BufferData const * const buffers = mBufferData; - Mutex::Autolock _l(mLock); - result = buffers[activeBuffer].buffer; - } - return result; + return mActiveBuffer; } bool Layer::BufferManager::hasActiveBuffer() const { - return mActiveBuffer >= 0; + return mActiveBufferIndex >= 0; } sp Layer::BufferManager::detachBuffer(size_t index) @@ -943,7 +939,7 @@ status_t Layer::BufferManager::initEglImage(EGLDisplay dpy, const sp& buffer) { status_t err = NO_INIT; - ssize_t index = mActiveBuffer; + ssize_t index = mActiveBufferIndex; if (index >= 0) { if (!mFailover) { Image& texture(mBufferData[index].texture); diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index c367a8dfe..5444d2f19 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -164,7 +164,8 @@ private: size_t mNumBuffers; Texture mFailoverTexture; TextureManager& mTextureManager; - ssize_t mActiveBuffer; + ssize_t mActiveBufferIndex; + sp mActiveBuffer; bool mFailover; static status_t destroyTexture(Image* tex, EGLDisplay dpy);