Bug 1503655 part 2 - Remove unused and outdated code from RenderFrameParent. r=kats

This commit removes a bunch of cruft from RenderFrameParent that isn't
used and isn't needed. Some functions that have no reason to be in
RenderFrameParent are moved to TabParent in anticipation of the
PRenderFrame protocol being dropped.

Differential Revision: https://phabricator.services.mozilla.com/D10411

--HG--
extra : rebase_source : 79f830e0ad48e868480108c3bbb01e3faca5e70a
extra : histedit_source : 4ddb361e4e4acae10ab16124b5d6548490f770ee
This commit is contained in:
Ryan Hunt 2018-10-25 15:23:46 -05:00
Родитель 535b26ac9c
Коммит 529e74890b
7 изменённых файлов: 175 добавлений и 264 удалений

Просмотреть файл

@ -534,6 +534,11 @@ parent:
*/
async RemotePaintIsReady();
/**
* Child informs the parent that a compositor transaction has ocurred.
*/
async NotifyCompositorTransaction();
/**
* Child informs the parent that the content is ready to handle input
* events. This is sent when the TabChild is created.

Просмотреть файл

@ -2923,7 +2923,7 @@ TabChild::NotifyPainted()
if (!mNotified) {
// Recording/replaying processes have a compositor but not a remote frame.
if (!recordreplay::IsRecordingOrReplaying()) {
mRemoteFrame->SendNotifyCompositorTransaction();
SendNotifyCompositorTransaction();
}
mNotified = true;
}
@ -3302,7 +3302,7 @@ TabChild::RecvRequestNotifyAfterRemotePaint()
// Tell the CompositorBridgeChild that, when it gets a RemotePaintIsReady
// message that it should forward it us so that we can bounce it to our
// RenderFrameParent.
// TabParent.
compositor->RequestNotifyAfterRemotePaint(this);
return IPC_OK();
}

Просмотреть файл

@ -641,7 +641,7 @@ TabParent::InitRenderFrame()
MOZ_ASSERT(frameLoader);
if (frameLoader) {
RenderFrameParent* renderFrame = new RenderFrameParent(frameLoader);
MOZ_ASSERT(renderFrame->IsInitted());
MOZ_ASSERT(renderFrame->IsInitialized());
layers::LayersId layersId = renderFrame->GetLayersId();
AddTabParentToTable(layersId, this);
if (!SendPRenderFrameConstructor(renderFrame)) {
@ -1654,9 +1654,19 @@ TabParent::SendHandleTap(TapType aType,
if (mIsDestroyed || !mIsReadyToHandleInputEvents) {
return false;
}
if ((aType == TapType::eSingleTap || aType == TapType::eSecondTap) &&
GetRenderFrame()) {
GetRenderFrame()->TakeFocusForClickFromTap();
if ((aType == TapType::eSingleTap || aType == TapType::eSecondTap)) {
nsIFocusManager* fm = nsFocusManager::GetFocusManager();
if (fm) {
RefPtr<nsFrameLoader> frameLoader = GetFrameLoader();
if (frameLoader) {
RefPtr<Element> element = frameLoader->GetOwnerContent();
if (element) {
fm->SetFocus(element, nsIFocusManager::FLAG_BYMOUSE |
nsIFocusManager::FLAG_BYTOUCH |
nsIFocusManager::FLAG_NOSCROLL);
}
}
}
}
LayoutDeviceIntPoint offset = GetChildProcessOffset();
return Manager()->AsContentParent()->IsInputPriorityEventEnabled()
@ -2604,7 +2614,7 @@ TabParent::AllocPRenderFrameParent()
RefPtr<nsFrameLoader> frameLoader = GetFrameLoader();
RenderFrameParent* rfp = new RenderFrameParent(frameLoader);
if (rfp->IsInitted()) {
if (rfp->IsInitialized()) {
layers::LayersId layersId = rfp->GetLayersId();
AddTabParentToTable(layersId, this);
}
@ -2632,7 +2642,7 @@ TabParent::SetRenderFrame(PRenderFrameParent* aRFParent)
}
RenderFrameParent* renderFrame = static_cast<RenderFrameParent*>(aRFParent);
bool success = renderFrame->Init(frameLoader);
bool success = renderFrame->Initialize(frameLoader);
if (!success) {
return false;
}
@ -3184,6 +3194,30 @@ TabParent::RecvRemotePaintIsReady()
return IPC_OK();
}
mozilla::ipc::IPCResult
TabParent::RecvNotifyCompositorTransaction()
{
RefPtr<nsFrameLoader> frameLoader = GetFrameLoader();
if (!frameLoader) {
return IPC_OK();
}
nsIFrame* docFrame = frameLoader->GetPrimaryFrameOfOwningContent();
if (!docFrame) {
// Bad, but nothing we can do about it (XXX/cjones: or is there?
// maybe bug 589337?). When the new frame is created, we'll
// probably still be the current render frame and will get to draw
// our content then. Or, we're shutting down and this update goes
// to /dev/null.
return IPC_OK();
}
docFrame->InvalidateLayer(DisplayItemType::TYPE_REMOTE);
return IPC_OK();
}
mozilla::ipc::IPCResult
TabParent::RecvRemoteIsReadyToHandleInputEvents()
{

Просмотреть файл

@ -626,6 +626,8 @@ protected:
virtual mozilla::ipc::IPCResult RecvRemotePaintIsReady() override;
virtual mozilla::ipc::IPCResult RecvNotifyCompositorTransaction() override;
virtual mozilla::ipc::IPCResult RecvRemoteIsReadyToHandleInputEvents() override;
virtual mozilla::ipc::IPCResult RecvPaintWhileInterruptingJSNoOp(const LayersObserverEpoch& aEpoch) override;

Просмотреть файл

@ -28,7 +28,6 @@ sync protocol PRenderFrame
manager PBrowser;
parent:
async NotifyCompositorTransaction();
async __delete__();
};

Просмотреть файл

@ -6,34 +6,20 @@
#include "base/basictypes.h"
#include "BasicLayers.h"
#include "gfxPrefs.h"
#include "mozilla/BrowserElementParent.h"
#include "mozilla/EventForwards.h" // for Modifiers
#include "mozilla/ViewportFrame.h"
#include "mozilla/dom/ContentChild.h"
#include "mozilla/dom/ContentParent.h"
#include "mozilla/dom/Element.h"
#include "mozilla/dom/TabChild.h"
#include "mozilla/dom/TabParent.h"
#include "mozilla/layers/CompositorBridgeParent.h"
#include "mozilla/layers/CompositorTypes.h"
#include "mozilla/layers/LayerTransactionParent.h"
#include "nsContentUtils.h"
#include "nsFocusManager.h"
#include "nsFrameLoader.h"
#include "nsIObserver.h"
#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/layers/WebRenderScrollData.h"
#include "mozilla/webrender/WebRenderAPI.h"
#include "ClientLayerManager.h"
#include "FrameLayerBuilder.h"
using namespace mozilla::dom;
using namespace mozilla::gfx;
@ -42,39 +28,6 @@ using namespace mozilla::layers;
namespace mozilla {
namespace layout {
typedef ScrollableLayerGuid::ViewID ViewID;
/**
* Gets the layer-pixel offset of aContainerFrame's content rect top-left
* from the nearest display item reference frame (which we assume will be inducing
* a ContainerLayer).
*/
static LayoutDeviceIntPoint
GetContentRectLayerOffset(nsIFrame* aContainerFrame, nsDisplayListBuilder* aBuilder)
{
nscoord auPerDevPixel = aContainerFrame->PresContext()->AppUnitsPerDevPixel();
// Offset to the content rect in case we have borders or padding
// Note that aContainerFrame could be a reference frame itself, so
// we need to be careful here to ensure that we call ToReferenceFrame
// on aContainerFrame and not its parent.
nsPoint frameOffset = aBuilder->ToReferenceFrame(aContainerFrame) +
aContainerFrame->GetContentRectRelativeToSelf().TopLeft();
return LayoutDeviceIntPoint::FromAppUnitsToNearest(frameOffset, auPerDevPixel);
}
// Return true iff |aManager| is a "temporary layer manager". They're
// used for small software rendering tasks, like drawWindow. That's
// currently implemented by a BasicLayerManager without a backing
// widget, and hence in non-retained mode.
inline static bool
IsTempLayerManager(LayerManager* aManager)
{
return (mozilla::layers::LayersBackend::LAYERS_BASIC == aManager->GetBackendType() &&
!static_cast<BasicLayerManager*>(aManager)->IsRetained());
}
static already_AddRefed<LayerManager>
GetLayerManager(nsFrameLoader* aFrameLoader)
{
@ -94,30 +47,27 @@ GetLayerManager(nsFrameLoader* aFrameLoader)
RenderFrameParent::RenderFrameParent(nsFrameLoader* aFrameLoader)
: mLayersId{0}
, mLayersConnected(false)
, mFrameLoader(aFrameLoader)
, mFrameLoaderDestroyed(false)
, mAsyncPanZoomEnabled(false)
, mInitted(false)
, mLayerManager(nullptr)
, mInitialized(false)
, mLayersConnected(false)
{
mInitted = Init(aFrameLoader);
mInitialized = Initialize(mFrameLoader);
}
RenderFrameParent::~RenderFrameParent()
{}
{
}
bool
RenderFrameParent::Init(nsFrameLoader* aFrameLoader)
RenderFrameParent::Initialize(nsFrameLoader* aFrameLoader)
{
if (mInitted || !aFrameLoader) {
if (mInitialized || !aFrameLoader) {
return false;
}
mFrameLoader = aFrameLoader;
RefPtr<LayerManager> lm = GetLayerManager(mFrameLoader);
mAsyncPanZoomEnabled = lm && lm->AsyncPanZoomEnabled();
PCompositorBridgeChild* compositor = lm
? lm->GetCompositorBridgeChild()
: nullptr;
@ -134,73 +84,30 @@ RenderFrameParent::Init(nsFrameLoader* aFrameLoader)
&mLayersId,
&mCompositorOptions);
mInitted = true;
mInitialized = true;
return true;
}
bool
RenderFrameParent::IsInitted()
{
return mInitted;
}
void
RenderFrameParent::Destroy()
{
mFrameLoaderDestroyed = true;
mLayerManager = nullptr;
}
already_AddRefed<Layer>
RenderFrameParent::BuildLayer(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame,
LayerManager* aManager,
nsDisplayItem* aItem,
const ContainerLayerParameters& aContainerParameters)
void
RenderFrameParent::EnsureLayersConnected(CompositorOptions* aCompositorOptions)
{
MOZ_ASSERT(aFrame,
"makes no sense to have a shadow tree without a frame");
if (IsTempLayerManager(aManager)) {
// This can happen if aManager is a "temporary" manager, or if the
// widget's layer manager changed out from under us. We need to
// FIXME handle the former case somehow, probably with an API to
// draw a manager's subtree. The latter is bad bad bad, but the the
// MOZ_ASSERT() above will flag it. Returning nullptr here will just
// cause the shadow subtree not to be rendered.
if (!aContainerParameters.mForEventsAndPluginsOnly) {
NS_WARNING("Remote iframe not rendered");
}
return nullptr;
RefPtr<LayerManager> lm = GetLayerManager(mFrameLoader);
if (!lm) {
return;
}
if (!mLayersId.IsValid()) {
return nullptr;
if (!lm->GetCompositorBridgeChild()) {
return;
}
RefPtr<Layer> layer =
(aManager->GetLayerBuilder()->GetLeafLayerFor(aBuilder, aItem));
if (!layer) {
layer = aManager->CreateRefLayer();
}
if (!layer) {
// Probably a temporary layer manager that doesn't know how to
// use ref layers.
return nullptr;
}
static_cast<RefLayer*>(layer.get())->SetReferentId(mLayersId);
LayoutDeviceIntPoint offset = GetContentRectLayerOffset(aFrame, aBuilder);
// We can only have an offset if we're a child of an inactive
// container, but our display item is LAYER_ACTIVE_FORCE which
// forces all layers above to be active.
MOZ_ASSERT(aContainerParameters.mOffset == nsIntPoint());
gfx::Matrix4x4 m = gfx::Matrix4x4::Translation(offset.x, offset.y, 0.0);
// Remote content can't be repainted by us, so we multiply down
// the resolution that our container expects onto our container.
m.PreScale(aContainerParameters.mXScale, aContainerParameters.mYScale, 1.0);
layer->SetBaseTransform(m);
return layer.forget();
mLayersConnected = lm->GetCompositorBridgeChild()->SendNotifyChildRecreated(mLayersId, &mCompositorOptions);
*aCompositorOptions = mCompositorOptions;
}
LayerManager*
@ -241,31 +148,8 @@ RenderFrameParent::ActorDestroy(ActorDestroyReason why)
mLayerManager = nullptr;
}
mozilla::ipc::IPCResult
RenderFrameParent::RecvNotifyCompositorTransaction()
{
TriggerRepaint();
return IPC_OK();
}
void
RenderFrameParent::TriggerRepaint()
{
nsIFrame* docFrame = mFrameLoader->GetPrimaryFrameOfOwningContent();
if (!docFrame) {
// Bad, but nothing we can do about it (XXX/cjones: or is there?
// maybe bug 589337?). When the new frame is created, we'll
// probably still be the current render frame and will get to draw
// our content then. Or, we're shutting down and this update goes
// to /dev/null.
return;
}
docFrame->InvalidateLayer(DisplayItemType::TYPE_REMOTE);
}
void
RenderFrameParent::GetTextureFactoryIdentifier(TextureFactoryIdentifier* aTextureFactoryIdentifier)
RenderFrameParent::GetTextureFactoryIdentifier(TextureFactoryIdentifier* aTextureFactoryIdentifier) const
{
RefPtr<LayerManager> lm = mFrameLoader ? GetLayerManager(mFrameLoader) : nullptr;
// Perhaps the document containing this frame currently has no presentation?
@ -276,41 +160,40 @@ RenderFrameParent::GetTextureFactoryIdentifier(TextureFactoryIdentifier* aTextur
}
}
void
RenderFrameParent::TakeFocusForClickFromTap()
{
nsIFocusManager* fm = nsFocusManager::GetFocusManager();
if (!fm) {
return;
}
RefPtr<Element> element = mFrameLoader->GetOwnerContent();
if (!element) {
return;
}
fm->SetFocus(element, nsIFocusManager::FLAG_BYMOUSE |
nsIFocusManager::FLAG_BYTOUCH |
nsIFocusManager::FLAG_NOSCROLL);
}
void
RenderFrameParent::EnsureLayersConnected(CompositorOptions* aCompositorOptions)
{
RefPtr<LayerManager> lm = GetLayerManager(mFrameLoader);
if (!lm) {
return;
}
if (!lm->GetCompositorBridgeChild()) {
return;
}
mLayersConnected = lm->GetCompositorBridgeChild()->SendNotifyChildRecreated(mLayersId, &mCompositorOptions);
*aCompositorOptions = mCompositorOptions;
}
} // namespace layout
} // namespace mozilla
/**
* Gets the layer-pixel offset of aContainerFrame's content rect top-left
* from the nearest display item reference frame (which we assume will be inducing
* a ContainerLayer).
*/
static mozilla::LayoutDeviceIntPoint
GetContentRectLayerOffset(nsIFrame* aContainerFrame, nsDisplayListBuilder* aBuilder)
{
nscoord auPerDevPixel = aContainerFrame->PresContext()->AppUnitsPerDevPixel();
// Offset to the content rect in case we have borders or padding
// Note that aContainerFrame could be a reference frame itself, so
// we need to be careful here to ensure that we call ToReferenceFrame
// on aContainerFrame and not its parent.
nsPoint frameOffset = aBuilder->ToReferenceFrame(aContainerFrame) +
aContainerFrame->GetContentRectRelativeToSelf().TopLeft();
return mozilla::LayoutDeviceIntPoint::FromAppUnitsToNearest(frameOffset, auPerDevPixel);
}
// Return true iff |aManager| is a "temporary layer manager". They're
// used for small software rendering tasks, like drawWindow. That's
// currently implemented by a BasicLayerManager without a backing
// widget, and hence in non-retained mode.
inline static bool
IsTempLayerManager(mozilla::layers::LayerManager* aManager)
{
return (mozilla::layers::LayersBackend::LAYERS_BASIC == aManager->GetBackendType() &&
!static_cast<BasicLayerManager*>(aManager)->IsRetained());
}
nsDisplayRemote::nsDisplayRemote(nsDisplayListBuilder* aBuilder,
nsSubDocumentFrame* aFrame)
: nsDisplayItem(aBuilder, aFrame)
@ -327,7 +210,7 @@ nsDisplayRemote::nsDisplayRemote(nsDisplayListBuilder* aBuilder,
mEventRegionsOverride |= EventRegionsOverride::ForceDispatchToContent;
}
nsFrameLoader* frameLoader = GetRenderFrameParent()->FrameLoader();
nsFrameLoader* frameLoader = GetRenderFrameParent()->GetFrameLoader();
if (frameLoader) {
TabParent* browser = TabParent::GetFrom(frameLoader);
if (browser) {
@ -341,7 +224,7 @@ nsDisplayRemote::GetLayerState(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerLayerParameters& aParameters)
{
if (mozilla::layout::IsTempLayerManager(aManager)) {
if (IsTempLayerManager(aManager)) {
return mozilla::LAYER_NONE;
}
return mozilla::LAYER_ACTIVE_FORCE;
@ -360,14 +243,56 @@ nsDisplayRemote::BuildLayer(nsDisplayListBuilder* aBuilder,
const ContainerLayerParameters& aContainerParameters)
{
MOZ_ASSERT(GetRenderFrameParent());
MOZ_ASSERT(mFrame, "Makes no sense to have a shadow tree without a frame");
if (IsTempLayerManager(aManager)) {
// This can happen if aManager is a "temporary" manager, or if the
// widget's layer manager changed out from under us. We need to
// FIXME handle the former case somehow, probably with an API to
// draw a manager's subtree. The latter is bad bad bad, but the the
// MOZ_ASSERT() above will flag it. Returning nullptr here will just
// cause the shadow subtree not to be rendered.
if (!aContainerParameters.mForEventsAndPluginsOnly) {
NS_WARNING("Remote iframe not rendered");
}
return nullptr;
}
LayersId remoteId = GetRenderFrameParent()->GetLayersId();
if (!remoteId.IsValid()) {
return nullptr;
}
RefPtr<Layer> layer =
GetRenderFrameParent()->BuildLayer(aBuilder, mFrame, aManager,
this, aContainerParameters);
aManager->GetLayerBuilder()->GetLeafLayerFor(aBuilder, this);
if (layer && layer->AsRefLayer()) {
if (!layer) {
layer = aManager->CreateRefLayer();
}
if (!layer) {
// Probably a temporary layer manager that doesn't know how to
// use ref layers.
return nullptr;
}
static_cast<RefLayer*>(layer.get())->SetReferentId(remoteId);
LayoutDeviceIntPoint offset = GetContentRectLayerOffset(Frame(), aBuilder);
// We can only have an offset if we're a child of an inactive
// container, but our display item is LAYER_ACTIVE_FORCE which
// forces all layers above to be active.
MOZ_ASSERT(aContainerParameters.mOffset == nsIntPoint());
Matrix4x4 m = Matrix4x4::Translation(offset.x, offset.y, 0.0);
// Remote content can't be repainted by us, so we multiply down
// the resolution that our container expects onto our container.
m.PreScale(aContainerParameters.mXScale, aContainerParameters.mYScale, 1.0);
layer->SetBaseTransform(m);
if (layer->AsRefLayer()) {
layer->AsRefLayer()->SetEventRegionsOverride(mEventRegionsOverride);
}
return layer.forget();
}
@ -393,9 +318,9 @@ nsDisplayRemote::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuild
mozilla::layers::WebRenderLayerManager* aManager,
nsDisplayListBuilder* aDisplayListBuilder)
{
mOffset = mozilla::layout::GetContentRectLayerOffset(mFrame, aDisplayListBuilder);
mOffset = GetContentRectLayerOffset(mFrame, aDisplayListBuilder);
mozilla::LayoutDeviceRect rect = mozilla::LayoutDeviceRect::FromAppUnits(
LayoutDeviceRect rect = LayoutDeviceRect::FromAppUnits(
mFrame->GetContentRectRelativeToSelf(), mFrame->PresContext()->AppUnitsPerDevPixel());
rect += mOffset;

Просмотреть файл

@ -8,10 +8,8 @@
#define mozilla_layout_RenderFrameParent_h
#include "mozilla/Attributes.h"
#include <map>
#include "mozilla/dom/ipc/IdType.h"
#include "mozilla/layers/APZUtils.h"
#include "mozilla/layers/CompositorOptions.h"
#include "mozilla/layers/LayersTypes.h"
#include "mozilla/layout/PRenderFrameParent.h"
@ -22,94 +20,48 @@ class nsSubDocumentFrame;
namespace mozilla {
class InputEvent;
namespace layers {
class AsyncDragMetrics;
class TargetConfig;
struct TextureFactoryIdentifier;
struct ScrollableLayerGuid;
} // namespace layers
namespace layout {
class RenderFrameParent final : public PRenderFrameParent
{
typedef mozilla::layers::AsyncDragMetrics AsyncDragMetrics;
typedef mozilla::layers::FrameMetrics FrameMetrics;
typedef mozilla::layers::CompositorOptions CompositorOptions;
typedef mozilla::layers::ContainerLayer ContainerLayer;
typedef mozilla::layers::Layer Layer;
typedef mozilla::layers::LayerManager LayerManager;
typedef mozilla::layers::LayersId LayersId;
typedef mozilla::layers::TargetConfig TargetConfig;
typedef mozilla::ContainerLayerParameters ContainerLayerParameters;
typedef mozilla::layers::TextureFactoryIdentifier TextureFactoryIdentifier;
typedef mozilla::layers::ScrollableLayerGuid ScrollableLayerGuid;
typedef mozilla::layers::TouchBehaviorFlags TouchBehaviorFlags;
typedef mozilla::layers::ZoomConstraints ZoomConstraints;
typedef ScrollableLayerGuid::ViewID ViewID;
public:
/**
* Select the desired scrolling behavior. If ASYNC_PAN_ZOOM is
* chosen, then RenderFrameParent will watch input events and use
* them to asynchronously pan and zoom.
*/
explicit RenderFrameParent(nsFrameLoader* aFrameLoader);
virtual ~RenderFrameParent();
bool Init(nsFrameLoader* aFrameLoader);
bool IsInitted();
bool Initialize(nsFrameLoader* aFrameLoader);
void Destroy();
already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame,
LayerManager* aManager,
nsDisplayItem* aItem,
const ContainerLayerParameters& aContainerParameters);
void EnsureLayersConnected(CompositorOptions* aCompositorOptions);
LayerManager* AttachLayerManager();
void OwnerContentChanged(nsIContent* aContent);
bool HitTest(const nsRect& aRect);
nsFrameLoader* GetFrameLoader() const { return mFrameLoader; }
LayersId GetLayersId() const { return mLayersId; }
CompositorOptions GetCompositorOptions() const { return mCompositorOptions; }
void GetTextureFactoryIdentifier(TextureFactoryIdentifier* aTextureFactoryIdentifier);
void GetTextureFactoryIdentifier(TextureFactoryIdentifier* aTextureFactoryIdentifier) const;
inline LayersId GetLayersId() const { return mLayersId; }
inline bool IsLayersConnected() const { return mLayersConnected; }
inline CompositorOptions GetCompositorOptions() const { return mCompositorOptions; }
void TakeFocusForClickFromTap();
void EnsureLayersConnected(CompositorOptions* aCompositorOptions);
LayerManager* AttachLayerManager();
nsFrameLoader* FrameLoader() const
{
return mFrameLoader;
}
bool IsInitialized() const { return mInitialized; }
bool IsLayersConnected() const { return mLayersConnected; }
protected:
void ActorDestroy(ActorDestroyReason why) override;
virtual mozilla::ipc::IPCResult RecvNotifyCompositorTransaction() override;
private:
void TriggerRepaint();
void DispatchEventForPanZoomController(const InputEvent& aEvent);
// When our child frame is pushing transactions directly to the
// compositor, this is the ID of its layer tree in the compositor's
// context.
LayersId mLayersId;
// A flag that indicates whether or not the compositor knows about the
// layers id. In some cases this RenderFrameParent is not connected to the
// compositor and so this flag is false.
bool mLayersConnected;
// The compositor options for this layers id. This is only meaningful if
// the compositor actually knows about this layers id (i.e. when mLayersConnected
// is true).
@ -118,24 +70,11 @@ private:
RefPtr<nsFrameLoader> mFrameLoader;
RefPtr<LayerManager> mLayerManager;
// True after Destroy() has been called, which is triggered
// originally by nsFrameLoader::Destroy(). After this point, we can
// no longer safely ask the frame loader to find its nearest layer
// manager, because it may have been disconnected from the DOM.
// It's still OK to *tell* the frame loader that we've painted after
// it's destroyed; it'll just ignore us, and we won't be able to
// find an nsIFrame to invalidate. See ShadowLayersUpdated().
//
// Prefer the extra bit of state to null'ing out mFrameLoader in
// Destroy() so that less code needs to be special-cased for after
// Destroy().
//
// It's possible for mFrameLoader==null and
// mFrameLoaderDestroyed==false.
bool mFrameLoaderDestroyed;
bool mAsyncPanZoomEnabled;
bool mInitted;
bool mInitialized;
// A flag that indicates whether or not the compositor knows about the
// layers id. In some cases this RenderFrameParent is not connected to the
// compositor and so this flag is false.
bool mLayersConnected;
};
} // namespace layout
@ -148,7 +87,15 @@ private:
*/
class nsDisplayRemote final : public nsDisplayItem
{
typedef mozilla::dom::TabId TabId;
typedef mozilla::gfx::Matrix4x4 Matrix4x4;
typedef mozilla::layers::EventRegionsOverride EventRegionsOverride;
typedef mozilla::layers::Layer Layer;
typedef mozilla::layers::LayersId LayersId;
typedef mozilla::layers::RefLayer RefLayer;
typedef mozilla::layout::RenderFrameParent RenderFrameParent;
typedef mozilla::LayoutDeviceRect LayoutDeviceRect;
typedef mozilla::LayoutDeviceIntPoint LayoutDeviceIntPoint;
public:
nsDisplayRemote(nsDisplayListBuilder* aBuilder,
@ -177,13 +124,12 @@ public:
NS_DISPLAY_DECL_NAME("Remote", TYPE_REMOTE)
private:
mozilla::layers::LayersId GetRemoteLayersId() const;
LayersId GetRemoteLayersId() const;
RenderFrameParent* GetRenderFrameParent() const;
mozilla::dom::TabId mTabId;
mozilla::LayoutDeviceIntPoint mOffset;
mozilla::layers::EventRegionsOverride mEventRegionsOverride;
TabId mTabId;
LayoutDeviceIntPoint mOffset;
EventRegionsOverride mEventRegionsOverride;
};
#endif // mozilla_layout_RenderFrameParent_h