summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHans Boehm <hboehm@google.com>2015-05-27 20:48:24 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-05-27 20:48:24 +0000
commit4af8dbed0dd2d1df47da6fc98a43ca34d6f7b351 (patch)
tree004ce90a02d352ec9bca869d3eaddc5763de3b23 /src
parentfa07077bb9acfc5edd5ae2cfabc18b952da3597f (diff)
parente4579121c8a9c9df22a35944ad5066d38dc22b37 (diff)
downloadandroid_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.java2
-rw-r--r--src/com/android/calculator2/Evaluator.java23
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