Bug 1670148 - Fix release fence handling at AsyncImagePipelineManager on Android r=jnicol
By Bug 1661189, AndroidHardwareBuffer owning TextureHosts became to be stored in mTextureHostsUntilRenderSubmitted. AndroidHardwareBuffer usage is not enabled on gecko. Differential Revision: https://phabricator.services.mozilla.com/D93050
This commit is contained in:
@@ -631,6 +631,20 @@ void AsyncImagePipelineManager::ProcessPipelineRendered(
|
||||
holder->mTextureHostsUntilRenderSubmitted.begin(),
|
||||
holder->mTextureHostsUntilRenderSubmitted.end(),
|
||||
[&aEpoch](const auto& entry) { return aEpoch <= entry.mEpoch; });
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
// Set release fence if TextureHost owns AndroidHardwareBuffer.
|
||||
// The TextureHost handled by mTextureHostsUntilRenderSubmitted instead of
|
||||
// mTextureHostsUntilRenderCompleted, since android fence could be used
|
||||
// to wait until its end of usage by GPU.
|
||||
for (auto it = holder->mTextureHostsUntilRenderSubmitted.begin();
|
||||
it != firstSubmittedHostToKeep; ++it) {
|
||||
const auto& entry = it;
|
||||
if (entry->mTexture->GetAndroidHardwareBuffer()) {
|
||||
ipc::FileDescriptor fenceFd = mReleaseFenceFd;
|
||||
entry->mTexture->SetReleaseFence(std::move(fenceFd));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
holder->mTextureHostsUntilRenderSubmitted.erase(
|
||||
holder->mTextureHostsUntilRenderSubmitted.begin(),
|
||||
firstSubmittedHostToKeep);
|
||||
@@ -698,19 +712,6 @@ void AsyncImagePipelineManager::ProcessPipelineRemoved(
|
||||
void AsyncImagePipelineManager::CheckForTextureHostsNotUsedByGPU() {
|
||||
uint64_t lastCompletedFrameId = mLastCompletedFrameId;
|
||||
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
// Set release fence if TextureHost owns AndroidHardwareBuffer.
|
||||
for (auto& it : mTexturesInUseByGPU) {
|
||||
auto& textures = it.second;
|
||||
for (auto& texture : textures) {
|
||||
if (texture->mTexture->GetAndroidHardwareBuffer()) {
|
||||
ipc::FileDescriptor fenceFd = mReleaseFenceFd;
|
||||
texture->mTexture->SetReleaseFence(std::move(fenceFd));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Find first entry after mLastCompletedFrameId and release all prior ones.
|
||||
auto firstTexturesToKeep =
|
||||
std::find_if(mTexturesInUseByGPU.begin(), mTexturesInUseByGPU.end(),
|
||||
|
||||
Reference in New Issue
Block a user