Changeset 292289 in webkit
- Timestamp:
- Apr 4, 2022, 8:45:40 AM (4 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
Platform/IPC/StreamClientConnection.h (modified) (1 diff)
-
WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp (modified) (5 diffs)
-
WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r292282 r292289 1 2022-04-04 Kimmo Kinnunen <kkinnunen@apple.com> 2 3 RemoteRenderingBackendProxy fails to maintain correct state when gpu process crashes and upon deletion 4 https://bugs.webkit.org/show_bug.cgi?id=238618 5 6 Reviewed by Simon Fraser. 7 8 RemoteRenderingBackendProxy::m_needsWakeUpSemaphoreForDisplayListStream 9 was not reset when proxy would connect to a new gpu process after a crash. 10 RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy() would not 11 remove the GPUConnection::Client registration. 12 13 * Platform/IPC/MessageReceiveQueueMap.cpp: 14 (IPC::MessageReceiveQueueMap::remove): 15 * Platform/IPC/StreamClientConnection.h: 16 * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp: 17 (WebKit::RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy): 18 (WebKit::RemoteRenderingBackendProxy::gpuProcessConnectionDidClose): 19 (WebKit::RemoteRenderingBackendProxy::disconnectGPUProcess): 20 (WebKit::RemoteRenderingBackendProxy::streamConnection): 21 (WebKit::RemoteRenderingBackendProxy::didCreateWakeUpSemaphoreForDisplayListStream): 22 * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h: 23 1 24 2022-04-04 Kimmo Kinnunen <kkinnunen@apple.com> 2 25 -
trunk/Source/WebKit/Platform/IPC/StreamClientConnection.h
r292282 r292289 62 62 StreamConnectionBuffer& streamBuffer() { return m_buffer; } 63 63 void setWakeUpSemaphore(IPC::Semaphore&&); 64 bool hasWakeUpSemaphore() const { return m_wakeUpSemaphore.has_value(); } 64 65 65 66 void setWakeUpMessageHysteresis(unsigned hysteresis) -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp
r292282 r292289 64 64 if (!m_gpuProcessConnection) 65 65 return; 66 67 // Un-register itself as a MessageReceiver.68 m_gpuProcessConnection->messageReceiverMap().removeMessageReceiver(*this);69 70 // Release the RemoteRenderingBackend.71 66 m_gpuProcessConnection->connection().send(Messages::GPUConnectionToWebProcess::ReleaseRenderingBackend(renderingBackendIdentifier()), 0, IPC::SendOption::DispatchMessageEvenWhenWaitingForSyncReply); 67 disconnectGPUProcess(); 72 68 } 73 69 … … 86 82 } 87 83 88 void RemoteRenderingBackendProxy::gpuProcessConnectionDidClose(GPUProcessConnection& previousConnection) 89 { 90 previousConnection.removeClient(*this); 91 previousConnection.messageReceiverMap().removeMessageReceiver(*this); 84 void RemoteRenderingBackendProxy::gpuProcessConnectionDidClose(GPUProcessConnection&) 85 { 86 if (!m_gpuProcessConnection) 87 return; 88 disconnectGPUProcess(); 89 // Note: The cache will call back to this to setup a new connection. 90 m_remoteResourceCacheProxy.remoteResourceCacheWasDestroyed(); 91 } 92 93 void RemoteRenderingBackendProxy::disconnectGPUProcess() 94 { 95 m_gpuProcessConnection->removeClient(*this); 96 m_gpuProcessConnection->messageReceiverMap().removeMessageReceiver(*this); 92 97 m_gpuProcessConnection = nullptr; 93 94 m_remoteResourceCacheProxy.remoteResourceCacheWasDestroyed();95 98 96 99 if (m_destroyGetPixelBufferSharedMemoryTimer.isActive()) … … 99 102 m_renderingUpdateID = { }; 100 103 m_didRenderingUpdateID = { }; 104 m_streamConnection = nullptr; 101 105 } 102 106 … … 412 416 { 413 417 ensureGPUProcessConnection(); 414 if (UNLIKELY( m_needsWakeUpSemaphoreForDisplayListStream))418 if (UNLIKELY(!m_streamConnection->hasWakeUpSemaphore())) 415 419 m_streamConnection->waitForAndDispatchImmediately<Messages::RemoteRenderingBackendProxy::DidCreateWakeUpSemaphoreForDisplayListStream>(renderingBackendIdentifier(), 3_s, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives); 416 420 return *m_streamConnection; … … 423 427 return; 424 428 } 425 426 429 m_streamConnection->setWakeUpSemaphore(WTFMove(semaphore)); 427 m_needsWakeUpSemaphoreForDisplayListStream = false;428 430 } 429 431 -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h
r292282 r292289 160 160 // GPUProcessConnection::Client 161 161 void gpuProcessConnectionDidClose(GPUProcessConnection&) final; 162 162 void disconnectGPUProcess(); 163 163 GPUProcessConnection& ensureGPUProcessConnection(); 164 164 … … 182 182 RenderingUpdateID m_renderingUpdateID; 183 183 RenderingUpdateID m_didRenderingUpdateID; 184 185 bool m_needsWakeUpSemaphoreForDisplayListStream { true };186 184 }; 187 185
Note:
See TracChangeset
for help on using the changeset viewer.