summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2014-11-14 10:51:30 -0800
committerThe Android Automerger <android-build@google.com>2014-11-17 14:04:16 -0800
commit8debdd737346c4c1a7d9bdde536b8247ce39e751 (patch)
tree730b6d85a8efdc6d53f1f30f2d5aa52e16b6f1d7
parent5f1a1d1d7babe445800bdae2e65a84f59d53e14a (diff)
downloadandroid_packages_apps_Dialer-8debdd737346c4c1a7d9bdde536b8247ce39e751.tar.gz
android_packages_apps_Dialer-8debdd737346c4c1a7d9bdde536b8247ce39e751.tar.bz2
android_packages_apps_Dialer-8debdd737346c4c1a7d9bdde536b8247ce39e751.zip
Move ToneGenerator recreation/release to onStart/onStop
There is no reason to do the costly ToneGenerator initialization inside onResume, which gets called during the Dialer -> InCallUI transition. Move it to onStart/onStop so it only happens when Dialer is actually in the background. Measurement of time taken for InCallActivity start -> onResumed, 10 runs Before: Average 541.9ms SD: 152.4ms After: Average 350.5ms SD: 81.1ms Bug: 18373617 Change-Id: I192e2bcc9fd4b7d423d804f333d8d32bff3f58c1
-rw-r--r--src/com/android/dialer/dialpad/DialpadFragment.java49
1 files changed, 29 insertions, 20 deletions
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 6daa89cd1..321207682 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -565,6 +565,28 @@ public class DialpadFragment extends Fragment
}
@Override
+ public void onStart() {
+ super.onStart();
+ // if the mToneGenerator creation fails, just continue without it. It is
+ // a local audio signal, and is not as important as the dtmf tone itself.
+ final long start = System.currentTimeMillis();
+ synchronized (mToneGeneratorLock) {
+ if (mToneGenerator == null) {
+ try {
+ mToneGenerator = new ToneGenerator(DIAL_TONE_STREAM_TYPE, TONE_RELATIVE_VOLUME);
+ } catch (RuntimeException e) {
+ Log.w(TAG, "Exception caught while creating local tone generator: " + e);
+ mToneGenerator = null;
+ }
+ }
+ }
+ final long total = System.currentTimeMillis() - start;
+ if (total > 50) {
+ Log.i(TAG, "Time for ToneGenerator creation: " + total);
+ }
+ };
+
+ @Override
public void onResume() {
super.onResume();
@@ -592,20 +614,6 @@ public class DialpadFragment extends Fragment
stopWatch.lap("hptc");
- // if the mToneGenerator creation fails, just continue without it. It is
- // a local audio signal, and is not as important as the dtmf tone itself.
- synchronized (mToneGeneratorLock) {
- if (mToneGenerator == null) {
- try {
- mToneGenerator = new ToneGenerator(DIAL_TONE_STREAM_TYPE, TONE_RELATIVE_VOLUME);
- } catch (RuntimeException e) {
- Log.w(TAG, "Exception caught while creating local tone generator: " + e);
- mToneGenerator = null;
- }
- }
- }
- stopWatch.lap("tg");
-
mPressedDialpadKeys.clear();
configureScreenFromIntent(getActivity());
@@ -657,12 +665,6 @@ public class DialpadFragment extends Fragment
stopTone();
mPressedDialpadKeys.clear();
- synchronized (mToneGeneratorLock) {
- if (mToneGenerator != null) {
- mToneGenerator.release();
- mToneGenerator = null;
- }
- }
// TODO: I wonder if we should not check if the AsyncTask that
// lookup the last dialed number has completed.
mLastNumberDialed = EMPTY_NUMBER; // Since we are going to query again, free stale number.
@@ -674,6 +676,13 @@ public class DialpadFragment extends Fragment
public void onStop() {
super.onStop();
+ synchronized (mToneGeneratorLock) {
+ if (mToneGenerator != null) {
+ mToneGenerator.release();
+ mToneGenerator = null;
+ }
+ }
+
if (mClearDigitsOnStop) {
mClearDigitsOnStop = false;
clearDialpad();