Title: [292289] trunk/Source/WebKit
- Revision
- 292289
- Author
- [email protected]
- Date
- 2022-04-04 08:45:40 -0700 (Mon, 04 Apr 2022)
Log Message
RemoteRenderingBackendProxy fails to maintain correct state when gpu process crashes and upon deletion
https://bugs.webkit.org/show_bug.cgi?id=238618
Patch by Kimmo Kinnunen <[email protected]> on 2022-04-04
Reviewed by Simon Fraser.
RemoteRenderingBackendProxy::m_needsWakeUpSemaphoreForDisplayListStream
was not reset when proxy would connect to a new gpu process after a crash.
RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy() would not
remove the GPUConnection::Client registration.
* Platform/IPC/MessageReceiveQueueMap.cpp:
(IPC::MessageReceiveQueueMap::remove):
* Platform/IPC/StreamClientConnection.h:
* WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
(WebKit::RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy):
(WebKit::RemoteRenderingBackendProxy::gpuProcessConnectionDidClose):
(WebKit::RemoteRenderingBackendProxy::disconnectGPUProcess):
(WebKit::RemoteRenderingBackendProxy::streamConnection):
(WebKit::RemoteRenderingBackendProxy::didCreateWakeUpSemaphoreForDisplayListStream):
* WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (292288 => 292289)
--- trunk/Source/WebKit/ChangeLog 2022-04-04 15:40:24 UTC (rev 292288)
+++ trunk/Source/WebKit/ChangeLog 2022-04-04 15:45:40 UTC (rev 292289)
@@ -1,5 +1,28 @@
2022-04-04 Kimmo Kinnunen <[email protected]>
+ RemoteRenderingBackendProxy fails to maintain correct state when gpu process crashes and upon deletion
+ https://bugs.webkit.org/show_bug.cgi?id=238618
+
+ Reviewed by Simon Fraser.
+
+ RemoteRenderingBackendProxy::m_needsWakeUpSemaphoreForDisplayListStream
+ was not reset when proxy would connect to a new gpu process after a crash.
+ RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy() would not
+ remove the GPUConnection::Client registration.
+
+ * Platform/IPC/MessageReceiveQueueMap.cpp:
+ (IPC::MessageReceiveQueueMap::remove):
+ * Platform/IPC/StreamClientConnection.h:
+ * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
+ (WebKit::RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy):
+ (WebKit::RemoteRenderingBackendProxy::gpuProcessConnectionDidClose):
+ (WebKit::RemoteRenderingBackendProxy::disconnectGPUProcess):
+ (WebKit::RemoteRenderingBackendProxy::streamConnection):
+ (WebKit::RemoteRenderingBackendProxy::didCreateWakeUpSemaphoreForDisplayListStream):
+ * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
+
+2022-04-04 Kimmo Kinnunen <[email protected]>
+
StreamClientConnection should have waitForAndDispatchImmediately
https://bugs.webkit.org/show_bug.cgi?id=238622
Modified: trunk/Source/WebKit/Platform/IPC/StreamClientConnection.h (292288 => 292289)
--- trunk/Source/WebKit/Platform/IPC/StreamClientConnection.h 2022-04-04 15:40:24 UTC (rev 292288)
+++ trunk/Source/WebKit/Platform/IPC/StreamClientConnection.h 2022-04-04 15:45:40 UTC (rev 292289)
@@ -61,6 +61,7 @@
StreamConnectionBuffer& streamBuffer() { return m_buffer; }
void setWakeUpSemaphore(IPC::Semaphore&&);
+ bool hasWakeUpSemaphore() const { return m_wakeUpSemaphore.has_value(); }
void setWakeUpMessageHysteresis(unsigned hysteresis)
{
Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp (292288 => 292289)
--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp 2022-04-04 15:40:24 UTC (rev 292288)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp 2022-04-04 15:45:40 UTC (rev 292289)
@@ -63,12 +63,8 @@
{
if (!m_gpuProcessConnection)
return;
-
- // Un-register itself as a MessageReceiver.
- m_gpuProcessConnection->messageReceiverMap().removeMessageReceiver(*this);
-
- // Release the RemoteRenderingBackend.
m_gpuProcessConnection->connection().send(Messages::GPUConnectionToWebProcess::ReleaseRenderingBackend(renderingBackendIdentifier()), 0, IPC::SendOption::DispatchMessageEvenWhenWaitingForSyncReply);
+ disconnectGPUProcess();
}
GPUProcessConnection& RemoteRenderingBackendProxy::ensureGPUProcessConnection()
@@ -85,19 +81,27 @@
return *m_gpuProcessConnection;
}
-void RemoteRenderingBackendProxy::gpuProcessConnectionDidClose(GPUProcessConnection& previousConnection)
+void RemoteRenderingBackendProxy::gpuProcessConnectionDidClose(GPUProcessConnection&)
{
- previousConnection.removeClient(*this);
- previousConnection.messageReceiverMap().removeMessageReceiver(*this);
+ if (!m_gpuProcessConnection)
+ return;
+ disconnectGPUProcess();
+ // Note: The cache will call back to this to setup a new connection.
+ m_remoteResourceCacheProxy.remoteResourceCacheWasDestroyed();
+}
+
+void RemoteRenderingBackendProxy::disconnectGPUProcess()
+{
+ m_gpuProcessConnection->removeClient(*this);
+ m_gpuProcessConnection->messageReceiverMap().removeMessageReceiver(*this);
m_gpuProcessConnection = nullptr;
- m_remoteResourceCacheProxy.remoteResourceCacheWasDestroyed();
-
if (m_destroyGetPixelBufferSharedMemoryTimer.isActive())
m_destroyGetPixelBufferSharedMemoryTimer.stop();
m_getPixelBufferSharedMemory = nullptr;
m_renderingUpdateID = { };
m_didRenderingUpdateID = { };
+ m_streamConnection = nullptr;
}
RemoteRenderingBackendProxy::DidReceiveBackendCreationResult RemoteRenderingBackendProxy::waitForDidCreateImageBufferBackend()
@@ -411,7 +415,7 @@
IPC::StreamClientConnection& RemoteRenderingBackendProxy::streamConnection()
{
ensureGPUProcessConnection();
- if (UNLIKELY(m_needsWakeUpSemaphoreForDisplayListStream))
+ if (UNLIKELY(!m_streamConnection->hasWakeUpSemaphore()))
m_streamConnection->waitForAndDispatchImmediately<Messages::RemoteRenderingBackendProxy::DidCreateWakeUpSemaphoreForDisplayListStream>(renderingBackendIdentifier(), 3_s, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives);
return *m_streamConnection;
}
@@ -422,9 +426,7 @@
ASSERT_NOT_REACHED();
return;
}
-
m_streamConnection->setWakeUpSemaphore(WTFMove(semaphore));
- m_needsWakeUpSemaphoreForDisplayListStream = false;
}
bool RemoteRenderingBackendProxy::isCached(const ImageBuffer& imageBuffer) const
Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h (292288 => 292289)
--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h 2022-04-04 15:40:24 UTC (rev 292288)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h 2022-04-04 15:45:40 UTC (rev 292289)
@@ -159,7 +159,7 @@
// GPUProcessConnection::Client
void gpuProcessConnectionDidClose(GPUProcessConnection&) final;
-
+ void disconnectGPUProcess();
GPUProcessConnection& ensureGPUProcessConnection();
// Returns std::nullopt if no update is needed or allocation failed.
@@ -181,8 +181,6 @@
RenderingUpdateID m_renderingUpdateID;
RenderingUpdateID m_didRenderingUpdateID;
-
- bool m_needsWakeUpSemaphoreForDisplayListStream { true };
};
} // namespace WebKit
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes