summaryrefslogtreecommitdiffstats
path: root/intl/benchmarks/perftest_locale.js
diff options
context:
space:
mode:
Diffstat (limited to 'intl/benchmarks/perftest_locale.js')
-rw-r--r--intl/benchmarks/perftest_locale.js162
1 files changed, 162 insertions, 0 deletions
diff --git a/intl/benchmarks/perftest_locale.js b/intl/benchmarks/perftest_locale.js
new file mode 100644
index 0000000000..aac624127c
--- /dev/null
+++ b/intl/benchmarks/perftest_locale.js
@@ -0,0 +1,162 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+// @ts-check
+
+var perfMetadata = {
+ owner: "Internationalization Team",
+ name: "Intl.Locale",
+ description: "Test the speed of the Intl.Locale implementation.",
+ options: {
+ default: {
+ perfherder: true,
+ perfherder_metrics: [
+ {
+ name: "Intl.Locale constructor iterations",
+ unit: "iterations",
+ },
+ { name: "Intl.Locale constructor accumulatedTime", unit: "ms" },
+ { name: "Intl.Locale constructor perCallTime", unit: "ms" },
+
+ {
+ name: "Intl.Locale.prototype accessors iterations",
+ unit: "iterations",
+ },
+ {
+ name: "Intl.Locale.prototype accessors accumulatedTime",
+ unit: "ms",
+ },
+ {
+ name: "Intl.Locale.prototype accessors perCallTime",
+ unit: "ms",
+ },
+
+ {
+ name: "Intl.Locale.maximize operation iterations",
+ unit: "iterations",
+ },
+ {
+ name: "Intl.Locale.maximize operation accumulatedTime",
+ unit: "ms",
+ },
+ {
+ name: "Intl.Locale.maximize operation perCallTime",
+ unit: "ms",
+ },
+ ],
+ verbose: true,
+ },
+ },
+ tags: ["intl", "ecma402"],
+};
+
+const maximizeLocales = [
+ "en-US",
+ "en-GB",
+ "es-AR",
+ "it",
+ "zh-Hans-CN",
+ "de-AT",
+ "pl",
+ "fr-FR",
+ "de-AT",
+ "sr-Cyrl-SR",
+ "nb-NO",
+ "fr-FR",
+ "mk",
+ "uk",
+ "und-PL",
+ "und-Latn-AM",
+ "ug-Cyrl",
+ "sr-ME",
+ "mn-Mong",
+ "lif-Limb",
+ "gan",
+ "zh-Hant",
+ "yue-Hans",
+ "unr",
+ "unr-Deva",
+ "und-Thai-CN",
+ "ug-Cyrl",
+ "en-Latn-DE",
+ "pl-FR",
+ "de-CH",
+ "tuq",
+ "sr-ME",
+ "ng",
+ "klx",
+ "kk-Arab",
+ "en-Cyrl",
+ "und-Cyrl-UK",
+ "und-Arab",
+ "und-Arab-FO",
+];
+
+add_task(function measure_locale() {
+ const measureConstructor = measureIterations("Intl.Locale constructor");
+ const measureAccessors = measureIterations("Intl.Locale.prototype accessors");
+ const measureMaximize = measureIterations("Intl.Locale.maximize operation");
+
+ // Split each step of the benchmark into separate JS functions so that performance
+ // profiles are easy to analyze.
+
+ function benchmarkDateTimeFormatConstructor() {
+ for (let i = 0; i < 1000; i++) {
+ // Create a random configuration powered by a pseudo-random number generator. This
+ // way the configurations will be the same between 2 different runs.
+ const localeString = pickRepresentativeLocale();
+
+ // Measure the constructor.
+ measureConstructor.start();
+ const locale = new Intl.Locale(localeString);
+ measureConstructor.stop();
+
+ benchmarkAccessors(locale);
+ }
+ }
+
+ const accessors = [
+ "basename",
+ "calendar",
+ "caseFirst",
+ "collation",
+ "hourCycle",
+ "numeric",
+ "numberingSystem",
+ "language",
+ "script",
+ "region",
+ ];
+
+ function benchmarkAccessors(locale) {
+ for (let j = 0; j < 100; j++) {
+ measureAccessors.start();
+ for (let accessor in accessors) {
+ locale[accessor];
+ }
+ measureAccessors.stop();
+ }
+ }
+
+ function benchmarkMaximize() {
+ let locales = [];
+ for (let localeString of maximizeLocales) {
+ locales.push(new Intl.Locale(localeString));
+ }
+ for (let j = 0; j < 10000; j++) {
+ measureMaximize.start();
+ for (let locale of locales) {
+ locale.maximize();
+ }
+ measureMaximize.stop();
+ }
+ }
+
+ benchmarkDateTimeFormatConstructor();
+ benchmarkMaximize();
+ measureConstructor.reportMetrics();
+ measureAccessors.reportMetrics();
+ measureMaximize.reportMetrics();
+
+ ok(true);
+});