Merge "Add new activity dumpsys command to persist all data." into lmp-dev
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 190c16c..4d689f9 100755
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -12230,6 +12230,7 @@
pw.println(" package [PACKAGE_NAME]: all state related to given package");
pw.println(" all: dump all activities");
pw.println(" top: dump the top activity");
+ pw.println(" write: write all pending state to storage");
pw.println(" cmd may also be a COMP_SPEC to dump activities.");
pw.println(" COMP_SPEC may be a component name (com.foo/.myApp),");
pw.println(" a partial substring in a component name, a");
@@ -12364,6 +12365,10 @@
synchronized (this) {
mServices.dumpServicesLocked(fd, pw, args, opti, true, dumpClient, null);
}
+ } else if ("write".equals(cmd)) {
+ mTaskPersister.flush();
+ pw.println("All tasks persisted.");
+ return;
} else {
// Dumping a single activity?
if (!dumpActivity(fd, pw, cmd, args, opti, dumpAll)) {
diff --git a/services/core/java/com/android/server/am/TaskPersister.java b/services/core/java/com/android/server/am/TaskPersister.java
index 1c0564f..afc781f 100644
--- a/services/core/java/com/android/server/am/TaskPersister.java
+++ b/services/core/java/com/android/server/am/TaskPersister.java
@@ -187,6 +187,19 @@
yieldIfQueueTooDeep();
}
+ void flush() {
+ synchronized (this) {
+ mNextWriteTime = FLUSH_QUEUE;
+ notifyAll();
+ do {
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ }
+ } while (mNextWriteTime == FLUSH_QUEUE);
+ }
+ }
+
void saveImage(Bitmap image, String filename) {
synchronized (this) {
int queueNdx;
@@ -483,8 +496,12 @@
INTER_WRITE_DELAY_MS + " msec. (" + mNextWriteTime + ")");
}
+
while (mWriteQueue.isEmpty()) {
- mNextWriteTime = 0; // idle.
+ if (mNextWriteTime != 0) {
+ mNextWriteTime = 0; // idle.
+ TaskPersister.this.notifyAll(); // wake up flush() if needed.
+ }
try {
if (DEBUG) Slog.d(TAG, "LazyTaskWriter: waiting indefinitely.");
TaskPersister.this.wait();