Title: [284048] trunk
Revision
284048
Author
[email protected]
Date
2021-10-12 15:42:19 -0700 (Tue, 12 Oct 2021)

Log Message

[GPU Process] Unique RenderingResourceIdentifiers Part 9: Finish migrating RemoteResourceCache to QualifiedRenderingResourceIdentifier
https://bugs.webkit.org/show_bug.cgi?id=231414
<rdar://problem/84015584>

Reviewed by Said Abou-Hallawa.

Source/WebCore:

We can delete a bunch of the methods of ResourceHeapImpl because they are only used in the
GPU Process-specific implementation.

No new tests because there is no behavior change.

* platform/graphics/displaylists/DisplayList.h:
* platform/graphics/displaylists/DisplayListResourceHeap.h:
(WebCore::DisplayList::ResourceHeap::add): Deleted.
(WebCore::DisplayList::ResourceHeap::getImageBuffer const): Deleted.
(WebCore::DisplayList::ResourceHeap::getNativeImage const): Deleted.
(WebCore::DisplayList::ResourceHeap::getFont const): Deleted.
(WebCore::DisplayList::ResourceHeap::hasImageBuffer const): Deleted.
(WebCore::DisplayList::ResourceHeap::hasNativeImage const): Deleted.
(WebCore::DisplayList::ResourceHeap::hasFont const): Deleted.
(WebCore::DisplayList::ResourceHeap::removeImageBuffer): Deleted.
(WebCore::DisplayList::ResourceHeap::removeNativeImage): Deleted.
(WebCore::DisplayList::ResourceHeap::removeFont): Deleted.
(WebCore::DisplayList::ResourceHeap::clear): Deleted.
(WebCore::DisplayList::ResourceHeap::deleteAllFonts): Deleted.

Source/WebKit:

Now that DisplayList::ResourceHeap exists, we can make a ResourceHeap subclass specifically for
the GPU process. The implementation of this class holds QualifiedRenderingResourceIdentifiers
instead of RenderingResourceIdentifier.

* GPUProcess/graphics/QualifiedResourceHeap.h: Added.
(WebKit::QualifiedResourceHeap::QualifiedResourceHeap):
(WebKit::QualifiedResourceHeap::add):
(WebKit::QualifiedResourceHeap::getImageBuffer const):
(WebKit::QualifiedResourceHeap::getNativeImage const):
(WebKit::QualifiedResourceHeap::getFont const):
(WebKit::QualifiedResourceHeap::hasImageBuffer const):
(WebKit::QualifiedResourceHeap::hasNativeImage const):
(WebKit::QualifiedResourceHeap::hasFont const):
(WebKit::QualifiedResourceHeap::removeImageBuffer):
(WebKit::QualifiedResourceHeap::removeNativeImage):
(WebKit::QualifiedResourceHeap::removeFont):
(WebKit::QualifiedResourceHeap::deleteAllFonts):
* GPUProcess/graphics/RemoteResourceCache.cpp:
(WebKit::RemoteResourceCache::RemoteResourceCache):
(WebKit::RemoteResourceCache::cacheImageBuffer):
(WebKit::RemoteResourceCache::cachedImageBuffer const):
(WebKit::RemoteResourceCache::cacheNativeImage):
(WebKit::RemoteResourceCache::cachedNativeImage const):
(WebKit::RemoteResourceCache::cacheFont):
(WebKit::RemoteResourceCache::cachedFont const):
(WebKit::RemoteResourceCache::maybeRemoveResource):
* GPUProcess/graphics/RemoteResourceCache.h:
* WebKit.xcodeproj/project.pbxproj:

Tools:

* TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
(TestWebKitAPI::TEST):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (284047 => 284048)


--- trunk/Source/WebCore/ChangeLog	2021-10-12 22:40:20 UTC (rev 284047)
+++ trunk/Source/WebCore/ChangeLog	2021-10-12 22:42:19 UTC (rev 284048)
@@ -1,3 +1,31 @@
+2021-10-12  Myles C. Maxfield  <[email protected]>
+
+        [GPU Process] Unique RenderingResourceIdentifiers Part 9: Finish migrating RemoteResourceCache to QualifiedRenderingResourceIdentifier
+        https://bugs.webkit.org/show_bug.cgi?id=231414
+        <rdar://problem/84015584>
+
+        Reviewed by Said Abou-Hallawa.
+
+        We can delete a bunch of the methods of ResourceHeapImpl because they are only used in the
+        GPU Process-specific implementation.
+
+        No new tests because there is no behavior change.
+
+        * platform/graphics/displaylists/DisplayList.h:
+        * platform/graphics/displaylists/DisplayListResourceHeap.h:
+        (WebCore::DisplayList::ResourceHeap::add): Deleted.
+        (WebCore::DisplayList::ResourceHeap::getImageBuffer const): Deleted.
+        (WebCore::DisplayList::ResourceHeap::getNativeImage const): Deleted.
+        (WebCore::DisplayList::ResourceHeap::getFont const): Deleted.
+        (WebCore::DisplayList::ResourceHeap::hasImageBuffer const): Deleted.
+        (WebCore::DisplayList::ResourceHeap::hasNativeImage const): Deleted.
+        (WebCore::DisplayList::ResourceHeap::hasFont const): Deleted.
+        (WebCore::DisplayList::ResourceHeap::removeImageBuffer): Deleted.
+        (WebCore::DisplayList::ResourceHeap::removeNativeImage): Deleted.
+        (WebCore::DisplayList::ResourceHeap::removeFont): Deleted.
+        (WebCore::DisplayList::ResourceHeap::clear): Deleted.
+        (WebCore::DisplayList::ResourceHeap::deleteAllFonts): Deleted.
+
 2021-10-12  David Kilzer  <[email protected]>
 
         Switch WTF::bridge_cast to use type traits

Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayList.h (284047 => 284048)


--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayList.h	2021-10-12 22:40:20 UTC (rev 284047)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayList.h	2021-10-12 22:42:19 UTC (rev 284048)
@@ -127,7 +127,7 @@
 
     static bool shouldDumpForFlags(AsTextFlags, ItemHandle);
 
-    ResourceHeap m_resourceHeap;
+    LocalResourceHeap m_resourceHeap;
     std::unique_ptr<ItemBuffer> m_items;
     Vector<std::optional<FloatRect>> m_drawingItemExtents;
     bool m_tracksDrawingItemExtents { true };

Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayListResourceHeap.h (284047 => 284048)


--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayListResourceHeap.h	2021-10-12 22:40:20 UTC (rev 284047)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayListResourceHeap.h	2021-10-12 22:42:19 UTC (rev 284048)
@@ -37,85 +37,50 @@
 
 class ResourceHeap {
 public:
+    virtual ~ResourceHeap() = default;
+
+    virtual ImageBuffer* getImageBuffer(RenderingResourceIdentifier) const = 0;
+    virtual NativeImage* getNativeImage(RenderingResourceIdentifier) const = 0;
+    virtual Font* getFont(RenderingResourceIdentifier) const = 0;
+};
+
+class LocalResourceHeap : public ResourceHeap {
+public:
     void add(RenderingResourceIdentifier renderingResourceIdentifier, Ref<ImageBuffer>&& imageBuffer)
     {
-        if (m_resources.add(renderingResourceIdentifier, RefPtr<ImageBuffer>(WTFMove(imageBuffer))).isNewEntry)
-            ++m_imageBufferCount;
+        m_resources.add(renderingResourceIdentifier, WTFMove(imageBuffer));
     }
 
     void add(RenderingResourceIdentifier renderingResourceIdentifier, Ref<NativeImage>&& image)
     {
-        if (m_resources.add(renderingResourceIdentifier, RefPtr<NativeImage>(WTFMove(image))).isNewEntry)
-            ++m_nativeImageCount;
+        m_resources.add(renderingResourceIdentifier, WTFMove(image));
     }
 
     void add(RenderingResourceIdentifier renderingResourceIdentifier, Ref<Font>&& font)
     {
-        if (m_resources.add(renderingResourceIdentifier, RefPtr<Font>(WTFMove(font))).isNewEntry)
-            ++m_fontCount;
+        m_resources.add(renderingResourceIdentifier, WTFMove(font));
     }
 
-    ImageBuffer* getImageBuffer(RenderingResourceIdentifier renderingResourceIdentifier) const
+    ImageBuffer* getImageBuffer(RenderingResourceIdentifier renderingResourceIdentifier) const final
     {
         return get<ImageBuffer>(renderingResourceIdentifier);
     }
 
-    NativeImage* getNativeImage(RenderingResourceIdentifier renderingResourceIdentifier) const
+    NativeImage* getNativeImage(RenderingResourceIdentifier renderingResourceIdentifier) const final
     {
         return get<NativeImage>(renderingResourceIdentifier);
     }
 
-    Font* getFont(RenderingResourceIdentifier renderingResourceIdentifier) const
+    Font* getFont(RenderingResourceIdentifier renderingResourceIdentifier) const final
     {
         return get<Font>(renderingResourceIdentifier);
     }
 
-    bool hasImageBuffer() const
-    {
-        return m_imageBufferCount;
-    }
-
-    bool hasNativeImage() const
-    {
-        return m_nativeImageCount;
-    }
-
-    bool hasFont() const
-    {
-        return m_fontCount;
-    }
-
-    bool removeImageBuffer(RenderingResourceIdentifier renderingResourceIdentifier)
-    {
-        return remove<ImageBuffer>(renderingResourceIdentifier, m_imageBufferCount);
-    }
-
-    bool removeNativeImage(RenderingResourceIdentifier renderingResourceIdentifier)
-    {
-        return remove<NativeImage>(renderingResourceIdentifier, m_nativeImageCount);
-    }
-
-    bool removeFont(RenderingResourceIdentifier renderingResourceIdentifier)
-    {
-        return remove<Font>(renderingResourceIdentifier, m_fontCount);
-    }
-
     void clear()
     {
         m_resources.clear();
-        m_imageBufferCount = 0;
-        m_nativeImageCount = 0;
-        m_fontCount = 0;
     }
 
-    void deleteAllFonts()
-    {
-        m_resources.removeIf([] (const auto& resource) {
-            return std::holds_alternative<RefPtr<Font>>(resource.value);
-        });
-        m_fontCount = 0;
-    }
-
 private:
     template <typename T>
     T* get(RenderingResourceIdentifier renderingResourceIdentifier) const
@@ -123,30 +88,12 @@
         auto iterator = m_resources.find(renderingResourceIdentifier);
         if (iterator == m_resources.end())
             return nullptr;
-        if (!std::holds_alternative<RefPtr<T>>(iterator->value))
-            return nullptr;
-        return WTF::get<RefPtr<T>>(iterator->value).get();
+        ASSERT(std::holds_alternative<Ref<T>>(iterator->value));
+        return std::get<Ref<T>>(iterator->value).ptr();
     }
 
-    template <typename T>
-    bool remove(RenderingResourceIdentifier renderingResourceIdentifier, unsigned& counter)
-    {
-        auto iterator = m_resources.find(renderingResourceIdentifier);
-        if (iterator == m_resources.end())
-            return false;
-        if (!std::holds_alternative<RefPtr<T>>(iterator->value))
-            return false;
-        auto result = m_resources.remove(iterator);
-        ASSERT(result);
-        --counter;
-        return result;
-    }
-
-    using Resource = Variant<RefPtr<ImageBuffer>, RefPtr<NativeImage>, RefPtr<Font>>;
+    using Resource = Variant<std::monostate, Ref<ImageBuffer>, Ref<NativeImage>, Ref<Font>>;
     HashMap<RenderingResourceIdentifier, Resource> m_resources;
-    unsigned m_imageBufferCount { 0 };
-    unsigned m_nativeImageCount { 0 };
-    unsigned m_fontCount { 0 };
 };
 
 }

Modified: trunk/Source/WebKit/ChangeLog (284047 => 284048)


--- trunk/Source/WebKit/ChangeLog	2021-10-12 22:40:20 UTC (rev 284047)
+++ trunk/Source/WebKit/ChangeLog	2021-10-12 22:42:19 UTC (rev 284048)
@@ -1,3 +1,40 @@
+2021-10-12  Myles C. Maxfield  <[email protected]>
+
+        [GPU Process] Unique RenderingResourceIdentifiers Part 9: Finish migrating RemoteResourceCache to QualifiedRenderingResourceIdentifier
+        https://bugs.webkit.org/show_bug.cgi?id=231414
+        <rdar://problem/84015584>
+
+        Reviewed by Said Abou-Hallawa.
+
+        Now that DisplayList::ResourceHeap exists, we can make a ResourceHeap subclass specifically for
+        the GPU process. The implementation of this class holds QualifiedRenderingResourceIdentifiers
+        instead of RenderingResourceIdentifier.
+
+        * GPUProcess/graphics/QualifiedResourceHeap.h: Added.
+        (WebKit::QualifiedResourceHeap::QualifiedResourceHeap):
+        (WebKit::QualifiedResourceHeap::add):
+        (WebKit::QualifiedResourceHeap::getImageBuffer const):
+        (WebKit::QualifiedResourceHeap::getNativeImage const):
+        (WebKit::QualifiedResourceHeap::getFont const):
+        (WebKit::QualifiedResourceHeap::hasImageBuffer const):
+        (WebKit::QualifiedResourceHeap::hasNativeImage const):
+        (WebKit::QualifiedResourceHeap::hasFont const):
+        (WebKit::QualifiedResourceHeap::removeImageBuffer):
+        (WebKit::QualifiedResourceHeap::removeNativeImage):
+        (WebKit::QualifiedResourceHeap::removeFont):
+        (WebKit::QualifiedResourceHeap::deleteAllFonts):
+        * GPUProcess/graphics/RemoteResourceCache.cpp:
+        (WebKit::RemoteResourceCache::RemoteResourceCache):
+        (WebKit::RemoteResourceCache::cacheImageBuffer):
+        (WebKit::RemoteResourceCache::cachedImageBuffer const):
+        (WebKit::RemoteResourceCache::cacheNativeImage):
+        (WebKit::RemoteResourceCache::cachedNativeImage const):
+        (WebKit::RemoteResourceCache::cacheFont):
+        (WebKit::RemoteResourceCache::cachedFont const):
+        (WebKit::RemoteResourceCache::maybeRemoveResource):
+        * GPUProcess/graphics/RemoteResourceCache.h:
+        * WebKit.xcodeproj/project.pbxproj:
+
 2021-10-12  Simon Fraser  <[email protected]>
 
         Scrolling thread animations need to commit layers on the scrolling thread

Added: trunk/Source/WebKit/GPUProcess/graphics/QualifiedResourceHeap.h (0 => 284048)


--- trunk/Source/WebKit/GPUProcess/graphics/QualifiedResourceHeap.h	                        (rev 0)
+++ trunk/Source/WebKit/GPUProcess/graphics/QualifiedResourceHeap.h	2021-10-12 22:42:19 UTC (rev 284048)
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2021 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(GPU_PROCESS)
+
+#include "QualifiedRenderingResourceIdentifier.h"
+#include <WebCore/DisplayListResourceHeap.h>
+#include <WebCore/Font.h>
+#include <WebCore/ImageBuffer.h>
+#include <WebCore/NativeImage.h>
+#include <WebCore/ProcessIdentifier.h>
+#include <wtf/HashMap.h>
+
+namespace WebKit {
+
+class QualifiedResourceHeap : public WebCore::DisplayList::ResourceHeap {
+public:
+    QualifiedResourceHeap(WebCore::ProcessIdentifier webProcessIdentifier)
+        : m_webProcessIdentifier(webProcessIdentifier)
+    {
+    }
+
+    void add(QualifiedRenderingResourceIdentifier renderingResourceIdentifier, Ref<WebCore::ImageBuffer>&& imageBuffer)
+    {
+        add(renderingResourceIdentifier, WTFMove(imageBuffer), m_imageBufferCount);
+    }
+
+    void add(QualifiedRenderingResourceIdentifier renderingResourceIdentifier, Ref<WebCore::NativeImage>&& image)
+    {
+        add(renderingResourceIdentifier, WTFMove(image), m_nativeImageCount);
+    }
+
+    void add(QualifiedRenderingResourceIdentifier renderingResourceIdentifier, Ref<WebCore::Font>&& font)
+    {
+        add(renderingResourceIdentifier, WTFMove(font), m_fontCount);
+    }
+
+    WebCore::ImageBuffer* getImageBuffer(WebCore::RenderingResourceIdentifier renderingResourceIdentifier) const final
+    {
+        return get<WebCore::ImageBuffer>({ renderingResourceIdentifier, m_webProcessIdentifier });
+    }
+
+    WebCore::NativeImage* getNativeImage(WebCore::RenderingResourceIdentifier renderingResourceIdentifier) const final
+    {
+        return get<WebCore::NativeImage>({ renderingResourceIdentifier, m_webProcessIdentifier });
+    }
+
+    WebCore::Font* getFont(WebCore::RenderingResourceIdentifier renderingResourceIdentifier) const final
+    {
+        return get<WebCore::Font>({ renderingResourceIdentifier, m_webProcessIdentifier });
+    }
+
+    WebCore::ImageBuffer* getImageBuffer(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const
+    {
+        return get<WebCore::ImageBuffer>(renderingResourceIdentifier);
+    }
+
+    WebCore::NativeImage* getNativeImage(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const
+    {
+        return get<WebCore::NativeImage>(renderingResourceIdentifier);
+    }
+
+    WebCore::Font* getFont(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const
+    {
+        return get<WebCore::Font>(renderingResourceIdentifier);
+    }
+
+    bool hasImageBuffer() const
+    {
+        checkInvariants();
+        return m_imageBufferCount;
+    }
+
+    bool hasNativeImage() const
+    {
+        checkInvariants();
+        return m_nativeImageCount;
+    }
+
+    bool hasFont() const
+    {
+        checkInvariants();
+        return m_fontCount;
+    }
+
+    bool removeImageBuffer(QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
+    {
+        return remove<WebCore::ImageBuffer>(renderingResourceIdentifier, m_imageBufferCount);
+    }
+
+    bool removeNativeImage(QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
+    {
+        return remove<WebCore::NativeImage>(renderingResourceIdentifier, m_nativeImageCount);
+    }
+
+    bool removeFont(QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
+    {
+        return remove<WebCore::Font>(renderingResourceIdentifier, m_fontCount);
+    }
+
+    void deleteAllFonts()
+    {
+        checkInvariants();
+
+        if (!m_fontCount)
+            return;
+
+        m_resources.removeIf([] (const auto& resource) {
+            return std::holds_alternative<Ref<WebCore::Font>>(resource.value);
+        });
+
+        m_fontCount = 0;
+
+        checkInvariants();
+    }
+
+private:
+    template <typename T>
+    void add(QualifiedRenderingResourceIdentifier renderingResourceIdentifier, Ref<T>&& object, unsigned& counter)
+    {
+        checkInvariants();
+
+        ASSERT(renderingResourceIdentifier.processIdentifier() == m_webProcessIdentifier);
+        if (m_resources.add(renderingResourceIdentifier, WTFMove(object)).isNewEntry)
+            ++counter;
+
+        checkInvariants();
+    }
+
+    template <typename T>
+    T* get(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const
+    {
+        checkInvariants();
+
+        auto iterator = m_resources.find(renderingResourceIdentifier);
+        if (iterator == m_resources.end())
+            return nullptr;
+        ASSERT(std::holds_alternative<Ref<T>>(iterator->value));
+        return WTF::get<Ref<T>>(iterator->value).ptr();
+    }
+
+    template <typename T>
+    bool remove(QualifiedRenderingResourceIdentifier renderingResourceIdentifier, unsigned& counter)
+    {
+        checkInvariants();
+
+        if (!counter)
+            return false;
+
+        auto iterator = m_resources.find(renderingResourceIdentifier);
+        if (iterator == m_resources.end())
+            return false;
+        if (!std::holds_alternative<Ref<T>>(iterator->value))
+            return false;
+
+        auto result = m_resources.remove(iterator);
+        ASSERT(result);
+        --counter;
+
+        checkInvariants();
+
+        return result;
+    }
+
+    void checkInvariants() const
+    {
+#if ASSERT_ENABLED
+        unsigned imageBufferCount = 0;
+        unsigned nativeImageCount = 0;
+        unsigned fontCount = 0;
+        for (const auto& pair : m_resources) {
+            WTF::switchOn(pair.value, [&] (std::monostate) {
+                ASSERT_NOT_REACHED();
+            }, [&] (const Ref<WebCore::ImageBuffer>&) {
+                ++imageBufferCount;
+            }, [&] (const Ref<WebCore::NativeImage>&) {
+                ++nativeImageCount;
+            }, [&] (const Ref<WebCore::Font>&) {
+                ++fontCount;
+            });
+        }
+        ASSERT(imageBufferCount == m_imageBufferCount);
+        ASSERT(nativeImageCount == m_nativeImageCount);
+        ASSERT(fontCount == m_fontCount);
+        ASSERT(m_resources.size() == m_imageBufferCount + m_nativeImageCount + m_fontCount);
+#endif
+    }
+
+    using Resource = Variant<std::monostate, Ref<WebCore::ImageBuffer>, Ref<WebCore::NativeImage>, Ref<WebCore::Font>>;
+    HashMap<QualifiedRenderingResourceIdentifier, Resource> m_resources;
+    WebCore::ProcessIdentifier m_webProcessIdentifier;
+    unsigned m_imageBufferCount { 0 };
+    unsigned m_nativeImageCount { 0 };
+    unsigned m_fontCount { 0 };
+
+};
+
+} // namespace WebKit
+
+#endif
Property changes on: trunk/Source/WebKit/GPUProcess/graphics/QualifiedResourceHeap.h
___________________________________________________________________

Added: svn:eol-style

+native \ No newline at end of property

Added: svn:keywords

+Author Date Id Rev URL \ No newline at end of property

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp (284047 => 284048)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp	2021-10-12 22:40:20 UTC (rev 284047)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.cpp	2021-10-12 22:42:19 UTC (rev 284048)
@@ -32,13 +32,12 @@
 using namespace WebCore;
 
 RemoteResourceCache::RemoteResourceCache(ProcessIdentifier webProcessIdentifier)
-    : m_webProcessIdentifier(webProcessIdentifier)
+    : m_resourceHeap(webProcessIdentifier)
 {
 }
 
 RemoteResourceCache::RemoteResourceCache(RemoteResourceCache&& other)
-    : m_webProcessIdentifier(other.m_webProcessIdentifier)
-    , m_resourceHeap(WTFMove(other.m_resourceHeap))
+    : m_resourceHeap(WTFMove(other.m_resourceHeap))
     , m_resourceUseCounters(WTFMove(other.m_resourceUseCounters))
 {
     updateHasActiveDrawables();
@@ -47,8 +46,7 @@
 void RemoteResourceCache::cacheImageBuffer(Ref<ImageBuffer>&& imageBuffer, QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
 {
     ASSERT(renderingResourceIdentifier.object() == imageBuffer->renderingResourceIdentifier());
-    ASSERT(renderingResourceIdentifier.processIdentifier() == m_webProcessIdentifier);
-    m_resourceHeap.add(renderingResourceIdentifier.object(), WTFMove(imageBuffer));
+    m_resourceHeap.add(renderingResourceIdentifier, WTFMove(imageBuffer));
     updateHasActiveDrawables();
 
     ensureResourceUseCounter(renderingResourceIdentifier);
@@ -56,15 +54,13 @@
 
 ImageBuffer* RemoteResourceCache::cachedImageBuffer(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const
 {
-    ASSERT(renderingResourceIdentifier.processIdentifier() == m_webProcessIdentifier);
-    return m_resourceHeap.getImageBuffer(renderingResourceIdentifier.object());
+    return m_resourceHeap.getImageBuffer(renderingResourceIdentifier);
 }
 
 void RemoteResourceCache::cacheNativeImage(Ref<NativeImage>&& image, QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
 {
     ASSERT(renderingResourceIdentifier.object() == image->renderingResourceIdentifier());
-    ASSERT(renderingResourceIdentifier.processIdentifier() == m_webProcessIdentifier);
-    m_resourceHeap.add(renderingResourceIdentifier.object(), WTFMove(image));
+    m_resourceHeap.add(renderingResourceIdentifier, WTFMove(image));
     updateHasActiveDrawables();
 
     ensureResourceUseCounter(renderingResourceIdentifier);
@@ -72,15 +68,13 @@
 
 NativeImage* RemoteResourceCache::cachedNativeImage(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const
 {
-    ASSERT(renderingResourceIdentifier.processIdentifier() == m_webProcessIdentifier);
-    return m_resourceHeap.getNativeImage(renderingResourceIdentifier.object());
+    return m_resourceHeap.getNativeImage(renderingResourceIdentifier);
 }
 
 void RemoteResourceCache::cacheFont(Ref<Font>&& font, QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
 {
     ASSERT(renderingResourceIdentifier.object() == font->renderingResourceIdentifier());
-    ASSERT(renderingResourceIdentifier.processIdentifier() == m_webProcessIdentifier);
-    m_resourceHeap.add(renderingResourceIdentifier.object(), WTFMove(font));
+    m_resourceHeap.add(renderingResourceIdentifier, WTFMove(font));
 
     ensureResourceUseCounter(renderingResourceIdentifier);
 }
@@ -87,7 +81,7 @@
 
 Font* RemoteResourceCache::cachedFont(QualifiedRenderingResourceIdentifier renderingResourceIdentifier) const
 {
-    return m_resourceHeap.getFont(renderingResourceIdentifier.object());
+    return m_resourceHeap.getFont(renderingResourceIdentifier);
 }
 
 void RemoteResourceCache::ensureResourceUseCounter(QualifiedRenderingResourceIdentifier renderingResourceIdentifier)
@@ -147,12 +141,12 @@
 
     m_resourceUseCounters.remove(iterator);
 
-    if (m_resourceHeap.removeImageBuffer(renderingResourceIdentifier.object())
-        || m_resourceHeap.removeNativeImage(renderingResourceIdentifier.object())) {
+    if (m_resourceHeap.removeImageBuffer(renderingResourceIdentifier)
+        || m_resourceHeap.removeNativeImage(renderingResourceIdentifier)) {
         updateHasActiveDrawables();
         return true;
     }
-    if (m_resourceHeap.removeFont(renderingResourceIdentifier.object()))
+    if (m_resourceHeap.removeFont(renderingResourceIdentifier))
         return true;
 
     // Caching the remote resource should have happened before releasing it.

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h (284047 => 284048)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h	2021-10-12 22:40:20 UTC (rev 284047)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteResourceCache.h	2021-10-12 22:42:19 UTC (rev 284048)
@@ -28,6 +28,7 @@
 #if ENABLE(GPU_PROCESS)
 
 #include "QualifiedRenderingResourceIdentifier.h"
+#include "QualifiedResourceHeap.h"
 #include <WebCore/Font.h>
 #include <WebCore/ImageBuffer.h>
 #include <WebCore/NativeImage.h>
@@ -85,12 +86,11 @@
 
     void updateHasActiveDrawables();
 
-    WebCore::ProcessIdentifier m_webProcessIdentifier;
+    QualifiedResourceHeap m_resourceHeap;
 
-    WebCore::DisplayList::ResourceHeap m_resourceHeap;
+    ResourceUseCountersMap m_resourceUseCounters;
+
     std::atomic<bool> m_hasActiveDrawables { false };
-
-    ResourceUseCountersMap m_resourceUseCounters;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (284047 => 284048)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-10-12 22:40:20 UTC (rev 284047)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-10-12 22:42:19 UTC (rev 284048)
@@ -3100,6 +3100,7 @@
 		1CA8B944127C882A00576C2B /* WebInspectorUIProxyMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebInspectorUIProxyMessages.h; path = DerivedSources/WebKit2/WebInspectorUIProxyMessages.h; sourceTree = BUILT_PRODUCTS_DIR; };
 		1CBBE49E19B66C53006B7D81 /* WebInspectorUIMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebInspectorUIMessageReceiver.cpp; path = DerivedSources/WebKit2/WebInspectorUIMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
 		1CBBE49F19B66C53006B7D81 /* WebInspectorUIMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebInspectorUIMessages.h; path = DerivedSources/WebKit2/WebInspectorUIMessages.h; sourceTree = BUILT_PRODUCTS_DIR; };
+		1CBF9012271018B5000C457D /* QualifiedResourceHeap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QualifiedResourceHeap.h; sourceTree = "<group>"; };
 		1CC54AFD270F9654005BF8BE /* QualifiedRenderingResourceIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QualifiedRenderingResourceIdentifier.h; sourceTree = "<group>"; };
 		1CF18F3E26BB5D90004B1722 /* LogInitialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LogInitialization.cpp; sourceTree = "<group>"; };
 		1D0530C9258EAB4400E436F7 /* combine-feature-flags-plist.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = "combine-feature-flags-plist.py"; sourceTree = "<group>"; };
@@ -9110,6 +9111,7 @@
 				F4094CBB255304AF003D73E3 /* DisplayListReaderHandle.h */,
 				55AD09432408A0E600DE4D2F /* PlatformRemoteImageBuffer.h */,
 				1CC54AFD270F9654005BF8BE /* QualifiedRenderingResourceIdentifier.h */,
+				1CBF9012271018B5000C457D /* QualifiedResourceHeap.h */,
 				F48BB8E026F96392001C1C40 /* RemoteDisplayListRecorder.cpp */,
 				F48BB8DF26F96392001C1C40 /* RemoteDisplayListRecorder.h */,
 				F451C1002703D853002BA03B /* RemoteDisplayListRecorder.messages.in */,

Modified: trunk/Tools/ChangeLog (284047 => 284048)


--- trunk/Tools/ChangeLog	2021-10-12 22:40:20 UTC (rev 284047)
+++ trunk/Tools/ChangeLog	2021-10-12 22:42:19 UTC (rev 284048)
@@ -1,3 +1,14 @@
+2021-10-12  Myles C. Maxfield  <[email protected]>
+
+        [GPU Process] Unique RenderingResourceIdentifiers Part 9: Finish migrating RemoteResourceCache to QualifiedRenderingResourceIdentifier
+        https://bugs.webkit.org/show_bug.cgi?id=231414
+        <rdar://problem/84015584>
+
+        Reviewed by Said Abou-Hallawa.
+
+        * TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp:
+        (TestWebKitAPI::TEST):
+
 2021-10-12  Gabriel Nava Marino  <[email protected]>
 
         WebKitTestRunner should check mainFrameURL exists in InjectedBundlePage::willSendRequestForFrame

Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp (284047 => 284048)


--- trunk/Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp	2021-10-12 22:40:20 UTC (rev 284047)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp	2021-10-12 22:42:19 UTC (rev 284048)
@@ -73,7 +73,7 @@
 
     {
         auto imageBuffer = ImageBuffer::create({ 100, 100 }, RenderingMode::Unaccelerated, 1, colorSpace, PixelFormat::BGRA8);
-        ResourceHeap resourceHeap;
+        LocalResourceHeap resourceHeap;
         resourceHeap.add(imageBufferIdentifier, imageBuffer.releaseNonNull());
 
         Replayer replayer { context, list, &resourceHeap };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to