diff options
author | Yorke Lee <yorkelee@google.com> | 2014-11-14 10:51:30 -0800 |
---|---|---|
committer | Yorke Lee <yorkelee@google.com> | 2014-11-14 11:20:06 -0800 |
commit | ede886737944f0237993d4b55d579fe9cfb9ba28 (patch) | |
tree | daa3432517ef6d73b40095057777b78285954e1d /src/com/android/dialer/dialpad | |
parent | d2575cb1f3daa4145478b4778318f67f9d0ccb27 (diff) |
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
Diffstat (limited to 'src/com/android/dialer/dialpad')
-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(); |