Bug 584841 patch 3: Rename imgDiscardTracker class to mozilla::imagelib::DiscardTracker. r=bholley a=blocking

This commit is contained in:
Daniel Holbert 2010-08-13 21:09:49 -07:00
parent 24eb75411c
commit fe81ef360e
6 changed files with 43 additions and 30 deletions

View File

@ -264,7 +264,7 @@ static void
imglib_Shutdown()
{
imgLoader::Shutdown();
imgDiscardTracker::Shutdown();
mozilla::imagelib::DiscardTracker::Shutdown();
}
static const mozilla::Module kImageModule = {

View File

@ -60,6 +60,8 @@
#include "gfxContext.h"
using namespace mozilla::imagelib;
/* Accounting for compressed data */
#if defined(PR_LOGGING)
static PRLogModuleInfo *gCompressedImageAccountingLog = PR_NewLogModule ("CompressedImageAccounting");
@ -192,7 +194,7 @@ imgContainer::~imgContainer()
discardable_source_bytes));
}
imgDiscardTracker::Remove(&mDiscardTrackerNode);
DiscardTracker::Remove(&mDiscardTrackerNode);
// If we have a decoder open, shut it down
if (mDecoder) {
@ -1042,7 +1044,7 @@ NS_IMETHODIMP imgContainer::DecodingComplete(void)
if (CanDiscard()) {
NS_ABORT_IF_FALSE(!DiscardingActive(),
"We shouldn't have been discardable before this");
rv = imgDiscardTracker::Reset(&mDiscardTrackerNode);
rv = DiscardTracker::Reset(&mDiscardTrackerNode);
CONTAINER_ENSURE_SUCCESS(rv);
}
@ -1359,7 +1361,7 @@ NS_IMETHODIMP imgContainer::SourceDataComplete()
// We now have one of the qualifications for discarding. Re-evaluate.
if (CanDiscard()) {
nsresult rv = imgDiscardTracker::Reset(&mDiscardTrackerNode);
nsresult rv = DiscardTracker::Reset(&mDiscardTrackerNode);
CONTAINER_ENSURE_SUCCESS(rv);
}
return NS_OK;
@ -2261,7 +2263,7 @@ imgContainer::WantDecodedFrames()
if (CanDiscard()) {
NS_ABORT_IF_FALSE(DiscardingActive(),
"Decoded and discardable but discarding not activated!");
rv = imgDiscardTracker::Reset(&mDiscardTrackerNode);
rv = DiscardTracker::Reset(&mDiscardTrackerNode);
CONTAINER_ENSURE_SUCCESS(rv);
}
@ -2433,7 +2435,7 @@ imgContainer::LockImage()
return NS_ERROR_FAILURE;
// Cancel the discard timer if it's there
imgDiscardTracker::Remove(&mDiscardTrackerNode);
DiscardTracker::Remove(&mDiscardTrackerNode);
// Increment the lock count
mLockCount++;
@ -2463,7 +2465,7 @@ imgContainer::UnlockImage()
// We now _might_ have one of the qualifications for discarding. Re-evaluate.
if (CanDiscard()) {
nsresult rv = imgDiscardTracker::Reset(&mDiscardTrackerNode);
nsresult rv = DiscardTracker::Reset(&mDiscardTrackerNode);
CONTAINER_ENSURE_SUCCESS(rv);
}

View File

@ -328,14 +328,14 @@ private: // data
// Discard members
PRUint32 mLockCount;
imgDiscardTrackerNode mDiscardTrackerNode;
mozilla::imagelib::DiscardTrackerNode mDiscardTrackerNode;
// Source data members
nsTArray<char> mSourceData;
nsCString mSourceDataMimeType;
friend class imgDecodeWorker;
friend class imgDiscardTracker;
friend class mozilla::imagelib::DiscardTracker;
// Decoder and friends
nsCOMPtr<imgIDecoder> mDecoder;

View File

@ -44,18 +44,21 @@
#include "imgContainer.h"
#include "imgDiscardTracker.h"
namespace mozilla {
namespace imagelib {
static PRBool sInitialized = PR_FALSE;
static PRBool sTimerOn = PR_FALSE;
static PRUint32 sMinDiscardTimeoutMs = 10000; /* Default if pref unreadable. */
static nsITimer *sTimer = nsnull;
static struct imgDiscardTrackerNode sHead, sSentinel, sTail;
static struct DiscardTrackerNode sHead, sSentinel, sTail;
/*
* Puts an image in the back of the tracker queue. If the image is already
* in the tracker, this removes it first.
*/
nsresult
imgDiscardTracker::Reset(imgDiscardTrackerNode *node)
DiscardTracker::Reset(DiscardTrackerNode *node)
{
nsresult rv;
#ifdef DEBUG
@ -98,7 +101,7 @@ imgDiscardTracker::Reset(imgDiscardTrackerNode *node)
* Removes a node from the tracker. No-op if the node is currently untracked.
*/
void
imgDiscardTracker::Remove(imgDiscardTrackerNode *node)
DiscardTracker::Remove(DiscardTrackerNode *node)
{
NS_ABORT_IF_FALSE(node != nsnull, "Can't pass null node");
@ -121,7 +124,7 @@ imgDiscardTracker::Remove(imgDiscardTrackerNode *node)
* Initialize the tracker.
*/
nsresult
imgDiscardTracker::Initialize()
DiscardTracker::Initialize()
{
nsresult rv;
@ -152,7 +155,7 @@ imgDiscardTracker::Initialize()
* Shut down the tracker, deallocating the timer.
*/
void
imgDiscardTracker::Shutdown()
DiscardTracker::Shutdown()
{
if (sTimer) {
sTimer->Cancel();
@ -165,7 +168,7 @@ imgDiscardTracker::Shutdown()
* Sets the minimum timeout.
*/
void
imgDiscardTracker::ReloadTimeout()
DiscardTracker::ReloadTimeout()
{
nsresult rv;
@ -196,7 +199,7 @@ imgDiscardTracker::ReloadTimeout()
* Enables the timer. No-op if the timer is already running.
*/
nsresult
imgDiscardTracker::TimerOn()
DiscardTracker::TimerOn()
{
// Nothing to do if the timer's already on.
if (sTimerOn)
@ -214,7 +217,7 @@ imgDiscardTracker::TimerOn()
* Disables the timer. No-op if the timer isn't running.
*/
void
imgDiscardTracker::TimerOff()
DiscardTracker::TimerOff()
{
// Nothing to do if the timer's already off.
if (!sTimerOn)
@ -231,9 +234,9 @@ imgDiscardTracker::TimerOff()
* list.
*/
void
imgDiscardTracker::TimerCallback(nsITimer *aTimer, void *aClosure)
DiscardTracker::TimerCallback(nsITimer *aTimer, void *aClosure)
{
imgDiscardTrackerNode *node;
DiscardTrackerNode *node;
// Remove and discard everything before the sentinel
for (node = sSentinel.prev; node != &sHead; node = sSentinel.prev) {
@ -250,3 +253,6 @@ imgDiscardTracker::TimerCallback(nsITimer *aTimer, void *aClosure)
if (sSentinel.prev == &sHead)
TimerOff();
}
} // namespace imagelib
} // namespace mozilla

View File

@ -35,26 +35,29 @@
*
* ***** END LICENSE BLOCK ***** */
#ifndef __imgDiscardTracker_h__
#define __imgDiscardTracker_h__
#ifndef mozilla_imagelib_DiscardTracker_h_
#define mozilla_imagelib_DiscardTracker_h_
#define DISCARD_TIMEOUT_PREF "image.mem.min_discard_timeout_ms"
class imgContainer;
class nsITimer;
namespace mozilla {
namespace imagelib {
// Struct to make an imgContainer insertable into the tracker list. This
// is embedded within each imgContainer object, and we do 'this->curr = this'
// on imgContainer construction. Thus, an imgContainer must always call
// imgDiscardTracker::Remove() in its destructor to avoid having the tracker
// DiscardTracker::Remove() in its destructor to avoid having the tracker
// point to bogus memory.
struct imgDiscardTrackerNode
struct DiscardTrackerNode
{
// Pointer to the imgContainer that this node tracks
imgContainer *curr;
// Pointers to the previous and next nodes in the list
imgDiscardTrackerNode *prev, *next;
DiscardTrackerNode *prev, *next;
};
/**
@ -66,12 +69,11 @@ struct imgDiscardTrackerNode
* itself to the end of the list. Thus, the discard timeout varies between
* MIN_DISCARD_TIMEOUT_MS and 2*MIN_DISCARD_TIMEOUT_MS.
*/
class imgDiscardTracker
class DiscardTracker
{
public:
static nsresult Reset(struct imgDiscardTrackerNode *node);
static void Remove(struct imgDiscardTrackerNode *node);
static nsresult Reset(struct DiscardTrackerNode *node);
static void Remove(struct DiscardTrackerNode *node);
static void Shutdown();
static void ReloadTimeout();
private:
@ -81,4 +83,7 @@ class imgDiscardTracker
static void TimerCallback(nsITimer *aTimer, void *aClosure);
};
#endif /* __imgDiscardTracker_h__ */
} // namespace imagelib
} // namespace mozilla
#endif /* mozilla_imagelib_DiscardTracker_h_ */

View File

@ -118,7 +118,7 @@ ReloadPrefs(nsIPrefBranch *aBranch)
gDecodeOnDraw = decodeondraw;
// Discard timeout
imgDiscardTracker::ReloadTimeout();
mozilla::imagelib::DiscardTracker::ReloadTimeout();
}
// Observer