gecko-dev/image/RecyclingSourceSurface.h
Andrew Osmond 9e0d8ccbf5 Bug 1617880 - Make RecyclingSourceSurface use NotNull for member pointers. r=tnikkel
We are seeing some crash reports with RecyclingSourceSurface containing
null pointers in the signature. The proto signature doesn't make any
sense however. Let's use NotNull to reassure ourselves that there isn't
something going wrong when we create RecyclingSourceSurface.

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

--HG--
extra : moz-landing-system : lando
2020-02-25 17:20:43 +00:00

67 lines
2.3 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_image_RecyclingSourceSurface_h
#define mozilla_image_RecyclingSourceSurface_h
#include "mozilla/gfx/2D.h"
#include "mozilla/NotNull.h"
namespace mozilla {
namespace image {
class imgFrame;
/**
* This surface subclass will prevent the underlying surface from being recycled
* as long as it is still alive. We will create this surface to wrap imgFrame's
* mLockedSurface, if we are accessing it on a path that will keep the surface
* alive for an indeterminate period of time (e.g. imgFrame::GetSourceSurface,
* imgFrame::Draw with a recording or capture DrawTarget).
*/
class RecyclingSourceSurface final : public gfx::DataSourceSurface {
public:
RecyclingSourceSurface(imgFrame* aParent, gfx::DataSourceSurface* aSurface);
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(RecyclingSourceSurface, override);
uint8_t* GetData() override { return mSurface->GetData(); }
int32_t Stride() override { return mSurface->Stride(); }
gfx::SurfaceType GetType() const override { return mType; }
gfx::IntSize GetSize() const override { return mSurface->GetSize(); }
gfx::SurfaceFormat GetFormat() const override {
return mSurface->GetFormat();
}
bool OnHeap() const override { return mSurface->OnHeap(); }
bool Map(MapType aType, MappedSurface* aMappedSurface) override {
return mSurface->Map(aType, aMappedSurface);
}
void Unmap() override { mSurface->Unmap(); }
void SizeOfExcludingThis(MallocSizeOf aMallocSizeOf,
SizeOfInfo& aInfo) const override {
aInfo.AddType(mType);
mSurface->SizeOfExcludingThis(aMallocSizeOf, aInfo);
}
gfx::DataSourceSurface* GetChildSurface() const { return mSurface.get(); }
protected:
void GuaranteePersistance() override {}
~RecyclingSourceSurface() override;
NotNull<RefPtr<imgFrame>> mParent;
NotNull<RefPtr<DataSourceSurface>> mSurface;
gfx::SurfaceType mType;
};
} // namespace image
} // namespace mozilla
#endif // mozilla_image_RecyclingSourceSurface_h