diff --git a/gfx/2d/DrawTargetD2D1.cpp b/gfx/2d/DrawTargetD2D1.cpp index 98d22643ad91..b7b8d62bb6e9 100644 --- a/gfx/2d/DrawTargetD2D1.cpp +++ b/gfx/2d/DrawTargetD2D1.cpp @@ -45,7 +45,7 @@ DrawTargetD2D1::DrawTargetD2D1() mTransformedGlyphsSinceLastPurge(0), mComplexBlendsWithListInList(0), mDeviceSeq(0), - mIsInitialized(false) {} + mInitState(InitState::Uninitialized) {} DrawTargetD2D1::~DrawTargetD2D1() { PopAllClips(); @@ -90,7 +90,7 @@ DrawTargetD2D1::~DrawTargetD2D1() { bool DrawTargetD2D1::IsValid() const { if (NS_IsMainThread()) { // Uninitialized DTs are considered valid. - return !mIsInitialized || mDC; + return mInitState != InitState::Failure; } else { return const_cast(this)->EnsureInitialized(); } @@ -1315,12 +1315,12 @@ void DrawTargetD2D1::FlushInternal(bool aHasDependencyMutex /* = false */) { } bool DrawTargetD2D1::EnsureInitialized() { - if (mIsInitialized) { - return !!mDC; + if (mInitState != InitState::Uninitialized) { + return mInitState == InitState::Success; } // Don't retry. - mIsInitialized = true; + mInitState = InitState::Failure; HRESULT hr; @@ -1400,6 +1400,8 @@ bool DrawTargetD2D1::EnsureInitialized() { mDC->Clear(); } + mInitState = InitState::Success; + return true; } diff --git a/gfx/2d/DrawTargetD2D1.h b/gfx/2d/DrawTargetD2D1.h index dd731c12aba4..a7b669b1945d 100644 --- a/gfx/2d/DrawTargetD2D1.h +++ b/gfx/2d/DrawTargetD2D1.h @@ -318,7 +318,12 @@ class DrawTargetD2D1 : public DrawTarget { bool EnsureLuminanceEffect(); RefPtr mLuminanceEffect; - bool mIsInitialized; + enum class InitState { + Uninitialized, + Success, + Failure + }; + InitState mInitState; RefPtr mSurface; };