3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-02-16 04:05:50 +00:00

Perf hack for Android: cache the result of Transaction.getValue(). This won't help once we split payments from transactions.

This commit is contained in:
Mike Hearn 2015-03-13 18:15:56 -07:00
parent 8c414fb172
commit ece8d9a347
2 changed files with 19 additions and 3 deletions

View File

@ -376,11 +376,23 @@ public class Transaction extends ChildMessage implements Serializable {
return v; return v;
} }
@Nullable private Coin cachedValue;
@Nullable private TransactionBag cachedForBag;
/** /**
* Returns the difference of {@link Transaction#getValueSentToMe(TransactionBag)} and {@link Transaction#getValueSentFromMe(TransactionBag)}. * Returns the difference of {@link Transaction#getValueSentToMe(TransactionBag)} and {@link Transaction#getValueSentFromMe(TransactionBag)}.
*/ */
public Coin getValue(TransactionBag wallet) throws ScriptException { public Coin getValue(TransactionBag wallet) throws ScriptException {
return getValueSentToMe(wallet).subtract(getValueSentFromMe(wallet)); // FIXME: TEMP PERF HACK FOR ANDROID - this crap can go away once we have a real payments API.
boolean isAndroid = Utils.isAndroidRuntime();
if (isAndroid && cachedValue != null && cachedForBag == wallet)
return cachedValue;
Coin result = getValueSentToMe(wallet).subtract(getValueSentFromMe(wallet));
if (isAndroid) {
cachedValue = result;
cachedForBag = wallet;
}
return result;
} }
/** /**

View File

@ -575,9 +575,13 @@ public class Utils {
} }
} }
private static int isAndroid = -1;
public static boolean isAndroidRuntime() { public static boolean isAndroidRuntime() {
final String runtime = System.getProperty("java.runtime.name"); if (isAndroid == -1) {
return runtime != null && runtime.equals("Android Runtime"); final String runtime = System.getProperty("java.runtime.name");
isAndroid = (runtime != null && runtime.equals("Android Runtime")) ? 1 : 0;
}
return isAndroid == 1;
} }
private static class Pair implements Comparable<Pair> { private static class Pair implements Comparable<Pair> {