From b5cfe6054e593beb2123d8de36f65b3b14e214ff Mon Sep 17 00:00:00 2001 From: Peter Varga Date: Fri, 19 Apr 2024 08:58:26 +0200 Subject: Fix synchronization of skImage in NativeSkiaOutputDevice Wait for SkiaImageRepresentation::ScopedReadAccess::CreateSkImage() completion on UI thread. Amends 663ac447476268998fa7f86b03b32115978dfda4 Pick-to: 6.7 Change-Id: I83c47d65f0e4bf911d45f024cb9c7376ba35b6f1 Reviewed-by: Allan Sandfeld Jensen --- src/core/compositor/native_skia_output_device.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/core/compositor/native_skia_output_device.cpp b/src/core/compositor/native_skia_output_device.cpp index 8f11e5162..708692df7 100644 --- a/src/core/compositor/native_skia_output_device.cpp +++ b/src/core/compositor/native_skia_output_device.cpp @@ -309,11 +309,13 @@ std::vector NativeSkiaOutputDevice::Buffer::takeEndWriteSkia void NativeSkiaOutputDevice::Buffer::createSkImageOnGPUThread() { - if (!m_scopedSkiaReadAccess) + if (!m_scopedSkiaReadAccess) { + m_skImageMutex.unlock(); return; + } - QMutexLocker locker(&m_skImageMutex); m_cachedSkImage = m_scopedSkiaReadAccess->CreateSkImage(m_parent->m_contextState.get()); + m_skImageMutex.unlock(); if (!m_cachedSkImage) qWarning("SKIA: Failed to create SkImage."); } @@ -341,6 +343,7 @@ void NativeSkiaOutputDevice::Buffer::beginPresent() if (!beginSemaphores.empty()) qWarning("SKIA: Unexpected semaphores while reading texture, wait is not implemented."); + m_skImageMutex.tryLock(); m_parent->m_gpuTaskRunner->PostTask(FROM_HERE, base::BindOnce(&NativeSkiaOutputDevice::Buffer::createSkImageOnGPUThread, base::Unretained(this))); @@ -390,6 +393,7 @@ void NativeSkiaOutputDevice::Buffer::consumeFence() sk_sp NativeSkiaOutputDevice::Buffer::skImage() { + QMutexLocker locker(&m_skImageMutex); return m_cachedSkImage; } #if defined(USE_OZONE) -- cgit v1.2.3