зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
cdc345235c
Коммит
7980550521
|
@ -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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче