Set timer slack value according to thread foreground/background state.

Change-Id: Ia998f349129acf4602b767d1ff94839607fdbdbd
Signed-off-by: Ruchi Kandoi <kandoiruchi@google.com>
diff --git a/libcutils/sched_policy.c b/libcutils/sched_policy.c
index d20d217..bc49e88 100644
--- a/libcutils/sched_policy.c
+++ b/libcutils/sched_policy.c
@@ -26,6 +26,7 @@
 #include <fcntl.h>
 #include <cutils/sched_policy.h>
 #include <cutils/log.h>
+#include <linux/prctl.h>
 
 /* Re-map SP_DEFAULT to the system default policy, and leave other values unchanged.
  * Call this any place a SchedPolicy is used as an input parameter.
@@ -53,6 +54,9 @@
 
 #define CAN_SET_SP_SYSTEM 0 // non-zero means to implement set_sched_policy(tid, SP_SYSTEM)
 
+// timer slack value in nS enforced when the thread moves to background
+#define TIMER_SLACK_BG 40000000
+
 static pthread_once_t the_once = PTHREAD_ONCE_INIT;
 
 static int __sys_supports_schedgroups = -1;
@@ -324,6 +328,8 @@
                            &param);
     }
 
+    prctl(PR_SET_TIMERSLACK_PID, policy == SP_BACKGROUND ? TIMER_SLACK_BG : 0, tid);
+
     return 0;
 }