mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1084136 (Part 9) - Don't track whether we've ever been decoded separately. r=tn
--HG-- extra : rebase_source : 6a6708f9b6524b152204fccf96922e17eccbd6b3
This commit is contained in:
parent
a704eb8e0a
commit
f8366bef6a
@ -145,8 +145,7 @@ private:
|
||||
imgStatusTracker::imgStatusTracker(Image* aImage)
|
||||
: mImage(aImage),
|
||||
mState(0),
|
||||
mImageStatus(imgIRequest::STATUS_NONE),
|
||||
mHasBeenDecoded(false)
|
||||
mImageStatus(imgIRequest::STATUS_NONE)
|
||||
{
|
||||
mTrackerObserver = new imgStatusTrackerObserver(this);
|
||||
}
|
||||
@ -155,8 +154,7 @@ imgStatusTracker::imgStatusTracker(Image* aImage)
|
||||
imgStatusTracker::imgStatusTracker(const imgStatusTracker& aOther)
|
||||
: mImage(aOther.mImage),
|
||||
mState(aOther.mState),
|
||||
mImageStatus(aOther.mImageStatus),
|
||||
mHasBeenDecoded(aOther.mHasBeenDecoded)
|
||||
mImageStatus(aOther.mImageStatus)
|
||||
// Note: we explicitly don't copy several fields:
|
||||
// - mRequestRunnable, because it won't be nulled out when the
|
||||
// mRequestRunnable's Run function eventually gets called.
|
||||
@ -424,15 +422,13 @@ imgStatusTracker::Difference(imgStatusTracker* aOther) const
|
||||
diff.diffState = ~mState & aOther->mState & ~FLAG_REQUEST_STARTED;
|
||||
diff.diffImageStatus = ~mImageStatus & aOther->mImageStatus;
|
||||
|
||||
diff.gotDecoded = !mHasBeenDecoded && aOther->mHasBeenDecoded;
|
||||
|
||||
// Only record partial invalidations if we haven't been decoded before.
|
||||
// When images are re-decoded after discarding, we don't want to display
|
||||
// partially decoded versions to the user.
|
||||
const uint32_t combinedStatus = mImageStatus | aOther->mImageStatus;
|
||||
const bool doInvalidations = !(mHasBeenDecoded || aOther->mHasBeenDecoded)
|
||||
|| combinedStatus & imgIRequest::STATUS_ERROR
|
||||
|| combinedStatus & imgIRequest::STATUS_DECODE_COMPLETE;
|
||||
const bool doInvalidations = !(mImageStatus & imgIRequest::STATUS_DECODE_COMPLETE)
|
||||
|| aOther->mImageStatus & imgIRequest::STATUS_DECODE_COMPLETE
|
||||
|| combinedStatus & imgIRequest::STATUS_ERROR;
|
||||
|
||||
// Record and reset the invalid rectangle.
|
||||
// XXX(seth): We shouldn't be resetting anything here; see bug 910441.
|
||||
@ -467,8 +463,6 @@ imgStatusTracker::ApplyDifference(const ImageStatusDiff& aDiff)
|
||||
// Synchronize our state.
|
||||
mState |= aDiff.diffState | loadState;
|
||||
|
||||
mHasBeenDecoded = mHasBeenDecoded || aDiff.gotDecoded;
|
||||
|
||||
// Update the image status. There are some subtle points which are handled below.
|
||||
mImageStatus |= aDiff.diffImageStatus;
|
||||
}
|
||||
@ -687,9 +681,7 @@ imgStatusTracker::RecordStopDecode(nsresult aStatus)
|
||||
mState |= FLAG_DECODE_STOPPED;
|
||||
mImageStatus |= imgIRequest::STATUS_DECODE_COMPLETE;
|
||||
|
||||
if (NS_SUCCEEDED(aStatus) && !(mImageStatus & imgIRequest::STATUS_ERROR)) {
|
||||
mHasBeenDecoded = true;
|
||||
} else {
|
||||
if (NS_FAILED(aStatus)) {
|
||||
mImageStatus |= imgIRequest::STATUS_ERROR;
|
||||
}
|
||||
}
|
||||
|
@ -48,7 +48,6 @@ struct ImageStatusDiff
|
||||
: invalidRect()
|
||||
, diffState(0)
|
||||
, diffImageStatus(0)
|
||||
, gotDecoded(false)
|
||||
{ }
|
||||
|
||||
static ImageStatusDiff NoChange() { return ImageStatusDiff(); }
|
||||
@ -58,21 +57,18 @@ struct ImageStatusDiff
|
||||
bool operator==(const ImageStatusDiff& aOther) const {
|
||||
return aOther.invalidRect == invalidRect
|
||||
&& aOther.diffState == diffState
|
||||
&& aOther.diffImageStatus == diffImageStatus
|
||||
&& aOther.gotDecoded == gotDecoded;
|
||||
&& aOther.diffImageStatus == diffImageStatus;
|
||||
}
|
||||
|
||||
void Combine(const ImageStatusDiff& aOther) {
|
||||
invalidRect = invalidRect.Union(aOther.invalidRect);
|
||||
diffState |= aOther.diffState;
|
||||
diffImageStatus |= aOther.diffImageStatus;
|
||||
gotDecoded = gotDecoded || aOther.gotDecoded;
|
||||
}
|
||||
|
||||
nsIntRect invalidRect;
|
||||
uint32_t diffState;
|
||||
uint32_t diffImageStatus;
|
||||
bool gotDecoded : 1;
|
||||
};
|
||||
|
||||
} // namespace image
|
||||
@ -311,7 +307,6 @@ private:
|
||||
|
||||
uint32_t mState;
|
||||
uint32_t mImageStatus;
|
||||
bool mHasBeenDecoded : 1;
|
||||
};
|
||||
|
||||
class imgStatusTrackerInit
|
||||
|
Loading…
Reference in New Issue
Block a user