Fix issue #17377423: Frequently see 500ms latency on app open...

...even for apps in cache

64 bit devices are cool, so they get to use more RAM for their
caches.

Shhhh, don't tell 32 bit devices, they get terribly jealous.

Change-Id: Iec9a0c43718a75530555bac50185658a682969aa
This commit is contained in:
Dianne Hackborn
2014-09-11 17:46:06 -07:00
parent bb8c483461
commit 9d52f791b9

View File

@@ -21,6 +21,7 @@ import java.io.OutputStream;
import java.nio.ByteBuffer;
import android.app.ActivityManager;
import android.os.Build;
import android.os.SystemClock;
import com.android.internal.util.MemInfoReader;
import com.android.server.wm.WindowManagerService;
@@ -230,21 +231,31 @@ final class ProcessList {
Slog.i("XXXXXX", "minfree_adj=" + minfree_adj + " minfree_abs=" + minfree_abs);
}
final boolean is64bit = Build.SUPPORTED_64_BIT_ABIS.length > 0;
for (int i=0; i<mOomAdj.length; i++) {
int low = mOomMinFreeLow[i];
int high = mOomMinFreeHigh[i];
mOomMinFree[i] = (int)(low + ((high-low)*scale));
if (is64bit) {
// On 64 bit devices, we consume more baseline RAM, because 64 bit is cool!
// To avoid being all pagey and stuff, scale up the memory levels to
// give us some breathing room.
mOomMinFree[i] = (3*mOomMinFree[i])/2;
}
}
if (minfree_abs >= 0) {
for (int i=0; i<mOomAdj.length; i++) {
mOomMinFree[i] = (int)((float)minfree_abs * mOomMinFree[i] / mOomMinFree[mOomAdj.length - 1]);
mOomMinFree[i] = (int)((float)minfree_abs * mOomMinFree[i]
/ mOomMinFree[mOomAdj.length - 1]);
}
}
if (minfree_adj != 0) {
for (int i=0; i<mOomAdj.length; i++) {
mOomMinFree[i] += (int)((float)minfree_adj * mOomMinFree[i] / mOomMinFree[mOomAdj.length - 1]);
mOomMinFree[i] += (int)((float)minfree_adj * mOomMinFree[i]
/ mOomMinFree[mOomAdj.length - 1]);
if (mOomMinFree[i] < 0) {
mOomMinFree[i] = 0;
}