Loading services/core/java/com/android/server/PackageWatchdog.java +12 −1 Original line number Diff line number Diff line Loading @@ -1062,9 +1062,14 @@ public class PackageWatchdog { public void updatePackagesLocked(List<MonitoredPackage> packages) { for (int pIndex = 0; pIndex < packages.size(); pIndex++) { MonitoredPackage p = packages.get(pIndex); MonitoredPackage existingPackage = this.packages.get(p.getName()); if (existingPackage != null) { existingPackage.updateHealthCheckDuration(p.mDurationMs); } else { this.packages.put(p.getName(), p); } } } /** * Reduces the monitoring durations of all packages observed by this observer by Loading Loading @@ -1331,6 +1336,12 @@ public class PackageWatchdog { return updateHealthCheckStateLocked(); } /** Explicitly update the monitoring duration of the package. */ @GuardedBy("mLock") public void updateHealthCheckDuration(long newDurationMs) { mDurationMs = newDurationMs; } /** * Marks the health check as passed and transitions to {@link HealthCheckState.PASSED} * if not yet {@link HealthCheckState.FAILED}. Loading tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -1123,6 +1123,28 @@ public class PackageWatchdogTest { assertThat(testController.getSyncRequests()).isEqualTo(expectedSyncRequests); } /** * Ensure that the failure history of a package is preserved when making duplicate calls to * observe the package. */ @Test public void testFailureHistoryIsPreserved() { PackageWatchdog watchdog = createWatchdog(); TestObserver observer = new TestObserver(OBSERVER_NAME_1); watchdog.startObservingHealth(observer, List.of(APP_A), SHORT_DURATION); for (int i = 0; i < PackageWatchdog.DEFAULT_TRIGGER_FAILURE_COUNT - 1; i++) { watchdog.onPackageFailure(List.of(new VersionedPackage(APP_A, VERSION_CODE)), PackageWatchdog.FAILURE_REASON_UNKNOWN); } mTestLooper.dispatchAll(); assertThat(observer.mMitigatedPackages).isEmpty(); watchdog.startObservingHealth(observer, List.of(APP_A), LONG_DURATION); watchdog.onPackageFailure(List.of(new VersionedPackage(APP_A, VERSION_CODE)), PackageWatchdog.FAILURE_REASON_UNKNOWN); mTestLooper.dispatchAll(); assertThat(observer.mMitigatedPackages).isEqualTo(List.of(APP_A)); } private void adoptShellPermissions(String... permissions) { InstrumentationRegistry .getInstrumentation() Loading Loading
services/core/java/com/android/server/PackageWatchdog.java +12 −1 Original line number Diff line number Diff line Loading @@ -1062,9 +1062,14 @@ public class PackageWatchdog { public void updatePackagesLocked(List<MonitoredPackage> packages) { for (int pIndex = 0; pIndex < packages.size(); pIndex++) { MonitoredPackage p = packages.get(pIndex); MonitoredPackage existingPackage = this.packages.get(p.getName()); if (existingPackage != null) { existingPackage.updateHealthCheckDuration(p.mDurationMs); } else { this.packages.put(p.getName(), p); } } } /** * Reduces the monitoring durations of all packages observed by this observer by Loading Loading @@ -1331,6 +1336,12 @@ public class PackageWatchdog { return updateHealthCheckStateLocked(); } /** Explicitly update the monitoring duration of the package. */ @GuardedBy("mLock") public void updateHealthCheckDuration(long newDurationMs) { mDurationMs = newDurationMs; } /** * Marks the health check as passed and transitions to {@link HealthCheckState.PASSED} * if not yet {@link HealthCheckState.FAILED}. Loading
tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -1123,6 +1123,28 @@ public class PackageWatchdogTest { assertThat(testController.getSyncRequests()).isEqualTo(expectedSyncRequests); } /** * Ensure that the failure history of a package is preserved when making duplicate calls to * observe the package. */ @Test public void testFailureHistoryIsPreserved() { PackageWatchdog watchdog = createWatchdog(); TestObserver observer = new TestObserver(OBSERVER_NAME_1); watchdog.startObservingHealth(observer, List.of(APP_A), SHORT_DURATION); for (int i = 0; i < PackageWatchdog.DEFAULT_TRIGGER_FAILURE_COUNT - 1; i++) { watchdog.onPackageFailure(List.of(new VersionedPackage(APP_A, VERSION_CODE)), PackageWatchdog.FAILURE_REASON_UNKNOWN); } mTestLooper.dispatchAll(); assertThat(observer.mMitigatedPackages).isEmpty(); watchdog.startObservingHealth(observer, List.of(APP_A), LONG_DURATION); watchdog.onPackageFailure(List.of(new VersionedPackage(APP_A, VERSION_CODE)), PackageWatchdog.FAILURE_REASON_UNKNOWN); mTestLooper.dispatchAll(); assertThat(observer.mMitigatedPackages).isEqualTo(List.of(APP_A)); } private void adoptShellPermissions(String... permissions) { InstrumentationRegistry .getInstrumentation() Loading