sf: Update PowerAdvisor to talk to AIDL Power HAL
Updates the PowerAdvisor to talk to the AIDL Power HAL, and hooks up
the new DISPLAY_UPDATE_IMMINENT Boost present in that HAL.
Test: libsurfaceflinger_unittest
Test: libcompositionengine_test
Test: Manual with ALOGV
Bug: 132390048
Bug: 146453294
Change-Id: I3cb3e8d04303373de24b6dc150ce724aac89407c
diff --git a/services/surfaceflinger/DisplayHardware/PowerAdvisor.h b/services/surfaceflinger/DisplayHardware/PowerAdvisor.h
index 5aa1f22..957d289 100644
--- a/services/surfaceflinger/DisplayHardware/PowerAdvisor.h
+++ b/services/surfaceflinger/DisplayHardware/PowerAdvisor.h
@@ -22,11 +22,10 @@
#undef HWC2_INCLUDE_STRINGIFICATION
#undef HWC2_USE_CPP11
+#include <atomic>
#include <unordered_set>
-#include <android/hardware/power/1.3/IPower.h>
-#include <utils/StrongPointer.h>
-
+#include "../Scheduler/OneShotTimer.h"
#include "DisplayIdentification.h"
namespace android {
@@ -37,27 +36,40 @@
virtual ~PowerAdvisor();
virtual void setExpensiveRenderingExpected(DisplayId displayId, bool expected) = 0;
+ virtual void notifyDisplayUpdateImminent() = 0;
};
namespace impl {
-namespace V1_3 = android::hardware::power::V1_3;
-
// PowerAdvisor is a wrapper around IPower HAL which takes into account the
// full state of the system when sending out power hints to things like the GPU.
class PowerAdvisor final : public Hwc2::PowerAdvisor {
public:
+ class HalWrapper {
+ public:
+ virtual ~HalWrapper() = default;
+
+ virtual bool setExpensiveRendering(bool enabled) = 0;
+ virtual bool notifyDisplayUpdateImminent() = 0;
+ };
+
PowerAdvisor();
~PowerAdvisor() override;
void setExpensiveRenderingExpected(DisplayId displayId, bool expected) override;
+ void notifyDisplayUpdateImminent() override;
private:
- sp<V1_3::IPower> getPowerHal();
+ HalWrapper* getPowerHal();
+
+ bool mReconnectPowerHal = false;
std::unordered_set<DisplayId> mExpensiveDisplays;
bool mNotifiedExpensiveRendering = false;
- bool mReconnectPowerHal = false;
+
+ const bool mUseUpdateImminentTimer;
+ std::atomic_bool mSendUpdateImminent = true;
+ scheduler::OneShotTimer mUpdateImminentTimer;
};
} // namespace impl