Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java +7 −2 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.Dumpable; import com.android.systemui.Flags; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; Loading Loading @@ -119,6 +120,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; Loading Loading @@ -161,7 +163,8 @@ public class NotifCollection implements Dumpable, PipelineDumpable { private final NotificationDismissibilityProvider mDismissibilityProvider; private final BundleInteractionLogger mBundleLogger; private final Map<String, NotificationEntry> mNotificationSet = new ArrayMap<>(); private final Map<String, NotificationEntry> mNotificationSet = Flags.doNotUseRunBlocking() ? new ConcurrentHashMap<>() : new ArrayMap<>(); private final Collection<NotificationEntry> mReadOnlyNotificationSet = Collections.unmodifiableCollection(mNotificationSet.values()); private final HashMap<String, FutureDismissal> mFutureDismissals = new HashMap<>(); Loading Loading @@ -238,7 +241,9 @@ public class NotifCollection implements Dumpable, PipelineDumpable { /** @see NotifPipeline#getAllNotifs() */ Collection<NotificationEntry> getAllNotifs() { if (!Flags.doNotUseRunBlocking()) { Assert.isMainThread(); } return mReadOnlyNotificationSet; } Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationMemoryLogger.kt +9 −4 Original line number Diff line number Diff line Loading @@ -28,11 +28,12 @@ import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.shared.system.SysUiStatsLog import com.android.systemui.statusbar.notification.collection.NotifPipeline import com.android.systemui.Flags.doNotUseRunBlocking import kotlinx.coroutines.CoroutineDispatcher import java.lang.Exception import java.util.concurrent.Executor import javax.inject.Inject import kotlin.math.roundToInt import kotlinx.coroutines.CoroutineDispatcher /** Periodically logs current state of notification memory consumption. */ @SysUISingleton Loading Loading @@ -91,7 +92,7 @@ constructor( try { // Notifications can only be retrieved on the main thread, so switch to that thread. val notifications = getAllNotificationsOnMainThread() val notifications = getAllNotifications() val notificationMemoryUse = NotificationMemoryMeter.notificationMemoryUse(notifications) .sortedWith( Loading Loading @@ -144,11 +145,15 @@ constructor( return StatsManager.PULL_SUCCESS } private fun getAllNotificationsOnMainThread() = private fun getAllNotifications() = if (doNotUseRunBlocking()) { traceSection("NML#getNotifications") { notificationPipeline.allNotifs.toList() } } else { runBlocking(context = mainDispatcher) { traceSection("NML#getNotifications") { notificationPipeline.allNotifs.toList() } } } } /** Aggregates memory usage data by package and style, returning sums. */ @VisibleForTesting Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationMemoryLoggerTest.kt +21 −4 Original line number Diff line number Diff line Loading @@ -20,10 +20,12 @@ import android.app.Notification import android.app.StatsManager import android.graphics.Bitmap import android.graphics.drawable.Icon import android.platform.test.flag.junit.FlagsParameterization import android.platform.test.flag.junit.FlagsParameterization.allCombinationsOf import android.stats.sysui.NotificationEnums import android.util.StatsEvent import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.Flags.FLAG_DO_NOT_USE_RUN_BLOCKING import com.android.systemui.SysuiTestCase import com.android.systemui.log.assertLogsWtf import com.android.systemui.shared.system.SysUiStatsLog Loading @@ -35,7 +37,6 @@ import com.android.systemui.util.mockito.whenever import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Expect import com.google.common.truth.Truth.assertThat import java.lang.RuntimeException import kotlinx.coroutines.Dispatchers import org.junit.Before import org.junit.Rule Loading @@ -44,10 +45,13 @@ import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameters @SmallTest @RunWith(AndroidJUnit4::class) class NotificationMemoryLoggerTest : SysuiTestCase() { @RunWith(ParameterizedAndroidJunit4::class) class NotificationMemoryLoggerTest(flags: FlagsParameterization) : SysuiTestCase() { @Rule @JvmField val expect = Expect.create() Loading @@ -56,6 +60,19 @@ class NotificationMemoryLoggerTest : SysuiTestCase() { @Mock private lateinit var statsManager: StatsManager companion object { @JvmStatic @Parameters(name = "{0}") fun getParams(): List<FlagsParameterization> { return allCombinationsOf(FLAG_DO_NOT_USE_RUN_BLOCKING) } } init { mSetFlagsRule.setFlagsParameterization(flags) } @Before fun setUp() { MockitoAnnotations.initMocks(this) Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java +7 −2 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.Dumpable; import com.android.systemui.Flags; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; Loading Loading @@ -119,6 +120,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; Loading Loading @@ -161,7 +163,8 @@ public class NotifCollection implements Dumpable, PipelineDumpable { private final NotificationDismissibilityProvider mDismissibilityProvider; private final BundleInteractionLogger mBundleLogger; private final Map<String, NotificationEntry> mNotificationSet = new ArrayMap<>(); private final Map<String, NotificationEntry> mNotificationSet = Flags.doNotUseRunBlocking() ? new ConcurrentHashMap<>() : new ArrayMap<>(); private final Collection<NotificationEntry> mReadOnlyNotificationSet = Collections.unmodifiableCollection(mNotificationSet.values()); private final HashMap<String, FutureDismissal> mFutureDismissals = new HashMap<>(); Loading Loading @@ -238,7 +241,9 @@ public class NotifCollection implements Dumpable, PipelineDumpable { /** @see NotifPipeline#getAllNotifs() */ Collection<NotificationEntry> getAllNotifs() { if (!Flags.doNotUseRunBlocking()) { Assert.isMainThread(); } return mReadOnlyNotificationSet; } Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationMemoryLogger.kt +9 −4 Original line number Diff line number Diff line Loading @@ -28,11 +28,12 @@ import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.shared.system.SysUiStatsLog import com.android.systemui.statusbar.notification.collection.NotifPipeline import com.android.systemui.Flags.doNotUseRunBlocking import kotlinx.coroutines.CoroutineDispatcher import java.lang.Exception import java.util.concurrent.Executor import javax.inject.Inject import kotlin.math.roundToInt import kotlinx.coroutines.CoroutineDispatcher /** Periodically logs current state of notification memory consumption. */ @SysUISingleton Loading Loading @@ -91,7 +92,7 @@ constructor( try { // Notifications can only be retrieved on the main thread, so switch to that thread. val notifications = getAllNotificationsOnMainThread() val notifications = getAllNotifications() val notificationMemoryUse = NotificationMemoryMeter.notificationMemoryUse(notifications) .sortedWith( Loading Loading @@ -144,11 +145,15 @@ constructor( return StatsManager.PULL_SUCCESS } private fun getAllNotificationsOnMainThread() = private fun getAllNotifications() = if (doNotUseRunBlocking()) { traceSection("NML#getNotifications") { notificationPipeline.allNotifs.toList() } } else { runBlocking(context = mainDispatcher) { traceSection("NML#getNotifications") { notificationPipeline.allNotifs.toList() } } } } /** Aggregates memory usage data by package and style, returning sums. */ @VisibleForTesting Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationMemoryLoggerTest.kt +21 −4 Original line number Diff line number Diff line Loading @@ -20,10 +20,12 @@ import android.app.Notification import android.app.StatsManager import android.graphics.Bitmap import android.graphics.drawable.Icon import android.platform.test.flag.junit.FlagsParameterization import android.platform.test.flag.junit.FlagsParameterization.allCombinationsOf import android.stats.sysui.NotificationEnums import android.util.StatsEvent import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.Flags.FLAG_DO_NOT_USE_RUN_BLOCKING import com.android.systemui.SysuiTestCase import com.android.systemui.log.assertLogsWtf import com.android.systemui.shared.system.SysUiStatsLog Loading @@ -35,7 +37,6 @@ import com.android.systemui.util.mockito.whenever import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Expect import com.google.common.truth.Truth.assertThat import java.lang.RuntimeException import kotlinx.coroutines.Dispatchers import org.junit.Before import org.junit.Rule Loading @@ -44,10 +45,13 @@ import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameters @SmallTest @RunWith(AndroidJUnit4::class) class NotificationMemoryLoggerTest : SysuiTestCase() { @RunWith(ParameterizedAndroidJunit4::class) class NotificationMemoryLoggerTest(flags: FlagsParameterization) : SysuiTestCase() { @Rule @JvmField val expect = Expect.create() Loading @@ -56,6 +60,19 @@ class NotificationMemoryLoggerTest : SysuiTestCase() { @Mock private lateinit var statsManager: StatsManager companion object { @JvmStatic @Parameters(name = "{0}") fun getParams(): List<FlagsParameterization> { return allCombinationsOf(FLAG_DO_NOT_USE_RUN_BLOCKING) } } init { mSetFlagsRule.setFlagsParameterization(flags) } @Before fun setUp() { MockitoAnnotations.initMocks(this) Loading