Merge "Send top-app's render thread tid to perf HAL" into r-keystone-qcom-dev
diff --git a/core/java/android/util/BoostFramework.java b/core/java/android/util/BoostFramework.java
index f3e4965..b6a5f7e 100644
--- a/core/java/android/util/BoostFramework.java
+++ b/core/java/android/util/BoostFramework.java
@@ -83,6 +83,7 @@
public static final int VENDOR_HINT_PERFORMANCE_MODE = 0x00001091;
public static final int VENDOR_HINT_APP_UPDATE = 0x00001092;
public static final int VENDOR_HINT_KILL = 0x00001093;
+ public static final int VENDOR_HINT_BOOST_RENDERTHREAD = 0x00001095;
//perf events
public static final int VENDOR_HINT_FIRST_DRAW = 0x00001042;
public static final int VENDOR_HINT_TAP_EVENT = 0x00001043;
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java
index 94be314..85189b1 100644
--- a/services/core/java/com/android/server/am/OomAdjuster.java
+++ b/services/core/java/com/android/server/am/OomAdjuster.java
@@ -219,6 +219,12 @@
public static BoostFramework mPerf = new BoostFramework();
+ //Per Task Boost of top-app renderThread
+ public static BoostFramework mPerfBoost = new BoostFramework();
+ public static int mPerfHandle = -1;
+ public static int mCurRenderThreadTid = -1;
+ public static boolean mIsTopAppRenderThreadBoostEnabled = false;
+
private final int mNumSlots;
private ArrayList<ProcessRecord> mTmpProcessList = new ArrayList<ProcessRecord>();
private ArrayList<UidRecord> mTmpBecameIdle = new ArrayList<UidRecord>();
@@ -258,6 +264,7 @@
mEnableBServicePropagation = Boolean.parseBoolean(mPerf.perfGetProp("ro.vendor.qti.sys.fw.bservice_enable", "false"));
mEnableProcessGroupCgroupFollow = Boolean.parseBoolean(mPerf.perfGetProp("ro.vendor.qti.cgroup_follow.enable", "false"));
mProcessGroupCgroupFollowDex2oatOnly = Boolean.parseBoolean(mPerf.perfGetProp("ro.vendor.qti.cgroup_follow.dex2oat_only", "false"));
+ mIsTopAppRenderThreadBoostEnabled = Boolean.parseBoolean(mPerf.perfGetProp("vendor.perf.topAppRenderThreadBoost.enable", "false"));
}
mProcessGroupHandler = new Handler(adjusterThread.getLooper(), msg -> {
@@ -1286,6 +1293,24 @@
}
foregroundActivities = true;
procState = PROCESS_STATE_CUR_TOP;
+ if(mIsTopAppRenderThreadBoostEnabled) {
+ if(mCurRenderThreadTid != app.renderThreadTid && app.renderThreadTid > 0) {
+ mCurRenderThreadTid = app.renderThreadTid;
+ if (mPerfBoost != null) {
+ Slog.d(TAG, "TOP-APP: pid:" + app.pid + ", processName: "
+ + app.processName + ", renderThreadTid: " + app.renderThreadTid);
+ if (mPerfHandle >= 0) {
+ mPerfBoost.perfLockRelease();
+ mPerfHandle = -1;
+ }
+ mPerfHandle = mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_BOOST_RENDERTHREAD,
+ app.processName, app.renderThreadTid, 1);
+ Slog.d(TAG, "VENDOR_HINT_BOOST_RENDERTHREAD perfHint was called. mPerfHandle: "
+ + mPerfHandle);
+ }
+ }
+ }
+
if (DEBUG_OOM_ADJ_REASON || logUid == appUid) {
reportOomAdjMessageLocked(TAG_OOM_ADJ, "Making top: " + app);
}