Merge 92e50efac06b7128c6490e4fcffd475da3988ad4 on remote branch

Change-Id: Ifbd0d097f784dd999706e62f03ee2fdb0cb555c5
diff --git a/Power.cpp b/Power.cpp
index eadcef4..e451990 100644
--- a/Power.cpp
+++ b/Power.cpp
@@ -63,7 +63,6 @@
         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 @@
         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 @@
     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:
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 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 @@
 #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 @@
 
 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