Dump RefreshRateConfigs
Add RefreshRateConfigs dump to SurfaceFligner dumpsys, dumping the
current display mode and the list of supported display modes.
This is very useful for debugging because SF works with two types of
IDs (HwcConfigIndexType and hal::HWConfigId).
Bug: 161776961
Test: adb shell dumpsys SurfaceFlinger
Change-Id: I628b842d46308a140b2985398672b4dce2e4b952
diff --git a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
index 0646c7d..b872d7a 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
+++ b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
@@ -719,4 +719,26 @@
return static_cast<int>(numPeriods);
}
+void RefreshRateConfigs::dump(std::string& result) const {
+ std::lock_guard lock(mLock);
+ base::StringAppendF(&result, "DesiredDisplayConfigSpecs (DisplayManager): %s\n\n",
+ mDisplayManagerPolicy.toString().c_str());
+ scheduler::RefreshRateConfigs::Policy currentPolicy = *getCurrentPolicyLocked();
+ if (mOverridePolicy && currentPolicy != mDisplayManagerPolicy) {
+ base::StringAppendF(&result, "DesiredDisplayConfigSpecs (Override): %s\n\n",
+ currentPolicy.toString().c_str());
+ }
+
+ auto config = mCurrentRefreshRate->hwcConfig;
+ base::StringAppendF(&result, "Current config: %s\n", mCurrentRefreshRate->toString().c_str());
+
+ result.append("Refresh rates:\n");
+ for (const auto& [id, refreshRate] : mRefreshRates) {
+ config = refreshRate->hwcConfig;
+ base::StringAppendF(&result, "\t%s\n", refreshRate->toString().c_str());
+ }
+
+ result.append("\n");
+}
+
} // namespace android::scheduler
diff --git a/services/surfaceflinger/Scheduler/RefreshRateConfigs.h b/services/surfaceflinger/Scheduler/RefreshRateConfigs.h
index 41e54a7..3159352 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateConfigs.h
+++ b/services/surfaceflinger/Scheduler/RefreshRateConfigs.h
@@ -322,6 +322,8 @@
// Returns a divider for the current refresh rate
int getRefreshRateDividerForUid(uid_t) const EXCLUDES(mLock);
+ void dump(std::string& result) const EXCLUDES(mLock);
+
private:
friend class RefreshRateConfigsTest;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 28a8e7a..a4c1311 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -4374,16 +4374,10 @@
" present offset: %9" PRId64 " ns\t VSYNC period: %9" PRId64 " ns\n\n",
dispSyncPresentTimeOffset, getVsyncPeriodFromHWC());
- scheduler::RefreshRateConfigs::Policy policy = mRefreshRateConfigs->getDisplayManagerPolicy();
- StringAppendF(&result, "DesiredDisplayConfigSpecs (DisplayManager): %s\n\n",
- policy.toString().c_str());
+ mRefreshRateConfigs->dump(result);
+
StringAppendF(&result, "(config override by backdoor: %s)\n\n",
mDebugDisplayConfigSetByBackdoor ? "yes" : "no");
- scheduler::RefreshRateConfigs::Policy currentPolicy = mRefreshRateConfigs->getCurrentPolicy();
- if (currentPolicy != policy) {
- StringAppendF(&result, "DesiredDisplayConfigSpecs (Override): %s\n\n",
- currentPolicy.toString().c_str());
- }
mScheduler->dump(mAppConnectionHandle, result);
mScheduler->dumpVsync(result);