gecko-dev/gfx/layers/SourceSurfaceVolatileData.cpp
Andrew Osmond cd7cf0fad3 Bug 1427639 - Part 2. Fix misleading image memory reporting on Android. r=tnikkel
The shared memory handle reporting has been generalized to be an
external handle reporting. This is used for both shared memory, and for
volatile memory (on Android.) This will allow us to have a better sense
of just how many handles are being used by images on Android.

Additionally we were not properly reporting forced heap allocated
memory, if we were putting animated frames on the heap. This is because
we used SourceSurfaceAlignedRawData without implementing
AddSizeOfExcludingThis.
2018-02-22 14:26:29 -05:00

61 lines
1.7 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=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/. */
#include "SourceSurfaceVolatileData.h"
#include "gfxAlphaRecovery.h"
#include "mozilla/Likely.h"
#include "mozilla/Types.h" // for decltype
namespace mozilla {
namespace gfx {
bool
SourceSurfaceVolatileData::Init(const IntSize &aSize,
int32_t aStride,
SurfaceFormat aFormat)
{
mSize = aSize;
mStride = aStride;
mFormat = aFormat;
size_t alignment = size_t(1) << gfxAlphaRecovery::GoodAlignmentLog2();
mVBuf = new VolatileBuffer();
if (MOZ_UNLIKELY(!mVBuf->Init(aStride * aSize.height, alignment))) {
mVBuf = nullptr;
return false;
}
return true;
}
void
SourceSurfaceVolatileData::GuaranteePersistance()
{
MOZ_ASSERT_UNREACHABLE("Should use SourceSurfaceRawData wrapper!");
}
void
SourceSurfaceVolatileData::AddSizeOfExcludingThis(MallocSizeOf aMallocSizeOf,
size_t& aHeapSizeOut,
size_t& aNonHeapSizeOut,
size_t& aExtHandlesOut) const
{
if (mVBuf) {
aHeapSizeOut += mVBuf->HeapSizeOfExcludingThis(aMallocSizeOf);
aNonHeapSizeOut += mVBuf->NonHeapSizeOfExcludingThis();
#ifdef ANDROID
if (!mVBuf->OnHeap()) {
// Volatile buffers keep a file handle open on Android.
++aExtHandlesOut;
}
#endif
}
}
} // namespace gfx
} // namespace mozilla