diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java index d4cebef7a0f3f..ef0cbeeb372b4 100644 --- a/services/java/com/android/server/BackupManagerService.java +++ b/services/java/com/android/server/BackupManagerService.java @@ -106,6 +106,7 @@ class BackupManagerService extends IBackupManager.Stub { private static final int BACKUP_PACKAGE_EVENT = 2824; private static final int BACKUP_SUCCESS_EVENT = 2825; private static final int BACKUP_RESET_EVENT = 2826; + private static final int BACKUP_INITIALIZE_EVENT = 2827; private static final int RESTORE_START_EVENT = 2830; private static final int RESTORE_TRANSPORT_FAILURE_EVENT = 2831; @@ -1062,7 +1063,14 @@ class BackupManagerService extends IBackupManager.Stub { // If we haven't stored anything yet, we need to do an init operation. if (status == BackupConstants.TRANSPORT_OK && mEverStoredApps.size() == 0) { + Log.i(TAG, "Initializing (wiping) backup transport storage"); status = mTransport.initializeDevice(); + if (status == BackupConstants.TRANSPORT_OK) { + EventLog.writeEvent(BACKUP_INITIALIZE_EVENT); + } else { + EventLog.writeEvent(BACKUP_TRANSPORT_FAILURE_EVENT, "(initialize)"); + Log.e(TAG, "Transport error in initializeDevice()"); + } } // The package manager doesn't have a proper etc, but since @@ -1091,7 +1099,7 @@ class BackupManagerService extends IBackupManager.Stub { int millis = (int) (SystemClock.elapsedRealtime() - startRealtime); EventLog.writeEvent(BACKUP_SUCCESS_EVENT, mQueue.size(), millis); } else { - EventLog.writeEvent(BACKUP_TRANSPORT_FAILURE_EVENT, ""); + EventLog.writeEvent(BACKUP_TRANSPORT_FAILURE_EVENT, "(finish)"); Log.e(TAG, "Transport error in finishBackup()"); } } @@ -1714,7 +1722,6 @@ class BackupManagerService extends IBackupManager.Stub { @Override public void run() { - int status; try { for (String transportName : mQueue) { IBackupTransport transport = getTransport(transportName); @@ -1723,33 +1730,30 @@ class BackupManagerService extends IBackupManager.Stub { continue; } - status = BackupConstants.TRANSPORT_OK; - File stateDir = null; + Log.i(TAG, "Initializing (wiping) backup transport storage: " + transportName); + EventLog.writeEvent(BACKUP_START_EVENT, transport.transportDirName()); + long startRealtime = SystemClock.elapsedRealtime(); + int status = transport.initializeDevice(); - Log.i(TAG, "Device init on " + transport.transportDirName()); - - stateDir = new File(mBaseStateDir, transport.transportDirName()); - - status = transport.initializeDevice(); - if (status != BackupConstants.TRANSPORT_OK) { - Log.e(TAG, "Error from initializeDevice: " + status); - } if (status == BackupConstants.TRANSPORT_OK) { status = transport.finishBackup(); } // Okay, the wipe really happened. Clean up our local bookkeeping. if (status == BackupConstants.TRANSPORT_OK) { - resetBackupState(stateDir); + Log.i(TAG, "Device init successful"); + int millis = (int) (SystemClock.elapsedRealtime() - startRealtime); + EventLog.writeEvent(BACKUP_INITIALIZE_EVENT); + resetBackupState(new File(mBaseStateDir, transport.transportDirName())); + EventLog.writeEvent(BACKUP_SUCCESS_EVENT, 0, millis); synchronized (mQueueLock) { recordInitPendingLocked(false, transportName); } - } - - // If this didn't work, requeue this one and try again - // after a suitable interval - if (status != BackupConstants.TRANSPORT_OK) { - Log.i(TAG, "Device init failed"); + } else { + // If this didn't work, requeue this one and try again + // after a suitable interval + Log.e(TAG, "Transport error in initializeDevice()"); + EventLog.writeEvent(BACKUP_TRANSPORT_FAILURE_EVENT, "(initialize)"); synchronized (mQueueLock) { recordInitPendingLocked(true, transportName); } @@ -1759,11 +1763,7 @@ class BackupManagerService extends IBackupManager.Stub { + transportName + " resched in " + delay); mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + delay, mRunInitIntent); - } else { - // success! - Log.i(TAG, "Device init successful"); } - } } catch (RemoteException e) { // can't happen; the transports are local