Commit 05709c6b authored by Peng Huang's avatar Peng Huang Committed by Commit Bot

Fix Vulkan Video Failures

The crash in gpu::ImageReaderGLOwner::UpdateTexImage() is because
ImageReaderGLOwner only allows one image ref, SharedImageVideo doesn't
release the image ref when read access is finished. It releases the ref
when the SharedImageVideo is destroyed. Fix the problem by releasing
the image ref in EndReadAccess().

Bug: 1059461
Change-Id: I4ccc509bd48dfd6bb576212df32bd411f521e281
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2096777Reviewed-by: default avatarZhenyao Mo <zmo@chromium.org>
Reviewed-by: default avatarKhushal <khushalsagar@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#748845}
parent 0cb926fc
......@@ -213,11 +213,3 @@ crbug.com/1028975 [ win ] Pixel_PrecisionRoundedCorner [ RetryOnFailure ]
# VP9 appears to not recover correctly after GPU process crashes on Windows.
crbug.com/1033982 [ win nvidia ] Pixel_Video_Context_Loss_VP9 [ RetryOnFailure ]
# Vulkan Video broken on Android
crbug.com/1059724 [ android skia-renderer use-vulkan ] Pixel_Video_MP4 [ Skip ]
crbug.com/1059724 [ android skia-renderer use-vulkan ] Pixel_Video_MP4_FourColors_Aspect_4x3 [ Skip ]
crbug.com/1059724 [ android skia-renderer use-vulkan ] Pixel_Video_MP4_FourColors_Rot_180 [ Skip ]
crbug.com/1059724 [ android skia-renderer use-vulkan ] Pixel_Video_MP4_FourColors_Rot_270 [ Skip ]
crbug.com/1059724 [ android skia-renderer use-vulkan ] Pixel_Video_MP4_FourColors_Rot_90 [ Skip ]
crbug.com/1059724 [ android skia-renderer use-vulkan ] Pixel_Video_VP9 [ Skip ]
......@@ -320,20 +320,19 @@ class SharedImageRepresentationVideoSkiaVk
sk_sp<SkPromiseImageTexture> BeginReadAccess(
std::vector<GrBackendSemaphore>* begin_semaphores,
std::vector<GrBackendSemaphore>* end_semaphores) override {
DCHECK(!scoped_hardware_buffer_);
auto* video_backing = static_cast<SharedImageVideo*>(backing());
DCHECK(video_backing);
auto* stream_texture_sii = video_backing->stream_texture_sii_.get();
// GetAHardwareBuffer() renders the latest image and gets AHardwareBuffer
// from it.
scoped_hardware_buffer_ = stream_texture_sii->GetAHardwareBuffer();
if (!scoped_hardware_buffer_) {
auto* video_backing = static_cast<SharedImageVideo*>(backing());
DCHECK(video_backing);
auto* stream_texture_sii = video_backing->stream_texture_sii_.get();
// GetAHardwareBuffer() renders the latest image and gets AHardwareBuffer
// from it.
scoped_hardware_buffer_ = stream_texture_sii->GetAHardwareBuffer();
if (!scoped_hardware_buffer_) {
LOG(ERROR) << "Failed to get the hardware buffer.";
return nullptr;
}
DCHECK(scoped_hardware_buffer_->buffer());
LOG(ERROR) << "Failed to get the hardware buffer.";
return nullptr;
}
DCHECK(scoped_hardware_buffer_->buffer());
// Wait on the sync fd attached to the buffer to make sure buffer is
// ready before the read. This is done by inserting the sync fd semaphore
......@@ -353,6 +352,7 @@ class SharedImageRepresentationVideoSkiaVk
}
void EndReadAccess() override {
DCHECK(scoped_hardware_buffer_);
DCHECK(end_access_semaphore_ != VK_NULL_HANDLE);
SemaphoreHandle semaphore_handle = vk_implementation()->GetSemaphoreHandle(
......@@ -367,6 +367,7 @@ class SharedImageRepresentationVideoSkiaVk
fence_helper()->EnqueueSemaphoreCleanupForSubmittedWork(
end_access_semaphore_);
end_access_semaphore_ = VK_NULL_HANDLE;
scoped_hardware_buffer_ = nullptr;
}
private:
......
......@@ -2,11 +2,3 @@
-NavigationBrowserTest.HistoryBackCancelPendingNavigationUserGesture/1
-SitePerProcessBrowserTest.*
-TextFragmentAnchorBrowserTest.DisabledOnScriptNavigation/0
# Vulkan Video Broken. https://crbug.com/1059724
-File/MediaTest.Video*
-Http/MediaTest.Video*
-MediaSourceTest.*
-MediaTest.Video*
-MSE_*ClearKey/EncryptedMediaTest.Playback_Encryption*
-P/CompositorImplBrowserTestRefreshRate.VideoPreference/0
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment