SF: Average refresh rate history only if needed
Bug: 130554049
Test: Log calls to RefreshRateHistory::getRefreshRateAvg
Change-Id: I68eea07afb6446eae32bffd826d460324a3c2c94
diff --git a/services/surfaceflinger/Scheduler/LayerHistory.cpp b/services/surfaceflinger/Scheduler/LayerHistory.cpp
index f80c233..5473db6 100644
--- a/services/surfaceflinger/Scheduler/LayerHistory.cpp
+++ b/services/surfaceflinger/Scheduler/LayerHistory.cpp
@@ -40,7 +40,7 @@
LayerHistory::LayerHistory() {
char value[PROPERTY_VALUE_MAX];
property_get("debug.sf.layer_history_trace", value, "0");
- mTraceEnabled = bool(atoi(value));
+ mTraceEnabled = static_cast<bool>(atoi(value));
}
LayerHistory::~LayerHistory() = default;
@@ -128,19 +128,23 @@
// Iterate through all layers that have been recently updated, and find the max refresh rate.
for (const auto& [layerId, layerInfo] : mActiveLayerInfos) {
- const float layerRefreshRate = layerInfo->getDesiredRefreshRate();
- if (mTraceEnabled) {
- // Store the refresh rate in traces for easy debugging.
- std::string layerName = "LFPS " + layerInfo->getName();
- ATRACE_INT(layerName.c_str(), std::round(layerRefreshRate));
- ALOGD("%s: %f", layerName.c_str(), std::round(layerRefreshRate));
- }
- if (layerInfo->isRecentlyActive() && layerRefreshRate > newRefreshRate) {
- newRefreshRate = layerRefreshRate;
+ const bool recent = layerInfo->isRecentlyActive();
+ if (recent || CC_UNLIKELY(mTraceEnabled)) {
+ const float refreshRate = layerInfo->getDesiredRefreshRate();
+ if (recent && refreshRate > newRefreshRate) {
+ newRefreshRate = refreshRate;
+ }
+
+ if (CC_UNLIKELY(mTraceEnabled)) {
+ std::string name = "LFPS " + layerInfo->getName();
+ const float rate = std::round(refreshRate);
+ ATRACE_INT(name.c_str(), rate);
+ ALOGD("%s: %f", name.c_str(), rate);
+ }
}
isHDR |= layerInfo->getHDRContent();
}
- if (mTraceEnabled) {
+ if (CC_UNLIKELY(mTraceEnabled)) {
ALOGD("LayerHistory DesiredRefreshRate: %.2f", newRefreshRate);
}
@@ -158,7 +162,7 @@
(!it->second->getHDRContent() && it->second->getLastUpdatedTime() < obsoleteEpsilon)) {
// erase() function returns the iterator of the next
// to last deleted element.
- if (mTraceEnabled) {
+ if (CC_UNLIKELY(mTraceEnabled)) {
ALOGD("Layer %s obsolete", it->second->getName().c_str());
// Make sure to update systrace to indicate that the layer was erased.
std::string layerName = "LFPS " + it->second->getName();
@@ -189,4 +193,4 @@
}
} // namespace scheduler
-} // namespace android
\ No newline at end of file
+} // namespace android