Track bugreports immediately after triggering a bugreport

Remove an old hack that was put in place as bugreport ID was updated
a bit later in the bugreport generation phase.
This change removes the race condition around triggering bugreports
almost instantly.

Bug: 152292912
Test: Trigger consecutive bugreports from ActivityManager WAI. (Fails
without this change)

Change-Id: Ib08bc2c7d8ae765894998e5bfa0d9b6f3efa088b
This commit is contained in:
Abhijeet Kaur
2020-03-30 12:23:37 +01:00
parent d7df0c13d9
commit 8449e85f3c

View File

@@ -351,9 +351,6 @@ public class BugreportProgressService extends Service {
@Override
public void onProgress(float progress) {
synchronized (mLock) {
if (progress == 0) {
trackInfoWithIdLocked();
}
checkProgressUpdatedLocked(mInfo, (int) progress);
}
}
@@ -365,7 +362,6 @@ public class BugreportProgressService extends Service {
@Override
public void onError(@BugreportErrorCode int errorCode) {
synchronized (mLock) {
trackInfoWithIdLocked();
stopProgressLocked(mInfo.id);
}
Log.e(TAG, "Bugreport API callback onError() errorCode = " + errorCode);
@@ -382,10 +378,10 @@ public class BugreportProgressService extends Service {
}
/**
* Reads bugreport id and links it to the bugreport info to track the bugreport's
* progress/completion/error. id is incremented in dumpstate code. This function is called
* when dumpstate calls one of the callback functions (onProgress, onFinished, onError)
* after the id has been incremented.
* Reads bugreport id and links it to the bugreport info to track a bugreport that is in
* process. id is incremented in the dumpstate code.
* We do not track a bugreport if there is already a bugreport with the same id being
* tracked.
*/
@GuardedBy("mLock")
private void trackInfoWithIdLocked() {
@@ -408,7 +404,6 @@ public class BugreportProgressService extends Service {
sendRemoteBugreportFinishedBroadcast(mContext, bugreportFilePath,
mInfo.bugreportFile);
} else {
trackInfoWithIdLocked();
cleanupOldFiles(MIN_KEEP_COUNT, MIN_KEEP_AGE, mBugreportsDir);
final Intent intent = new Intent(INTENT_BUGREPORT_FINISHED);
intent.putExtra(EXTRA_BUGREPORT, bugreportFilePath);
@@ -638,8 +633,11 @@ public class BugreportProgressService extends Service {
BugreportCallbackImpl bugreportCallback = new BugreportCallbackImpl(info);
try {
mBugreportManager.startBugreport(bugreportFd, screenshotFd,
new BugreportParams(bugreportType), executor, bugreportCallback);
synchronized (mLock) {
mBugreportManager.startBugreport(bugreportFd, screenshotFd,
new BugreportParams(bugreportType), executor, bugreportCallback);
bugreportCallback.trackInfoWithIdLocked();
}
} catch (RuntimeException e) {
Log.i(TAG, "Error in generating bugreports: ", e);
// The binder call didn't go through successfully, so need to close the fds.