Speed up dev options
- Put memory updates on background thread
- Prevent update state from being called twice
Bug: 69000975
Test: Manual
Change-Id: I186bc25f6b74a5098b1737891efee3a6855dc996
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index 669f4fb..9857280 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -23,7 +23,7 @@
android:key="memory"
android:icon="@drawable/ic_settings_memory"
android:title="@string/memory_settings_title"
- android:summary="@string/summary_empty"
+ android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.applications.ProcessStatsSummary" />
<com.android.settings.BugreportPreference
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index 6796c26..3551d23 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -87,9 +87,11 @@
// Set ComparisonCallback so we get better animation when list changes.
getPreferenceManager().setPreferenceComparisonCallback(
new PreferenceManager.SimplePreferenceComparisonCallback());
- // Upon rotation configuration change we need to update preference states before any
- // editing dialog is recreated (that would happen before onResume is called).
- updatePreferenceStates();
+ if (icicle != null) {
+ // Upon rotation configuration change we need to update preference states before any
+ // editing dialog is recreated (that would happen before onResume is called).
+ updatePreferenceStates();
+ }
}
@Override
diff --git a/src/com/android/settings/development/MemoryUsagePreferenceController.java b/src/com/android/settings/development/MemoryUsagePreferenceController.java
index 1b589fd..9471b90 100644
--- a/src/com/android/settings/development/MemoryUsagePreferenceController.java
+++ b/src/com/android/settings/development/MemoryUsagePreferenceController.java
@@ -27,6 +27,7 @@
import com.android.settings.applications.ProcessStatsBase;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+import com.android.settingslib.utils.ThreadUtils;
public class MemoryUsagePreferenceController extends DeveloperOptionsPreferenceController implements
PreferenceControllerMixin {
@@ -56,14 +57,19 @@
@Override
public void updateState(Preference preference) {
- mProcStatsData.refreshStats(true);
- final ProcStatsData.MemInfo memInfo = mProcStatsData.getMemInfo();
- final String usedResult = Formatter.formatShortFileSize(mContext,
- (long) memInfo.realUsedRam);
- final String totalResult = Formatter.formatShortFileSize(mContext,
- (long) memInfo.realTotalRam);
- mPreference.setSummary(mContext.getString(R.string.memory_summary,
- usedResult, totalResult));
+ // This is posted on the background thread to speed up fragment launch time for dev options
+ // mProcStasData.refreshStats(true) takes ~20ms to run.
+ ThreadUtils.postOnBackgroundThread(() -> {
+ mProcStatsData.refreshStats(true);
+ final ProcStatsData.MemInfo memInfo = mProcStatsData.getMemInfo();
+ final String usedResult = Formatter.formatShortFileSize(mContext,
+ (long) memInfo.realUsedRam);
+ final String totalResult = Formatter.formatShortFileSize(mContext,
+ (long) memInfo.realTotalRam);
+ ThreadUtils.postOnMainThread(
+ () -> mPreference.setSummary(mContext.getString(R.string.memory_summary,
+ usedResult, totalResult)));
+ });
}
@VisibleForTesting
diff --git a/tests/robotests/src/com/android/settings/development/MemoryUsagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/MemoryUsagePreferenceControllerTest.java
index a949eef..d68f276 100644
--- a/tests/robotests/src/com/android/settings/development/MemoryUsagePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/MemoryUsagePreferenceControllerTest.java
@@ -30,6 +30,7 @@
import com.android.settings.TestConfig;
import com.android.settings.applications.ProcStatsData;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowThreadUtils;
import org.junit.Before;
import org.junit.Test;
@@ -68,6 +69,9 @@
}
@Test
+ @Config(shadows = {
+ ShadowThreadUtils.class
+ })
public void updateState_shouldUpdatePreferenceSummary() {
mController.updateState(mPreference);