Title: [277033] trunk/Source/WebKit
Revision
277033
Author
timothy_hor...@apple.com
Date
2021-05-05 11:47:05 -0700 (Wed, 05 May 2021)

Log Message

Add and adopt RemoteLayerBackingStore::Type (instead of "accelerates drawing" bit)
https://bugs.webkit.org/show_bug.cgi?id=225384

Reviewed by Anders Carlsson.

No new tests, no behavior change, just refactoring.

* Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
(WebKit::RemoteLayerBackingStore::type const):
(WebKit::RemoteLayerBackingStore::acceleratesDrawing const): Deleted.
* Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
(WebKit::RemoteLayerBackingStore::ensureBackingStore):
(WebKit::RemoteLayerBackingStore::encode const):
(WebKit::RemoteLayerBackingStore::decode):
(WebKit::RemoteLayerBackingStore::pixelFormat const):
(WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
(WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
(WebKit::RemoteLayerBackingStore::setBufferVolatility):
* Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
(WebKit::nameForBackingStoreType):
(WebKit::operator<<):
* WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
(WebKit::PlatformCALayerRemote::updateBackingStore):
In preparation for adding another backing store type, refactor RemoteLayerBackingStore
to have a type enum instead of an "accelerates drawing" bit.

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (277032 => 277033)


--- trunk/Source/WebKit/ChangeLog	2021-05-05 18:43:25 UTC (rev 277032)
+++ trunk/Source/WebKit/ChangeLog	2021-05-05 18:47:05 UTC (rev 277033)
@@ -1,3 +1,31 @@
+2021-05-05  Tim Horton  <timothy_hor...@apple.com>
+
+        Add and adopt RemoteLayerBackingStore::Type (instead of "accelerates drawing" bit)
+        https://bugs.webkit.org/show_bug.cgi?id=225384
+
+        Reviewed by Anders Carlsson.
+
+        No new tests, no behavior change, just refactoring.
+
+        * Shared/RemoteLayerTree/RemoteLayerBackingStore.h:
+        (WebKit::RemoteLayerBackingStore::type const):
+        (WebKit::RemoteLayerBackingStore::acceleratesDrawing const): Deleted.
+        * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:
+        (WebKit::RemoteLayerBackingStore::ensureBackingStore):
+        (WebKit::RemoteLayerBackingStore::encode const):
+        (WebKit::RemoteLayerBackingStore::decode):
+        (WebKit::RemoteLayerBackingStore::pixelFormat const):
+        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
+        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
+        (WebKit::RemoteLayerBackingStore::setBufferVolatility):
+        * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
+        (WebKit::nameForBackingStoreType):
+        (WebKit::operator<<):
+        * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp:
+        (WebKit::PlatformCALayerRemote::updateBackingStore):
+        In preparation for adding another backing store type, refactor RemoteLayerBackingStore
+        to have a type enum instead of an "accelerates drawing" bit.
+
 2021-05-05  Brent Fulgham  <bfulg...@apple.com>
 
         [Cocoa] Remove access to the unused 'nvram' system command

Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.h (277032 => 277033)


--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.h	2021-05-05 18:43:25 UTC (rev 277032)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.h	2021-05-05 18:47:05 UTC (rev 277033)
@@ -52,8 +52,13 @@
     RemoteLayerBackingStore(PlatformCALayerRemote*);
     ~RemoteLayerBackingStore();
 
-    void ensureBackingStore(WebCore::FloatSize, float scale, bool acceleratesDrawing, bool deepColor, bool isOpaque);
+    enum class Type : uint8_t {
+        IOSurface,
+        Bitmap,
+    };
 
+    void ensureBackingStore(Type, WebCore::FloatSize, float scale, bool deepColor, bool isOpaque);
+
     void setNeedsDisplay(const WebCore::IntRect);
     void setNeedsDisplay();
 
@@ -61,7 +66,7 @@
 
     WebCore::FloatSize size() const { return m_size; }
     float scale() const { return m_scale; }
-    bool acceleratesDrawing() const { return m_acceleratesDrawing; }
+    Type type() const { return m_type; }
     bool isOpaque() const { return m_isOpaque; }
     unsigned bytesPerPixel() const;
 
@@ -127,7 +132,7 @@
 
     std::unique_ptr<WebCore::ThreadSafeImageBufferFlusher> m_frontBufferFlusher;
 
-    bool m_acceleratesDrawing { false };
+    Type m_type;
     bool m_deepColor { false };
 
     WebCore::RepaintRectList m_paintingRects;
@@ -136,3 +141,15 @@
 };
 
 } // namespace WebKit
+
+namespace WTF {
+
+template<> struct EnumTraits<WebKit::RemoteLayerBackingStore::Type> {
+    using values = EnumValues<
+        WebKit::RemoteLayerBackingStore::Type,
+        WebKit::RemoteLayerBackingStore::Type::IOSurface,
+        WebKit::RemoteLayerBackingStore::Type::Bitmap
+    >;
+};
+
+} // namespace WTF

Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm (277032 => 277033)


--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm	2021-05-05 18:43:25 UTC (rev 277032)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm	2021-05-05 18:47:05 UTC (rev 277033)
@@ -69,14 +69,14 @@
         context->backingStoreWillBeDestroyed(*this);
 }
 
-void RemoteLayerBackingStore::ensureBackingStore(WebCore::FloatSize size, float scale, bool acceleratesDrawing, bool deepColor, bool isOpaque)
+void RemoteLayerBackingStore::ensureBackingStore(Type type, WebCore::FloatSize size, float scale, bool deepColor, bool isOpaque)
 {
-    if (m_size == size && m_scale == scale && m_deepColor == deepColor && m_acceleratesDrawing == acceleratesDrawing && m_isOpaque == isOpaque)
+    if (m_type == type && m_size == size && m_scale == scale && m_deepColor == deepColor && m_isOpaque == isOpaque)
         return;
 
+    m_type = type;
     m_size = size;
     m_scale = scale;
-    m_acceleratesDrawing = acceleratesDrawing;
     m_deepColor = deepColor;
     m_isOpaque = isOpaque;
 
@@ -98,19 +98,24 @@
 
 void RemoteLayerBackingStore::encode(IPC::Encoder& encoder) const
 {
+    encoder << m_type;
     encoder << m_size;
     encoder << m_scale;
-    encoder << m_acceleratesDrawing;
     encoder << m_isOpaque;
 
     Optional<ImageBufferBackendHandle> handle;
     if (m_frontBuffer.imageBuffer) {
-        if (m_frontBuffer.imageBuffer->renderingMode() == WebCore::RenderingMode::Unaccelerated)
+        switch (m_type) {
+        case Type::IOSurface:
+            if (m_frontBuffer.imageBuffer->canMapBackingStore())
+                handle = static_cast<AcceleratedImageBufferShareableMappedBackend&>(*m_frontBuffer.imageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
+            else
+                handle = static_cast<AcceleratedImageBufferShareableBackend&>(*m_frontBuffer.imageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
+            break;
+        case Type::Bitmap:
             handle = static_cast<UnacceleratedImageBufferShareableBackend&>(*m_frontBuffer.imageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
-        else if (m_frontBuffer.imageBuffer->canMapBackingStore())
-            handle = static_cast<AcceleratedImageBufferShareableMappedBackend&>(*m_frontBuffer.imageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
-        else
-            handle = static_cast<AcceleratedImageBufferShareableBackend&>(*m_frontBuffer.imageBuffer->ensureBackendCreated()).createImageBufferBackendHandle();
+            break;
+        }
     }
 
     encoder << handle;
@@ -118,6 +123,9 @@
 
 bool RemoteLayerBackingStore::decode(IPC::Decoder& decoder, RemoteLayerBackingStore& result)
 {
+    if (!decoder.decode(result.m_type))
+        return false;
+
     if (!decoder.decode(result.m_size))
         return false;
 
@@ -124,9 +132,6 @@
     if (!decoder.decode(result.m_scale))
         return false;
 
-    if (!decoder.decode(result.m_acceleratesDrawing))
-        return false;
-
     if (!decoder.decode(result.m_isOpaque))
         return false;
 
@@ -149,7 +154,7 @@
 WebCore::PixelFormat RemoteLayerBackingStore::pixelFormat() const
 {
 #if HAVE(IOSURFACE_RGB10)
-    if (m_acceleratesDrawing && m_deepColor)
+    if (m_type == Type::IOSurface && m_deepColor)
         return m_isOpaque ? WebCore::PixelFormat::RGB10 : WebCore::PixelFormat::RGB10A8;
 #endif
 
@@ -172,7 +177,7 @@
     // Sometimes, we can get two swaps ahead of the render server.
     // If we're using shared IOSurfaces, we must wait to modify
     // a surface until it no longer has outstanding clients.
-    if (m_acceleratesDrawing) {
+    if (m_type == Type::IOSurface) {
         if (!m_backBuffer.imageBuffer || m_backBuffer.imageBuffer->isInUse()) {
             std::swap(m_backBuffer, m_secondaryBackBuffer);
 
@@ -189,14 +194,22 @@
     if (m_frontBuffer.imageBuffer)
         return;
 
-    auto renderingMode = m_acceleratesDrawing ? WebCore::RenderingMode::Accelerated : WebCore::RenderingMode::Unaccelerated;
+    bool shouldUseRemoteRendering = WebProcess::singleton().shouldUseRemoteRenderingFor(WebCore::RenderingPurpose::DOM);
 
-    if (WebProcess::singleton().shouldUseRemoteRenderingFor(WebCore::RenderingPurpose::DOM))
-        m_frontBuffer.imageBuffer = m_layer->context()->ensureRemoteRenderingBackendProxy().createImageBuffer(m_size, renderingMode, m_scale, WebCore::DestinationColorSpace::SRGB, pixelFormat());
-    else if (renderingMode == WebCore::RenderingMode::Accelerated)
-        m_frontBuffer.imageBuffer = WebCore::ConcreteImageBuffer<AcceleratedImageBufferShareableMappedBackend>::create(m_size, m_scale, WebCore::DestinationColorSpace::SRGB, pixelFormat(), nullptr);
-    else
-        m_frontBuffer.imageBuffer = WebCore::ConcreteImageBuffer<UnacceleratedImageBufferShareableBackend>::create(m_size, m_scale, WebCore::DestinationColorSpace::SRGB, pixelFormat(), nullptr);
+    switch (m_type) {
+    case Type::IOSurface:
+        if (shouldUseRemoteRendering)
+            m_frontBuffer.imageBuffer = m_layer->context()->ensureRemoteRenderingBackendProxy().createImageBuffer(m_size, WebCore::RenderingMode::Accelerated, m_scale, WebCore::DestinationColorSpace::SRGB, pixelFormat());
+        else
+            m_frontBuffer.imageBuffer = WebCore::ConcreteImageBuffer<AcceleratedImageBufferShareableMappedBackend>::create(m_size, m_scale, WebCore::DestinationColorSpace::SRGB, pixelFormat(), nullptr);
+        break;
+    case Type::Bitmap:
+        if (shouldUseRemoteRendering)
+            m_frontBuffer.imageBuffer = m_layer->context()->ensureRemoteRenderingBackendProxy().createImageBuffer(m_size, WebCore::RenderingMode::Unaccelerated, m_scale, WebCore::DestinationColorSpace::SRGB, pixelFormat());
+        else
+            m_frontBuffer.imageBuffer = WebCore::ConcreteImageBuffer<UnacceleratedImageBufferShareableBackend>::create(m_size, m_scale, WebCore::DestinationColorSpace::SRGB, pixelFormat(), nullptr);
+        break;
+    }
 }
 
 bool RemoteLayerBackingStore::display()
@@ -341,7 +354,8 @@
     ASSERT(m_bufferHandle);
     layer.contentsOpaque = m_isOpaque;
 
-    if (acceleratesDrawing()) {
+    switch (m_type) {
+    case Type::IOSurface:
         switch (contentsType) {
         case LayerContentsType::IOSurface: {
             auto surface = WebCore::IOSurface::createFromSendRight(WTFMove(WTF::get<MachSendRight>(*m_bufferHandle)), WebCore::sRGBColorSpaceRef());
@@ -352,12 +366,12 @@
             layer.contents = (__bridge id)adoptCF(CAMachPortCreate(WTF::get<MachSendRight>(*m_bufferHandle).leakSendRight())).get();
             break;
         }
-        return;
+        break;
+    case Type::Bitmap:
+        auto bitmap = ShareableBitmap::create(WTF::get<ShareableBitmap::Handle>(*m_bufferHandle));
+        layer.contents = (__bridge id)bitmap->makeCGImageCopy().get();
+        break;
     }
-
-    ASSERT(!acceleratesDrawing());
-    auto bitmap = ShareableBitmap::create(WTF::get<ShareableBitmap::Handle>(*m_bufferHandle));
-    layer.contents = (__bridge id)bitmap->makeCGImageCopy().get();
 }
 
 std::unique_ptr<WebCore::ThreadSafeImageBufferFlusher> RemoteLayerBackingStore::takePendingFlusher()
@@ -365,9 +379,9 @@
     return std::exchange(m_frontBufferFlusher, nullptr);
 }
 
-bool RemoteLayerBackingStore::setBufferVolatility(BufferType type, bool isVolatile)
+bool RemoteLayerBackingStore::setBufferVolatility(BufferType bufferType, bool isVolatile)
 {
-    if (!acceleratesDrawing())
+    if (m_type != Type::IOSurface)
         return true;
 
     // Return value is true if we succeeded in making volatile.
@@ -397,7 +411,7 @@
         return previousState == WebCore::VolatilityState::Empty;
     };
 
-    switch (type) {
+    switch (bufferType) {
     case BufferType::Front:
         if (isVolatile)
             return makeVolatile(m_frontBuffer);

Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm (277032 => 277033)


--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm	2021-05-05 18:43:25 UTC (rev 277032)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm	2021-05-05 18:47:05 UTC (rev 277033)
@@ -787,6 +787,17 @@
 
 #if !defined(NDEBUG) || !LOG_DISABLED
 
+static const char* nameForBackingStoreType(RemoteLayerBackingStore::Type type)
+{
+    switch (type) {
+    case RemoteLayerBackingStore::Type::IOSurface:
+        return "IOSurface";
+    case RemoteLayerBackingStore::Type::Bitmap:
+        return "Bitmap";
+    }
+    return nullptr;
+}
+
 static TextStream& operator<<(TextStream& ts, const RemoteLayerBackingStore& backingStore)
 {
     ts << backingStore.size();
@@ -793,8 +804,7 @@
     ts << " scale=" << backingStore.scale();
     if (backingStore.isOpaque())
         ts << " opaque";
-    if (backingStore.acceleratesDrawing())
-        ts << " accelerated";
+    ts << " " << nameForBackingStoreType(backingStore.type());
     return ts;
 }
 

Modified: trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp (277032 => 277033)


--- trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp	2021-05-05 18:43:25 UTC (rev 277032)
+++ trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp	2021-05-05 18:47:05 UTC (rev 277033)
@@ -233,7 +233,8 @@
 
     ASSERT(m_properties.backingStoreAttached);
 
-    m_properties.backingStore->ensureBackingStore(m_properties.bounds.size(), m_properties.contentsScale, m_acceleratesDrawing, m_wantsDeepColorBackingStore, m_properties.opaque);
+    auto type = m_acceleratesDrawing ? RemoteLayerBackingStore::Type::IOSurface : RemoteLayerBackingStore::Type::Bitmap;
+    m_properties.backingStore->ensureBackingStore(type, m_properties.bounds.size(), m_properties.contentsScale, m_wantsDeepColorBackingStore, m_properties.opaque);
 }
 
 void PlatformCALayerRemote::setNeedsDisplayInRect(const FloatRect& rect)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to