mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1444449 - Do not return raw pointers to window targets from compositors r=bas
Differential Revision: https://phabricator.services.mozilla.com/D18598 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
a359caba44
commit
3800dbb8ec
@ -503,8 +503,10 @@ gfx::IntRect Compositor::ComputeBackdropCopyRect(
|
||||
const gfx::Matrix4x4& aTransform, gfx::Matrix4x4* aOutTransform,
|
||||
gfx::Rect* aOutLayerQuad) {
|
||||
// Compute the clip.
|
||||
gfx::IntPoint rtOffset = GetCurrentRenderTarget()->GetOrigin();
|
||||
gfx::IntSize rtSize = GetCurrentRenderTarget()->GetSize();
|
||||
RefPtr<CompositingRenderTarget> currentRenderTarget =
|
||||
GetCurrentRenderTarget();
|
||||
gfx::IntPoint rtOffset = currentRenderTarget->GetOrigin();
|
||||
gfx::IntSize rtSize = currentRenderTarget->GetSize();
|
||||
|
||||
return layers::ComputeBackdropCopyRect(aRect, aClipRect, aTransform,
|
||||
gfx::IntRect(rtOffset, rtSize),
|
||||
|
@ -292,7 +292,8 @@ class Compositor : public TextureSourceProvider {
|
||||
* Returns the current target for rendering. Will return null if we are
|
||||
* rendering to the screen.
|
||||
*/
|
||||
virtual CompositingRenderTarget* GetCurrentRenderTarget() const = 0;
|
||||
virtual already_AddRefed<CompositingRenderTarget> GetCurrentRenderTarget()
|
||||
const = 0;
|
||||
|
||||
/**
|
||||
* Returns a render target which contains the entire window's drawing.
|
||||
@ -300,7 +301,8 @@ class Compositor : public TextureSourceProvider {
|
||||
* with buffered BasicCompositor, where only the invalid area is drawn to a
|
||||
* render target), this will return null.
|
||||
*/
|
||||
virtual CompositingRenderTarget* GetWindowRenderTarget() const {
|
||||
virtual already_AddRefed<CompositingRenderTarget> GetWindowRenderTarget()
|
||||
const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -98,12 +98,14 @@ class BasicCompositor : public Compositor {
|
||||
mRenderTarget->BindRenderTarget();
|
||||
}
|
||||
|
||||
virtual CompositingRenderTarget* GetWindowRenderTarget() const override {
|
||||
return mFullWindowRenderTarget;
|
||||
virtual already_AddRefed<CompositingRenderTarget> GetWindowRenderTarget()
|
||||
const override {
|
||||
return do_AddRef(mFullWindowRenderTarget);
|
||||
}
|
||||
|
||||
virtual CompositingRenderTarget* GetCurrentRenderTarget() const override {
|
||||
return mRenderTarget;
|
||||
virtual already_AddRefed<CompositingRenderTarget> GetCurrentRenderTarget()
|
||||
const override {
|
||||
return do_AddRef(mRenderTarget);
|
||||
}
|
||||
|
||||
virtual void DrawQuad(const gfx::Rect& aRect, const gfx::IntRect& aClipRect,
|
||||
|
@ -565,7 +565,7 @@ RefPtr<CompositingRenderTarget> CreateTemporaryTargetAndCopyFromBackground(
|
||||
!gfx::ThebesMatrix(transform2d).HasNonIntegerTranslation());
|
||||
sourcePoint += gfx::IntPoint::Truncate(transform._41, transform._42);
|
||||
|
||||
sourcePoint -= compositor->GetCurrentRenderTarget()->GetOrigin();
|
||||
sourcePoint -= previousTarget->GetOrigin();
|
||||
|
||||
return compositor->CreateRenderTargetFromSource(surfaceRect, previousTarget,
|
||||
sourcePoint);
|
||||
|
@ -54,8 +54,9 @@ class CompositorD3D11 : public Compositor {
|
||||
const gfx::IntPoint& aSourcePoint) override;
|
||||
|
||||
virtual void SetRenderTarget(CompositingRenderTarget* aSurface) override;
|
||||
virtual CompositingRenderTarget* GetCurrentRenderTarget() const override {
|
||||
return mCurrentRT;
|
||||
virtual already_AddRefed<CompositingRenderTarget> GetCurrentRenderTarget()
|
||||
const override {
|
||||
return do_AddRef(mCurrentRT);
|
||||
}
|
||||
|
||||
virtual void SetDestinationSurfaceSize(const gfx::IntSize& aSize) override {}
|
||||
|
@ -656,12 +656,14 @@ void CompositorOGL::SetRenderTarget(CompositingRenderTarget* aSurface) {
|
||||
PrepareViewport(mCurrentRenderTarget);
|
||||
}
|
||||
|
||||
CompositingRenderTarget* CompositorOGL::GetCurrentRenderTarget() const {
|
||||
return mCurrentRenderTarget;
|
||||
already_AddRefed<CompositingRenderTarget>
|
||||
CompositorOGL::GetCurrentRenderTarget() const {
|
||||
return do_AddRef(mCurrentRenderTarget);
|
||||
}
|
||||
|
||||
CompositingRenderTarget* CompositorOGL::GetWindowRenderTarget() const {
|
||||
return mWindowRenderTarget;
|
||||
already_AddRefed<CompositingRenderTarget> CompositorOGL::GetWindowRenderTarget()
|
||||
const {
|
||||
return do_AddRef(mWindowRenderTarget);
|
||||
}
|
||||
|
||||
already_AddRefed<AsyncReadbackBuffer> CompositorOGL::CreateAsyncReadbackBuffer(
|
||||
|
@ -155,8 +155,10 @@ class CompositorOGL final : public Compositor {
|
||||
const gfx::IntPoint& aSourcePoint) override;
|
||||
|
||||
virtual void SetRenderTarget(CompositingRenderTarget* aSurface) override;
|
||||
virtual CompositingRenderTarget* GetCurrentRenderTarget() const override;
|
||||
virtual CompositingRenderTarget* GetWindowRenderTarget() const override;
|
||||
virtual already_AddRefed<CompositingRenderTarget> GetCurrentRenderTarget()
|
||||
const override;
|
||||
virtual already_AddRefed<CompositingRenderTarget> GetWindowRenderTarget()
|
||||
const override;
|
||||
|
||||
virtual bool ReadbackRenderTarget(CompositingRenderTarget* aSource,
|
||||
AsyncReadbackBuffer* aDest) override;
|
||||
|
Loading…
Reference in New Issue
Block a user