Revert "fix [2122448] android_native_window_t::setUsage() only reallocates the first buffer"
This reverts commit 486aa963b63e20b7910e1004cebb4f0afabbd80f.
This commit is contained in:
parent
ecda253aed
commit
3910f5467a
|
@ -212,7 +212,7 @@ private:
|
|||
|
||||
|
||||
void setUsage(uint32_t reqUsage);
|
||||
uint32_t getUsage() const;
|
||||
bool getUsage(uint32_t* usage);
|
||||
|
||||
// constants
|
||||
sp<SurfaceComposerClient> mClient;
|
||||
|
@ -227,6 +227,7 @@ private:
|
|||
// protected by mSurfaceLock
|
||||
Rect mSwapRectangle;
|
||||
uint32_t mUsage;
|
||||
int32_t mUsageChanged;
|
||||
|
||||
// protected by mSurfaceLock. These are also used from lock/unlock
|
||||
// but in that case, they must be called form the same thread.
|
||||
|
|
|
@ -361,6 +361,7 @@ void Surface::init()
|
|||
const_cast<uint32_t&>(android_native_window_t::flags) = 0;
|
||||
// be default we request a hardware surface
|
||||
mUsage = GRALLOC_USAGE_HW_RENDER;
|
||||
mUsageChanged = true;
|
||||
mNeedFullUpdate = false;
|
||||
}
|
||||
|
||||
|
@ -498,12 +499,13 @@ int Surface::dequeueBuffer(android_native_buffer_t** buffer)
|
|||
return bufIdx;
|
||||
}
|
||||
|
||||
const uint32_t usage(getUsage());
|
||||
// FIXME: in case of failure below, we need to undo the dequeue
|
||||
|
||||
uint32_t usage;
|
||||
const bool usageChanged = getUsage(&usage);
|
||||
const sp<SurfaceBuffer>& backBuffer(mBuffers[bufIdx]);
|
||||
if (backBuffer == 0 ||
|
||||
uint32_t(backBuffer->usage) != usage ||
|
||||
mSharedBufferClient->needNewBuffer(bufIdx))
|
||||
{
|
||||
if ((backBuffer == 0) || usageChanged ||
|
||||
mSharedBufferClient->needNewBuffer(bufIdx)) {
|
||||
err = getBufferLocked(bufIdx, usage);
|
||||
LOGE_IF(err, "getBufferLocked(%ld, %08x) failed (%s)",
|
||||
bufIdx, usage, strerror(-err));
|
||||
|
@ -598,13 +600,21 @@ int Surface::perform(int operation, va_list args)
|
|||
void Surface::setUsage(uint32_t reqUsage)
|
||||
{
|
||||
Mutex::Autolock _l(mSurfaceLock);
|
||||
mUsage = reqUsage;
|
||||
if (mUsage != reqUsage) {
|
||||
mUsageChanged = true;
|
||||
mUsage = reqUsage;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t Surface::getUsage() const
|
||||
bool Surface::getUsage(uint32_t* usage)
|
||||
{
|
||||
Mutex::Autolock _l(mSurfaceLock);
|
||||
return mUsage;
|
||||
*usage = mUsage;
|
||||
if (mUsageChanged) {
|
||||
mUsageChanged = false;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue