Loading services/surfaceflinger/DispSync.cpp +45 −0 Original line number Diff line number Diff line Loading @@ -514,4 +514,49 @@ nsecs_t DispSync::computeNextRefresh(int periodOffset) const { return (((now - mPhase) / mPeriod) + periodOffset + 1) * mPeriod + mPhase; } void DispSync::dump(String8& result) const { Mutex::Autolock lock(mMutex); result.appendFormat("mPeriod: %"PRId64" ns\n", mPeriod); result.appendFormat("mPhase: %"PRId64" ns\n", mPhase); result.appendFormat("mError: %"PRId64" ns (sqrt: %.1f)\n", mError, sqrt(mError)); result.appendFormat("mNumResyncSamplesSincePresent: %d (max %d)\n", mNumResyncSamplesSincePresent, MAX_RESYNC_SAMPLES_WITHOUT_PRESENT); result.appendFormat("mNumResyncSamples: %d (max %d)\n", mNumResyncSamples, MAX_RESYNC_SAMPLES); result.appendFormat("mResyncSamples:\n"); nsecs_t previous = -1; for (size_t i = 0; i < mNumResyncSamples; i++) { size_t idx = (mFirstResyncSample + i) % MAX_RESYNC_SAMPLES; nsecs_t sampleTime = mResyncSamples[idx]; if (i == 0) { result.appendFormat(" %"PRId64"\n", sampleTime); } else { result.appendFormat(" %"PRId64" (+%"PRId64")\n", sampleTime, sampleTime - previous); } previous = sampleTime; } result.appendFormat("mPresentFences / mPresentTimes [%d]:\n", NUM_PRESENT_SAMPLES); previous = 0; for (size_t i = 0; i < NUM_PRESENT_SAMPLES; i++) { size_t idx = (i + mPresentSampleOffset) % NUM_PRESENT_SAMPLES; bool signaled = mPresentFences[idx] == NULL; nsecs_t presentTime = mPresentTimes[idx]; if (!signaled) { result.appendFormat(" [unsignaled fence]\n"); } else if (previous == 0) { result.appendFormat(" %"PRId64"\n", presentTime); } else { result.appendFormat(" %"PRId64" (+%"PRId64" / %.3f)\n", presentTime, presentTime - previous, (presentTime - previous) / (double) mPeriod); } previous = presentTime; } } } // namespace android services/surfaceflinger/DispSync.h +3 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,9 @@ public: // the refresh after next. etc. nsecs_t computeNextRefresh(int periodOffset) const; // dump appends human-readable debug info to the result string. void dump(String8& result) const; private: void updateModelLocked(); Loading services/surfaceflinger/SurfaceFlinger.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -2251,6 +2251,13 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args) clearStatsLocked(args, index, result); dumpAll = false; } if ((index < numArgs) && (args[index] == String16("--dispsync"))) { index++; mPrimaryDispSync.dump(result); dumpAll = false; } } if (dumpAll) { Loading services/surfaceflinger/main_surfaceflinger.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ using namespace android; int main(int argc, char** argv) { int main(int, char**) { // When SF is launched in its own process, limit the number of // binder threads to 4. ProcessState::self()->setThreadPoolMaxThreadCount(4); Loading Loading
services/surfaceflinger/DispSync.cpp +45 −0 Original line number Diff line number Diff line Loading @@ -514,4 +514,49 @@ nsecs_t DispSync::computeNextRefresh(int periodOffset) const { return (((now - mPhase) / mPeriod) + periodOffset + 1) * mPeriod + mPhase; } void DispSync::dump(String8& result) const { Mutex::Autolock lock(mMutex); result.appendFormat("mPeriod: %"PRId64" ns\n", mPeriod); result.appendFormat("mPhase: %"PRId64" ns\n", mPhase); result.appendFormat("mError: %"PRId64" ns (sqrt: %.1f)\n", mError, sqrt(mError)); result.appendFormat("mNumResyncSamplesSincePresent: %d (max %d)\n", mNumResyncSamplesSincePresent, MAX_RESYNC_SAMPLES_WITHOUT_PRESENT); result.appendFormat("mNumResyncSamples: %d (max %d)\n", mNumResyncSamples, MAX_RESYNC_SAMPLES); result.appendFormat("mResyncSamples:\n"); nsecs_t previous = -1; for (size_t i = 0; i < mNumResyncSamples; i++) { size_t idx = (mFirstResyncSample + i) % MAX_RESYNC_SAMPLES; nsecs_t sampleTime = mResyncSamples[idx]; if (i == 0) { result.appendFormat(" %"PRId64"\n", sampleTime); } else { result.appendFormat(" %"PRId64" (+%"PRId64")\n", sampleTime, sampleTime - previous); } previous = sampleTime; } result.appendFormat("mPresentFences / mPresentTimes [%d]:\n", NUM_PRESENT_SAMPLES); previous = 0; for (size_t i = 0; i < NUM_PRESENT_SAMPLES; i++) { size_t idx = (i + mPresentSampleOffset) % NUM_PRESENT_SAMPLES; bool signaled = mPresentFences[idx] == NULL; nsecs_t presentTime = mPresentTimes[idx]; if (!signaled) { result.appendFormat(" [unsignaled fence]\n"); } else if (previous == 0) { result.appendFormat(" %"PRId64"\n", presentTime); } else { result.appendFormat(" %"PRId64" (+%"PRId64" / %.3f)\n", presentTime, presentTime - previous, (presentTime - previous) / (double) mPeriod); } previous = presentTime; } } } // namespace android
services/surfaceflinger/DispSync.h +3 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,9 @@ public: // the refresh after next. etc. nsecs_t computeNextRefresh(int periodOffset) const; // dump appends human-readable debug info to the result string. void dump(String8& result) const; private: void updateModelLocked(); Loading
services/surfaceflinger/SurfaceFlinger.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -2251,6 +2251,13 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args) clearStatsLocked(args, index, result); dumpAll = false; } if ((index < numArgs) && (args[index] == String16("--dispsync"))) { index++; mPrimaryDispSync.dump(result); dumpAll = false; } } if (dumpAll) { Loading
services/surfaceflinger/main_surfaceflinger.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ using namespace android; int main(int argc, char** argv) { int main(int, char**) { // When SF is launched in its own process, limit the number of // binder threads to 4. ProcessState::self()->setThreadPoolMaxThreadCount(4); Loading