mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 584841 patch 3: Rename imgDiscardTracker class to mozilla::imagelib::DiscardTracker. r=bholley a=blocking
This commit is contained in:
parent
24eb75411c
commit
fe81ef360e
@ -264,7 +264,7 @@ static void
|
||||
imglib_Shutdown()
|
||||
{
|
||||
imgLoader::Shutdown();
|
||||
imgDiscardTracker::Shutdown();
|
||||
mozilla::imagelib::DiscardTracker::Shutdown();
|
||||
}
|
||||
|
||||
static const mozilla::Module kImageModule = {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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_ */
|
||||
|
@ -118,7 +118,7 @@ ReloadPrefs(nsIPrefBranch *aBranch)
|
||||
gDecodeOnDraw = decodeondraw;
|
||||
|
||||
// Discard timeout
|
||||
imgDiscardTracker::ReloadTimeout();
|
||||
mozilla::imagelib::DiscardTracker::ReloadTimeout();
|
||||
}
|
||||
|
||||
// Observer
|
||||
|
Loading…
Reference in New Issue
Block a user