Merge "DO NOT MERGE Add "dumpsys SurfaceFlinger --dispsync"" into klp-modular-dev

This commit is contained in:
Andy McFadden 2014-05-09 17:54:29 +00:00 committed by Android (Google) Code Review
commit b66019615d
4 changed files with 57 additions and 1 deletions

View File

@ -20,6 +20,7 @@
#define __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS
#include <math.h> #include <math.h>
#include <inttypes.h>
#include <cutils/log.h> #include <cutils/log.h>
@ -487,4 +488,49 @@ void DispSync::resetErrorLocked() {
} }
} }
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 } // namespace android

View File

@ -99,6 +99,9 @@ public:
// DispSync object. // DispSync object.
status_t removeEventListener(const sp<Callback>& callback); status_t removeEventListener(const sp<Callback>& callback);
// dump appends human-readable debug info to the result string.
void dump(String8& result) const;
private: private:
void updateModelLocked(); void updateModelLocked();

View File

@ -2201,6 +2201,13 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args)
clearStatsLocked(args, index, result); clearStatsLocked(args, index, result);
dumpAll = false; dumpAll = false;
} }
if ((index < numArgs) &&
(args[index] == String16("--dispsync"))) {
index++;
mPrimaryDispSync.dump(result);
dumpAll = false;
}
} }
if (dumpAll) { if (dumpAll) {

View File

@ -27,7 +27,7 @@
using namespace android; 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 // When SF is launched in its own process, limit the number of
// binder threads to 4. // binder threads to 4.
ProcessState::self()->setThreadPoolMaxThreadCount(4); ProcessState::self()->setThreadPoolMaxThreadCount(4);