Title: [288984] branches/safari-613-branch/Source/WebKit

Diff

Modified: branches/safari-613-branch/Source/WebKit/ChangeLog (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/ChangeLog	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/ChangeLog	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,3 +1,66 @@
+2022-02-02  Russell Epstein  <[email protected]>
+
+        Apply patch. rdar://problem/86150540
+
+    2022-02-01  Said Abou-Hallawa  <[email protected]>
+
+            [GPU Process] Remove the resource use counters from the remote resource cache
+            https://bugs.webkit.org/show_bug.cgi?id=235636
+
+            Reviewed by Simon Fraser.
+
+            The display list items and the resource management messages are both
+            communicated from the WebProcess and the GPUProcess through the stream
+            connection. The resources will be sent to the GPUProcess, consumed by
+            the display items and then released in the right order. So there is no
+            need anymore for the resource use counters.
+
+            * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
+            (WebKit::RemoteDisplayListRecorder::setStateWithQualifiedIdentifiers):
+            (WebKit::RemoteDisplayListRecorder::clipToImageBufferWithQualifiedIdentifier):
+            (WebKit::RemoteDisplayListRecorder::drawGlyphsWithQualifiedIdentifier):
+            (WebKit::RemoteDisplayListRecorder::drawImageBufferWithQualifiedIdentifier):
+            (WebKit::RemoteDisplayListRecorder::drawNativeImageWithQualifiedIdentifier):
+            (WebKit::RemoteDisplayListRecorder::drawPatternWithQualifiedIdentifier):
+            * GPUProcess/graphics/RemoteRenderingBackend.cpp:
+            (WebKit::RemoteRenderingBackend::releaseRemoteResource):
+            (WebKit::RemoteRenderingBackend::releaseRemoteResourceWithQualifiedIdentifier):
+            * GPUProcess/graphics/RemoteRenderingBackend.h:
+            * GPUProcess/graphics/RemoteRenderingBackend.messages.in:
+            * GPUProcess/graphics/RemoteResourceCache.cpp:
+            (WebKit::RemoteResourceCache::cacheImageBuffer):
+            (WebKit::RemoteResourceCache::cacheNativeImage):
+            (WebKit::RemoteResourceCache::cacheFont):
+            (WebKit::RemoteResourceCache::releaseRemoteResource):
+            (WebKit::RemoteResourceCache::ensureResourceUseCounter): Deleted.
+            (WebKit::RemoteResourceCache::maybeRemoveResource): Deleted.
+            (WebKit::RemoteResourceCache::recordResourceUse): Deleted.
+            (WebKit::RemoteResourceCache::updateHasActiveDrawables): Deleted.
+            * GPUProcess/graphics/RemoteResourceCache.h:
+            (WebKit::RemoteResourceCache::hasActiveDrawables const):
+            (): Deleted.
+            * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp:
+            (WebKit::RemoteDisplayListRecorderProxy::recordResourceUse):
+            * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
+            (WebKit::RemoteRenderingBackendProxy::releaseRemoteResource):
+            (WebKit::RemoteRenderingBackendProxy::recordNativeImageUse): Deleted.
+            (WebKit::RemoteRenderingBackendProxy::recordFontUse): Deleted.
+            (WebKit::RemoteRenderingBackendProxy::recordImageBufferUse): Deleted.
+            * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
+            * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
+            (WebKit::RemoteResourceCacheProxy::cacheImageBuffer):
+            (WebKit::RemoteResourceCacheProxy::cachedImageBuffer const):
+            (WebKit::RemoteResourceCacheProxy::releaseImageBuffer):
+            (WebKit::RemoteResourceCacheProxy::recordImageBufferUse):
+            (WebKit::RemoteResourceCacheProxy::recordNativeImageUse):
+            (WebKit::RemoteResourceCacheProxy::recordFontUse):
+            (WebKit::RemoteResourceCacheProxy::releaseNativeImage):
+            (WebKit::RemoteResourceCacheProxy::clearNativeImageMap):
+            (WebKit::RemoteResourceCacheProxy::releaseAllRemoteFonts):
+            (WebKit::RemoteResourceCacheProxy::finalizeRenderingUpdateForFonts):
+            (WebKit::RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed):
+            * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:
+
 2022-02-01  Russell Epstein  <[email protected]>
 
         Cherry-pick r288844. rdar://problem/88241768

Modified: branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -134,12 +134,6 @@
         fillPatternImage = resourceCache().cachedNativeImage(fillPatternImageIdentifier);
 
     handleItem(WTFMove(item), strokePatternImage.get(), fillPatternImage.get());
-
-    if (strokePatternImage)
-        resourceCache().recordResourceUse(strokePatternImageIdentifier);
-
-    if (fillPatternImage)
-        resourceCache().recordResourceUse(fillPatternImageIdentifier);
 }
 
 void RemoteDisplayListRecorder::setLineCap(LineCap lineCap)
@@ -193,7 +187,6 @@
     }
 
     handleItem(DisplayList::ClipToImageBuffer(imageBufferIdentifier.object(), destinationRect), *imageBuffer);
-    resourceCache().recordResourceUse(imageBufferIdentifier);
 }
 
 void RemoteDisplayListRecorder::clipOutToPath(const Path& path)
@@ -275,7 +268,6 @@
     }
 
     handleItem(WTFMove(item), *font);
-    resourceCache().recordResourceUse(fontIdentifier);
 }
 
 void RemoteDisplayListRecorder::drawImageBuffer(RenderingResourceIdentifier imageBufferIdentifier, const FloatRect& destinationRect, const FloatRect& srcRect, const ImagePaintingOptions& options)
@@ -294,7 +286,6 @@
     }
 
     handleItem(DisplayList::DrawImageBuffer(imageBufferIdentifier.object(), destinationRect, srcRect, options), *imageBuffer);
-    resourceCache().recordResourceUse(imageBufferIdentifier);
 }
 
 void RemoteDisplayListRecorder::drawNativeImage(RenderingResourceIdentifier imageIdentifier, const FloatSize& imageSize, const FloatRect& destRect, const FloatRect& srcRect, const ImagePaintingOptions& options)
@@ -313,7 +304,6 @@
     }
 
     handleItem(DisplayList::DrawNativeImage(imageIdentifier.object(), imageSize, destRect, srcRect, options), *image);
-    resourceCache().recordResourceUse(imageIdentifier);
 }
 
 void RemoteDisplayListRecorder::drawPattern(RenderingResourceIdentifier imageIdentifier, const FloatSize& imageSize, const FloatRect& destRect, const FloatRect& tileRect, const AffineTransform& transform, const FloatPoint& phase, const FloatSize& spacing, const ImagePaintingOptions& options)
@@ -332,7 +322,6 @@
     }
 
     handleItem(DisplayList::DrawPattern(imageIdentifier.object(), imageSize, destRect, tileRect, transform, phase, spacing, options), *image);
-    resourceCache().recordResourceUse(imageIdentifier);
 }
 
 void RemoteDisplayListRecorder::beginTransparencyLayer(float opacity)

Modified: branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -390,17 +390,17 @@
     m_remoteResourceCache.deleteAllFonts();
 }
 
-void RemoteRenderingBackend::releaseRemoteResource(RenderingResourceIdentifier renderingResourceIdentifier, uint64_t useCount)
+void RemoteRenderingBackend::releaseRemoteResource(RenderingResourceIdentifier renderingResourceIdentifier)
 {
     // Immediately turn the RenderingResourceIdentifier (which is error-prone) to a QualifiedRenderingResourceIdentifier,
     // and use a helper function to make sure that don't accidentally use the RenderingResourceIdentifier (because the helper function can't see it).
-    releaseRemoteResourceWithQualifiedIdentifier({ renderingResourceIdentifier, m_gpuConnectionToWebProcess->webProcessIdentifier() }, useCount);
+    releaseRemoteResourceWithQualifiedIdentifier({ renderingResourceIdentifier, m_gpuConnectionToWebProcess->webProcessIdentifier() });
 }
 
-void RemoteRenderingBackend::releaseRemoteResourceWithQualifiedIdentifier(QualifiedRenderingResourceIdentifier renderingResourceIdentifier, uint64_t useCount)
+void RemoteRenderingBackend::releaseRemoteResourceWithQualifiedIdentifier(QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
 {
     ASSERT(!RunLoop::isMain());
-    auto success = m_remoteResourceCache.releaseRemoteResource(renderingResourceIdentifier, useCount);
+    auto success = m_remoteResourceCache.releaseRemoteResource(renderingResourceIdentifier);
     MESSAGE_CHECK(success, "Resource is being released before being cached.");
     updateRenderingResourceRequest();
 

Modified: branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -117,7 +117,7 @@
     void cacheNativeImage(const ShareableBitmap::Handle&, WebCore::RenderingResourceIdentifier);
     void cacheFont(Ref<WebCore::Font>&&);
     void deleteAllFonts();
-    void releaseRemoteResource(WebCore::RenderingResourceIdentifier, uint64_t useCount);
+    void releaseRemoteResource(WebCore::RenderingResourceIdentifier);
     void finalizeRenderingUpdate(RenderingUpdateID);
 
     // Received messages translated to use QualifiedRenderingResourceIdentifier.
@@ -127,7 +127,7 @@
     void getShareableBitmapForImageBufferWithQualifiedIdentifier(QualifiedRenderingResourceIdentifier, WebCore::PreserveResolution, CompletionHandler<void(ShareableBitmap::Handle&&)>&&);
     void cacheNativeImageWithQualifiedIdentifier(const ShareableBitmap::Handle&, QualifiedRenderingResourceIdentifier);
     void didCreateSharedDisplayListHandleWithQualifiedIdentifier(WebCore::DisplayList::ItemBufferIdentifier, const SharedMemory::IPCHandle&, QualifiedRenderingResourceIdentifier destinationBufferIdentifier);
-    void releaseRemoteResourceWithQualifiedIdentifier(QualifiedRenderingResourceIdentifier, uint64_t useCount);
+    void releaseRemoteResourceWithQualifiedIdentifier(QualifiedRenderingResourceIdentifier);
     void cacheFontWithQualifiedIdentifier(Ref<WebCore::Font>&&, QualifiedRenderingResourceIdentifier);
 
     Ref<IPC::StreamConnectionWorkQueue> m_workQueue;

Modified: branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.messages.in	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,4 +1,4 @@
-# Copyright (C) 2020 Apple Inc. All rights reserved.
+# Copyright (C) 2020-2022 Apple Inc. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -35,7 +35,7 @@
     CacheNativeImage(WebKit::ShareableBitmap::Handle handle, WebCore::RenderingResourceIdentifier renderingResourceIdentifier) NotStreamEncodable
     CacheFont(IPC::FontReference font) NotStreamEncodable
     DeleteAllFonts()
-    ReleaseRemoteResource(WebCore::RenderingResourceIdentifier renderingResourceIdentifier, uint64_t useCount)
+    ReleaseRemoteResource(WebCore::RenderingResourceIdentifier renderingResourceIdentifier)
     FinalizeRenderingUpdate(WebKit::RenderingUpdateID renderingUpdateID)
 }
 

Modified: branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -36,20 +36,10 @@
 {
 }
 
-RemoteResourceCache::RemoteResourceCache(RemoteResourceCache&& other)
-    : m_resourceHeap(WTFMove(other.m_resourceHeap))
-    , m_resourceUseCounters(WTFMove(other.m_resourceUseCounters))
-{
-    updateHasActiveDrawables();
-}
-
 void RemoteResourceCache::cacheImageBuffer(Ref<ImageBuffer>&& imageBuffer, QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
 {
     ASSERT(renderingResourceIdentifier.object() == imageBuffer->renderingResourceIdentifier());
     m_resourceHeap.add(renderingResourceIdentifier, WTFMove(imageBuffer));
-    updateHasActiveDrawables();
-
-    ensureResourceUseCounter(renderingResourceIdentifier);
 }
 
 ImageBuffer* RemoteResourceCache::cachedImageBuffer(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const
@@ -61,9 +51,6 @@
 {
     ASSERT(renderingResourceIdentifier.object() == image->renderingResourceIdentifier());
     m_resourceHeap.add(renderingResourceIdentifier, WTFMove(image));
-    updateHasActiveDrawables();
-
-    ensureResourceUseCounter(renderingResourceIdentifier);
 }
 
 NativeImage* RemoteResourceCache::cachedNativeImage(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const
@@ -75,8 +62,6 @@
 {
     ASSERT(renderingResourceIdentifier.object() == font->renderingResourceIdentifier());
     m_resourceHeap.add(renderingResourceIdentifier, WTFMove(font));
-
-    ensureResourceUseCounter(renderingResourceIdentifier);
 }
 
 Font* RemoteResourceCache::cachedFont(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const
@@ -84,103 +69,22 @@
     return m_resourceHeap.getFont(renderingResourceIdentifier);
 }
 
-void RemoteResourceCache::ensureResourceUseCounter(QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
-{
-    auto result = m_resourceUseCounters.add(renderingResourceIdentifier, ResourceUseCounter { });
-    if (!result.isNewEntry) {
-        auto& state = result.iterator->value.state;
-        // FIXME: We should consider making this assertion MESSAGE_CHECK the web process.
-        ASSERT(state == ResourceState::ToBeDeleted);
-        state = ResourceState::Alive;
-    }
-}
-
 void RemoteResourceCache::deleteAllFonts()
 {
     m_resourceHeap.deleteAllFonts();
 }
 
-bool RemoteResourceCache::maybeRemoveResource(QualifiedRenderingResourceIdentifier renderingResourceIdentifier, ResourceUseCountersMap::iterator& iterator)
+bool RemoteResourceCache::releaseRemoteResource(QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
 {
-    auto& value = iterator->value;
-    if (value.state == ResourceState::Alive || value.useOrPendingCount < 0)
-        return true;
-
-    if (value.useOrPendingCount) {
-        // This means we've hit a situation that's something like the following:
-        //
-        // The WP sends:
-        // 1. Send cache resource message
-        // 2. Use resource 2x
-        // 3. Send release resource message with useCount = 2
-        // 4. Send cache resource message again for the same resource
-        // 5. Use resource 4 times
-        // 6. Send release resource message with useCount = 4
-        //
-        // The GPUP sees:
-        // 1. The cache resource message
-        // 2. Use resource 2x
-        // 3. Use resource 3x more times (from step 5 above)
-        // 4. Release resource message with useCount = 2  <== This part right here
-        // 5. ... more stuff ...
-        //
-        // In this situation, we've got a head-start on a future frame's rendering commands,
-        // using a resource which was cached from a previous frame. (This is not a problem.)
-        // Therefore, we know that, in the future, there's going to be another cache resource
-        // message which will want us to cache this exact same resource that we already have
-        // cached.
-        //
-        // So, let's just not remove the resource, just in case there are _more_ rendering
-        // commands we can get a head start on before the cache resource message eventually
-        // gets delivered. The eventual cache resource command is smart enough to realize that
-        // the thing it's supposed to be caching is already in the cache, and will correctly
-        // do nothing.
-
-        return true;
-    }
-
-    m_resourceUseCounters.remove(iterator);
-
     if (m_resourceHeap.removeImageBuffer(renderingResourceIdentifier)
-        || m_resourceHeap.removeNativeImage(renderingResourceIdentifier)) {
-        updateHasActiveDrawables();
+        || m_resourceHeap.removeNativeImage(renderingResourceIdentifier)
+        || m_resourceHeap.removeFont(renderingResourceIdentifier))
         return true;
-    }
-    if (m_resourceHeap.removeFont(renderingResourceIdentifier))
-        return true;
 
     // Caching the remote resource should have happened before releasing it.
     return false;
 }
 
-void RemoteResourceCache::recordResourceUse(QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
-{
-    auto iterator = m_resourceUseCounters.find(renderingResourceIdentifier);
-
-    ASSERT(iterator != m_resourceUseCounters.end());
-
-    ResourceUseCounter& useCounter = iterator->value;
-    ++useCounter.useOrPendingCount;
-
-    maybeRemoveResource(renderingResourceIdentifier, iterator);
-}
-
-bool RemoteResourceCache::releaseRemoteResource(QualifiedRenderingResourceIdentifier renderingResourceIdentifier, uint64_t useCount)
-{
-    auto iterator = m_resourceUseCounters.find(renderingResourceIdentifier);
-    if (iterator == m_resourceUseCounters.end())
-        return false;
-    ResourceUseCounter& useCounter = iterator->value;
-    useCounter.state = ResourceState::ToBeDeleted;
-    useCounter.useOrPendingCount -= useCount;
-    return maybeRemoveResource(renderingResourceIdentifier, iterator);
-}
-
-void RemoteResourceCache::updateHasActiveDrawables()
-{
-    m_hasActiveDrawables = m_resourceHeap.hasImageBuffer() || m_resourceHeap.hasNativeImage();
-}
-
 } // namespace WebKit
 
 #endif // ENABLE(GPU_PROCESS)

Modified: branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020-2021 Apple Inc.  All rights reserved.
+ * Copyright (C) 2020-2022 Apple Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -43,7 +43,6 @@
 class RemoteResourceCache {
 public:
     RemoteResourceCache(WebCore::ProcessIdentifier webProcessIdentifier);
-    RemoteResourceCache(RemoteResourceCache&&);
 
     void cacheImageBuffer(Ref<WebCore::ImageBuffer>&&, QualifiedRenderingResourceIdentifier);
     WebCore::ImageBuffer* cachedImageBuffer(QualifiedRenderingResourceIdentifier) const;
@@ -52,45 +51,14 @@
     void cacheFont(Ref<WebCore::Font>&&, QualifiedRenderingResourceIdentifier);
     WebCore::Font* cachedFont(QualifiedRenderingResourceIdentifier) const;
     void deleteAllFonts();
-    bool releaseRemoteResource(QualifiedRenderingResourceIdentifier, uint64_t useCount);
-    void recordResourceUse(QualifiedRenderingResourceIdentifier);
+    bool releaseRemoteResource(QualifiedRenderingResourceIdentifier);
 
     const WebCore::DisplayList::ResourceHeap& resourceHeap() const { return m_resourceHeap; }
 
-    bool hasActiveDrawables() const { return m_hasActiveDrawables; }
+    bool hasActiveDrawables() const { return m_resourceHeap.hasImageBuffer() || m_resourceHeap.hasNativeImage(); }
 
 private:
-    // Because the cache/release messages are sent asynchronously from the display list items which
-    // reference the resources, it's totally possible that we see a release message before we've
-    // executed all the display list items which reference the resource. The web process tells us
-    // how many display list items will reference this resource, and we defer deletion of the resource
-    // until we execute that many display list items. It's actually a bit worse than this, though,
-    // because we may actually see a *new* cache message during the time when deletion is deferred.
-    //
-    // We can only safely delete a resource when:
-    // 1. All the cache messages have an accompanying release message, and
-    // 2. We've processed as many display list items that reference a particular resource as the web
-    // process has encoded.
-    enum class ResourceState {
-        Alive,
-        ToBeDeleted
-    };
-    struct ResourceUseCounter {
-        ResourceState state { ResourceState::Alive };
-        int64_t useOrPendingCount { 0 };
-    };
-    using ResourceUseCountersMap = HashMap<QualifiedRenderingResourceIdentifier, ResourceUseCounter>;
-
-    bool maybeRemoveResource(QualifiedRenderingResourceIdentifier, ResourceUseCountersMap::iterator&);
-    void ensureResourceUseCounter(QualifiedRenderingResourceIdentifier);
-
-    void updateHasActiveDrawables();
-
     QualifiedResourceHeap m_resourceHeap;
-
-    ResourceUseCountersMap m_resourceUseCounters;
-
-    std::atomic<bool> m_hasActiveDrawables { false };
 };
 
 } // namespace WebKit

Modified: branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2021-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -409,7 +409,7 @@
         return;
     }
 
-    m_renderingBackend->recordNativeImageUse(image);
+    m_renderingBackend->remoteResourceCacheProxy().recordNativeImageUse(image);
 }
 
 void RemoteDisplayListRecorderProxy::recordResourceUse(Font& font)
@@ -419,7 +419,7 @@
         return;
     }
 
-    m_renderingBackend->recordFontUse(font);
+    m_renderingBackend->remoteResourceCacheProxy().recordFontUse(font);
 }
 
 void RemoteDisplayListRecorderProxy::recordResourceUse(ImageBuffer& imageBuffer)
@@ -429,7 +429,7 @@
         return;
     }
 
-    m_renderingBackend->recordImageBufferUse(imageBuffer);
+    m_renderingBackend->remoteResourceCacheProxy().recordImageBufferUse(imageBuffer);
 }
 
 void RemoteDisplayListRecorderProxy::flushContext(GraphicsContextFlushIdentifier identifier)

Modified: branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -255,9 +255,9 @@
     sendToStream(Messages::RemoteRenderingBackend::DeleteAllFonts());
 }
 
-void RemoteRenderingBackendProxy::releaseRemoteResource(RenderingResourceIdentifier renderingResourceIdentifier, uint64_t useCount)
+void RemoteRenderingBackendProxy::releaseRemoteResource(RenderingResourceIdentifier renderingResourceIdentifier)
 {
-    sendToStream(Messages::RemoteRenderingBackend::ReleaseRemoteResource(renderingResourceIdentifier, useCount));
+    sendToStream(Messages::RemoteRenderingBackend::ReleaseRemoteResource(renderingResourceIdentifier));
 }
 
 void RemoteRenderingBackendProxy::finalizeRenderingUpdate()
@@ -323,21 +323,6 @@
     m_needsWakeUpSemaphoreForDisplayListStream = false;
 }
 
-void RemoteRenderingBackendProxy::recordNativeImageUse(NativeImage& image)
-{
-    m_remoteResourceCacheProxy.recordNativeImageUse(image);
-}
-
-void RemoteRenderingBackendProxy::recordFontUse(Font& font)
-{
-    m_remoteResourceCacheProxy.recordFontUse(font);
-}
-
-void RemoteRenderingBackendProxy::recordImageBufferUse(ImageBuffer& imageBuffer)
-{
-    m_remoteResourceCacheProxy.recordImageBufferUse(imageBuffer);
-}
-
 bool RemoteRenderingBackendProxy::isCached(const ImageBuffer& imageBuffer) const
 {
     if (auto cachedImageBuffer = m_remoteResourceCacheProxy.cachedImageBuffer(imageBuffer.renderingResourceIdentifier())) {

Modified: branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020-2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -97,7 +97,7 @@
     void cacheNativeImage(const ShareableBitmap::Handle&, WebCore::RenderingResourceIdentifier);
     void cacheFont(Ref<WebCore::Font>&&);
     void deleteAllFonts();
-    void releaseRemoteResource(WebCore::RenderingResourceIdentifier, uint64_t useCount);
+    void releaseRemoteResource(WebCore::RenderingResourceIdentifier);
 
     void finalizeRenderingUpdate();
     RenderingUpdateID renderingUpdateID() const { return m_renderingUpdateID; }
@@ -131,10 +131,6 @@
         sendToStream(WTFMove(message), renderingBackendIdentifier());
     }
 
-    void recordNativeImageUse(WebCore::NativeImage&);
-    void recordFontUse(WebCore::Font&);
-    void recordImageBufferUse(WebCore::ImageBuffer&);
-
 private:
     explicit RemoteRenderingBackendProxy(WebPage&);
 

Modified: branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020 Apple Inc. All rights reserved.
+ * Copyright (C) 2020-2022 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -46,13 +46,13 @@
 
 void RemoteResourceCacheProxy::cacheImageBuffer(WebCore::ImageBuffer& imageBuffer)
 {
-    auto addResult = m_imageBuffers.add(imageBuffer.renderingResourceIdentifier(), ImageBufferState { imageBuffer, 0 });
+    auto addResult = m_imageBuffers.add(imageBuffer.renderingResourceIdentifier(), imageBuffer);
     ASSERT_UNUSED(addResult, addResult.isNewEntry);
 }
 
 ImageBuffer* RemoteResourceCacheProxy::cachedImageBuffer(RenderingResourceIdentifier renderingResourceIdentifier) const
 {
-    return m_imageBuffers.get(renderingResourceIdentifier).imageBuffer.get();
+    return m_imageBuffers.get(renderingResourceIdentifier).get();
 }
 
 void RemoteResourceCacheProxy::releaseImageBuffer(RenderingResourceIdentifier renderingResourceIdentifier)
@@ -60,12 +60,10 @@
     auto iterator = m_imageBuffers.find(renderingResourceIdentifier);
     RELEASE_ASSERT(iterator != m_imageBuffers.end());
 
-    auto useCount = iterator->value.useCount;
-
     auto success = m_imageBuffers.remove(iterator);
     ASSERT_UNUSED(success, success);
 
-    m_remoteRenderingBackendProxy.releaseRemoteResource(renderingResourceIdentifier, useCount);
+    m_remoteRenderingBackendProxy.releaseRemoteResource(renderingResourceIdentifier);
 }
 
 inline static RefPtr<ShareableBitmap> createShareableBitmapFromNativeImage(NativeImage& image)
@@ -87,18 +85,14 @@
 void RemoteResourceCacheProxy::recordImageBufferUse(WebCore::ImageBuffer& imageBuffer)
 {
     auto iterator = m_imageBuffers.find(imageBuffer.renderingResourceIdentifier());
-    ASSERT(iterator != m_imageBuffers.end());
-
-    ++iterator->value.useCount;
+    ASSERT_UNUSED(iterator, iterator != m_imageBuffers.end());
 }
 
 void RemoteResourceCacheProxy::recordNativeImageUse(NativeImage& image)
 {
     auto iterator = m_nativeImages.find(image.renderingResourceIdentifier());
-    if (iterator != m_nativeImages.end()) {
-        ++iterator->value.useCount;
+    if (iterator != m_nativeImages.end())
         return;
-    }
 
     auto bitmap = createShareableBitmapFromNativeImage(image);
     if (!bitmap)
@@ -109,7 +103,7 @@
     if (handle.isNull())
         return;
 
-    m_nativeImages.add(image.renderingResourceIdentifier(), NativeImageState { image, 1 });
+    m_nativeImages.add(image.renderingResourceIdentifier(), image);
 
     // Set itself as an observer to NativeImage, so releaseNativeImage()
     // gets called when NativeImage is being deleleted.
@@ -121,9 +115,7 @@
 
 void RemoteResourceCacheProxy::recordFontUse(Font& font)
 {
-    auto result = m_fonts.ensure(font.renderingResourceIdentifier(), [&] {
-        return FontState { m_remoteRenderingBackendProxy.renderingUpdateID(), 1 };
-    });
+    auto result = m_fonts.add(font.renderingResourceIdentifier(), m_remoteRenderingBackendProxy.renderingUpdateID());
 
     if (result.isNewEntry) {
         m_remoteRenderingBackendProxy.cacheFont(font);
@@ -132,9 +124,8 @@
     }
 
     auto& currentState = result.iterator->value;
-    ++currentState.useCount;
-    if (currentState.lastRenderingUpdateVersionUsedWithin != m_remoteRenderingBackendProxy.renderingUpdateID()) {
-        currentState.lastRenderingUpdateVersionUsedWithin = m_remoteRenderingBackendProxy.renderingUpdateID();
+    if (currentState != m_remoteRenderingBackendProxy.renderingUpdateID()) {
+        currentState = m_remoteRenderingBackendProxy.renderingUpdateID();
         ++m_numberOfFontsUsedInCurrentRenderingUpdate;
     }
 }
@@ -144,18 +135,16 @@
     auto iterator = m_nativeImages.find(renderingResourceIdentifier);
     RELEASE_ASSERT(iterator != m_nativeImages.end());
 
-    auto useCount = iterator->value.useCount;
-
     auto success = m_nativeImages.remove(iterator);
     ASSERT_UNUSED(success, success);
 
-    m_remoteRenderingBackendProxy.releaseRemoteResource(renderingResourceIdentifier, useCount);
+    m_remoteRenderingBackendProxy.releaseRemoteResource(renderingResourceIdentifier);
 }
 
 void RemoteResourceCacheProxy::clearNativeImageMap()
 {
     for (auto& nativeImageState : m_nativeImages.values())
-        nativeImageState.image->removeObserver(*this);
+        nativeImageState->removeObserver(*this);
     m_nativeImages.clear();
 }
 
@@ -167,7 +156,7 @@
 void RemoteResourceCacheProxy::releaseAllRemoteFonts()
 {
     for (auto& fontState : m_fonts)
-        m_remoteRenderingBackendProxy.releaseRemoteResource(fontState.key, fontState.value.useCount);
+        m_remoteRenderingBackendProxy.releaseRemoteResource(fontState.key);
 }
 
 void RemoteResourceCacheProxy::clearFontMap()
@@ -188,9 +177,9 @@
     HashSet<WebCore::RenderingResourceIdentifier> toRemove;
     auto renderingUpdateID = m_remoteRenderingBackendProxy.renderingUpdateID();
     for (auto& item : m_fonts) {
-        if (renderingUpdateID - item.value.lastRenderingUpdateVersionUsedWithin >= minimumRenderingUpdateCountToKeepFontAlive) {
+        if (renderingUpdateID - item.value >= minimumRenderingUpdateCountToKeepFontAlive) {
             toRemove.add(item.key);
-            m_remoteRenderingBackendProxy.releaseRemoteResource(item.key, item.value.useCount);
+            m_remoteRenderingBackendProxy.releaseRemoteResource(item.key);
         }
     }
 
@@ -212,17 +201,16 @@
 
     // Get a copy of m_imageBuffers.values() because clearBackend()
     // may release some of the cached ImageBuffers.
-    for (auto& item : copyToVector(m_imageBuffers.values())) {
-        if (!item.imageBuffer)
+    for (auto& imageBuffer : copyToVector(m_imageBuffers.values())) {
+        if (!imageBuffer)
             continue;
-        item.useCount = 0;
-        item.imageBuffer->clearBackend();
+        imageBuffer->clearBackend();
     }
 
-    for (auto& item : m_imageBuffers.values()) {
-        if (!item.imageBuffer)
+    for (auto& imageBuffer : m_imageBuffers.values()) {
+        if (!imageBuffer)
             continue;
-        m_remoteRenderingBackendProxy.createRemoteImageBuffer(*item.imageBuffer);
+        m_remoteRenderingBackendProxy.createRemoteImageBuffer(*imageBuffer);
     }
 }
 

Modified: branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h (288983 => 288984)


--- branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h	2022-02-02 20:33:27 UTC (rev 288983)
+++ branches/safari-613-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h	2022-02-02 20:40:57 UTC (rev 288984)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020 Apple Inc.  All rights reserved.
+ * Copyright (C) 2020-2022 Apple Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -63,23 +63,9 @@
     unsigned imagesCount() const { return m_nativeImages.size(); }
 
 private:
-    struct ImageBufferState {
-        WeakPtr<WebCore::ImageBuffer> imageBuffer;
-        uint64_t useCount;
-    };
-    using ImageBufferHashMap = HashMap<WebCore::RenderingResourceIdentifier, ImageBufferState>;
-
-    struct NativeImageState {
-        WeakPtr<WebCore::NativeImage> image;
-        uint64_t useCount;
-    };
-    using NativeImageHashMap = HashMap<WebCore::RenderingResourceIdentifier, NativeImageState>;
-
-    struct FontState {
-        RenderingUpdateID lastRenderingUpdateVersionUsedWithin;
-        uint64_t useCount;
-    };
-    using FontHashMap = HashMap<WebCore::RenderingResourceIdentifier, FontState>;
+    using ImageBufferHashMap = HashMap<WebCore::RenderingResourceIdentifier, WeakPtr<WebCore::ImageBuffer>>;
+    using NativeImageHashMap = HashMap<WebCore::RenderingResourceIdentifier, WeakPtr<WebCore::NativeImage>>;
+    using FontHashMap = HashMap<WebCore::RenderingResourceIdentifier, RenderingUpdateID>;
     
     void releaseNativeImage(WebCore::RenderingResourceIdentifier) override;
     void clearNativeImageMap();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to