Bug 1383204 - Create webrender commands for the nsDisplayRemote display item. r?ethlin
This allows us to turn on layers-free mode in the firefox UI process,
and have it work better in that the content process' content actually
shows up.
MozReview-Commit-ID: 5jOm22BkE32
--- a/layout/ipc/RenderFrameParent.cpp
+++ b/layout/ipc/RenderFrameParent.cpp
@@ -27,16 +27,17 @@
#include "nsStyleStructInlines.h"
#include "nsSubDocumentFrame.h"
#include "nsView.h"
#include "RenderFrameParent.h"
#include "mozilla/gfx/GPUProcessManager.h"
#include "mozilla/layers/LayerManagerComposite.h"
#include "mozilla/layers/CompositorBridgeChild.h"
#include "mozilla/layers/WebRenderLayerManager.h"
+#include "mozilla/webrender/WebRenderAPI.h"
#include "ClientLayerManager.h"
#include "FrameLayerBuilder.h"
using namespace mozilla::dom;
using namespace mozilla::gfx;
using namespace mozilla::layers;
namespace mozilla {
@@ -374,8 +375,27 @@ nsDisplayRemote::BuildLayer(nsDisplayLis
const ContainerLayerParameters& aContainerParameters)
{
RefPtr<Layer> layer = mRemoteFrame->BuildLayer(aBuilder, mFrame, aManager, this, aContainerParameters);
if (layer && layer->AsContainerLayer()) {
layer->AsContainerLayer()->SetEventRegionsOverride(mEventRegionsOverride);
}
return layer.forget();
}
+
+bool
+nsDisplayRemote::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
+ const StackingContextHelper& aSc,
+ nsTArray<WebRenderParentCommand>& aParentCommands,
+ mozilla::layers::WebRenderLayerManager* aManager,
+ nsDisplayListBuilder* aDisplayListBuilder)
+{
+ MOZ_ASSERT(aManager->IsLayersFreeTransaction());
+
+ mozilla::LayoutDeviceRect visible = mozilla::LayoutDeviceRect::FromAppUnits(
+ GetVisibleRect(), mFrame->PresContext()->AppUnitsPerDevPixel());
+ visible += mozilla::layout::GetContentRectLayerOffset(mFrame, aDisplayListBuilder);
+
+ aBuilder.PushIFrame(aSc.ToRelativeLayoutRect(visible),
+ mozilla::wr::AsPipelineId(mRemoteFrame->GetLayersId()));
+
+ return true;
+}
--- a/layout/ipc/RenderFrameParent.h
+++ b/layout/ipc/RenderFrameParent.h
@@ -157,16 +157,22 @@ public:
LayerManager* aManager,
const ContainerLayerParameters& aParameters) override
{ return mozilla::LAYER_ACTIVE_FORCE; }
virtual already_AddRefed<Layer>
BuildLayer(nsDisplayListBuilder* aBuilder, LayerManager* aManager,
const ContainerLayerParameters& aContainerParameters) override;
+ virtual bool CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
+ const StackingContextHelper& aSc,
+ nsTArray<WebRenderParentCommand>& aParentCommands,
+ mozilla::layers::WebRenderLayerManager* aManager,
+ nsDisplayListBuilder* aDisplayListBuilder) override;
+
NS_DISPLAY_DECL_NAME("Remote", TYPE_REMOTE)
private:
RenderFrameParent* mRemoteFrame;
mozilla::layers::EventRegionsOverride mEventRegionsOverride;
};