Bug 1346451 - Delete WebRenderBorderLayer. r=ethlin

This commit is contained in:
Mason Chang 2017-03-11 10:04:26 -08:00
parent 916f12ed8f
commit 516a3654f4
7 changed files with 44 additions and 157 deletions

View File

@ -191,7 +191,6 @@ EXPORTS.mozilla.layers += [
'SourceSurfaceVolatileData.h',
'TextureWrapperImage.h',
'TransactionIdAllocator.h',
'wr/WebRenderBorderLayer.h',
'wr/WebRenderBridgeChild.h',
'wr/WebRenderBridgeParent.h',
'wr/WebRenderCompositableHolder.h',
@ -377,7 +376,6 @@ UNIFIED_SOURCES += [
'SourceSurfaceSharedData.cpp',
'SourceSurfaceVolatileData.cpp',
'TextureWrapperImage.cpp',
'wr/WebRenderBorderLayer.cpp',
'wr/WebRenderBridgeChild.cpp',
'wr/WebRenderBridgeParent.cpp',
'wr/WebRenderCanvasLayer.cpp',

View File

@ -1,79 +0,0 @@
/* -*- 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 "WebRenderBorderLayer.h"
#include "gfxPrefs.h"
#include "LayersLogging.h"
#include "mozilla/gfx/Rect.h"
#include "mozilla/webrender/webrender_ffi.h"
#include "mozilla/layers/WebRenderBridgeChild.h"
#include "mozilla/webrender/WebRenderTypes.h"
namespace mozilla {
namespace layers {
using namespace mozilla::gfx;
/* static */void
WebRenderBorderLayer::CreateWebRenderCommands(wr::DisplayListBuilder& aBuilder,
WebRenderLayer* aLayer,
BorderColors& aColors,
BorderCorners& aCorners,
BorderWidths& aWidths,
BorderStyles& aBorderStyles,
Rect aRect,
Rect aClipRect,
Rect aRelBounds,
Rect aOverflow)
{
aBuilder.PushStackingContext(wr::ToWrRect(aRelBounds),
wr::ToWrRect(aOverflow),
nullptr,
1.0f,
aLayer->GetLayer()->GetTransform(),
wr::MixBlendMode::Normal);
aBuilder.PushBorder(wr::ToWrRect(aRect), aBuilder.BuildClipRegion(wr::ToWrRect(aClipRect)),
wr::ToWrBorderWidths(aWidths[0], aWidths[1], aWidths[2], aWidths[3]),
wr::ToWrBorderSide(aColors[0], aBorderStyles[0]),
wr::ToWrBorderSide(aColors[1], aBorderStyles[1]),
wr::ToWrBorderSide(aColors[2], aBorderStyles[2]),
wr::ToWrBorderSide(aColors[3], aBorderStyles[3]),
wr::ToWrBorderRadius(aCorners[eCornerTopLeft], aCorners[eCornerTopRight],
aCorners[eCornerBottomLeft], aCorners[eCornerBottomRight]));
aBuilder.PopStackingContext();
}
void
WebRenderBorderLayer::RenderLayer(wr::DisplayListBuilder& aBuilder)
{
gfx::Rect relBounds = GetWrRelBounds();
gfx::Rect overflow(0, 0, relBounds.width, relBounds.height);
gfx::Rect rect = GetWrBoundsRect();
gfx::Rect clipRect = GetWrClipRect(rect);
DumpLayerInfo("BorderLayer", rect);
aBuilder.PushStackingContext(wr::ToWrRect(relBounds),
wr::ToWrRect(overflow),
nullptr,
1.0f,
//GetAnimations(),
GetTransform(),
wr::MixBlendMode::Normal);
aBuilder.PushBorder(wr::ToWrRect(rect), aBuilder.BuildClipRegion(wr::ToWrRect(clipRect)),
wr::ToWrBorderWidths(mWidths[0], mWidths[1], mWidths[2], mWidths[3]),
wr::ToWrBorderSide(mColors[0], mBorderStyles[0]),
wr::ToWrBorderSide(mColors[1], mBorderStyles[1]),
wr::ToWrBorderSide(mColors[2], mBorderStyles[2]),
wr::ToWrBorderSide(mColors[3], mBorderStyles[3]),
wr::ToWrBorderRadius(mCorners[eCornerTopLeft], mCorners[eCornerTopRight],
mCorners[eCornerBottomLeft], mCorners[eCornerBottomRight]));
aBuilder.PopStackingContext();
}
} // namespace layers
} // namespace mozilla

View File

@ -1,50 +0,0 @@
/* -*- 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_WEBRENDERBORDERLAYER_H
#define GFX_WEBRENDERBORDERLAYER_H
#include "Layers.h"
#include "WebRenderLayerManager.h"
namespace mozilla {
namespace layers {
class WebRenderBorderLayer : public WebRenderLayer,
public BorderLayer {
public:
explicit WebRenderBorderLayer(WebRenderLayerManager* aLayerManager)
: BorderLayer(aLayerManager, static_cast<WebRenderLayer*>(this))
{
MOZ_COUNT_CTOR(WebRenderBorderLayer);
}
static void
CreateWebRenderCommands(wr::DisplayListBuilder& aBuilder,
WebRenderLayer* aLayer,
BorderColors& aColors,
BorderCorners& aCorners,
BorderWidths& aWidths,
BorderStyles& aBorderStyles,
gfx::Rect aRect,
gfx::Rect aClipRect,
gfx::Rect aRelBounds,
gfx::Rect aOverflow);
protected:
virtual ~WebRenderBorderLayer()
{
MOZ_COUNT_DTOR(WebRenderBorderLayer);
}
public:
Layer* GetLayer() override { return this; }
void RenderLayer(wr::DisplayListBuilder& aBuilder) override;
};
} // namespace layers
} // namespace mozilla
#endif // GFX_WEBRENDERBORDERLAYER_H

View File

@ -17,7 +17,6 @@
#include "mozilla/widget/PlatformWidgetTypes.h"
#include "nsThreadUtils.h"
#include "TreeTraversal.h"
#include "WebRenderBorderLayer.h"
#include "WebRenderCanvasLayer.h"
#include "WebRenderColorLayer.h"
#include "WebRenderContainerLayer.h"
@ -541,7 +540,7 @@ WebRenderLayerManager::CreateTextLayer()
already_AddRefed<BorderLayer>
WebRenderLayerManager::CreateBorderLayer()
{
return MakeAndAddRef<WebRenderBorderLayer>(this);
return nullptr;
}
already_AddRefed<DisplayItemLayer>

View File

@ -19,7 +19,6 @@
#include "gfxPrefs.h"
#include "gfxUtils.h"
#include "mozilla/layers/WebRenderDisplayItemLayer.h"
#include "mozilla/layers/WebRenderBorderLayer.h"
#define ACTIVE "active"
#define HOVER "hover"

View File

@ -4659,32 +4659,35 @@ nsDisplayBorder::BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerLayerParameters& aContainerParameters)
{
if (mBorderImageRenderer) {
return BuildDisplayItemLayer(aBuilder, aManager, aContainerParameters);
}
RefPtr<Layer> oldLayer = aManager->GetLayerBuilder()->GetLeafLayerFor(aBuilder, this);
RefPtr<BorderLayer> layer = oldLayer ? oldLayer->AsBorderLayer() : nullptr;
if (!layer) {
layer = aManager->CreateBorderLayer();
if (!layer)
return nullptr;
}
layer->SetRect(mRect);
layer->SetCornerRadii(mCorners);
layer->SetColors(mColors);
layer->SetWidths(mWidths);
layer->SetStyles(mBorderStyles);
layer->SetBaseTransform(gfx::Matrix4x4::Translation(aContainerParameters.mOffset.x,
aContainerParameters.mOffset.y, 0));
return layer.forget();
return BuildDisplayItemLayer(aBuilder, aManager, aContainerParameters);
}
void
nsDisplayBorder::CreateWebRenderCommands(wr::DisplayListBuilder& aBuilder,
nsTArray<WebRenderParentCommand>& aParentCommands,
WebRenderDisplayItemLayer* aLayer)
nsDisplayBorder::CreateBorderWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
WebRenderDisplayItemLayer* aLayer)
{
nsPoint offset = ToReferenceFrame();
Maybe<nsCSSBorderRenderer> br =
nsCSSRendering::CreateBorderRenderer(mFrame->PresContext(),
nullptr,
mFrame,
nsRect(),
nsRect(offset, mFrame->GetSize()),
mFrame->StyleContext(),
mFrame->GetSkipSides());
if (!br) {
NS_WARNING("Could not create border renderer during nsDisplayButtonBorder");
return;
}
br->CreateWebRenderCommands(aBuilder, aLayer);
}
void
nsDisplayBorder::CreateBorderImageWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
nsTArray<WebRenderParentCommand>& aParentCommands,
WebRenderDisplayItemLayer* aLayer)
{
// Only support border-image currently
MOZ_ASSERT(mBorderImageRenderer);
@ -4745,6 +4748,18 @@ nsDisplayBorder::CreateWebRenderCommands(wr::DisplayListBuilder& aBuilder,
wr::ToWrRepeatMode(mBorderImageRenderer->mRepeatModeVertical));
}
void
nsDisplayBorder::CreateWebRenderCommands(wr::DisplayListBuilder& aBuilder,
nsTArray<WebRenderParentCommand>& aParentCommands,
WebRenderDisplayItemLayer* aLayer)
{
if (mBorderImageRenderer) {
CreateBorderImageWebRenderCommands(aBuilder, aParentCommands, aLayer);
} else {
CreateBorderWebRenderCommands(aBuilder, aLayer);
}
}
void
nsDisplayBorder::Paint(nsDisplayListBuilder* aBuilder,
nsRenderingContext* aCtx) {

View File

@ -2877,6 +2877,11 @@ public:
}
protected:
void CreateBorderImageWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
nsTArray<WebRenderParentCommand>& aParentCommands,
WebRenderDisplayItemLayer* aLayer);
void CreateBorderWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
WebRenderDisplayItemLayer* aLayer);
nsRegion CalculateBounds(const nsStyleBorder& aStyleBorder);
mozilla::Array<mozilla::gfx::Color, 4> mColors;