From e118a0b01ff05cba7287800ff1bb280bda168ae9 Mon Sep 17 00:00:00 2001 From: Jun Wang Date: Fri, 26 Aug 2022 11:55:12 +0800 Subject: [PATCH] power: Add support for EXPENSIVE_RENDERING When background_blur is enabled, the rendering can be expensive and many janks will occur. So, need to support the mode in power module and pass it to perf-hal to handle. Change-Id: I5bab53e72134d76201d9fc28b9bdae4185790deb CRs-Fixed: 3278491 --- Power.cpp | 7 +++++-- power-common.c | 10 ++++++++++ power-common.h | 3 +++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Power.cpp b/Power.cpp index 260ad4c..4ab9e83 100644 --- a/Power.cpp +++ b/Power.cpp @@ -63,7 +63,6 @@ ndk::ScopedAStatus Power::setMode(Mode type, bool enabled) { case Mode::DOUBLE_TAP_TO_WAKE: case Mode::LOW_POWER: case Mode::LAUNCH: - case Mode::EXPENSIVE_RENDERING: case Mode::DEVICE_IDLE: case Mode::DISPLAY_INACTIVE: case Mode::AUDIO_STREAMING_LOW_LATENCY: @@ -74,6 +73,9 @@ ndk::ScopedAStatus Power::setMode(Mode type, bool enabled) { case Mode::VR: LOG(INFO) << "Mode " << static_cast(type) << "Not Supported"; break; + case Mode::EXPENSIVE_RENDERING: + set_expensive_rendering(enabled); + break; case Mode::INTERACTIVE: setInteractive(enabled); power_hint(POWER_HINT_INTERACTION, NULL); @@ -93,6 +95,7 @@ ndk::ScopedAStatus Power::isModeSupported(Mode type, bool* _aidl_return) { LOG(INFO) << "Power isModeSupported: " << static_cast(type); switch(type){ + case Mode::EXPENSIVE_RENDERING: case Mode::INTERACTIVE: case Mode::SUSTAINED_PERFORMANCE: case Mode::FIXED_PERFORMANCE: @@ -121,4 +124,4 @@ ndk::ScopedAStatus Power::isBoostSupported(Boost type, bool* _aidl_return) { } // namespace power } // namespace hardware } // namespace android -} // namespace aidl \ No newline at end of file +} // namespace aidl diff --git a/power-common.c b/power-common.c index eb92998..a7a32e5 100644 --- a/power-common.c +++ b/power-common.c @@ -49,6 +49,7 @@ #include "power-common.h" static struct hint_handles handles[NUM_HINTS]; +static int handleER = 0; void power_init() { @@ -115,6 +116,15 @@ void power_hint(power_hint_t hint, void *data) } } +void set_expensive_rendering(bool enabled) +{ + if (enabled) { + handleER = perf_hint_enable(PERF_HINT_EXPENSIVE_RENDERING, 0); + } else if (handleER > 0) { + release_request(handleER); + } +} + int __attribute__ ((weak)) set_interactive_override(int on) { return HINT_NONE; diff --git a/power-common.h b/power-common.h index 697302a..b95ea22 100644 --- a/power-common.h +++ b/power-common.h @@ -49,6 +49,8 @@ extern "C" { #define HINT_HANDLED (0) #define HINT_NONE (-1) +#define PERF_HINT_EXPENSIVE_RENDERING 0x000010A5 + #include enum CPU_GOV_CHECK { @@ -60,6 +62,7 @@ enum CPU_GOV_CHECK { void power_init(void); void power_hint(power_hint_t hint, void *data); +void set_expensive_rendering(bool enabled); void set_interactive(int on); #ifdef __cplusplus