Snap for 11486370 from 3498227cc32cb35e9cb5a1533ebab1a529923eb0 to 24Q2-release
Change-Id: I09a3b6c0e3c2a4a17d76d5ca01e7b4481776f5b2
diff --git a/service/java/com/android/server/stats/StatsCompanionService.java b/service/java/com/android/server/stats/StatsCompanionService.java
index 360889b..16e66fe 100644
--- a/service/java/com/android/server/stats/StatsCompanionService.java
+++ b/service/java/com/android/server/stats/StatsCompanionService.java
@@ -742,13 +742,15 @@
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addDataScheme("package");
- mContext.registerReceiverForAllUsers(appUpdateReceiver, filter, null, null);
+ mContext.registerReceiverForAllUsers(appUpdateReceiver, filter, null,
+ /* scheduler= */ mHandler);
// Setup receiver for user initialize (which happens once for a new user)
// and if a user is removed.
filter = new IntentFilter(Intent.ACTION_USER_INITIALIZE);
filter.addAction(Intent.ACTION_USER_REMOVED);
- mContext.registerReceiverForAllUsers(userUpdateReceiver, filter, null, null);
+ mContext.registerReceiverForAllUsers(userUpdateReceiver, filter, null,
+ /* scheduler= */ mHandler);
// Setup receiver for device reboots or shutdowns.
filter = new IntentFilter(Intent.ACTION_REBOOT);
diff --git a/tests/apps/statsdapp/src/com/android/server/cts/device/statsd/StatsdStressLogging.java b/tests/apps/statsdapp/src/com/android/server/cts/device/statsd/StatsdStressLogging.java
index 8ec72e1..62dfe78 100644
--- a/tests/apps/statsdapp/src/com/android/server/cts/device/statsd/StatsdStressLogging.java
+++ b/tests/apps/statsdapp/src/com/android/server/cts/device/statsd/StatsdStressLogging.java
@@ -16,6 +16,7 @@
package com.android.server.cts.device.statsd;
+import android.os.SystemClock;
import android.util.StatsLog;
import org.junit.Test;
@@ -27,10 +28,16 @@
@Test
public void testLogAtomsBackToBack() throws Exception {
// logging back to back many atoms to force socket overflow
- performAtomStorm(EVENT_STORM_ATOMS_COUNT);
+ logAtoms(EVENT_STORM_ATOMS_COUNT);
+
+ // Using sleep to allow bypass libstatsocket dumpAtomsLossStats() cooldown timer
+ SystemClock.sleep(100);
+
+ // Try to log atoms into socket successfully to trigger libstatsocket dumpAtomsLossStats()
+ logAtoms(1);
}
- private void performAtomStorm(int iterations) {
+ private void logAtoms(int iterations) {
// single atom logging takes ~2us excluding JNI interactions
for (int i = 0; i < iterations; i++) {
StatsLog.logStart(i);
diff --git a/tests/src/android/cts/statsd/metadata/MetadataTests.java b/tests/src/android/cts/statsd/metadata/MetadataTests.java
index f912e81..4b6433e 100644
--- a/tests/src/android/cts/statsd/metadata/MetadataTests.java
+++ b/tests/src/android/cts/statsd/metadata/MetadataTests.java
@@ -137,6 +137,20 @@
runDeviceTests(
DEVICE_SIDE_TEST_PACKAGE, ".StatsdStressLogging", "testLogAtomsBackToBack");
+ // Delay to allow statsd socket recover after overflow
+ Thread.sleep(500);
+
+ // There is some un-deterministic component in AtomLossStats propagation:
+ // - the dumpAtomsLossStats() from the libstatssocket happens ONLY after the
+ // next successful atom write to socket.
+ // - to avoid socket flood there is also cooldown timer incorporated. If no new atoms -
+ // loss info will not be propagated, which is intention by design.
+ // Log atoms into socket successfully to trigger libstatsocket dumpAtomsLossStats()
+ doAppBreadcrumbReportedStart(6);
+
+ // Delay to allow libstatssocket loss info to be propagated to statsdstats
+ Thread.sleep(1000);
+
StatsdStatsReport report = getStatsdStatsReport();
assertThat(report).isNotNull();
boolean detectedLossEventForAppBreadcrumbAtom = false;
@@ -168,7 +182,6 @@
}
}
}
-
assertThat(detectedLossEventForAppBreadcrumbAtomViaSocketLossStats).isTrue();
}
}