Merge "Optionally trigger CG in onTrimMemory()" into qt-dev

This commit is contained in:
Makoto Onuki
2019-06-19 23:24:04 +00:00
committed by Android (Google) Code Review

View File

@@ -2080,7 +2080,7 @@ public final class ActivityThread extends ClientTransactionHandler {
@Override @Override
public final boolean queueIdle() { public final boolean queueIdle() {
doGcIfNeeded(); doGcIfNeeded();
nPurgePendingResources(); purgePendingResources();
return false; return false;
} }
} }
@@ -2088,9 +2088,7 @@ public final class ActivityThread extends ClientTransactionHandler {
final class PurgeIdler implements MessageQueue.IdleHandler { final class PurgeIdler implements MessageQueue.IdleHandler {
@Override @Override
public boolean queueIdle() { public boolean queueIdle() {
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "purgePendingResources"); purgePendingResources();
nPurgePendingResources();
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
return false; return false;
} }
} }
@@ -2460,13 +2458,17 @@ public final class ActivityThread extends ClientTransactionHandler {
} }
void doGcIfNeeded() { void doGcIfNeeded() {
doGcIfNeeded("bg");
}
void doGcIfNeeded(String reason) {
mGcIdlerScheduled = false; mGcIdlerScheduled = false;
final long now = SystemClock.uptimeMillis(); final long now = SystemClock.uptimeMillis();
//Slog.i(TAG, "**** WE MIGHT WANT TO GC: then=" + Binder.getLastGcTime() //Slog.i(TAG, "**** WE MIGHT WANT TO GC: then=" + Binder.getLastGcTime()
// + "m now=" + now); // + "m now=" + now);
if ((BinderInternal.getLastGcTime()+MIN_TIME_BETWEEN_GCS) < now) { if ((BinderInternal.getLastGcTime()+MIN_TIME_BETWEEN_GCS) < now) {
//Slog.i(TAG, "**** WE DO, WE DO WANT TO GC!"); //Slog.i(TAG, "**** WE DO, WE DO WANT TO GC!");
BinderInternal.forceGc("bg"); BinderInternal.forceGc(reason);
} }
} }
@@ -6006,6 +6008,16 @@ public final class ActivityThread extends ClientTransactionHandler {
WindowManagerGlobal.getInstance().trimMemory(level); WindowManagerGlobal.getInstance().trimMemory(level);
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
if (SystemProperties.getInt("debug.am.run_gc_trim_level", Integer.MAX_VALUE) <= level) {
unscheduleGcIdler();
doGcIfNeeded("tm");
}
if (SystemProperties.getInt("debug.am.run_mallopt_trim_level", Integer.MAX_VALUE)
<= level) {
unschedulePurgeIdler();
purgePendingResources();
}
} }
private void setupGraphicsSupport(Context context) { private void setupGraphicsSupport(Context context) {
@@ -7346,6 +7358,12 @@ public final class ActivityThread extends ClientTransactionHandler {
throw new RuntimeException("Main thread loop unexpectedly exited"); throw new RuntimeException("Main thread loop unexpectedly exited");
} }
private void purgePendingResources() {
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "purgePendingResources");
nPurgePendingResources();
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
// ------------------ Regular JNI ------------------------ // ------------------ Regular JNI ------------------------
private native void nPurgePendingResources(); private native void nPurgePendingResources();
private native void nDumpGraphicsInfo(FileDescriptor fd); private native void nDumpGraphicsInfo(FileDescriptor fd);