mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1321183 - Deliver TextureFactoryIdentifier r=nical
This commit is contained in:
parent
1565dfd024
commit
af7a090b59
@ -2510,7 +2510,11 @@ TabChild::InitRenderingState(const TextureFactoryIdentifier& aTextureFactoryIden
|
||||
|
||||
LayerManager* lm = mPuppetWidget->GetLayerManager();
|
||||
if (lm->AsWebRenderLayerManager()) {
|
||||
lm->AsWebRenderLayerManager()->Initialize(compositorChild, aLayersId);
|
||||
lm->AsWebRenderLayerManager()->Initialize(compositorChild,
|
||||
aLayersId,
|
||||
&mTextureFactoryIdentifier);
|
||||
ImageBridgeChild::IdentifyCompositorTextureHost(mTextureFactoryIdentifier);
|
||||
gfx::VRManagerChild::IdentifyTextureHost(mTextureFactoryIdentifier);
|
||||
}
|
||||
|
||||
if (lf) {
|
||||
@ -2903,13 +2907,14 @@ TabChild::ReinitRendering()
|
||||
void
|
||||
TabChild::CompositorUpdated(const TextureFactoryIdentifier& aNewIdentifier)
|
||||
{
|
||||
MOZ_ASSERT(mPuppetWidget->GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT
|
||||
|| mPuppetWidget->GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_WR);
|
||||
|
||||
RefPtr<LayerManager> lm = mPuppetWidget->GetLayerManager();
|
||||
ClientLayerManager* clm = lm->AsClientLayerManager();
|
||||
MOZ_ASSERT(clm);
|
||||
|
||||
mTextureFactoryIdentifier = aNewIdentifier;
|
||||
clm->UpdateTextureFactoryIdentifier(aNewIdentifier);
|
||||
FrameLayerBuilder::InvalidateAllLayers(clm);
|
||||
lm->UpdateTextureFactoryIdentifier(aNewIdentifier);
|
||||
FrameLayerBuilder::InvalidateAllLayers(lm);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -684,6 +684,13 @@ public:
|
||||
const mozilla::TimeStamp& aCompositeStart,
|
||||
const mozilla::TimeStamp& aCompositeEnd) {}
|
||||
|
||||
virtual void UpdateTextureFactoryIdentifier(const TextureFactoryIdentifier& aNewIdentifier) {}
|
||||
|
||||
virtual TextureFactoryIdentifier GetTextureFactoryIdentifier()
|
||||
{
|
||||
return TextureFactoryIdentifier();
|
||||
}
|
||||
|
||||
protected:
|
||||
RefPtr<Layer> mRoot;
|
||||
gfx::UserData mUserData;
|
||||
|
@ -91,8 +91,8 @@ public:
|
||||
virtual already_AddRefed<BorderLayer> CreateBorderLayer() override;
|
||||
virtual already_AddRefed<RefLayer> CreateRefLayer() override;
|
||||
|
||||
void UpdateTextureFactoryIdentifier(const TextureFactoryIdentifier& aNewIdentifier);
|
||||
TextureFactoryIdentifier GetTextureFactoryIdentifier()
|
||||
virtual void UpdateTextureFactoryIdentifier(const TextureFactoryIdentifier& aNewIdentifier) override;
|
||||
virtual TextureFactoryIdentifier GetTextureFactoryIdentifier() override
|
||||
{
|
||||
return AsShadowForwarder()->GetTextureFactoryIdentifier();
|
||||
}
|
||||
|
@ -104,8 +104,6 @@ public:
|
||||
{
|
||||
MOZ_CRASH("GFX: Shouldn't be called for composited layer manager");
|
||||
}
|
||||
virtual TextureFactoryIdentifier GetTextureFactoryIdentifier() = 0;
|
||||
|
||||
|
||||
virtual void ForcePresent() = 0;
|
||||
virtual void AddInvalidRegion(const nsIntRegion& aRegion) = 0;
|
||||
|
@ -202,7 +202,8 @@ TextureHost::Create(const SurfaceDescriptor& aDesc,
|
||||
return CreateTextureHostOGL(aDesc, aDeallocator, aFlags);
|
||||
|
||||
case SurfaceDescriptor::TSurfaceDescriptorMacIOSurface:
|
||||
if (aBackend == LayersBackend::LAYERS_OPENGL) {
|
||||
if (aBackend == LayersBackend::LAYERS_OPENGL ||
|
||||
aBackend == LayersBackend::LAYERS_WR) {
|
||||
return CreateTextureHostOGL(aDesc, aDeallocator, aFlags);
|
||||
} else {
|
||||
return CreateTextureHostBasic(aDesc, aDeallocator, aFlags);
|
||||
|
@ -141,9 +141,12 @@ WebRenderLayerManager::WebRenderLayerManager(nsIWidget* aWidget)
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderLayerManager::Initialize(PCompositorBridgeChild* aCBChild, uint64_t aLayersId)
|
||||
WebRenderLayerManager::Initialize(PCompositorBridgeChild* aCBChild,
|
||||
uint64_t aLayersId,
|
||||
TextureFactoryIdentifier* aTextureFactoryIdentifier)
|
||||
{
|
||||
MOZ_ASSERT(mWRChild == nullptr);
|
||||
MOZ_ASSERT(aTextureFactoryIdentifier);
|
||||
|
||||
TextureFactoryIdentifier textureFactoryIdentifier;
|
||||
PWebRenderBridgeChild* bridge = aCBChild->SendPWebRenderBridgeConstructor(aLayersId,
|
||||
@ -153,6 +156,7 @@ WebRenderLayerManager::Initialize(PCompositorBridgeChild* aCBChild, uint64_t aLa
|
||||
LayoutDeviceIntSize size = mWidget->GetClientSize();
|
||||
WRBridge()->SendCreate(size.width, size.height);
|
||||
WRBridge()->IdentifyTextureHost(textureFactoryIdentifier);
|
||||
*aTextureFactoryIdentifier = textureFactoryIdentifier;
|
||||
}
|
||||
|
||||
void
|
||||
@ -326,6 +330,18 @@ WebRenderLayerManager::ClearCachedResources(Layer* aSubtree)
|
||||
WRBridge()->SendClearCachedResources();
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderLayerManager::UpdateTextureFactoryIdentifier(const TextureFactoryIdentifier& aNewIdentifier)
|
||||
{
|
||||
WRBridge()->IdentifyTextureHost(aNewIdentifier);
|
||||
}
|
||||
|
||||
TextureFactoryIdentifier
|
||||
WebRenderLayerManager::GetTextureFactoryIdentifier()
|
||||
{
|
||||
return WRBridge()->GetTextureFactoryIdentifier();
|
||||
}
|
||||
|
||||
void
|
||||
WebRenderLayerManager::SetRoot(Layer* aLayer)
|
||||
{
|
||||
|
@ -76,7 +76,7 @@ class WebRenderLayerManager final : public LayerManager
|
||||
{
|
||||
public:
|
||||
explicit WebRenderLayerManager(nsIWidget* aWidget);
|
||||
void Initialize(PCompositorBridgeChild* aCBChild, uint64_t aLayersId);
|
||||
void Initialize(PCompositorBridgeChild* aCBChild, uint64_t aLayersId, TextureFactoryIdentifier* aTextureFactoryIdentifier);
|
||||
|
||||
virtual void Destroy() override;
|
||||
|
||||
@ -120,7 +120,8 @@ public:
|
||||
const mozilla::TimeStamp& aCompositeEnd) override;
|
||||
|
||||
virtual void ClearCachedResources(Layer* aSubtree = nullptr) override;
|
||||
|
||||
virtual void UpdateTextureFactoryIdentifier(const TextureFactoryIdentifier& aNewIdentifier) override;
|
||||
virtual TextureFactoryIdentifier GetTextureFactoryIdentifier() override;
|
||||
|
||||
DrawPaintedLayerCallback GetPaintedLayerCallback() const
|
||||
{ return mPaintedLayerCallback; }
|
||||
|
@ -285,8 +285,8 @@ RenderFrameParent::GetTextureFactoryIdentifier(TextureFactoryIdentifier* aTextur
|
||||
{
|
||||
RefPtr<LayerManager> lm = mFrameLoader ? GetFrom(mFrameLoader) : nullptr;
|
||||
// Perhaps the document containing this frame currently has no presentation?
|
||||
if (lm && lm->AsClientLayerManager()) {
|
||||
*aTextureFactoryIdentifier = lm->AsClientLayerManager()->GetTextureFactoryIdentifier();
|
||||
if (lm) {
|
||||
*aTextureFactoryIdentifier = lm->GetTextureFactoryIdentifier();
|
||||
} else {
|
||||
*aTextureFactoryIdentifier = TextureFactoryIdentifier();
|
||||
}
|
||||
|
@ -1352,7 +1352,12 @@ void nsBaseWidget::CreateCompositor(int aWidth, int aHeight)
|
||||
}
|
||||
|
||||
if (lm->AsWebRenderLayerManager()) {
|
||||
lm->AsWebRenderLayerManager()->Initialize(mCompositorBridgeChild, mCompositorSession->RootLayerTreeId());
|
||||
TextureFactoryIdentifier textureFactoryIdentifier;
|
||||
lm->AsWebRenderLayerManager()->Initialize(mCompositorBridgeChild,
|
||||
mCompositorSession->RootLayerTreeId(),
|
||||
&textureFactoryIdentifier);
|
||||
ImageBridgeChild::IdentifyCompositorTextureHost(textureFactoryIdentifier);
|
||||
gfx::VRManagerChild::IdentifyTextureHost(textureFactoryIdentifier);
|
||||
}
|
||||
|
||||
ShadowLayerForwarder* lf = lm->AsShadowForwarder();
|
||||
@ -1378,9 +1383,7 @@ void nsBaseWidget::CreateCompositor(int aWidth, int aHeight)
|
||||
}
|
||||
|
||||
lf->SetShadowManager(shadowManager);
|
||||
if (ClientLayerManager* clm = lm->AsClientLayerManager()) {
|
||||
clm->UpdateTextureFactoryIdentifier(textureFactoryIdentifier);
|
||||
}
|
||||
lm->UpdateTextureFactoryIdentifier(textureFactoryIdentifier);
|
||||
// Some popup or transparent widgets may use a different backend than the
|
||||
// compositors used with ImageBridge and VR (and more generally web content).
|
||||
if (WidgetTypeSupportsAcceleration()) {
|
||||
|
Loading…
Reference in New Issue
Block a user