Check ADPF SF flag in PowerAdvisor only after boot is completed
Bug: 334974544
Test: atest libcompositionengine_test PowerAdvisorTest
Change-Id: I3523b8af04a1e9354e8212addf1c826dbe37a35b
diff --git a/services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp b/services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp
index 96cf84c..96d5ca6 100644
--- a/services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp
+++ b/services/surfaceflinger/DisplayHardware/PowerAdvisor.cpp
@@ -206,7 +206,8 @@
}
bool PowerAdvisor::shouldCreateSessionWithConfig() {
- return mSessionConfigSupported && FlagManager::getInstance().adpf_use_fmq_channel();
+ return mSessionConfigSupported && mBootFinished &&
+ FlagManager::getInstance().adpf_use_fmq_channel();
}
bool PowerAdvisor::ensurePowerHintSessionRunning() {
@@ -241,7 +242,7 @@
}
void PowerAdvisor::updateTargetWorkDuration(Duration targetDuration) {
- if (!usePowerHintSession()) {
+ if (!mBootFinished || !usePowerHintSession()) {
ALOGV("Power hint session target duration cannot be set, skipping");
return;
}
@@ -280,7 +281,7 @@
ATRACE_INT64("Measured duration", actualDuration->durationNanos);
ATRACE_INT64("Target error term", actualDuration->durationNanos - mTargetDuration.ns());
ATRACE_INT64("Reported duration", actualDuration->durationNanos);
- if (FlagManager::getInstance().adpf_gpu_sf()) {
+ if (supportsGpuReporting()) {
ATRACE_INT64("Reported cpu duration", actualDuration->cpuDurationNanos);
ATRACE_INT64("Reported gpu duration", actualDuration->gpuDurationNanos);
}
@@ -341,6 +342,10 @@
return ensurePowerHintSessionRunning();
}
+bool PowerAdvisor::supportsGpuReporting() {
+ return mBootFinished && FlagManager::getInstance().adpf_gpu_sf();
+}
+
void PowerAdvisor::setGpuStartTime(DisplayId displayId, TimePoint startTime) {
DisplayTimingData& displayData = mDisplayTimingData[displayId];
if (displayData.gpuEndFenceTime) {
@@ -366,7 +371,7 @@
void PowerAdvisor::setGpuFenceTime(DisplayId displayId, std::unique_ptr<FenceTime>&& fenceTime) {
DisplayTimingData& displayData = mDisplayTimingData[displayId];
- if (displayData.gpuEndFenceTime && !FlagManager::getInstance().adpf_gpu_sf()) {
+ if (displayData.gpuEndFenceTime && !supportsGpuReporting()) {
nsecs_t signalTime = displayData.gpuEndFenceTime->getSignalTime();
if (signalTime != Fence::SIGNAL_TIME_INVALID && signalTime != Fence::SIGNAL_TIME_PENDING) {
displayData.lastValidGpuStartTime = displayData.gpuStartTime;
@@ -386,7 +391,7 @@
}
}
displayData.gpuEndFenceTime = std::move(fenceTime);
- if (!FlagManager::getInstance().adpf_gpu_sf()) {
+ if (!supportsGpuReporting()) {
displayData.gpuStartTime = TimePoint::now();
}
}
@@ -549,9 +554,8 @@
.timeStampNanos = TimePoint::now().ns(),
.durationNanos = combinedDuration.ns(),
.workPeriodStartTimestampNanos = mCommitStartTimes[0].ns(),
- .cpuDurationNanos = FlagManager::getInstance().adpf_gpu_sf() ? cpuDuration.ns() : 0,
- .gpuDurationNanos =
- FlagManager::getInstance().adpf_gpu_sf() ? estimatedGpuDuration.ns() : 0,
+ .cpuDurationNanos = supportsGpuReporting() ? cpuDuration.ns() : 0,
+ .gpuDurationNanos = supportsGpuReporting() ? estimatedGpuDuration.ns() : 0,
};
if (sTraceHintSessionData) {
ATRACE_INT64("Idle duration", idleDuration.ns());