Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4e237c6 authored by Stefanot's avatar Stefanot
Browse files

Add instrumentation for BackupManager during restore.

This CL adds more instumentation to
backup/restore operation in the BackupManager. For more details please
point to:
https://docs.google.com/document/d/1sUboR28LjkT1wRXOwVOV3tLo0qisiCvzxIGmzCVEjbI/edit#
This first Cl introduces 3 events that we sent to the monitor.
The base cl is ag/1835775

Test: TODO

BUG: 34873525
Change-Id: I127fe739a7522078eecce2ae689a4607203a98da
parent b1f573dc
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -6897,6 +6897,7 @@ package android.app.backup {
    method public int requestBackup(java.lang.String[], android.app.backup.BackupObserver);
    method public int requestBackup(java.lang.String[], android.app.backup.BackupObserver, android.app.backup.BackupManagerMonitor, int);
    method public int requestRestore(android.app.backup.RestoreObserver);
    method public int requestRestore(android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
    method public deprecated java.lang.String selectBackupTransport(java.lang.String);
    method public void selectBackupTransport(android.content.ComponentName, android.app.backup.SelectBackupTransportCallback);
    method public void setAutoRestore(boolean);
@@ -6925,7 +6926,9 @@ package android.app.backup {
    field public static final int LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY = 3; // 0x3
    field public static final int LOG_EVENT_CATEGORY_TRANSPORT = 1; // 0x1
    field public static final int LOG_EVENT_ID_FULL_BACKUP_TIMEOUT = 4; // 0x4
    field public static final int LOG_EVENT_ID_FULL_RESTORE_TIMEOUT = 45; // 0x2d
    field public static final int LOG_EVENT_ID_KEY_VALUE_BACKUP_TIMEOUT = 21; // 0x15
    field public static final int LOG_EVENT_ID_KEY_VALUE_RESTORE_TIMEOUT = 31; // 0x1f
    field public static final int LOG_EVENT_ID_NO_PACKAGES = 49; // 0x31
  }
@@ -7022,8 +7025,11 @@ package android.app.backup {
  public class RestoreSession {
    method public void endRestoreSession();
    method public int getAvailableRestoreSets(android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
    method public int getAvailableRestoreSets(android.app.backup.RestoreObserver);
    method public int restoreAll(long, android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
    method public int restoreAll(long, android.app.backup.RestoreObserver);
    method public int restorePackage(java.lang.String, android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
    method public int restorePackage(java.lang.String, android.app.backup.RestoreObserver);
  }
+9 −5
Original line number Diff line number Diff line
@@ -506,7 +506,8 @@ public final class Bmgr {
    private void doListRestoreSets() {
        try {
            RestoreObserver observer = new RestoreObserver();
            int err = mRestore.getAvailableRestoreSets(observer);
            // TODO implement monitor here
            int err = mRestore.getAvailableRestoreSets(observer, null);
            if (err != 0) {
                System.out.println("Unable to request restore sets");
            } else {
@@ -609,7 +610,8 @@ public final class Bmgr {
            }

            RestoreObserver observer = new RestoreObserver();
            int err = mRestore.restorePackage(pkg, observer);
            // TODO implement monitor here
            int err = mRestore.restorePackage(pkg, observer, null );
            if (err == 0) {
                // Off and running -- wait for the restore to complete
                observer.waitForCompletion();
@@ -636,7 +638,8 @@ public final class Bmgr {
                return;
            }
            RestoreSet[] sets = null;
            int err = mRestore.getAvailableRestoreSets(observer);
            // TODO implement monitor here
            int err = mRestore.getAvailableRestoreSets(observer, null);
            if (err == 0) {
                observer.waitForCompletion();
                sets = observer.sets;
@@ -645,11 +648,12 @@ public final class Bmgr {
                        if (s.token == token) {
                            System.out.println("Scheduling restore: " + s.name);
                            if (filter == null) {
                                didRestore = (mRestore.restoreAll(token, observer) == 0);
                                didRestore = (mRestore.restoreAll(token, observer, null) == 0);
                            } else {
                                String[] names = new String[filter.size()];
                                filter.toArray(names);
                                didRestore = (mRestore.restoreSome(token, observer, names) == 0);
                                didRestore = (mRestore.restoreSome(token, observer,
                                        null, names) == 0);
                            }
                            break;
                        }
+32 −4
Original line number Diff line number Diff line
@@ -258,6 +258,36 @@ public class BackupManager {
     * @return Zero on success; nonzero on error.
     */
    public int requestRestore(RestoreObserver observer) {
        return requestRestore(observer, null);
    }

    // system APIs start here

    /**
     * Restore the calling application from backup.  The data will be restored from the
     * current backup dataset if the application has stored data there, or from
     * the dataset used during the last full device setup operation if the current
     * backup dataset has no matching data.  If no backup data exists for this application
     * in either source, a nonzero value will be returned.
     *
     * <p>If this method returns zero (meaning success), the OS will attempt to retrieve
     * a backed-up dataset from the remote transport, instantiate the application's
     * backup agent, and pass the dataset to the agent's
     * {@link android.app.backup.BackupAgent#onRestore(BackupDataInput, int, android.os.ParcelFileDescriptor) onRestore()}
     * method.
     *
     * @param observer The {@link RestoreObserver} to receive callbacks during the restore
     * operation. This must not be null.
     *
     * @param monitor the {@link BackupManagerMonitor} to receive callbacks during the restore
     * operation.
     *
     * @return Zero on success; nonzero on error.
     *
     * @hide
     */
    @SystemApi
    public int requestRestore(RestoreObserver observer, BackupManagerMonitor monitor) {
        int result = -1;
        checkServiceBinder();
        if (sService != null) {
@@ -267,7 +297,7 @@ public class BackupManager {
                    null);
                if (binder != null) {
                    session = new RestoreSession(mContext, binder);
                    result = session.restorePackage(mContext.getPackageName(), observer);
                    result = session.restorePackage(mContext.getPackageName(), observer, monitor);
                }
            } catch (RemoteException e) {
                Log.e(TAG, "restoreSelf() unable to contact service");
@@ -280,8 +310,6 @@ public class BackupManager {
        return result;
    }

    // system APIs start here

    /**
     * Begin the process of restoring data from backup.  See the
     * {@link android.app.backup.RestoreSession} class for documentation on that process.
+2 −0
Original line number Diff line number Diff line
@@ -57,6 +57,8 @@ public class BackupManagerMonitor {
  // TODO complete this list with all log messages. And document properly.
  public static final int LOG_EVENT_ID_FULL_BACKUP_TIMEOUT = 4;
  public static final int LOG_EVENT_ID_KEY_VALUE_BACKUP_TIMEOUT = 21;
  public static final int LOG_EVENT_ID_KEY_VALUE_RESTORE_TIMEOUT = 31;
  public static final int LOG_EVENT_ID_FULL_RESTORE_TIMEOUT = 45;
  public static final int LOG_EVENT_ID_NO_PACKAGES = 49;


+11 −5
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ package android.app.backup;

import android.app.backup.RestoreSet;
import android.app.backup.IRestoreObserver;

import android.app.backup.IBackupManagerMonitor;
/**
 * Binder interface used by clients who wish to manage a restore operation.  Every
 * method in this interface requires the android.permission.BACKUP permission.
@@ -31,10 +31,11 @@ interface IRestoreSession {
     *
     * @param observer This binder points to an object whose onRestoreSetsAvailable()
     *   method will be called to supply the results of the transport's lookup.
     * @param monitor If non null the binder will send important events to this monitor.
     * @return Zero on success; nonzero on error.  The observer will only receive a
     *   result callback if this method returned zero.
     */
    int getAvailableRestoreSets(IRestoreObserver observer);
    int getAvailableRestoreSets(IRestoreObserver observer, IBackupManagerMonitor monitor);

    /**
     * Restore the given set onto the device, replacing the current data of any app
@@ -48,8 +49,9 @@ interface IRestoreSession {
     *   the restore set that should be used.
     * @param observer If non-null, this binder points to an object that will receive
     *   progress callbacks during the restore operation.
     * @param monitor If non null the binder will send important events to this monitor.
     */
    int restoreAll(long token, IRestoreObserver observer);
    int restoreAll(long token, IRestoreObserver observer, IBackupManagerMonitor monitor);

    /**
     * Restore select packages from the given set onto the device, replacing the
@@ -67,8 +69,10 @@ interface IRestoreSession {
     * @param packages The set of packages for which to attempt a restore.  Regardless of
     *   the contents of the actual back-end dataset named by {@code token}, only
     *   applications mentioned in this list will have their data restored.
     * @param monitor If non null the binder will send important events to this monitor.
     */
    int restoreSome(long token, IRestoreObserver observer, in String[] packages);
    int restoreSome(long token, IRestoreObserver observer, IBackupManagerMonitor monitor,
            in String[] packages);

    /**
     * Restore a single application from backup.  The data will be restored from the
@@ -84,8 +88,10 @@ interface IRestoreSession {
     *   permission must be held.
     * @param observer If non-null, this binder points to an object that will receive
     *   progress callbacks during the restore operation.
     * @param monitor If non null the binder will send important events to this monitor.
     */
    int restorePackage(in String packageName, IRestoreObserver observer);
    int restorePackage(in String packageName, IRestoreObserver observer,
          IBackupManagerMonitor monitor);

    /**
     * End this restore session.  After this method is called, the IRestoreSession binder
Loading