Loading services/surfaceflinger/DispSync.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -322,6 +322,7 @@ void DispSync::reset() { mNumResyncSamples = 0; mFirstResyncSample = 0; mNumResyncSamplesSincePresent = 0; mNumPresentWithoutResyncSamples = 0; resetErrorLocked(); } Loading @@ -346,6 +347,15 @@ bool DispSync::addPresentFence(const sp<Fence>& fence) { updateErrorLocked(); // This is a workaround for b/25845510. // If we have no resync samples after many presents, something is wrong with // HW vsync. Tell SF to disable HW vsync now and re-enable it next time. if (mNumResyncSamples == 0 && mNumPresentWithoutResyncSamples++ > MAX_PRESENT_WITHOUT_RESYNC_SAMPLES) { mNumPresentWithoutResyncSamples = 0; return false; } return !mModelUpdated || mError > kErrorThreshold; } Loading @@ -354,6 +364,7 @@ void DispSync::beginResync() { mModelUpdated = false; mNumResyncSamples = 0; mNumPresentWithoutResyncSamples = 0; } bool DispSync::addResyncSample(nsecs_t timestamp) { Loading services/surfaceflinger/DispSync.h +2 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,7 @@ private: enum { MIN_RESYNC_SAMPLES_FOR_UPDATE = 3 }; enum { NUM_PRESENT_SAMPLES = 8 }; enum { MAX_RESYNC_SAMPLES_WITHOUT_PRESENT = 4 }; enum { MAX_PRESENT_WITHOUT_RESYNC_SAMPLES = 8 }; // mPeriod is the computed period of the modeled vsync events in // nanoseconds. Loading Loading @@ -168,6 +169,7 @@ private: size_t mFirstResyncSample; size_t mNumResyncSamples; int mNumResyncSamplesSincePresent; int mNumPresentWithoutResyncSamples; // These member variables store information about the present fences used // to validate the currently computed model. Loading Loading
services/surfaceflinger/DispSync.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -322,6 +322,7 @@ void DispSync::reset() { mNumResyncSamples = 0; mFirstResyncSample = 0; mNumResyncSamplesSincePresent = 0; mNumPresentWithoutResyncSamples = 0; resetErrorLocked(); } Loading @@ -346,6 +347,15 @@ bool DispSync::addPresentFence(const sp<Fence>& fence) { updateErrorLocked(); // This is a workaround for b/25845510. // If we have no resync samples after many presents, something is wrong with // HW vsync. Tell SF to disable HW vsync now and re-enable it next time. if (mNumResyncSamples == 0 && mNumPresentWithoutResyncSamples++ > MAX_PRESENT_WITHOUT_RESYNC_SAMPLES) { mNumPresentWithoutResyncSamples = 0; return false; } return !mModelUpdated || mError > kErrorThreshold; } Loading @@ -354,6 +364,7 @@ void DispSync::beginResync() { mModelUpdated = false; mNumResyncSamples = 0; mNumPresentWithoutResyncSamples = 0; } bool DispSync::addResyncSample(nsecs_t timestamp) { Loading
services/surfaceflinger/DispSync.h +2 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,7 @@ private: enum { MIN_RESYNC_SAMPLES_FOR_UPDATE = 3 }; enum { NUM_PRESENT_SAMPLES = 8 }; enum { MAX_RESYNC_SAMPLES_WITHOUT_PRESENT = 4 }; enum { MAX_PRESENT_WITHOUT_RESYNC_SAMPLES = 8 }; // mPeriod is the computed period of the modeled vsync events in // nanoseconds. Loading Loading @@ -168,6 +169,7 @@ private: size_t mFirstResyncSample; size_t mNumResyncSamples; int mNumResyncSamplesSincePresent; int mNumPresentWithoutResyncSamples; // These member variables store information about the present fences used // to validate the currently computed model. Loading