Bug 1155498 - Part 4 - Use new FenceHandle to handle the fence in TextureClient. r=sotaro

--HG--
extra : rebase_source : 06a799fbabfccd00c4baf7b9d98c967b4432bb73
This commit is contained in:
Ethan Lin 2015-05-13 01:42:00 +02:00
Родитель cdc345235c
Коммит 7980550521
6 изменённых файлов: 20 добавлений и 26 удалений

Просмотреть файл

@ -194,9 +194,7 @@ SharedSurface_Gralloc::Fence()
int fenceFd = mEGL->fDupNativeFenceFDANDROID(mEGL->Display(), sync);
if (fenceFd != -1) {
mEGL->fDestroySync(mEGL->Display(), sync);
android::sp<android::Fence> fence(new android::Fence(fenceFd));
FenceHandle handle = FenceHandle(fence);
mTextureClient->SetAcquireFenceHandle(handle);
mTextureClient->SetAcquireFenceHandle(FenceHandle(new FenceHandle::FdObj(fenceFd)));
} else {
mSync = sync;
}

Просмотреть файл

@ -428,17 +428,19 @@ public:
*/
void ForceRemove(bool sync = false);
virtual void SetReleaseFenceHandle(FenceHandle aReleaseFenceHandle)
virtual void SetReleaseFenceHandle(const FenceHandle& aReleaseFenceHandle)
{
mReleaseFenceHandle.Merge(aReleaseFenceHandle);
}
const FenceHandle& GetReleaseFenceHandle() const
FenceHandle GetAndResetReleaseFenceHandle()
{
return mReleaseFenceHandle;
FenceHandle fence;
mReleaseFenceHandle.TransferToAnotherFenceHandle(fence);
return fence;
}
virtual void SetAcquireFenceHandle(FenceHandle aAcquireFenceHandle)
virtual void SetAcquireFenceHandle(const FenceHandle& aAcquireFenceHandle)
{
mAcquireFenceHandle = aAcquireFenceHandle;
}

Просмотреть файл

@ -91,7 +91,8 @@ GrallocTextureClientOGL::WaitForBufferOwnership(bool aWaitReleaseFence)
#if defined(MOZ_WIDGET_GONK) && ANDROID_VERSION >= 17
if (mReleaseFenceHandle.IsValid()) {
android::sp<Fence> fence = mReleaseFenceHandle.mFence;
nsRefPtr<FenceHandle::FdObj> fdObj = mReleaseFenceHandle.GetAndResetFdObj();
android::sp<Fence> fence = new Fence(fdObj->GetAndResetFd());
#if ANDROID_VERSION == 17
fence->waitForever(1000, "GrallocTextureClientOGL::Lock");
// 1000 is what Android uses. It is a warning timeout in ms.
@ -130,14 +131,10 @@ GrallocTextureClientOGL::Lock(OpenMode aMode)
usage |= GRALLOC_USAGE_SW_WRITE_OFTEN;
}
#if defined(MOZ_WIDGET_GONK) && ANDROID_VERSION >= 21
android::sp<Fence> fence = android::Fence::NO_FENCE;
if (mReleaseFenceHandle.IsValid()) {
fence = mReleaseFenceHandle.mFence;
}
mReleaseFenceHandle = FenceHandle();
nsRefPtr<FenceHandle::FdObj> fdObj = mReleaseFenceHandle.GetAndResetFdObj();
int32_t rv = mGraphicBuffer->lockAsync(usage,
reinterpret_cast<void**>(&mMappedBuffer),
fence->dup());
fdObj->GetAndResetFd());
#else
int32_t rv = mGraphicBuffer->lock(usage,
reinterpret_cast<void**>(&mMappedBuffer));

Просмотреть файл

@ -146,10 +146,9 @@ void GonkNativeWindow::returnBuffer(TextureClient* client) {
if (index < 0) {
}
sp<Fence> fence = client->GetReleaseFenceHandle().mFence;
if (!fence.get()) {
fence = Fence::NO_FENCE;
}
FenceHandle handle = client->GetAndResetReleaseFenceHandle();
nsRefPtr<FenceHandle::FdObj> fdObj = handle.GetAndResetFdObj();
sp<Fence> fence = new Fence(fdObj->GetAndResetFd());
addReleaseFenceLocked(index, fence);

Просмотреть файл

@ -146,10 +146,9 @@ void GonkNativeWindow::returnBuffer(TextureClient* client) {
if (index < 0) {
}
sp<Fence> fence = client->GetReleaseFenceHandle().mFence;
if (!fence.get()) {
fence = Fence::NO_FENCE;
}
FenceHandle handle = client->GetAndResetReleaseFenceHandle();
nsRefPtr<FenceHandle::FdObj> fdObj = handle.GetAndResetFdObj();
sp<Fence> fence = new Fence(fdObj->GetAndResetFd());
addReleaseFenceLocked(index,
mSlots[index].mGraphicBuffer,

Просмотреть файл

@ -158,10 +158,9 @@ void GonkNativeWindow::returnBuffer(TextureClient* client) {
return;
}
sp<Fence> fence = client->GetReleaseFenceHandle().mFence;
if (!fence.get()) {
fence = Fence::NO_FENCE;
}
FenceHandle handle = client->GetAndResetReleaseFenceHandle();
nsRefPtr<FenceHandle::FdObj> fdObj = handle.GetAndResetFdObj();
sp<Fence> fence = new Fence(fdObj->GetAndResetFd());
status_t err;
err = addReleaseFenceLocked(index,