diff options
author | Yorke Lee <yorkelee@google.com> | 2014-11-14 10:51:30 -0800 |
---|---|---|
committer | The Android Automerger <android-build@google.com> | 2014-11-17 14:04:16 -0800 |
commit | 8debdd737346c4c1a7d9bdde536b8247ce39e751 (patch) | |
tree | 730b6d85a8efdc6d53f1f30f2d5aa52e16b6f1d7 | |
parent | 5f1a1d1d7babe445800bdae2e65a84f59d53e14a (diff) | |
download | android_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.java | 49 |
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(); |