Bug 1047945 - Delete the TileExpiry object at shutdown to avoid leak warnings. r=BenWa

This commit is contained in:
Matt Woodrow 2014-08-27 10:57:49 +12:00
Родитель db134e8fe5
Коммит 2e1cf8efa1
2 изменённых файлов: 35 добавлений и 11 удалений

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

@ -30,6 +30,7 @@
#include "gfx2DGlue.h"
#include "LayersLogging.h"
#include "UnitTransforms.h" // for TransformTo
#include "mozilla/UniquePtr.h"
// This is the minimum area that we deem reasonable to copy from the front buffer to the
// back buffer on tile updates. If the valid region is smaller than this, we just
@ -434,28 +435,49 @@ class TileExpiry MOZ_FINAL : public nsExpirationTracker<TileClient, 3>
{
public:
TileExpiry() : nsExpirationTracker<TileClient, 3>(1000) {}
static void AddTile(TileClient* aTile)
{
if (!sTileExpiry) {
sTileExpiry = MakeUnique<TileExpiry>();
}
sTileExpiry->AddObject(aTile);
}
static void RemoveTile(TileClient* aTile)
{
MOZ_ASSERT(sTileExpiry);
sTileExpiry->RemoveObject(aTile);
}
static void Shutdown() {
sTileExpiry = nullptr;
}
private:
virtual void NotifyExpired(TileClient* aTile)
virtual void NotifyExpired(TileClient* aTile) MOZ_OVERRIDE
{
aTile->DiscardBackBuffer();
}
};
TileExpiry *TileExpirer()
static UniquePtr<TileExpiry> sTileExpiry;
};
UniquePtr<TileExpiry> TileExpiry::sTileExpiry;
void ShutdownTileCache()
{
static TileExpiry * sTileExpiry = new TileExpiry();
return sTileExpiry;
TileExpiry::Shutdown();
}
void
TileClient::PrivateProtector::Set(TileClient * const aContainer, RefPtr<TextureClient> aNewValue)
{
if (mBuffer) {
TileExpirer()->RemoveObject(aContainer);
TileExpiry::RemoveTile(aContainer);
}
mBuffer = aNewValue;
if (mBuffer) {
TileExpirer()->AddObject(aContainer);
TileExpiry::AddTile(aContainer);
}
}
@ -475,7 +497,7 @@ TileClient::~TileClient()
{
if (mExpirationState.IsTracked()) {
MOZ_ASSERT(mBackBuffer);
TileExpirer()->RemoveObject(this);
TileExpiry::RemoveTile(this);
}
}

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

@ -93,13 +93,14 @@ class mozilla::gl::SkiaGLGlue : public GenericAtomicRefCounted {
#include "nsIGfxInfo.h"
#include "nsIXULRuntime.h"
#ifdef MOZ_WIDGET_GONK
namespace mozilla {
namespace layers {
#ifdef MOZ_WIDGET_GONK
void InitGralloc();
}
}
#endif
void ShutdownTileCache();
}
}
using namespace mozilla;
using namespace mozilla::layers;
@ -442,6 +443,7 @@ gfxPlatform::Shutdown()
gfxAlphaBoxBlur::ShutdownBlurCache();
gfxGraphiteShaper::Shutdown();
gfxPlatformFontList::Shutdown();
ShutdownTileCache();
// Free the various non-null transforms and loaded profiles
ShutdownCMS();