diff options
author | Hans Boehm <hboehm@google.com> | 2015-05-27 20:48:24 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-05-27 20:48:24 +0000 |
commit | 4af8dbed0dd2d1df47da6fc98a43ca34d6f7b351 (patch) | |
tree | 004ce90a02d352ec9bca869d3eaddc5763de3b23 /src | |
parent | fa07077bb9acfc5edd5ae2cfabc18b952da3597f (diff) | |
parent | e4579121c8a9c9df22a35944ad5066d38dc22b37 (diff) | |
download | android_packages_apps_ExactCalculator-4af8dbed0dd2d1df47da6fc98a43ca34d6f7b351.tar.gz android_packages_apps_ExactCalculator-4af8dbed0dd2d1df47da6fc98a43ca34d6f7b351.tar.bz2 android_packages_apps_ExactCalculator-4af8dbed0dd2d1df47da6fc98a43ca34d6f7b351.zip |
Merge "Improve evaluate-ahead heuristic" into mnc-dev
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/calculator2/CalculatorExpr.java | 2 | ||||
-rw-r--r-- | src/com/android/calculator2/Evaluator.java | 23 |
2 files changed, 19 insertions, 6 deletions
diff --git a/src/com/android/calculator2/CalculatorExpr.java b/src/com/android/calculator2/CalculatorExpr.java index 4a714d8..05afb49 100644 --- a/src/com/android/calculator2/CalculatorExpr.java +++ b/src/com/android/calculator2/CalculatorExpr.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 The Android Open Source Project + * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/com/android/calculator2/Evaluator.java b/src/com/android/calculator2/Evaluator.java index 8764a99..9e0c7da 100644 --- a/src/com/android/calculator2/Evaluator.java +++ b/src/com/android/calculator2/Evaluator.java @@ -143,9 +143,16 @@ class Evaluator { // We do use these extra digits to display while we are // computing the correct answer. Thus they may be // temporarily visible. - private static final int PRECOMPUTE_DIGITS = 20; - // Extra digits computed to minimize - // reevaluations during scrolling. + private static final int EXTRA_DIVISOR = 5; + // We add the length of the previous result divided by + // EXTRA_DIVISOR to try to recover recompute latency when + // scrolling through a long result. + private static final int PRECOMPUTE_DIGITS = 30; + private static final int PRECOMPUTE_DIVISOR = 5; + // When we have to reevaluate, we compute an extra + // PRECOMPUTE_DIGITS + // + <current_result_length>/PRECOMPUTE_DIVISOR digits. + // The last term is dropped if prec < 0. // We cache the result as a string to accelerate scrolling. // The cache is filled in by the UI thread, but this may @@ -460,6 +467,9 @@ class Evaluator { } mCurrentReevaluator = new AsyncReevaluator(); mCacheDigsReq = prec + PRECOMPUTE_DIGITS; + if (mCache != null) { + mCacheDigsReq += mCacheDigsReq / PRECOMPUTE_DIVISOR; + } mCurrentReevaluator.execute(mCacheDigsReq); } @@ -620,12 +630,15 @@ class Evaluator { int digs = prec[0]; mLastDigs = digs; // Make sure we eventually get a complete answer - ensureCachePrec(digs + EXTRA_DIGITS); if (mCache == null) { - // Nothing to do now; seems to happen on rare occasion + ensureCachePrec(digs + EXTRA_DIGITS); + // Nothing else to do now; seems to happen on rare occasion // with weird user input timing; // Will repair itself in a jiffy. return getPadding(1); + } else { + ensureCachePrec(digs + EXTRA_DIGITS + + mCache.length() / EXTRA_DIVISOR); } // Compute an appropriate substring of mCache. // We avoid returning a huge string to minimize string |