Bug 1833854 - Part 2: Common up GCSchedulingTunables invariant checks r=sfink
[gecko.git] / intl / benchmarks / perftest_locale.js
blobaac624127cf6ad0bbca4096e3dc45a06ed90ea48
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 // @ts-check
6 var perfMetadata = {
7   owner: "Internationalization Team",
8   name: "Intl.Locale",
9   description: "Test the speed of the Intl.Locale implementation.",
10   options: {
11     default: {
12       perfherder: true,
13       perfherder_metrics: [
14         {
15           name: "Intl.Locale constructor iterations",
16           unit: "iterations",
17         },
18         { name: "Intl.Locale constructor accumulatedTime", unit: "ms" },
19         { name: "Intl.Locale constructor perCallTime", unit: "ms" },
21         {
22           name: "Intl.Locale.prototype accessors iterations",
23           unit: "iterations",
24         },
25         {
26           name: "Intl.Locale.prototype accessors accumulatedTime",
27           unit: "ms",
28         },
29         {
30           name: "Intl.Locale.prototype accessors perCallTime",
31           unit: "ms",
32         },
34         {
35           name: "Intl.Locale.maximize operation iterations",
36           unit: "iterations",
37         },
38         {
39           name: "Intl.Locale.maximize operation accumulatedTime",
40           unit: "ms",
41         },
42         {
43           name: "Intl.Locale.maximize operation perCallTime",
44           unit: "ms",
45         },
46       ],
47       verbose: true,
48     },
49   },
50   tags: ["intl", "ecma402"],
53 const maximizeLocales = [
54   "en-US",
55   "en-GB",
56   "es-AR",
57   "it",
58   "zh-Hans-CN",
59   "de-AT",
60   "pl",
61   "fr-FR",
62   "de-AT",
63   "sr-Cyrl-SR",
64   "nb-NO",
65   "fr-FR",
66   "mk",
67   "uk",
68   "und-PL",
69   "und-Latn-AM",
70   "ug-Cyrl",
71   "sr-ME",
72   "mn-Mong",
73   "lif-Limb",
74   "gan",
75   "zh-Hant",
76   "yue-Hans",
77   "unr",
78   "unr-Deva",
79   "und-Thai-CN",
80   "ug-Cyrl",
81   "en-Latn-DE",
82   "pl-FR",
83   "de-CH",
84   "tuq",
85   "sr-ME",
86   "ng",
87   "klx",
88   "kk-Arab",
89   "en-Cyrl",
90   "und-Cyrl-UK",
91   "und-Arab",
92   "und-Arab-FO",
95 add_task(function measure_locale() {
96   const measureConstructor = measureIterations("Intl.Locale constructor");
97   const measureAccessors = measureIterations("Intl.Locale.prototype accessors");
98   const measureMaximize = measureIterations("Intl.Locale.maximize operation");
100   // Split each step of the benchmark into separate JS functions so that performance
101   // profiles are easy to analyze.
103   function benchmarkDateTimeFormatConstructor() {
104     for (let i = 0; i < 1000; i++) {
105       // Create a random configuration powered by a pseudo-random number generator. This
106       // way the configurations will be the same between 2 different runs.
107       const localeString = pickRepresentativeLocale();
109       // Measure the constructor.
110       measureConstructor.start();
111       const locale = new Intl.Locale(localeString);
112       measureConstructor.stop();
114       benchmarkAccessors(locale);
115     }
116   }
118   const accessors = [
119     "basename",
120     "calendar",
121     "caseFirst",
122     "collation",
123     "hourCycle",
124     "numeric",
125     "numberingSystem",
126     "language",
127     "script",
128     "region",
129   ];
131   function benchmarkAccessors(locale) {
132     for (let j = 0; j < 100; j++) {
133       measureAccessors.start();
134       for (let accessor in accessors) {
135         locale[accessor];
136       }
137       measureAccessors.stop();
138     }
139   }
141   function benchmarkMaximize() {
142     let locales = [];
143     for (let localeString of maximizeLocales) {
144       locales.push(new Intl.Locale(localeString));
145     }
146     for (let j = 0; j < 10000; j++) {
147       measureMaximize.start();
148       for (let locale of locales) {
149         locale.maximize();
150       }
151       measureMaximize.stop();
152     }
153   }
155   benchmarkDateTimeFormatConstructor();
156   benchmarkMaximize();
157   measureConstructor.reportMetrics();
158   measureAccessors.reportMetrics();
159   measureMaximize.reportMetrics();
161   ok(true);