Changeset 268637 in webkit
- Timestamp:
- Oct 16, 2020 11:46:25 PM (3 years ago)
- Location:
- trunk/Source
- Files:
-
- 16 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r268635 r268637 1 2020-10-16 Said Abou-Hallawa <sabouhallawa@apple.com> 2 3 [GPU Process] Introduce RemoteResourceCache to manage the resources in the GPU Process 4 https://bugs.webkit.org/show_bug.cgi?id=217554 5 6 Reviewed by Simon Fraser. 7 8 Add a new virtual method named ImageBuffer::flushDisplayList() which 9 applies a DisplayList to the ImageBuffer::context(). 10 11 * platform/graphics/ImageBuffer.h: 12 (WebCore::ImageBuffer::flushDisplayList): 13 1 14 2020-10-16 Devin Rousso <drousso@apple.com> 2 15 -
trunk/Source/WebCore/platform/graphics/ImageBuffer.h
r267615 r268637 34 34 35 35 namespace DisplayList { 36 class DisplayList; 36 37 class DrawingContext; 37 38 } … … 65 66 virtual DisplayList::DrawingContext* drawingContext() { return nullptr; } 66 67 virtual void flushDrawingContext() { } 68 virtual void flushDisplayList(const DisplayList::DisplayList&) { } 67 69 68 70 virtual AffineTransform baseTransform() const = 0; -
trunk/Source/WebKit/ChangeLog
r268636 r268637 1 2020-10-16 Said Abou-Hallawa <sabouhallawa@apple.com> 2 3 [GPU Process] Introduce RemoteResourceCacheProxy to manage the resources in the GPU Process 4 https://bugs.webkit.org/show_bug.cgi?id=217554 5 6 Reviewed by Simon Fraser. 7 8 RemoteResourceCache will be responsible for caching the remote resources. 9 RemoteRenderingBackend will delegate all the resource caching to its 10 RemoteResourceCache. 11 12 We can get rid of RemoteImageBufferMessageHandler because all it does is 13 is sending messages to WebProcess. Removing it will simplify the interface 14 of RemoteImageBuffer. Sending the messages will be moved to RemoteRenderingBackend. 15 16 Rename flushDrawingContext() to flushDisplayList() because the name is 17 confusing. This function flushes a DisplayList to the context. No 18 DrawingContext is involved here and there is another function with the 19 same name which does not take any argument. 20 21 Rename ImageBufferFlushIdentifier to DisplayListFlushIdentifier to make 22 more general name and be ready for GPU DOM rendering. 23 24 Rename the RemoteRenderingBackendProxy messages: CreateImageBufferBackend 25 and CommitImageBufferFlushContext to be ImageBufferBackendWasCreated and 26 FlushDisplayListWasCommitted. We need to include passive verbs in them to 27 reflect that the actions were taken place in the GPU Process. They are 28 sent only to inform the Web Process with the current state. 29 30 * GPUProcess/graphics/RemoteImageBuffer.h: 31 (WebKit::RemoteImageBuffer::RemoteImageBuffer): 32 (WebKit::RemoteImageBuffer::apply): 33 * GPUProcess/graphics/RemoteRenderingBackend.cpp: 34 (WebKit::RemoteRenderingBackend::gpuConnectionToWebProcess const): 35 (WebKit::RemoteRenderingBackend::imageBufferBackendWasCreated): 36 (WebKit::RemoteRenderingBackend::flushDisplayListWasCommitted): 37 (WebKit::RemoteRenderingBackend::createImageBuffer): 38 (WebKit::RemoteRenderingBackend::flushDisplayList): 39 (WebKit::RemoteRenderingBackend::flushDisplayListAndCommit): 40 (WebKit::RemoteRenderingBackend::getImageData): 41 We should call the completion handler even if the ImageBuffer was not found. 42 43 (WebKit::RemoteRenderingBackend::releaseRemoteResource): 44 (WebKit::RemoteRenderingBackend::flushImageBufferDrawingContext): Deleted. 45 (WebKit::RemoteRenderingBackend::flushImageBufferDrawingContextAndCommit): Deleted. 46 * GPUProcess/graphics/RemoteRenderingBackend.h: 47 (WebKit::RemoteRenderingBackend::renderingBackendIdentifier const): Deleted. 48 * GPUProcess/graphics/RemoteRenderingBackend.messages.in: 49 * GPUProcess/graphics/RemoteResourceCache.cpp: Renamed from Source/WebKit/GPUProcess/graphics/RemoteImageBufferMessageHandler.cpp. 50 (WebKit::RemoteResourceCache::cacheImageBuffer): 51 (WebKit::RemoteResourceCache::cachedImageBuffer): 52 (WebKit::RemoteResourceCache::releaseRemoteResource): 53 * GPUProcess/graphics/RemoteResourceCache.h: Renamed from Source/WebKit/GPUProcess/graphics/RemoteImageBufferMessageHandler.h. 54 * Scripts/webkit/messages.py: 55 * Sources.txt: 56 * WebKit.xcodeproj/project.pbxproj: 57 * WebProcess/GPU/graphics/DisplayListFlushIdentifier.h: Renamed from Source/WebKit/WebProcess/GPU/graphics/ImageBufferFlushIdentifier.h. 58 * WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.cpp: 59 (WebKit::RemoteImageBufferMessageHandlerProxy::waitForImageBufferBackendWasCreated): 60 (WebKit::RemoteImageBufferMessageHandlerProxy::waitForFlushDisplayListWasCommitted): 61 (WebKit::RemoteImageBufferMessageHandlerProxy::flushDisplayList): 62 (WebKit::RemoteImageBufferMessageHandlerProxy::flushDisplayListAndWaitCommit): 63 (WebKit::RemoteImageBufferMessageHandlerProxy::commitFlushContext): 64 (WebKit::RemoteImageBufferMessageHandlerProxy::waitForCreateImageBufferBackend): Deleted. 65 (WebKit::RemoteImageBufferMessageHandlerProxy::waitForCommitImageBufferFlushContext): Deleted. 66 (WebKit::RemoteImageBufferMessageHandlerProxy::flushDrawingContext): Deleted. 67 (WebKit::RemoteImageBufferMessageHandlerProxy::flushDrawingContextAndWaitCommit): Deleted. 68 * WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.h: 69 * WebProcess/GPU/graphics/RemoteImageBufferProxy.h: 70 * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp: 71 (WebKit::RemoteRenderingBackendProxy::waitForImageBufferBackendWasCreated): 72 (WebKit::RemoteRenderingBackendProxy::waitForFlushDisplayListWasCommitted): 73 (WebKit::RemoteRenderingBackendProxy::imageBufferBackendWasCreated): 74 (WebKit::RemoteRenderingBackendProxy::flushDisplayListWasCommitted): 75 (WebKit::RemoteRenderingBackendProxy::waitForCreateImageBufferBackend): Deleted. 76 (WebKit::RemoteRenderingBackendProxy::waitForCommitImageBufferFlushContext): Deleted. 77 (WebKit::RemoteRenderingBackendProxy::createImageBufferBackend): Deleted. 78 (WebKit::RemoteRenderingBackendProxy::commitImageBufferFlushContext): Deleted. 79 * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h: 80 * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in: 81 1 82 2020-10-16 Wenson Hsieh <wenson_hsieh@apple.com> 2 83 -
trunk/Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h
r268612 r268637 29 29 30 30 #include "GPUConnectionToWebProcess.h" 31 #include "RemoteImageBufferMessageHandlerProxy.h"32 31 #include <WebCore/ConcreteImageBuffer.h> 33 32 #include <WebCore/DisplayListReplayer.h> … … 36 35 37 36 template<typename BackendType> 38 class RemoteImageBuffer : public WebCore::ConcreteImageBuffer<BackendType>, public RemoteImageBufferMessageHandler, publicWebCore::DisplayList::Replayer::Delegate {37 class RemoteImageBuffer : public WebCore::ConcreteImageBuffer<BackendType>, public WebCore::DisplayList::Replayer::Delegate { 39 38 using BaseConcreteImageBuffer = WebCore::ConcreteImageBuffer<BackendType>; 40 39 using BaseConcreteImageBuffer::context; 41 40 using BaseConcreteImageBuffer::m_backend; 41 using BaseConcreteImageBuffer::putImageData; 42 42 43 43 public: … … 49 49 RemoteImageBuffer(std::unique_ptr<BackendType>&& backend, RemoteRenderingBackend& remoteRenderingBackend, WebCore::RemoteResourceIdentifier remoteResourceIdentifier) 50 50 : BaseConcreteImageBuffer(WTFMove(backend)) 51 , RemoteImageBufferMessageHandler(remoteRenderingBackend, remoteResourceIdentifier)51 , m_remoteRenderingBackend(remoteRenderingBackend) 52 52 { 53 createBackend(m_backend->logicalSize(), m_backend->backendSize(), m_backend->resolutionScale(), m_backend->colorSpace(), m_backend->createImageBufferBackendHandle());53 m_remoteRenderingBackend.imageBufferBackendWasCreated(m_backend->logicalSize(), m_backend->backendSize(), m_backend->resolutionScale(), m_backend->colorSpace(), m_backend->createImageBufferBackendHandle(), remoteResourceIdentifier); 54 54 } 55 55 … … 63 63 64 64 private: 65 using BaseConcreteImageBuffer::flushDrawingContext; 66 using BaseConcreteImageBuffer::putImageData; 67 68 void flushDrawingContext(const WebCore::DisplayList::DisplayList& displayList) override 65 void flushDisplayList(const WebCore::DisplayList::DisplayList& displayList) override 69 66 { 70 67 if (displayList.itemCount()) { … … 72 69 replayer.replay(); 73 70 } 74 }75 76 void flushDrawingContextAndCommit(const WebCore::DisplayList::DisplayList& displayList, ImageBufferFlushIdentifier flushIdentifier) override77 {78 flushDrawingContext(displayList);79 m_backend->flushContext();80 commitFlushContext(flushIdentifier);81 }82 83 RefPtr<WebCore::ImageData> getImageData(WebCore::AlphaPremultiplication outputFormat, const WebCore::IntRect& srcRect) const override84 {85 return BaseConcreteImageBuffer::getImageData(outputFormat, srcRect);86 71 } 87 72 … … 104 89 void apply(WebCore::DisplayList::PaintFrameForMedia& item, WebCore::GraphicsContext& context) 105 90 { 106 auto process = backend().gpuConnectionToWebProcess();91 auto process = m_remoteRenderingBackend.gpuConnectionToWebProcess(); 107 92 if (!process) 108 93 return; … … 118 103 context.paintFrameForMedia(*player, item.destination()); 119 104 } 105 106 RemoteRenderingBackend& m_remoteRenderingBackend; 120 107 }; 121 108 -
trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp
r268612 r268637 32 32 #include "PlatformRemoteImageBuffer.h" 33 33 #include "RemoteRenderingBackendMessages.h" 34 #include "RemoteRenderingBackendProxyMessages.h" 34 35 35 36 namespace WebKit { … … 55 56 } 56 57 58 GPUConnectionToWebProcess* RemoteRenderingBackend::gpuConnectionToWebProcess() const 59 { 60 return m_gpuConnectionToWebProcess.get(); 61 } 62 57 63 IPC::Connection* RemoteRenderingBackend::messageSenderConnection() const 58 64 { … … 67 73 } 68 74 75 void RemoteRenderingBackend::imageBufferBackendWasCreated(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, ImageBufferBackendHandle handle, RemoteResourceIdentifier remoteResourceIdentifier) 76 { 77 send(Messages::RemoteRenderingBackendProxy::ImageBufferBackendWasCreated(logicalSize, backendSize, resolutionScale, colorSpace, WTFMove(handle), remoteResourceIdentifier), m_renderingBackendIdentifier); 78 } 79 80 void RemoteRenderingBackend::flushDisplayListWasCommitted(DisplayListFlushIdentifier flushIdentifier, RemoteResourceIdentifier remoteResourceIdentifier) 81 { 82 send(Messages::RemoteRenderingBackendProxy::FlushDisplayListWasCommitted(flushIdentifier, remoteResourceIdentifier), m_renderingBackendIdentifier); 83 } 84 69 85 void RemoteRenderingBackend::createImageBuffer(const FloatSize& logicalSize, RenderingMode renderingMode, float resolutionScale, ColorSpace colorSpace, WebCore::RemoteResourceIdentifier remoteResourceIdentifier) 70 86 { 71 auto* gpuConnectionToWebProcess = m_gpuConnectionToWebProcess.get(); 72 if (!gpuConnectionToWebProcess) 87 ASSERT(renderingMode == RenderingMode::RemoteAccelerated || renderingMode == RenderingMode::RemoteUnaccelerated); 88 89 std::unique_ptr<WebCore::ImageBuffer> image; 90 91 if (renderingMode == RenderingMode::RemoteAccelerated) 92 image = AcceleratedRemoteImageBuffer::create(logicalSize, resolutionScale, colorSpace, *this, remoteResourceIdentifier); 93 94 if (!image) 95 image = UnacceleratedRemoteImageBuffer::create(logicalSize, resolutionScale, colorSpace, *this, remoteResourceIdentifier); 96 97 if (image) { 98 m_remoteResourceCache.cacheImageBuffer(remoteResourceIdentifier, WTFMove(image)); 73 99 return; 74 75 if (m_imageBufferMessageHandlerMap.contains(remoteResourceIdentifier)) {76 ASSERT_NOT_REACHED();77 return;78 }79 80 if (renderingMode == RenderingMode::RemoteAccelerated) {81 if (auto imageBuffer = AcceleratedRemoteImageBuffer::create(logicalSize, resolutionScale, colorSpace, *this, remoteResourceIdentifier)) {82 m_imageBufferMessageHandlerMap.add(remoteResourceIdentifier, WTFMove(imageBuffer));83 return;84 }85 }86 87 if (renderingMode == RenderingMode::RemoteAccelerated || renderingMode == RenderingMode::RemoteUnaccelerated) {88 if (auto imageBuffer = UnacceleratedRemoteImageBuffer::create(logicalSize, resolutionScale, colorSpace, *this, remoteResourceIdentifier)) {89 m_imageBufferMessageHandlerMap.add(remoteResourceIdentifier, WTFMove(imageBuffer));90 return;91 }92 100 } 93 101 … … 95 103 } 96 104 97 void RemoteRenderingBackend:: releaseRemoteResource(RemoteResourceIdentifier remoteResourceIdentifier)105 void RemoteRenderingBackend::flushDisplayList(const WebCore::DisplayList::DisplayList& displayList, RemoteResourceIdentifier remoteResourceIdentifier) 98 106 { 99 // CreateImageBuffer message should have been received before this one. 100 bool found = m_imageBufferMessageHandlerMap.remove(remoteResourceIdentifier); 101 ASSERT_UNUSED(found, found); 107 if (auto imageBuffer = m_remoteResourceCache.cachedImageBuffer(remoteResourceIdentifier)) 108 imageBuffer->flushDisplayList(displayList); 109 } 110 111 void RemoteRenderingBackend::flushDisplayListAndCommit(const WebCore::DisplayList::DisplayList& displayList, DisplayListFlushIdentifier flushIdentifier, RemoteResourceIdentifier remoteResourceIdentifier) 112 { 113 if (auto imageBuffer = m_remoteResourceCache.cachedImageBuffer(remoteResourceIdentifier)) { 114 imageBuffer->flushDisplayList(displayList); 115 imageBuffer->flushContext(); 116 flushDisplayListWasCommitted(flushIdentifier, remoteResourceIdentifier); 117 } 102 118 } 103 119 104 120 void RemoteRenderingBackend::getImageData(WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, RemoteResourceIdentifier remoteResourceIdentifier, CompletionHandler<void(IPC::ImageDataReference&&)>&& completionHandler) 105 121 { 106 if (auto imageBuffer = m_imageBufferMessageHandlerMap.get(remoteResourceIdentifier)) {107 auto imageData = imageBuffer->getImageData(outputFormat, srcRect);108 completionHandler(IPC::ImageDataReference(WTFMove(imageData)));109 }122 RefPtr<ImageData> imageData; 123 if (auto imageBuffer = m_remoteResourceCache.cachedImageBuffer(remoteResourceIdentifier)) 124 imageData = imageBuffer->getImageData(outputFormat, srcRect); 125 completionHandler(IPC::ImageDataReference(WTFMove(imageData))); 110 126 } 111 127 112 void RemoteRenderingBackend:: flushImageBufferDrawingContext(const WebCore::DisplayList::DisplayList& displayList,RemoteResourceIdentifier remoteResourceIdentifier)128 void RemoteRenderingBackend::releaseRemoteResource(RemoteResourceIdentifier remoteResourceIdentifier) 113 129 { 114 if (auto imageBuffer = m_imageBufferMessageHandlerMap.get(remoteResourceIdentifier)) 115 imageBuffer->flushDrawingContext(displayList); 116 } 117 118 void RemoteRenderingBackend::flushImageBufferDrawingContextAndCommit(const WebCore::DisplayList::DisplayList& displayList, ImageBufferFlushIdentifier flushIdentifier, RemoteResourceIdentifier remoteResourceIdentifier) 119 { 120 if (auto imageBuffer = m_imageBufferMessageHandlerMap.get(remoteResourceIdentifier)) 121 imageBuffer->flushDrawingContextAndCommit(displayList, flushIdentifier); 122 } 123 124 GPUConnectionToWebProcess* RemoteRenderingBackend::gpuConnectionToWebProcess() const 125 { 126 return m_gpuConnectionToWebProcess.get(); 130 m_remoteResourceCache.releaseRemoteResource(remoteResourceIdentifier); 127 131 } 128 132 -
trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h
r268612 r268637 29 29 30 30 #include "Connection.h" 31 #include "ImageBufferFlushIdentifier.h" 31 #include "DisplayListFlushIdentifier.h" 32 #include "ImageBufferBackendHandle.h" 32 33 #include "ImageDataReference.h" 33 34 #include "MessageReceiver.h" 34 35 #include "MessageSender.h" 35 #include "Remote ImageBufferMessageHandler.h"36 #include "RemoteResourceCache.h" 36 37 #include "RenderingBackendIdentifier.h" 37 38 #include <WebCore/ColorSpace.h> 38 39 #include <WebCore/DisplayListItems.h> 39 #include <WebCore/FloatSize.h>40 #include <WebCore/RemoteResourceIdentifier.h>41 #include <WebCore/RenderingMode.h>42 #include <wtf/HashMap.h>43 40 #include <wtf/WeakPtr.h> 44 41 … … 47 44 class DisplayList; 48 45 } 46 class FloatSize; 47 enum class ColorSpace : uint8_t; 48 enum class RenderingMode : uint8_t; 49 49 } 50 50 … … 60 60 virtual ~RemoteRenderingBackend(); 61 61 62 RenderingBackendIdentifier renderingBackendIdentifier() const { return m_renderingBackendIdentifier; }63 62 GPUConnectionToWebProcess* gpuConnectionToWebProcess() const; 63 64 // Messages to be sent. 65 void imageBufferBackendWasCreated(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle, WebCore::RemoteResourceIdentifier); 66 void flushDisplayListWasCommitted(DisplayListFlushIdentifier, WebCore::RemoteResourceIdentifier); 64 67 65 68 private: … … 76 79 // Messages to be received. 77 80 void createImageBuffer(const WebCore::FloatSize& logicalSize, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace, WebCore::RemoteResourceIdentifier); 81 void flushDisplayList(const WebCore::DisplayList::DisplayList&, WebCore::RemoteResourceIdentifier); 82 void flushDisplayListAndCommit(const WebCore::DisplayList::DisplayList&, DisplayListFlushIdentifier, WebCore::RemoteResourceIdentifier); 83 void getImageData(WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, WebCore::RemoteResourceIdentifier, CompletionHandler<void(IPC::ImageDataReference&&)>&&); 78 84 void releaseRemoteResource(WebCore::RemoteResourceIdentifier); 79 void flushImageBufferDrawingContext(const WebCore::DisplayList::DisplayList&, WebCore::RemoteResourceIdentifier);80 void flushImageBufferDrawingContextAndCommit(const WebCore::DisplayList::DisplayList&, ImageBufferFlushIdentifier, WebCore::RemoteResourceIdentifier);81 void getImageData(WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, WebCore::RemoteResourceIdentifier, CompletionHandler<void(IPC::ImageDataReference&&)>&&);82 85 83 using ImageBufferMessageHandlerMap = HashMap<WebCore::RemoteResourceIdentifier, std::unique_ptr<RemoteImageBufferMessageHandler>>; 84 ImageBufferMessageHandlerMap m_imageBufferMessageHandlerMap; 86 RemoteResourceCache m_remoteResourceCache; 85 87 WeakPtr<GPUConnectionToWebProcess> m_gpuConnectionToWebProcess; 86 88 RenderingBackendIdentifier m_renderingBackendIdentifier; -
trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in
r268612 r268637 25 25 messages -> RemoteRenderingBackend NotRefCounted { 26 26 void CreateImageBuffer(WebCore::FloatSize logicalSize, WebCore::RenderingMode renderingMode, float resolutionScale, WebCore::ColorSpace colorSpace, WebCore::RemoteResourceIdentifier remoteResourceIdentifier) 27 void Flush ImageBufferDrawingContext(WebCore::DisplayList::DisplayList displayList, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)28 void Flush ImageBufferDrawingContextAndCommit(WebCore::DisplayList::DisplayList displayList, WebKit::ImageBufferFlushIdentifier flushIdentifier, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)27 void FlushDisplayList(WebCore::DisplayList::DisplayList displayList, WebCore::RemoteResourceIdentifier remoteResourceIdentifier) 28 void FlushDisplayListAndCommit(WebCore::DisplayList::DisplayList displayList, WebKit::DisplayListFlushIdentifier flushIdentifier, WebCore::RemoteResourceIdentifier remoteResourceIdentifier) 29 29 GetImageData(enum:uint8_t WebCore::AlphaPremultiplication outputFormat, WebCore::IntRect srcRect, WebCore::RemoteResourceIdentifier remoteResourceIdentifier) -> (IPC::ImageDataReference imageData) Synchronous 30 30 void ReleaseRemoteResource(WebCore::RemoteResourceIdentifier remoteResourceIdentifier) -
trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp
r268636 r268637 25 25 26 26 #include "config.h" 27 #include "Remote ImageBufferMessageHandler.h"27 #include "RemoteResourceCache.h" 28 28 29 29 #if ENABLE(GPU_PROCESS) 30 31 #include "RemoteRenderingBackend.h"32 #include "RemoteRenderingBackendProxyMessages.h"33 30 34 31 namespace WebKit { 35 32 using namespace WebCore; 36 33 37 RemoteImageBufferMessageHandler::RemoteImageBufferMessageHandler(RemoteRenderingBackend& remoteRenderingBackend, WebCore::RemoteResourceIdentifier remoteResourceIdentifier) 38 : m_remoteRenderingBackend(remoteRenderingBackend) 39 , m_remoteResourceIdentifier(remoteResourceIdentifier) 34 void RemoteResourceCache::cacheImageBuffer(RemoteResourceIdentifier remoteResourceIdentifier, std::unique_ptr<ImageBuffer>&& image) 40 35 { 36 auto addResult = m_imageBuffers.add(remoteResourceIdentifier, WTFMove(image)); 37 ASSERT_UNUSED(addResult, addResult.isNewEntry); 41 38 } 42 39 43 void RemoteImageBufferMessageHandler::createBackend(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, ImageBufferBackendHandle handle)40 WebCore::ImageBuffer* RemoteResourceCache::cachedImageBuffer(RemoteResourceIdentifier remoteResourceIdentifier) 44 41 { 45 m_remoteRenderingBackend.send(Messages::RemoteRenderingBackendProxy::CreateImageBufferBackend(logicalSize, backendSize, resolutionScale, colorSpace, WTFMove(handle), m_remoteResourceIdentifier), m_remoteRenderingBackend.renderingBackendIdentifier());42 return m_imageBuffers.get(remoteResourceIdentifier); 46 43 } 47 44 48 void Remote ImageBufferMessageHandler::commitFlushContext(ImageBufferFlushIdentifier flushIdentifier)45 void RemoteResourceCache::releaseRemoteResource(RemoteResourceIdentifier remoteResourceIdentifier) 49 46 { 50 m_remoteRenderingBackend.send(Messages::RemoteRenderingBackendProxy::CommitImageBufferFlushContext(flushIdentifier, m_remoteResourceIdentifier), m_remoteRenderingBackend.renderingBackendIdentifier()); 47 if (m_imageBuffers.remove(remoteResourceIdentifier)) 48 return; 49 // Caching the remote resource should have happened before releasing it. 50 ASSERT_NOT_REACHED(); 51 51 } 52 52 -
trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h
r268636 r268637 28 28 #if ENABLE(GPU_PROCESS) 29 29 30 #include "ImageBufferBackendHandle.h"31 #include "ImageBufferFlushIdentifier.h"32 #include <WebCore/ColorSpace.h>33 #include <WebCore/DisplayList.h>34 #include <WebCore/FloatSize.h>35 30 #include <WebCore/RemoteResourceIdentifier.h> 31 #include <wtf/HashMap.h> 36 32 37 33 namespace WebCore { 38 enum class AlphaPremultiplication : uint8_t; 39 class ImageData; 34 class ImageBuffer; 40 35 } 41 36 … … 44 39 class RemoteRenderingBackend; 45 40 46 class Remote ImageBufferMessageHandler{41 class RemoteResourceCache { 47 42 public: 48 virtual ~RemoteImageBufferMessageHandler() = default;43 RemoteResourceCache() = default; 49 44 50 // Messages to be received. See RemoteRenderingBackend.messages.in. 51 virtual void flushDrawingContext(const WebCore::DisplayList::DisplayList&) = 0; 52 virtual void flushDrawingContextAndCommit(const WebCore::DisplayList::DisplayList&, ImageBufferFlushIdentifier) = 0; 53 virtual RefPtr<WebCore::ImageData> getImageData(WebCore::AlphaPremultiplication outputFormat, const WebCore::IntRect& srcRect) const = 0; 54 55 protected: 56 RemoteImageBufferMessageHandler(RemoteRenderingBackend&, WebCore::RemoteResourceIdentifier); 57 58 // Messages to be sent. See RemoteRenderingBackend.messages.in. 59 void createBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle); 60 void commitFlushContext(ImageBufferFlushIdentifier); 61 62 RemoteRenderingBackend& backend() { return m_remoteRenderingBackend; } 45 void cacheImageBuffer(WebCore::RemoteResourceIdentifier, std::unique_ptr<WebCore::ImageBuffer>&&); 46 WebCore::ImageBuffer* cachedImageBuffer(WebCore::RemoteResourceIdentifier); 47 void releaseRemoteResource(WebCore::RemoteResourceIdentifier); 63 48 64 49 private: 65 RemoteRenderingBackend& m_remoteRenderingBackend; 66 WebCore::RemoteResourceIdentifier m_remoteResourceIdentifier; 50 using RemoteImageBufferHashMap = HashMap<WebCore::RemoteResourceIdentifier, std::unique_ptr<WebCore::ImageBuffer>>; 51 52 RemoteImageBufferHashMap m_imageBuffers; 67 53 }; 68 54 -
trunk/Source/WebKit/Scripts/webkit/messages.py
r268635 r268637 238 238 'WebKit::ContentWorldIdentifier', 239 239 'WebKit::DisplayLinkObserverID', 240 'WebKit::DisplayListFlushIdentifier', 240 241 'WebKit::DownloadID', 241 242 'WebKit::GeolocationIdentifier', 242 243 'WebKit::ImageBufferBackendHandle', 243 'WebKit::ImageBufferFlushIdentifier',244 244 'WebKit::LayerHostingContextID', 245 245 'WebKit::LegacyCustomProtocolID', -
trunk/Source/WebKit/Sources.txt
r268612 r268637 25 25 GPUProcess/GPUConnectionToWebProcess.cpp 26 26 GPUProcess/GPUProcessCreationParameters.cpp 27 GPUProcess/graphics/RemoteImageBufferMessageHandler.cpp28 27 GPUProcess/graphics/RemoteRenderingBackend.cpp 28 GPUProcess/graphics/RemoteResourceCache.cpp 29 29 GPUProcess/media/RemoteAudioSessionProxy.cpp 30 30 GPUProcess/media/RemoteAudioSessionProxyManager.cpp -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r268632 r268637 1097 1097 570DAAC623037F7F00E8FC04 /* WKNFReaderSessionDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 570DAAC423037F7E00E8FC04 /* WKNFReaderSessionDelegate.h */; }; 1098 1098 570DAACA230385FD00E8FC04 /* CtapNfcDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 570DAAC8230385FD00E8FC04 /* CtapNfcDriver.h */; }; 1099 572EBBDA2538F6B4000552B3 /* AppAttestInternalSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 572EBBD82538F6A1000552B3 /* AppAttestInternalSoftLink.mm */; };1100 572EBBDB2538F6B6000552B3 /* AppAttestInternalSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EBBD92538F6A1000552B3 /* AppAttestInternalSoftLink.h */; };1101 572EBBDD25392181000552B3 /* AppAttestSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EBBDC25392181000552B3 /* AppAttestSPI.h */; };1102 1099 572EBBBF2536A60A000552B3 /* WebAuthnConnectionToWebProcessMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 572EBBBB2536A60A000552B3 /* WebAuthnConnectionToWebProcessMessageReceiver.cpp */; }; 1103 1100 572EBBC02536A60A000552B3 /* WebAuthnConnectionToWebProcessMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EBBBC2536A60A000552B3 /* WebAuthnConnectionToWebProcessMessages.h */; }; … … 1111 1108 572EBBD52536C885000552B3 /* WebAuthnProcessConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EBBD22536C885000552B3 /* WebAuthnProcessConnection.h */; }; 1112 1109 572EBBD72537EBAE000552B3 /* ExtraPrivateSymbolsForTAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = ECA680D31E6904B500731D20 /* ExtraPrivateSymbolsForTAPI.h */; }; 1110 572EBBDA2538F6B4000552B3 /* AppAttestInternalSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 572EBBD82538F6A1000552B3 /* AppAttestInternalSoftLink.mm */; }; 1111 572EBBDB2538F6B6000552B3 /* AppAttestInternalSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EBBD92538F6A1000552B3 /* AppAttestInternalSoftLink.h */; }; 1112 572EBBDD25392181000552B3 /* AppAttestSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EBBDC25392181000552B3 /* AppAttestSPI.h */; }; 1113 1113 572FD44322265CE200A1ECC3 /* WebViewDidMoveToWindowObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 572FD44122265CE200A1ECC3 /* WebViewDidMoveToWindowObserver.h */; }; 1114 1114 574217922400E286002B303D /* LocalAuthenticationSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 574217912400E098002B303D /* LocalAuthenticationSPI.h */; }; … … 3914 3914 55AD09422408A02E00DE4D2F /* RemoteImageBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteImageBuffer.h; sourceTree = "<group>"; }; 3915 3915 55AD09432408A0E600DE4D2F /* PlatformRemoteImageBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformRemoteImageBuffer.h; sourceTree = "<group>"; }; 3916 55AD09442408ABB300DE4D2F /* ImageBufferFlushIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageBufferFlushIdentifier.h; sourceTree = "<group>"; };3916 55AD09442408ABB300DE4D2F /* DisplayListFlushIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DisplayListFlushIdentifier.h; sourceTree = "<group>"; }; 3917 3917 570AB8F220AE3BD700B8BE87 /* SecKeyProxyStore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SecKeyProxyStore.h; sourceTree = "<group>"; }; 3918 3918 570AB90020B2517400B8BE87 /* AuthenticationChallengeProxyCocoa.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AuthenticationChallengeProxyCocoa.mm; sourceTree = "<group>"; }; … … 3928 3928 570DAAC8230385FD00E8FC04 /* CtapNfcDriver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CtapNfcDriver.h; sourceTree = "<group>"; }; 3929 3929 570DAAC9230385FD00E8FC04 /* CtapNfcDriver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CtapNfcDriver.cpp; sourceTree = "<group>"; }; 3930 572EBBD82538F6A1000552B3 /* AppAttestInternalSoftLink.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AppAttestInternalSoftLink.mm; sourceTree = "<group>"; };3931 572EBBD92538F6A1000552B3 /* AppAttestInternalSoftLink.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppAttestInternalSoftLink.h; sourceTree = "<group>"; };3932 572EBBDC25392181000552B3 /* AppAttestSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppAttestSPI.h; sourceTree = "<group>"; };3933 3930 572EBBB92536A06E000552B3 /* Info-iOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = "Info-iOS.plist"; path = "WebAuthnProcess/EntryPoint/Cocoa/XPCService/WebAuthnService/Info-iOS.plist"; sourceTree = SOURCE_ROOT; }; 3934 3931 572EBBBA2536A06E000552B3 /* Info-OSX.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = "Info-OSX.plist"; path = "WebAuthnProcess/EntryPoint/Cocoa/XPCService/WebAuthnService/Info-OSX.plist"; sourceTree = SOURCE_ROOT; }; … … 3947 3944 572EBBD22536C885000552B3 /* WebAuthnProcessConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebAuthnProcessConnection.h; sourceTree = "<group>"; }; 3948 3945 572EBBD32536C885000552B3 /* WebAuthnProcessConnection.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebAuthnProcessConnection.messages.in; sourceTree = "<group>"; }; 3946 572EBBD82538F6A1000552B3 /* AppAttestInternalSoftLink.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AppAttestInternalSoftLink.mm; sourceTree = "<group>"; }; 3947 572EBBD92538F6A1000552B3 /* AppAttestInternalSoftLink.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppAttestInternalSoftLink.h; sourceTree = "<group>"; }; 3948 572EBBDC25392181000552B3 /* AppAttestSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppAttestSPI.h; sourceTree = "<group>"; }; 3949 3949 572FD44122265CE200A1ECC3 /* WebViewDidMoveToWindowObserver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebViewDidMoveToWindowObserver.h; sourceTree = "<group>"; }; 3950 3950 574217912400E098002B303D /* LocalAuthenticationSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LocalAuthenticationSPI.h; sourceTree = "<group>"; }; … … 4227 4227 7227800C24097A02007D376B /* RemoteImageBufferMessageHandlerProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteImageBufferMessageHandlerProxy.cpp; sourceTree = "<group>"; }; 4228 4228 7227800D24097A02007D376B /* RemoteImageBufferMessageHandlerProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteImageBufferMessageHandlerProxy.h; sourceTree = "<group>"; }; 4229 72 2780112409906E007D376B /* RemoteImageBufferMessageHandler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteImageBufferMessageHandler.cpp; sourceTree = "<group>"; };4230 72 2780122409906E007D376B /* RemoteImageBufferMessageHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteImageBufferMessageHandler.h; sourceTree = "<group>"; };4229 726D56DD253A64810002EF90 /* RemoteResourceCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteResourceCache.cpp; sourceTree = "<group>"; }; 4230 726D56DE253A64810002EF90 /* RemoteResourceCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteResourceCache.h; sourceTree = "<group>"; }; 4231 4231 727A7F342407857D004D2931 /* ImageBufferShareableIOSurfaceBackend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageBufferShareableIOSurfaceBackend.cpp; sourceTree = "<group>"; }; 4232 4232 727A7F352407857F004D2931 /* ImageBufferShareableIOSurfaceBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageBufferShareableIOSurfaceBackend.h; sourceTree = "<group>"; }; … … 8133 8133 children = ( 8134 8134 727A7F3324078527004D2931 /* cocoa */, 8135 55AD09442408ABB300DE4D2F /* DisplayListFlushIdentifier.h */, 8135 8136 727A7F39240788F1004D2931 /* ImageBufferBackendHandle.h */, 8136 55AD09442408ABB300DE4D2F /* ImageBufferFlushIdentifier.h */,8137 8137 727A7F37240788F0004D2931 /* ImageBufferShareableBitmapBackend.cpp */, 8138 8138 727A7F36240788F0004D2931 /* ImageBufferShareableBitmapBackend.h */, … … 8155 8155 55AD09432408A0E600DE4D2F /* PlatformRemoteImageBuffer.h */, 8156 8156 55AD09422408A02E00DE4D2F /* RemoteImageBuffer.h */, 8157 722780112409906E007D376B /* RemoteImageBufferMessageHandler.cpp */,8158 722780122409906E007D376B /* RemoteImageBufferMessageHandler.h */,8159 8157 550640A224071A6100AAE045 /* RemoteRenderingBackend.cpp */, 8160 8158 550640A324071A6100AAE045 /* RemoteRenderingBackend.h */, 8161 8159 550640A424071C2100AAE045 /* RemoteRenderingBackend.messages.in */, 8160 726D56DD253A64810002EF90 /* RemoteResourceCache.cpp */, 8161 726D56DE253A64810002EF90 /* RemoteResourceCache.h */, 8162 8162 ); 8163 8163 path = graphics; -
trunk/Source/WebKit/WebProcess/GPU/graphics/DisplayListFlushIdentifier.h
r268636 r268637 32 32 namespace WebKit { 33 33 34 enum ImageBufferFlushIdentifierType { };35 using ImageBufferFlushIdentifier = ObjectIdentifier<ImageBufferFlushIdentifierType>;34 enum DisplayListFlushIdentifierType { }; 35 using DisplayListFlushIdentifier = ObjectIdentifier<DisplayListFlushIdentifierType>; 36 36 37 37 } // namespace WebKit -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.cpp
r268636 r268637 60 60 } 61 61 62 void RemoteImageBufferMessageHandlerProxy::waitFor CreateImageBufferBackend()62 void RemoteImageBufferMessageHandlerProxy::waitForImageBufferBackendWasCreated() 63 63 { 64 64 if (m_remoteRenderingBackendProxy && !isBackendCreated()) 65 m_remoteRenderingBackendProxy->waitFor CreateImageBufferBackend();65 m_remoteRenderingBackendProxy->waitForImageBufferBackendWasCreated(); 66 66 } 67 67 68 void RemoteImageBufferMessageHandlerProxy::waitFor CommitImageBufferFlushContext()68 void RemoteImageBufferMessageHandlerProxy::waitForFlushDisplayListWasCommitted() 69 69 { 70 70 if (m_remoteRenderingBackendProxy && isPendingFlush()) 71 m_remoteRenderingBackendProxy->waitFor CommitImageBufferFlushContext();71 m_remoteRenderingBackendProxy->waitForFlushDisplayListWasCommitted(); 72 72 } 73 73 74 void RemoteImageBufferMessageHandlerProxy::flushD rawingContext(WebCore::DisplayList::DisplayList& displayList)74 void RemoteImageBufferMessageHandlerProxy::flushDisplayList(WebCore::DisplayList::DisplayList& displayList) 75 75 { 76 76 if (!m_remoteRenderingBackendProxy) … … 78 78 79 79 TraceScope tracingScope(FlushRemoteImageBufferStart, FlushRemoteImageBufferEnd); 80 m_remoteRenderingBackendProxy->send(Messages::RemoteRenderingBackend::Flush ImageBufferDrawingContext(displayList, m_remoteResourceIdentifier), m_remoteRenderingBackendProxy->renderingBackendIdentifier());80 m_remoteRenderingBackendProxy->send(Messages::RemoteRenderingBackend::FlushDisplayList(displayList, m_remoteResourceIdentifier), m_remoteRenderingBackendProxy->renderingBackendIdentifier()); 81 81 displayList.clear(); 82 82 } 83 83 84 void RemoteImageBufferMessageHandlerProxy::flushD rawingContextAndWaitCommit(WebCore::DisplayList::DisplayList& displayList)84 void RemoteImageBufferMessageHandlerProxy::flushDisplayListAndWaitCommit(WebCore::DisplayList::DisplayList& displayList) 85 85 { 86 86 if (!m_remoteRenderingBackendProxy) … … 88 88 89 89 TraceScope tracingScope(FlushRemoteImageBufferStart, FlushRemoteImageBufferEnd, 1); 90 m_sentFlushIdentifier = ImageBufferFlushIdentifier::generate();91 m_remoteRenderingBackendProxy->send(Messages::RemoteRenderingBackend::Flush ImageBufferDrawingContextAndCommit(displayList, m_sentFlushIdentifier, m_remoteResourceIdentifier), m_remoteRenderingBackendProxy->renderingBackendIdentifier());90 m_sentFlushIdentifier = DisplayListFlushIdentifier::generate(); 91 m_remoteRenderingBackendProxy->send(Messages::RemoteRenderingBackend::FlushDisplayListAndCommit(displayList, m_sentFlushIdentifier, m_remoteResourceIdentifier), m_remoteRenderingBackendProxy->renderingBackendIdentifier()); 92 92 displayList.clear(); 93 waitFor CommitImageBufferFlushContext();93 waitForFlushDisplayListWasCommitted(); 94 94 } 95 95 96 void RemoteImageBufferMessageHandlerProxy::commitFlushContext( ImageBufferFlushIdentifier flushIdentifier)96 void RemoteImageBufferMessageHandlerProxy::commitFlushContext(DisplayListFlushIdentifier flushIdentifier) 97 97 { 98 98 m_receivedFlushIdentifier = flushIdentifier; -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandlerProxy.h
r268612 r268637 28 28 #if ENABLE(GPU_PROCESS) 29 29 30 #include "DisplayListFlushIdentifier.h" 30 31 #include "ImageBufferBackendHandle.h" 31 #include "ImageBufferFlushIdentifier.h"32 32 #include <WebCore/ColorSpace.h> 33 33 #include <WebCore/DisplayList.h> … … 54 54 virtual void createBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle) = 0; 55 55 56 void commitFlushContext( ImageBufferFlushIdentifier);56 void commitFlushContext(DisplayListFlushIdentifier); 57 57 58 58 protected: … … 64 64 RefPtr<WebCore::ImageData> getImageData(WebCore::AlphaPremultiplication outputFormat, const WebCore::IntRect& srcRect) const; 65 65 66 void waitFor CreateImageBufferBackend();67 void waitFor CommitImageBufferFlushContext();66 void waitForImageBufferBackendWasCreated(); 67 void waitForFlushDisplayListWasCommitted(); 68 68 69 69 // Messages to be sent. See RemoteRenderingBackendProxy.messages.in. 70 void flushD rawingContext(WebCore::DisplayList::DisplayList&);71 void flushD rawingContextAndWaitCommit(WebCore::DisplayList::DisplayList&);70 void flushDisplayList(WebCore::DisplayList::DisplayList&); 71 void flushDisplayListAndWaitCommit(WebCore::DisplayList::DisplayList&); 72 72 73 73 private: … … 75 75 WebCore::RemoteResourceIdentifier m_remoteResourceIdentifier { WebCore::RemoteResourceIdentifier::generate() }; 76 76 77 ImageBufferFlushIdentifier m_sentFlushIdentifier;78 ImageBufferFlushIdentifier m_receivedFlushIdentifier;77 DisplayListFlushIdentifier m_sentFlushIdentifier; 78 DisplayListFlushIdentifier m_receivedFlushIdentifier; 79 79 }; 80 80 -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h
r268612 r268637 75 75 { 76 76 if (!m_backend) 77 const_cast<RemoteImageBufferProxy&>(*this).RemoteImageBufferMessageHandlerProxy::waitFor CreateImageBufferBackend();77 const_cast<RemoteImageBufferProxy&>(*this).RemoteImageBufferMessageHandlerProxy::waitForImageBufferBackendWasCreated(); 78 78 return m_backend.get(); 79 79 } … … 82 82 { 83 83 auto& displayList = const_cast<RemoteImageBufferProxy*>(this)->m_drawingContext.displayList(); 84 const_cast<RemoteImageBufferProxy*>(this)->RemoteImageBufferMessageHandlerProxy::flushD rawingContext(displayList);84 const_cast<RemoteImageBufferProxy*>(this)->RemoteImageBufferMessageHandlerProxy::flushDisplayList(displayList); 85 85 auto result = const_cast<RemoteImageBufferProxy*>(this)->RemoteImageBufferMessageHandlerProxy::getImageData(outputFormat, srcRect); 86 86 // getImageData is synchronous, which means we've already received the CommitImageBufferFlushContext message. … … 106 106 auto& displayList = m_drawingContext.displayList(); 107 107 if (displayList.itemCount()) 108 RemoteImageBufferMessageHandlerProxy::flushD rawingContextAndWaitCommit(displayList);108 RemoteImageBufferMessageHandlerProxy::flushDisplayListAndWaitCommit(displayList); 109 109 } 110 110 … … 114 114 auto& displayList = m_drawingContext.displayList(); 115 115 if (displayList.itemCount() >= DisplayListBatchSize) 116 RemoteImageBufferMessageHandlerProxy::flushD rawingContext(displayList);116 RemoteImageBufferMessageHandlerProxy::flushDisplayList(displayList); 117 117 } 118 118 }; -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp
r268612 r268637 75 75 } 76 76 77 bool RemoteRenderingBackendProxy::waitFor CreateImageBufferBackend()77 bool RemoteRenderingBackendProxy::waitForImageBufferBackendWasCreated() 78 78 { 79 79 Ref<IPC::Connection> connection = WebProcess::singleton().ensureGPUProcessConnection().connection(); 80 return connection->waitForAndDispatchImmediately<Messages::RemoteRenderingBackendProxy:: CreateImageBufferBackend>(m_renderingBackendIdentifier, 1_s, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives);80 return connection->waitForAndDispatchImmediately<Messages::RemoteRenderingBackendProxy::ImageBufferBackendWasCreated>(m_renderingBackendIdentifier, 1_s, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives); 81 81 } 82 82 83 bool RemoteRenderingBackendProxy::waitFor CommitImageBufferFlushContext()83 bool RemoteRenderingBackendProxy::waitForFlushDisplayListWasCommitted() 84 84 { 85 85 Ref<IPC::Connection> connection = WebProcess::singleton().ensureGPUProcessConnection().connection(); 86 return connection->waitForAndDispatchImmediately<Messages::RemoteRenderingBackendProxy:: CommitImageBufferFlushContext>(m_renderingBackendIdentifier, 1_s, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives);86 return connection->waitForAndDispatchImmediately<Messages::RemoteRenderingBackendProxy::FlushDisplayListWasCommitted>(m_renderingBackendIdentifier, 1_s, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives); 87 87 } 88 88 … … 111 111 } 112 112 113 void RemoteRenderingBackendProxy:: createImageBufferBackend(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, ImageBufferBackendHandle handle, RemoteResourceIdentifier remoteResourceIdentifier)113 void RemoteRenderingBackendProxy::imageBufferBackendWasCreated(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, ImageBufferBackendHandle handle, RemoteResourceIdentifier remoteResourceIdentifier) 114 114 { 115 115 if (auto imageBuffer = m_imageBufferMessageHandlerMap.get(remoteResourceIdentifier)) … … 117 117 } 118 118 119 void RemoteRenderingBackendProxy:: commitImageBufferFlushContext(ImageBufferFlushIdentifier flushIdentifier, RemoteResourceIdentifier remoteResourceIdentifier)119 void RemoteRenderingBackendProxy::flushDisplayListWasCommitted(DisplayListFlushIdentifier flushIdentifier, RemoteResourceIdentifier remoteResourceIdentifier) 120 120 { 121 121 if (auto imageBuffer = m_imageBufferMessageHandlerMap.get(remoteResourceIdentifier)) -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h
r268612 r268637 28 28 #if ENABLE(GPU_PROCESS) 29 29 30 #include "DisplayListFlushIdentifier.h" 30 31 #include "ImageBufferBackendHandle.h" 31 #include "ImageBufferFlushIdentifier.h"32 32 #include "MessageReceiver.h" 33 33 #include "MessageSender.h" … … 65 65 void releaseRemoteResource(WebCore::RemoteResourceIdentifier); 66 66 67 bool waitFor CreateImageBufferBackend();68 bool waitFor CommitImageBufferFlushContext();67 bool waitForImageBufferBackendWasCreated(); 68 bool waitForFlushDisplayListWasCommitted(); 69 69 70 70 private: … … 72 72 73 73 // Messages to be received. 74 void createImageBufferBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle, WebCore::RemoteResourceIdentifier);75 void commitImageBufferFlushContext(ImageBufferFlushIdentifier, WebCore::RemoteResourceIdentifier);74 void imageBufferBackendWasCreated(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle, WebCore::RemoteResourceIdentifier); 75 void flushDisplayListWasCommitted(DisplayListFlushIdentifier, WebCore::RemoteResourceIdentifier); 76 76 77 77 using ImageBufferMessageHandlerMap = HashMap<WebCore::RemoteResourceIdentifier, RemoteImageBufferMessageHandlerProxy*>; -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in
r268612 r268637 24 24 25 25 messages -> RemoteRenderingBackendProxy NotRefCounted { 26 void CreateImageBufferBackend(WebCore::FloatSize logicalSize, WebCore::IntSize backendSize, float resolutionScale, WebCore::ColorSpace colorSpace, WebKit::ImageBufferBackendHandle handle, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)27 void CommitImageBufferFlushContext(WebKit::ImageBufferFlushIdentifier flushIdentifier, WebCore::RemoteResourceIdentifier remoteResourceIdentifier)26 void ImageBufferBackendWasCreated(WebCore::FloatSize logicalSize, WebCore::IntSize backendSize, float resolutionScale, WebCore::ColorSpace colorSpace, WebKit::ImageBufferBackendHandle handle, WebCore::RemoteResourceIdentifier remoteResourceIdentifier) 27 void FlushDisplayListWasCommitted(WebKit::DisplayListFlushIdentifier flushIdentifier, WebCore::RemoteResourceIdentifier remoteResourceIdentifier) 28 28 } 29 29
Note: See TracChangeset
for help on using the changeset viewer.