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
This commit is contained in:
Jun Wang
2022-08-26 11:55:12 +08:00
committed by Gerrit - the friendly Code Review server
parent 524973faef
commit e118a0b01f
3 changed files with 18 additions and 2 deletions

View File

@@ -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<int32_t>(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<int32_t>(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
} // namespace aidl

View File

@@ -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;

View File

@@ -49,6 +49,8 @@ extern "C" {
#define HINT_HANDLED (0)
#define HINT_NONE (-1)
#define PERF_HINT_EXPENSIVE_RENDERING 0x000010A5
#include <hardware/power.h>
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