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:
Barret Rennie 2019-02-12 18:53:10 +00:00
Родитель a359caba44
Коммит 3800dbb8ec
7 изменённых файлов: 28 добавлений и 17 удалений

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

@ -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;