summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Hansson <hansson@google.com>2018-02-14 13:50:56 +0000
committerAnton Hansson <hansson@google.com>2018-02-14 16:22:11 +0000
commitf055b94e2bf6ea4696b6bac932f9ae4f542e91a8 (patch)
treece00fc12655b7af13bf983be33db8fbca76fb8a4
parent526cd9137d3ac3b03f8045442ea39d970bda7e88 (diff)
Remove cachedLocaleData from DecimalFormat.
This cache was removed upstream in http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/1d7a6adf499f, and doesn't appear to be making a meaningful difference to performance. Benchmark results (product: hikey): Before: Experiment {instrument=runtime, benchmarkMethod=time_instantiation, vm=default, parameters={}} Results: runtime(ns): min=198214.70, 1st qu.=198214.70, median=198214.70, mean=198214.70, 3rd qu.=198214.70, max=198214.70 After: Experiment {instrument=runtime, benchmarkMethod=time_instantiation, vm=default, parameters={}} Results: runtime(ns): min=197940.89, 1st qu.=197940.89, median=197940.89, mean=197940.89, 3rd qu.=197940.89, max=197940.89 Bug: 31930415 Test: m -j droid & ran benchmark Change-Id: I83deaead58b7f79d2016fc68add2ec8b861414c7
-rw-r--r--benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java6
-rw-r--r--ojluni/src/main/java/java/text/DecimalFormat.java27
2 files changed, 17 insertions, 16 deletions
diff --git a/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java b/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java
index 0c4aa77874..2436379094 100644
--- a/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java
+++ b/benchmarks/src/benchmarks/regression/DecimalFormatBenchmark.java
@@ -153,4 +153,10 @@ public class DecimalFormatBenchmark {
public void time_formatToCharacterIterator10e1000(int reps) {
formatToCharacterIterator(BD10E1000, reps);
}
+
+ public void time_instantiation(int reps) {
+ for (int i = 0; i < reps; i++) {
+ new DecimalFormat();
+ }
+ }
}
diff --git a/ojluni/src/main/java/java/text/DecimalFormat.java b/ojluni/src/main/java/java/text/DecimalFormat.java
index ff9d90f055..2cb1473407 100644
--- a/ojluni/src/main/java/java/text/DecimalFormat.java
+++ b/ojluni/src/main/java/java/text/DecimalFormat.java
@@ -409,19 +409,21 @@ public class DecimalFormat extends NumberFormat {
public DecimalFormat() {
// Get the pattern for the default locale.
Locale def = Locale.getDefault(Locale.Category.FORMAT);
- // BEGIN Android-changed: Use ICU LocaleData.
- // try to get the pattern from the cache
- String pattern = cachedLocaleData.get(def);
- if (pattern == null) { /* cache miss */
- // Get the pattern for the default locale.
- pattern = LocaleData.get(def).numberPattern;
- /* update cache */
- cachedLocaleData.putIfAbsent(def, pattern);
+ // BEGIN Android-changed: Use ICU LocaleData. Remove SPI LocaleProviderAdapter.
+ /*
+ LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(NumberFormatProvider.class, def);
+ if (!(adapter instanceof ResourceBundleBasedAdapter)) {
+ adapter = LocaleProviderAdapter.getResourceBundleBased();
}
- // END Android-changed: Use ICU LocaleData.
+ String[] all = adapter.getLocaleResources(def).getNumberPatterns();
+ */
+ String pattern = LocaleData.get(def).numberPattern;
+ // END Android-changed: Use ICU LocaleData. Remove SPI LocaleProviderAdapter.
+
// Always applyPattern after the symbols are set
this.symbols = DecimalFormatSymbols.getInstance(def);
// Android-changed: use initPattern() instead of removed applyPattern(String, boolean).
+ // applyPattern(all[0], false);
initPattern(pattern);
}
@@ -1904,11 +1906,4 @@ public class DecimalFormat extends NumberFormat {
// Proclaim JDK 1.1 serial compatibility.
static final long serialVersionUID = 864413376551465018L;
-
- // Android-added: cachedLocaleData for caching default number format pattern per locale.
- /**
- * Cache to hold the NumberPattern of a Locale.
- */
- private static final ConcurrentMap<Locale, String> cachedLocaleData
- = new ConcurrentHashMap<>(3);
}