Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm (292362 => 292363)
--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm 2022-04-05 01:48:00 UTC (rev 292362)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm 2022-04-05 02:03:13 UTC (rev 292363)
@@ -55,6 +55,8 @@
namespace WebKit {
+using namespace WebCore;
+
RemoteLayerBackingStore::RemoteLayerBackingStore(PlatformCALayerRemote* layer)
: m_layer(layer)
, m_lastDisplayTime(-MonotonicTime::infinity())
@@ -85,7 +87,7 @@
return nullptr;
}
-void RemoteLayerBackingStore::ensureBackingStore(Type type, WebCore::FloatSize size, float scale, bool deepColor, bool isOpaque, IncludeDisplayList includeDisplayList)
+void RemoteLayerBackingStore::ensureBackingStore(Type type, FloatSize size, float scale, bool deepColor, bool isOpaque, IncludeDisplayList includeDisplayList)
{
if (m_type == type && m_size == size && m_scale == scale && m_deepColor == deepColor && m_isOpaque == isOpaque && m_includeDisplayList == includeDisplayList)
return;
@@ -116,7 +118,7 @@
void RemoteLayerBackingStore::encode(IPC::Encoder& encoder) const
{
- auto handleFromBuffer = [](WebCore::ImageBuffer& buffer) -> std::optional<ImageBufferBackendHandle> {
+ auto handleFromBuffer = [](ImageBuffer& buffer) -> std::optional<ImageBufferBackendHandle> {
auto* backend = buffer.ensureBackendCreated();
if (!backend)
return std::nullopt;
@@ -193,7 +195,7 @@
return collection->backingStoreWillBeDisplayed(*this);
}
-void RemoteLayerBackingStore::setNeedsDisplay(const WebCore::IntRect rect)
+void RemoteLayerBackingStore::setNeedsDisplay(const IntRect rect)
{
m_dirtyRegion.unite(rect);
}
@@ -200,33 +202,33 @@
void RemoteLayerBackingStore::setNeedsDisplay()
{
- setNeedsDisplay(WebCore::IntRect(WebCore::IntPoint(), WebCore::expandedIntSize(m_size)));
+ setNeedsDisplay(IntRect(IntPoint(), expandedIntSize(m_size)));
}
-WebCore::PixelFormat RemoteLayerBackingStore::pixelFormat() const
+PixelFormat RemoteLayerBackingStore::pixelFormat() const
{
#if HAVE(IOSURFACE_RGB10)
if (m_type == Type::IOSurface && m_deepColor)
- return m_isOpaque ? WebCore::PixelFormat::RGB10 : WebCore::PixelFormat::RGB10A8;
+ return m_isOpaque ? PixelFormat::RGB10 : PixelFormat::RGB10A8;
#endif
- return WebCore::PixelFormat::BGRA8;
+ return PixelFormat::BGRA8;
}
unsigned RemoteLayerBackingStore::bytesPerPixel() const
{
switch (pixelFormat()) {
- case WebCore::PixelFormat::RGBA8: return 4;
- case WebCore::PixelFormat::BGRA8: return 4;
- case WebCore::PixelFormat::RGB10: return 4;
- case WebCore::PixelFormat::RGB10A8: return 5;
+ case PixelFormat::RGBA8: return 4;
+ case PixelFormat::BGRA8: return 4;
+ case PixelFormat::RGB10: return 4;
+ case PixelFormat::RGB10A8: return 5;
}
return 4;
}
-WebCore::SetNonVolatileResult RemoteLayerBackingStore::swapToValidFrontBuffer()
+SetNonVolatileResult RemoteLayerBackingStore::swapToValidFrontBuffer()
{
- ASSERT(!WebProcess::singleton().shouldUseRemoteRenderingFor(WebCore::RenderingPurpose::DOM));
+ ASSERT(!WebProcess::singleton().shouldUseRemoteRenderingFor(RenderingPurpose::DOM));
// Sometimes, we can get two swaps ahead of the render server.
// If we're using shared IOSurfaces, we must wait to modify
@@ -249,9 +251,9 @@
}
// Called after buffer swapping in the GPU process.
-void RemoteLayerBackingStore::applySwappedBuffers(RefPtr<WebCore::ImageBuffer>&& front, RefPtr<WebCore::ImageBuffer>&& back, RefPtr<WebCore::ImageBuffer>&& secondaryBack, SwapBuffersDisplayRequirement displayRequirement)
+void RemoteLayerBackingStore::applySwappedBuffers(RefPtr<ImageBuffer>&& front, RefPtr<ImageBuffer>&& back, RefPtr<ImageBuffer>&& secondaryBack, SwapBuffersDisplayRequirement displayRequirement)
{
- ASSERT(WebProcess::singleton().shouldUseRemoteRenderingFor(WebCore::RenderingPurpose::DOM));
+ ASSERT(WebProcess::singleton().shouldUseRemoteRenderingFor(RenderingPurpose::DOM));
m_contentsBufferHandle = std::nullopt;
m_frontBuffer.imageBuffer = WTFMove(front);
@@ -315,7 +317,7 @@
void RemoteLayerBackingStore::prepareToDisplay()
{
- ASSERT(!WebProcess::singleton().shouldUseRemoteRenderingFor(WebCore::RenderingPurpose::DOM));
+ ASSERT(!WebProcess::singleton().shouldUseRemoteRenderingFor(RenderingPurpose::DOM));
ASSERT(!m_frontBufferFlushers.size());
auto* collection = backingStoreCollection();
@@ -345,7 +347,7 @@
void RemoteLayerBackingStore::dirtyRepaintCounterIfNecessary()
{
if (m_layer->owner()->platformCALayerShowRepaintCounter(m_layer)) {
- WebCore::IntRect indicatorRect(0, 0, 52, 27);
+ IntRect indicatorRect(0, 0, 52, 27);
m_dirtyRegion.unite(indicatorRect);
}
}
@@ -365,7 +367,7 @@
#if ENABLE(CG_DISPLAY_LIST_BACKED_IMAGE_BUFFER)
if (m_includeDisplayList == IncludeDisplayList::Yes)
- m_frontBuffer.displayListImageBuffer = WebCore::ConcreteImageBuffer<CGDisplayListImageBufferBackend>::create(m_size, m_scale, WebCore::DestinationColorSpace::SRGB(), pixelFormat());
+ m_frontBuffer.displayListImageBuffer = ConcreteImageBuffer<CGDisplayListImageBufferBackend>::create(m_size, m_scale, DestinationColorSpace::SRGB(), pixelFormat());
#endif
}
@@ -383,13 +385,13 @@
SwapBuffersDisplayRequirement RemoteLayerBackingStore::prepareBuffers()
{
- ASSERT(!WebProcess::singleton().shouldUseRemoteRenderingFor(WebCore::RenderingPurpose::DOM));
+ ASSERT(!WebProcess::singleton().shouldUseRemoteRenderingFor(RenderingPurpose::DOM));
m_contentsBufferHandle = std::nullopt;
auto displayRequirement = SwapBuffersDisplayRequirement::NeedsNoDisplay;
// Make the previous front buffer non-volatile early, so that we can dirty the whole layer if it comes back empty.
- if (!hasFrontBuffer() || setFrontBufferNonVolatile() == WebCore::SetNonVolatileResult::Empty)
+ if (!hasFrontBuffer() || setFrontBufferNonVolatile() == SetNonVolatileResult::Empty)
displayRequirement = SwapBuffersDisplayRequirement::NeedsFullDisplay;
else if (!hasEmptyDirtyRegion())
displayRequirement = SwapBuffersDisplayRequirement::NeedsNormalDisplay;
@@ -401,7 +403,7 @@
displayRequirement = SwapBuffersDisplayRequirement::NeedsFullDisplay;
auto result = swapToValidFrontBuffer();
- if (!hasFrontBuffer() || result == WebCore::SetNonVolatileResult::Empty)
+ if (!hasFrontBuffer() || result == SetNonVolatileResult::Empty)
displayRequirement = SwapBuffersDisplayRequirement::NeedsFullDisplay;
LOG_WITH_STREAM(RemoteRenderingBufferVolatility, stream << "RemoteLayerBackingStore " << m_layer->layerID() << " prepareBuffers() - " << displayRequirement);
@@ -427,7 +429,7 @@
// FIXME: Remove this when <rdar://problem/80487697> is fixed.
static std::optional<bool> needsMissingFlipWorkaround;
- WebCore::GraphicsContextStateSaver workaroundStateSaver(displayListContext, false);
+ GraphicsContextStateSaver workaroundStateSaver(displayListContext, false);
if (!needsMissingFlipWorkaround) {
id defaultValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"WebKitNeedsWorkaroundFor80487697"];
needsMissingFlipWorkaround = defaultValue ? [defaultValue boolValue] : true;
@@ -434,17 +436,17 @@
}
if (needsMissingFlipWorkaround.value()) {
workaroundStateSaver.save();
- displayListContext.scale(WebCore::FloatSize(1, -1));
+ displayListContext.scale(FloatSize(1, -1));
displayListContext.translate(0, -m_size.height());
}
- WebCore::BifurcatedGraphicsContext context(m_frontBuffer.imageBuffer->context(), displayListContext);
+ BifurcatedGraphicsContext context(m_frontBuffer.imageBuffer->context(), displayListContext);
#else
- WebCore::GraphicsContext& context = m_frontBuffer.imageBuffer->context();
+ GraphicsContext& context = m_frontBuffer.imageBuffer->context();
#endif
drawInContext(context);
} else {
- WebCore::GraphicsContext& context = m_frontBuffer.imageBuffer->context();
+ GraphicsContext& context = m_frontBuffer.imageBuffer->context();
drawInContext(context);
}
@@ -462,17 +464,17 @@
#endif
}
-void RemoteLayerBackingStore::drawInContext(WebCore::GraphicsContext& context)
+void RemoteLayerBackingStore::drawInContext(GraphicsContext& context)
{
- WebCore::GraphicsContextStateSaver stateSaver(context);
+ GraphicsContextStateSaver stateSaver(context);
// If we have less than webLayerMaxRectsToPaint rects to paint and they cover less
// than webLayerWastedSpaceThreshold of the total dirty area, we'll repaint each rect separately.
// Otherwise, repaint the entire bounding box of the dirty region.
- WebCore::IntRect dirtyBounds = m_dirtyRegion.bounds();
+ IntRect dirtyBounds = m_dirtyRegion.bounds();
auto dirtyRects = m_dirtyRegion.rects();
- if (dirtyRects.size() > WebCore::PlatformCALayer::webLayerMaxRectsToPaint || m_dirtyRegion.totalArea() > WebCore::PlatformCALayer::webLayerWastedSpaceThreshold * dirtyBounds.width() * dirtyBounds.height()) {
+ if (dirtyRects.size() > PlatformCALayer::webLayerMaxRectsToPaint || m_dirtyRegion.totalArea() > PlatformCALayer::webLayerWastedSpaceThreshold * dirtyBounds.width() * dirtyBounds.height()) {
dirtyRects.clear();
dirtyRects.append(dirtyBounds);
}
@@ -479,23 +481,23 @@
// FIXME: find a consistent way to scale and snap dirty and CG clip rects.
for (const auto& rect : dirtyRects) {
- WebCore::FloatRect scaledRect(rect);
+ FloatRect scaledRect(rect);
scaledRect.scale(m_scale);
- scaledRect = WebCore::enclosingIntRect(scaledRect);
+ scaledRect = enclosingIntRect(scaledRect);
scaledRect.scale(1 / m_scale);
m_paintingRects.append(scaledRect);
}
- WebCore::IntRect layerBounds(WebCore::IntPoint(), WebCore::expandedIntSize(m_size));
+ IntRect layerBounds(IntPoint(), expandedIntSize(m_size));
if (!m_dirtyRegion.contains(layerBounds)) {
ASSERT(m_backBuffer.imageBuffer);
- context.drawImageBuffer(*m_backBuffer.imageBuffer, { 0, 0 }, { WebCore::CompositeOperator::Copy });
+ context.drawImageBuffer(*m_backBuffer.imageBuffer, { 0, 0 }, { CompositeOperator::Copy });
}
if (m_paintingRects.size() == 1)
context.clip(m_paintingRects[0]);
else {
- WebCore::Path clipPath;
+ Path clipPath;
for (auto rect : m_paintingRects)
clipPath.addRect(rect);
context.clipPath(clipPath);
@@ -506,47 +508,47 @@
#ifndef NDEBUG
if (m_isOpaque)
- context.fillRect(layerBounds, WebCore::SRGBA<uint8_t> { 255, 47, 146 });
+ context.fillRect(layerBounds, SRGBA<uint8_t> { 255, 47, 146 });
#endif
- // FIXME: Clarify that WebCore::GraphicsLayerPaintSnapshotting is just about image decoding.
- auto flags = m_layer->context() && m_layer->context()->nextRenderingUpdateRequiresSynchronousImageDecoding() ? WebCore::GraphicsLayerPaintSnapshotting : WebCore::GraphicsLayerPaintNormal;
+ // FIXME: Clarify that GraphicsLayerPaintSnapshotting is just about image decoding.
+ auto flags = m_layer->context() && m_layer->context()->nextRenderingUpdateRequiresSynchronousImageDecoding() ? GraphicsLayerPaintSnapshotting : GraphicsLayerPaintNormal;
// FIXME: This should be moved to PlatformCALayerRemote for better layering.
switch (m_layer->layerType()) {
- case WebCore::PlatformCALayer::LayerTypeSimpleLayer:
- case WebCore::PlatformCALayer::LayerTypeTiledBackingTileLayer:
+ case PlatformCALayer::LayerTypeSimpleLayer:
+ case PlatformCALayer::LayerTypeTiledBackingTileLayer:
m_layer->owner()->platformCALayerPaintContents(m_layer, context, dirtyBounds, flags);
break;
- case WebCore::PlatformCALayer::LayerTypeWebLayer:
- case WebCore::PlatformCALayer::LayerTypeBackdropLayer:
- WebCore::PlatformCALayer::drawLayerContents(context, m_layer, m_paintingRects, flags);
+ case PlatformCALayer::LayerTypeWebLayer:
+ case PlatformCALayer::LayerTypeBackdropLayer:
+ PlatformCALayer::drawLayerContents(context, m_layer, m_paintingRects, flags);
break;
- case WebCore::PlatformCALayer::LayerTypeDarkSystemBackdropLayer:
- case WebCore::PlatformCALayer::LayerTypeLightSystemBackdropLayer:
+ case PlatformCALayer::LayerTypeDarkSystemBackdropLayer:
+ case PlatformCALayer::LayerTypeLightSystemBackdropLayer:
// FIXME: These have a more complicated layer hierarchy. We need to paint into
// a child layer in order to see the rendered results.
- WebCore::PlatformCALayer::drawLayerContents(context, m_layer, m_paintingRects, flags);
+ PlatformCALayer::drawLayerContents(context, m_layer, m_paintingRects, flags);
break;
- case WebCore::PlatformCALayer::LayerTypeLayer:
- case WebCore::PlatformCALayer::LayerTypeTransformLayer:
- case WebCore::PlatformCALayer::LayerTypeTiledBackingLayer:
- case WebCore::PlatformCALayer::LayerTypePageTiledBackingLayer:
- case WebCore::PlatformCALayer::LayerTypeRootLayer:
- case WebCore::PlatformCALayer::LayerTypeAVPlayerLayer:
- case WebCore::PlatformCALayer::LayerTypeContentsProvidedLayer:
- case WebCore::PlatformCALayer::LayerTypeShapeLayer:
- case WebCore::PlatformCALayer::LayerTypeScrollContainerLayer:
+ case PlatformCALayer::LayerTypeLayer:
+ case PlatformCALayer::LayerTypeTransformLayer:
+ case PlatformCALayer::LayerTypeTiledBackingLayer:
+ case PlatformCALayer::LayerTypePageTiledBackingLayer:
+ case PlatformCALayer::LayerTypeRootLayer:
+ case PlatformCALayer::LayerTypeAVPlayerLayer:
+ case PlatformCALayer::LayerTypeContentsProvidedLayer:
+ case PlatformCALayer::LayerTypeShapeLayer:
+ case PlatformCALayer::LayerTypeScrollContainerLayer:
#if ENABLE(MODEL_ELEMENT)
- case WebCore::PlatformCALayer::LayerTypeModelLayer:
+ case PlatformCALayer::LayerTypeModelLayer:
#endif
- case WebCore::PlatformCALayer::LayerTypeCustom:
+ case PlatformCALayer::LayerTypeCustom:
ASSERT_NOT_REACHED();
break;
};
}
-void RemoteLayerBackingStore::enumerateRectsBeingDrawn(WebCore::GraphicsContext& context, void (^block)(WebCore::FloatRect))
+void RemoteLayerBackingStore::enumerateRectsBeingDrawn(GraphicsContext& context, void (^block)(FloatRect))
{
CGAffineTransform inverseTransform = CGAffineTransformInvert(context.getCTM());
@@ -576,7 +578,7 @@
ASSERT(m_type == Type::IOSurface);
switch (contentsType) {
case RemoteLayerBackingStore::LayerContentsType::IOSurface: {
- auto surface = WebCore::IOSurface::createFromSendRight(WTFMove(machSendRight), WebCore::DestinationColorSpace::SRGB());
+ auto surface = WebCore::IOSurface::createFromSendRight(WTFMove(machSendRight), DestinationColorSpace::SRGB());
contents = surface ? surface->asLayerContents() : nil;
break;
}
@@ -614,7 +616,7 @@
layer.contents = contents.get();
}
-Vector<std::unique_ptr<WebCore::ThreadSafeImageBufferFlusher>> RemoteLayerBackingStore::takePendingFlushers()
+Vector<std::unique_ptr<ThreadSafeImageBufferFlusher>> RemoteLayerBackingStore::takePendingFlushers()
{
LOG_WITH_STREAM(RemoteRenderingBufferVolatility, stream << "RemoteLayerBackingStore " << m_layer->layerID() << " takePendingFlushers()");
return std::exchange(m_frontBufferFlushers, { });
@@ -622,7 +624,7 @@
bool RemoteLayerBackingStore::setBufferVolatile(Buffer& buffer)
{
- if (!buffer.imageBuffer || buffer.imageBuffer->volatilityState() == WebCore::VolatilityState::Volatile)
+ if (!buffer.imageBuffer || buffer.imageBuffer->volatilityState() == VolatilityState::Volatile)
return true;
buffer.imageBuffer->releaseGraphicsContext();
@@ -629,15 +631,15 @@
return buffer.imageBuffer->setVolatile();
}
-WebCore::SetNonVolatileResult RemoteLayerBackingStore::setBufferNonVolatile(Buffer& buffer)
+SetNonVolatileResult RemoteLayerBackingStore::setBufferNonVolatile(Buffer& buffer)
{
- ASSERT(!WebProcess::singleton().shouldUseRemoteRenderingFor(WebCore::RenderingPurpose::DOM));
+ ASSERT(!WebProcess::singleton().shouldUseRemoteRenderingFor(RenderingPurpose::DOM));
if (!buffer.imageBuffer)
- return WebCore::SetNonVolatileResult::Valid; // Not really valid but the caller only checked the Empty state.
+ return SetNonVolatileResult::Valid; // Not really valid but the caller only checked the Empty state.
- if (buffer.imageBuffer->volatilityState() == WebCore::VolatilityState::NonVolatile)
- return WebCore::SetNonVolatileResult::Valid;
+ if (buffer.imageBuffer->volatilityState() == VolatilityState::NonVolatile)
+ return SetNonVolatileResult::Valid;
return buffer.imageBuffer->setNonVolatile();
}
@@ -661,15 +663,15 @@
return true;
}
-WebCore::SetNonVolatileResult RemoteLayerBackingStore::setFrontBufferNonVolatile()
+SetNonVolatileResult RemoteLayerBackingStore::setFrontBufferNonVolatile()
{
if (m_type != Type::IOSurface)
- return WebCore::SetNonVolatileResult::Valid;
+ return SetNonVolatileResult::Valid;
return setBufferNonVolatile(m_frontBuffer);
}
-RefPtr<WebCore::ImageBuffer> RemoteLayerBackingStore::bufferForType(BufferType bufferType) const
+RefPtr<ImageBuffer> RemoteLayerBackingStore::bufferForType(BufferType bufferType) const
{
switch (bufferType) {
case BufferType::Front: