diff --git a/gfx/layers/moz.build b/gfx/layers/moz.build index 8cfec3b9f9d9..b034194d480c 100644 --- a/gfx/layers/moz.build +++ b/gfx/layers/moz.build @@ -204,6 +204,7 @@ EXPORTS.mozilla.layers += [ 'wr/WebRenderCompositableHolder.h', 'wr/WebRenderDisplayItemLayer.h', 'wr/WebRenderImageHost.h', + 'wr/WebRenderLayer.h', 'wr/WebRenderLayerManager.h', 'wr/WebRenderLayersLogging.h', 'wr/WebRenderMessageUtils.h', @@ -401,6 +402,7 @@ UNIFIED_SOURCES += [ 'wr/WebRenderDisplayItemLayer.cpp', 'wr/WebRenderImageHost.cpp', 'wr/WebRenderImageLayer.cpp', + 'wr/WebRenderLayer.cpp', 'wr/WebRenderLayerManager.cpp', 'wr/WebRenderLayersLogging.cpp', 'wr/WebRenderPaintedLayer.cpp', diff --git a/gfx/layers/wr/WebRenderCanvasLayer.h b/gfx/layers/wr/WebRenderCanvasLayer.h index caceae68f7fb..5e0e4484dada 100644 --- a/gfx/layers/wr/WebRenderCanvasLayer.h +++ b/gfx/layers/wr/WebRenderCanvasLayer.h @@ -6,8 +6,9 @@ #ifndef GFX_WEBRENDERCANVASLAYER_H #define GFX_WEBRENDERCANVASLAYER_H +#include "mozilla/layers/WebRenderLayer.h" +#include "mozilla/layers/WebRenderLayerManager.h" #include "ShareableCanvasLayer.h" -#include "WebRenderLayerManager.h" namespace mozilla { namespace gfx { diff --git a/gfx/layers/wr/WebRenderColorLayer.h b/gfx/layers/wr/WebRenderColorLayer.h index 45fc248c8d55..bd84a9afd421 100644 --- a/gfx/layers/wr/WebRenderColorLayer.h +++ b/gfx/layers/wr/WebRenderColorLayer.h @@ -7,7 +7,8 @@ #define GFX_WEBRENDERCOLORLAYER_H #include "Layers.h" -#include "WebRenderLayerManager.h" +#include "mozilla/layers/WebRenderLayer.h" +#include "mozilla/layers/WebRenderLayerManager.h" namespace mozilla { namespace layers { diff --git a/gfx/layers/wr/WebRenderContainerLayer.h b/gfx/layers/wr/WebRenderContainerLayer.h index a73aee959626..5ccddc2bd171 100644 --- a/gfx/layers/wr/WebRenderContainerLayer.h +++ b/gfx/layers/wr/WebRenderContainerLayer.h @@ -8,7 +8,8 @@ #include "gfxPrefs.h" #include "Layers.h" -#include "WebRenderLayerManager.h" +#include "mozilla/layers/WebRenderLayer.h" +#include "mozilla/layers/WebRenderLayerManager.h" namespace mozilla { namespace layers { diff --git a/gfx/layers/wr/WebRenderDisplayItemLayer.h b/gfx/layers/wr/WebRenderDisplayItemLayer.h index 06e762562a23..a5b63bfc133a 100644 --- a/gfx/layers/wr/WebRenderDisplayItemLayer.h +++ b/gfx/layers/wr/WebRenderDisplayItemLayer.h @@ -9,9 +9,10 @@ #include "Layers.h" #include "mozilla/layers/ImageClient.h" #include "mozilla/layers/PWebRenderBridgeChild.h" +#include "mozilla/layers/WebRenderLayer.h" +#include "mozilla/layers/WebRenderLayerManager.h" #include "mozilla/Maybe.h" #include "mozilla/webrender/WebRenderTypes.h" -#include "WebRenderLayerManager.h" namespace mozilla { namespace layers { diff --git a/gfx/layers/wr/WebRenderImageLayer.h b/gfx/layers/wr/WebRenderImageLayer.h index a3b7617b0305..1748531e2bd4 100644 --- a/gfx/layers/wr/WebRenderImageLayer.h +++ b/gfx/layers/wr/WebRenderImageLayer.h @@ -7,7 +7,8 @@ #define GFX_WEBRENDERIMAGELAYER_H #include "ImageLayers.h" -#include "WebRenderLayerManager.h" +#include "mozilla/layers/WebRenderLayer.h" +#include "mozilla/layers/WebRenderLayerManager.h" namespace mozilla { namespace layers { diff --git a/gfx/layers/wr/WebRenderLayer.cpp b/gfx/layers/wr/WebRenderLayer.cpp new file mode 100644 index 000000000000..1f30c3b61bc5 --- /dev/null +++ b/gfx/layers/wr/WebRenderLayer.cpp @@ -0,0 +1,230 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "WebRenderLayer.h" + +#include "gfxPrefs.h" +#include "LayersLogging.h" +#include "mozilla/layers/ImageClient.h" +#include "mozilla/layers/WebRenderBridgeChild.h" +#include "mozilla/layers/WebRenderLayerManager.h" +#include "nsThreadUtils.h" + +namespace mozilla { + +using namespace gfx; + +namespace layers { + +WebRenderLayerManager* +WebRenderLayer::WrManager() +{ + return static_cast(GetLayer()->Manager()); +} + +WebRenderBridgeChild* +WebRenderLayer::WrBridge() +{ + return WrManager()->WrBridge(); +} + +WrImageKey +WebRenderLayer::GetImageKey() +{ + WrImageKey key; + key.mNamespace = WrBridge()->GetNamespace(); + key.mHandle = WrBridge()->GetNextResourceId(); + return key; +} + +Rect +WebRenderLayer::RelativeToVisible(Rect aRect) +{ + IntRect bounds = GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect(); + aRect.MoveBy(-bounds.x, -bounds.y); + return aRect; +} + +Rect +WebRenderLayer::RelativeToTransformedVisible(Rect aRect) +{ + IntRect bounds = GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect(); + Rect transformed = GetLayer()->GetTransform().TransformBounds(IntRectToRect(bounds)); + aRect.MoveBy(-transformed.x, -transformed.y); + return aRect; +} + +Rect +WebRenderLayer::ParentStackingContextBounds() +{ + // Walk up to find the parent stacking context. This will be created either + // by the nearest scrollable metrics, or by the parent layer which must be a + // ContainerLayer. + Layer* layer = GetLayer(); + if (layer->GetParent()) { + return IntRectToRect(layer->GetParent()->GetVisibleRegion().GetBounds().ToUnknownRect()); + } + return Rect(); +} + +Rect +WebRenderLayer::RelativeToParent(Rect aRect) +{ + Rect parentBounds = ParentStackingContextBounds(); + aRect.MoveBy(-parentBounds.x, -parentBounds.y); + return aRect; +} + +Point +WebRenderLayer::GetOffsetToParent() +{ + Rect parentBounds = ParentStackingContextBounds(); + return parentBounds.TopLeft(); +} + +Rect +WebRenderLayer::VisibleBoundsRelativeToParent() +{ + return RelativeToParent(IntRectToRect(GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect())); +} + +Rect +WebRenderLayer::TransformedVisibleBoundsRelativeToParent() +{ + IntRect bounds = GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect(); + Rect transformed = GetLayer()->GetTransform().TransformBounds(IntRectToRect(bounds)); + return RelativeToParent(transformed); +} + +Maybe +WebRenderLayer::BuildWrMaskLayer(bool aUnapplyLayerTransform) +{ + if (GetLayer()->GetMaskLayer()) { + WebRenderLayer* maskLayer = ToWebRenderLayer(GetLayer()->GetMaskLayer()); + + // The size of mask layer is transformed, and we may set the layer transform + // to wr stacking context. So we should apply inverse transform for mask layer + // and reverse the offset of the stacking context. + gfx::Matrix4x4 transform = maskLayer->GetLayer()->GetTransform(); + if (aUnapplyLayerTransform) { + gfx::Rect bounds = IntRectToRect(GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect()); + transform = transform.PreTranslate(-bounds.x, -bounds.y, 0); + transform = transform * GetLayer()->GetTransform().Inverse(); + } + + return maskLayer->RenderMaskLayer(transform); + } + + return Nothing(); +} + +gfx::Rect +WebRenderLayer::GetWrBoundsRect() +{ + LayerIntRect bounds = GetLayer()->GetVisibleRegion().GetBounds(); + return Rect(0, 0, bounds.width, bounds.height); +} + +gfx::Rect +WebRenderLayer::GetWrClipRect(gfx::Rect& aRect) +{ + gfx::Rect clip; + Layer* layer = GetLayer(); + Matrix4x4 transform = layer->GetTransform(); + if (layer->GetClipRect().isSome()) { + clip = RelativeToVisible(transform.Inverse().TransformBounds( + IntRectToRect(layer->GetClipRect().ref().ToUnknownRect())) + ); + } else { + clip = aRect; + } + + return clip; +} + +gfx::Matrix4x4 +WebRenderLayer::GetWrBoundTransform() +{ + gfx::Matrix4x4 transform = GetLayer()->GetTransform(); + transform._41 = 0.0f; + transform._42 = 0.0f; + transform._43 = 0.0f; + return transform; +} + +gfx::Rect +WebRenderLayer::GetWrRelBounds() +{ + gfx::Rect bounds = IntRectToRect(GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect()); + gfx::Matrix4x4 transform = GetWrBoundTransform(); + if (!transform.IsIdentity()) { + // WR will only apply the 'translate' of the transform, so we need to do the scale/rotation manually. + bounds.MoveTo(transform.TransformPoint(bounds.TopLeft())); + } + + return RelativeToParent(bounds); +} + +Maybe +WebRenderLayer::UpdateImageKey(ImageClientSingle* aImageClient, + ImageContainer* aContainer, + Maybe& aOldKey, + wr::ExternalImageId& aExternalImageId) +{ + MOZ_ASSERT(aImageClient); + MOZ_ASSERT(aContainer); + + uint32_t oldCounter = aImageClient->GetLastUpdateGenerationCounter(); + + bool ret = aImageClient->UpdateImage(aContainer, /* unused */0); + if (!ret || aImageClient->IsEmpty()) { + // Delete old key + if (aOldKey.isSome()) { + WrManager()->AddImageKeyForDiscard(aOldKey.value()); + } + return Nothing(); + } + + // Reuse old key if generation is not updated. + if (oldCounter == aImageClient->GetLastUpdateGenerationCounter() && aOldKey.isSome()) { + return aOldKey; + } + + // Delete old key, we are generating a new key. + if (aOldKey.isSome()) { + WrManager()->AddImageKeyForDiscard(aOldKey.value()); + } + + WrImageKey key = GetImageKey(); + WrBridge()->AddWebRenderParentCommand(OpAddExternalImage(aExternalImageId, key)); + return Some(key); +} + +void +WebRenderLayer::DumpLayerInfo(const char* aLayerType, gfx::Rect& aRect) +{ + if (!gfxPrefs::LayersDump()) { + return; + } + + Matrix4x4 transform = GetLayer()->GetTransform(); + Rect clip = GetWrClipRect(aRect); + Rect relBounds = GetWrRelBounds(); + Rect overflow(0, 0, relBounds.width, relBounds.height); + WrMixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetLayer()->GetMixBlendMode()); + + printf_stderr("%s %p using bounds=%s, overflow=%s, transform=%s, rect=%s, clip=%s, mix-blend-mode=%s\n", + aLayerType, + GetLayer(), + Stringify(relBounds).c_str(), + Stringify(overflow).c_str(), + Stringify(transform).c_str(), + Stringify(aRect).c_str(), + Stringify(clip).c_str(), + Stringify(mixBlendMode).c_str()); +} + +} // namespace layers +} // namespace mozilla diff --git a/gfx/layers/wr/WebRenderLayer.h b/gfx/layers/wr/WebRenderLayer.h new file mode 100644 index 000000000000..94ce381238fb --- /dev/null +++ b/gfx/layers/wr/WebRenderLayer.h @@ -0,0 +1,66 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef GFX_WEBRENDERLAYER_H +#define GFX_WEBRENDERLAYER_H + +#include "Layers.h" +#include "mozilla/webrender/WebRenderTypes.h" +#include "mozilla/webrender/WebRenderAPI.h" + +namespace mozilla { +namespace layers { + +class ImageClientSingle; +class WebRenderBridgeChild; +class WebRenderLayerManager; + +class WebRenderLayer +{ +public: + virtual Layer* GetLayer() = 0; + virtual void RenderLayer(wr::DisplayListBuilder& aBuilder) = 0; + virtual Maybe RenderMaskLayer(const gfx::Matrix4x4& aTransform) + { + MOZ_ASSERT(false); + return Nothing(); + } + + virtual already_AddRefed GetAsSourceSurface() { return nullptr; } + static inline WebRenderLayer* + ToWebRenderLayer(Layer* aLayer) + { + return static_cast(aLayer->ImplData()); + } + + Maybe UpdateImageKey(ImageClientSingle* aImageClient, + ImageContainer* aContainer, + Maybe& aOldKey, + wr::ExternalImageId& aExternalImageId); + + WebRenderLayerManager* WrManager(); + WebRenderBridgeChild* WrBridge(); + WrImageKey GetImageKey(); + + gfx::Rect RelativeToVisible(gfx::Rect aRect); + gfx::Rect RelativeToTransformedVisible(gfx::Rect aRect); + gfx::Rect ParentStackingContextBounds(); + gfx::Rect RelativeToParent(gfx::Rect aRect); + gfx::Rect VisibleBoundsRelativeToParent(); + gfx::Point GetOffsetToParent(); + gfx::Rect TransformedVisibleBoundsRelativeToParent(); +protected: + gfx::Rect GetWrBoundsRect(); + gfx::Rect GetWrRelBounds(); + gfx::Rect GetWrClipRect(gfx::Rect& aRect); + gfx::Matrix4x4 GetWrBoundTransform(); + void DumpLayerInfo(const char* aLayerType, gfx::Rect& aRect); + Maybe BuildWrMaskLayer(bool aUnapplyLayerTransform); +}; + +} // namespace layers +} // namespace mozilla + +#endif /* GFX_WEBRENDERLAYER_H */ diff --git a/gfx/layers/wr/WebRenderLayerManager.cpp b/gfx/layers/wr/WebRenderLayerManager.cpp index e4084da4efc6..e6394356c379 100644 --- a/gfx/layers/wr/WebRenderLayerManager.cpp +++ b/gfx/layers/wr/WebRenderLayerManager.cpp @@ -5,20 +5,13 @@ #include "WebRenderLayerManager.h" -#include "apz/src/AsyncPanZoomController.h" #include "gfxPrefs.h" #include "LayersLogging.h" #include "mozilla/dom/ContentChild.h" -#include "mozilla/dom/TabChild.h" #include "mozilla/gfx/GPUProcessManager.h" -#include "mozilla/layers/APZCTreeManager.h" -#include "mozilla/layers/AsyncCompositionManager.h" #include "mozilla/layers/CompositorBridgeChild.h" #include "mozilla/layers/TextureClient.h" #include "mozilla/layers/WebRenderBridgeChild.h" -#include "mozilla/widget/PlatformWidgetTypes.h" -#include "nsThreadUtils.h" -#include "TreeTraversal.h" #include "WebRenderCanvasLayer.h" #include "WebRenderColorLayer.h" #include "WebRenderContainerLayer.h" @@ -33,214 +26,6 @@ using namespace gfx; namespace layers { -WebRenderLayerManager* -WebRenderLayer::WrManager() -{ - return static_cast(GetLayer()->Manager()); -} - -WebRenderBridgeChild* -WebRenderLayer::WrBridge() -{ - return WrManager()->WrBridge(); -} - -WrImageKey -WebRenderLayer::GetImageKey() -{ - WrImageKey key; - key.mNamespace = WrBridge()->GetNamespace(); - key.mHandle = WrBridge()->GetNextResourceId(); - return key; -} - -Rect -WebRenderLayer::RelativeToVisible(Rect aRect) -{ - IntRect bounds = GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect(); - aRect.MoveBy(-bounds.x, -bounds.y); - return aRect; -} - -Rect -WebRenderLayer::RelativeToTransformedVisible(Rect aRect) -{ - IntRect bounds = GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect(); - Rect transformed = GetLayer()->GetTransform().TransformBounds(IntRectToRect(bounds)); - aRect.MoveBy(-transformed.x, -transformed.y); - return aRect; -} - -Rect -WebRenderLayer::ParentStackingContextBounds() -{ - // Walk up to find the parent stacking context. This will be created either - // by the nearest scrollable metrics, or by the parent layer which must be a - // ContainerLayer. - Layer* layer = GetLayer(); - if (layer->GetParent()) { - return IntRectToRect(layer->GetParent()->GetVisibleRegion().GetBounds().ToUnknownRect()); - } - return Rect(); -} - -Rect -WebRenderLayer::RelativeToParent(Rect aRect) -{ - Rect parentBounds = ParentStackingContextBounds(); - aRect.MoveBy(-parentBounds.x, -parentBounds.y); - return aRect; -} - -Point -WebRenderLayer::GetOffsetToParent() -{ - Rect parentBounds = ParentStackingContextBounds(); - return parentBounds.TopLeft(); -} - -Rect -WebRenderLayer::VisibleBoundsRelativeToParent() -{ - return RelativeToParent(IntRectToRect(GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect())); -} - -Rect -WebRenderLayer::TransformedVisibleBoundsRelativeToParent() -{ - IntRect bounds = GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect(); - Rect transformed = GetLayer()->GetTransform().TransformBounds(IntRectToRect(bounds)); - return RelativeToParent(transformed); -} - -Maybe -WebRenderLayer::BuildWrMaskLayer(bool aUnapplyLayerTransform) -{ - if (GetLayer()->GetMaskLayer()) { - WebRenderLayer* maskLayer = ToWebRenderLayer(GetLayer()->GetMaskLayer()); - - // The size of mask layer is transformed, and we may set the layer transform - // to wr stacking context. So we should apply inverse transform for mask layer - // and reverse the offset of the stacking context. - gfx::Matrix4x4 transform = maskLayer->GetLayer()->GetTransform(); - if (aUnapplyLayerTransform) { - gfx::Rect bounds = IntRectToRect(GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect()); - transform = transform.PreTranslate(-bounds.x, -bounds.y, 0); - transform = transform * GetLayer()->GetTransform().Inverse(); - } - - return maskLayer->RenderMaskLayer(transform); - } - - return Nothing(); -} - -gfx::Rect -WebRenderLayer::GetWrBoundsRect() -{ - LayerIntRect bounds = GetLayer()->GetVisibleRegion().GetBounds(); - return Rect(0, 0, bounds.width, bounds.height); -} - -gfx::Rect -WebRenderLayer::GetWrClipRect(gfx::Rect& aRect) -{ - gfx::Rect clip; - Layer* layer = GetLayer(); - Matrix4x4 transform = layer->GetTransform(); - if (layer->GetClipRect().isSome()) { - clip = RelativeToVisible(transform.Inverse().TransformBounds( - IntRectToRect(layer->GetClipRect().ref().ToUnknownRect())) - ); - } else { - clip = aRect; - } - - return clip; -} - -gfx::Matrix4x4 -WebRenderLayer::GetWrBoundTransform() -{ - gfx::Matrix4x4 transform = GetLayer()->GetTransform(); - transform._41 = 0.0f; - transform._42 = 0.0f; - transform._43 = 0.0f; - return transform; -} - -gfx::Rect -WebRenderLayer::GetWrRelBounds() -{ - gfx::Rect bounds = IntRectToRect(GetLayer()->GetVisibleRegion().GetBounds().ToUnknownRect()); - gfx::Matrix4x4 transform = GetWrBoundTransform(); - if (!transform.IsIdentity()) { - // WR will only apply the 'translate' of the transform, so we need to do the scale/rotation manually. - bounds.MoveTo(transform.TransformPoint(bounds.TopLeft())); - } - - return RelativeToParent(bounds); -} - -Maybe -WebRenderLayer::UpdateImageKey(ImageClientSingle* aImageClient, - ImageContainer* aContainer, - Maybe& aOldKey, - wr::ExternalImageId& aExternalImageId) -{ - MOZ_ASSERT(aImageClient); - MOZ_ASSERT(aContainer); - - uint32_t oldCounter = aImageClient->GetLastUpdateGenerationCounter(); - - bool ret = aImageClient->UpdateImage(aContainer, /* unused */0); - if (!ret || aImageClient->IsEmpty()) { - // Delete old key - if (aOldKey.isSome()) { - WrManager()->AddImageKeyForDiscard(aOldKey.value()); - } - return Nothing(); - } - - // Reuse old key if generation is not updated. - if (oldCounter == aImageClient->GetLastUpdateGenerationCounter() && aOldKey.isSome()) { - return aOldKey; - } - - // Delete old key, we are generating a new key. - if (aOldKey.isSome()) { - WrManager()->AddImageKeyForDiscard(aOldKey.value()); - } - - WrImageKey key = GetImageKey(); - WrBridge()->AddWebRenderParentCommand(OpAddExternalImage(aExternalImageId, key)); - return Some(key); -} - -void -WebRenderLayer::DumpLayerInfo(const char* aLayerType, gfx::Rect& aRect) -{ - if (!gfxPrefs::LayersDump()) { - return; - } - - Matrix4x4 transform = GetLayer()->GetTransform(); - Rect clip = GetWrClipRect(aRect); - Rect relBounds = GetWrRelBounds(); - Rect overflow(0, 0, relBounds.width, relBounds.height); - WrMixBlendMode mixBlendMode = wr::ToWrMixBlendMode(GetLayer()->GetMixBlendMode()); - - printf_stderr("%s %p using bounds=%s, overflow=%s, transform=%s, rect=%s, clip=%s, mix-blend-mode=%s\n", - aLayerType, - GetLayer(), - Stringify(relBounds).c_str(), - Stringify(overflow).c_str(), - Stringify(transform).c_str(), - Stringify(aRect).c_str(), - Stringify(clip).c_str(), - Stringify(mixBlendMode).c_str()); -} - WebRenderLayerManager::WebRenderLayerManager(nsIWidget* aWidget) : mWidget(aWidget) , mLatestTransactionId(0) diff --git a/gfx/layers/wr/WebRenderLayerManager.h b/gfx/layers/wr/WebRenderLayerManager.h index 7d226a1abca7..44387234ad36 100644 --- a/gfx/layers/wr/WebRenderLayerManager.h +++ b/gfx/layers/wr/WebRenderLayerManager.h @@ -8,12 +8,9 @@ #include "Layers.h" #include "mozilla/ipc/MessageChannel.h" -#include "mozilla/layers/CompositorController.h" -#include "mozilla/layers/TransactionIdAllocator.h" #include "mozilla/MozPromise.h" -#include "mozilla/webrender/webrender_ffi.h" +#include "mozilla/layers/TransactionIdAllocator.h" #include "mozilla/webrender/WebRenderTypes.h" -#include "mozilla/webrender/WebRenderAPI.h" class nsIWidget; @@ -21,59 +18,12 @@ namespace mozilla { namespace layers { class CompositorBridgeChild; -class ImageClientSingle; class KnowsCompositor; class PCompositorBridgeChild; class WebRenderBridgeChild; -class WebRenderLayerManager; -class APZCTreeManager; typedef MozPromise PipelineIdPromise; - -class WebRenderLayer -{ -public: - virtual Layer* GetLayer() = 0; - virtual void RenderLayer(wr::DisplayListBuilder& aBuilder) = 0; - virtual Maybe RenderMaskLayer(const gfx::Matrix4x4& aTransform) - { - MOZ_ASSERT(false); - return Nothing(); - } - - virtual already_AddRefed GetAsSourceSurface() { return nullptr; } - static inline WebRenderLayer* - ToWebRenderLayer(Layer* aLayer) - { - return static_cast(aLayer->ImplData()); - } - - Maybe UpdateImageKey(ImageClientSingle* aImageClient, - ImageContainer* aContainer, - Maybe& aOldKey, - wr::ExternalImageId& aExternalImageId); - - WebRenderLayerManager* WrManager(); - WebRenderBridgeChild* WrBridge(); - WrImageKey GetImageKey(); - - gfx::Rect RelativeToVisible(gfx::Rect aRect); - gfx::Rect RelativeToTransformedVisible(gfx::Rect aRect); - gfx::Rect ParentStackingContextBounds(); - gfx::Rect RelativeToParent(gfx::Rect aRect); - gfx::Rect VisibleBoundsRelativeToParent(); - gfx::Point GetOffsetToParent(); - gfx::Rect TransformedVisibleBoundsRelativeToParent(); -protected: - gfx::Rect GetWrBoundsRect(); - gfx::Rect GetWrRelBounds(); - gfx::Rect GetWrClipRect(gfx::Rect& aRect); - gfx::Matrix4x4 GetWrBoundTransform(); - void DumpLayerInfo(const char* aLayerType, gfx::Rect& aRect); - Maybe BuildWrMaskLayer(bool aUnapplyLayerTransform); -}; - class WebRenderLayerManager final : public LayerManager { typedef nsTArray > LayerRefArray; diff --git a/gfx/layers/wr/WebRenderPaintedLayer.h b/gfx/layers/wr/WebRenderPaintedLayer.h index f2420f3e711f..655a0f491bb8 100644 --- a/gfx/layers/wr/WebRenderPaintedLayer.h +++ b/gfx/layers/wr/WebRenderPaintedLayer.h @@ -9,7 +9,8 @@ #include "Layers.h" #include "mozilla/layers/ContentClient.h" #include "mozilla/layers/WebRenderBridgeChild.h" -#include "WebRenderLayerManager.h" +#include "mozilla/layers/WebRenderLayer.h" +#include "mozilla/layers/WebRenderLayerManager.h" #include "mozilla/webrender/WebRenderTypes.h" namespace mozilla { diff --git a/gfx/layers/wr/WebRenderTextLayer.h b/gfx/layers/wr/WebRenderTextLayer.h index 4f80aaccebfc..df84bc8f083b 100644 --- a/gfx/layers/wr/WebRenderTextLayer.h +++ b/gfx/layers/wr/WebRenderTextLayer.h @@ -9,7 +9,8 @@ #include "gfxUtils.h" #include "Layers.h" -#include "WebRenderLayerManager.h" +#include "mozilla/layers/WebRenderLayer.h" +#include "mozilla/layers/WebRenderLayerManager.h" namespace mozilla { namespace layers {