23 #include "benchmark/benchmark.h"
24 #include "absl/time/internal/cctz/include/cctz/civil_time.h"
25 #include "absl/time/internal/cctz/include/cctz/time_zone.h"
35 while (
state.KeepRunning()) {
44 while (
state.KeepRunning()) {
52 while (
state.KeepRunning()) {
61 kStart + 0, kStart + 1, kStart + 2, kStart + 3,
62 kStart + 4, kStart + 5, kStart + 6,
65 cctz::weekday::monday, cctz::weekday::tuesday, cctz::weekday::wednesday,
66 cctz::weekday::thursday, cctz::weekday::friday, cctz::weekday::saturday,
67 cctz::weekday::sunday,
69 while (
state.KeepRunningBatch(7 * 7)) {
70 for (
const auto from : kDays) {
71 for (
const auto to : kWeekdays) {
82 kStart + 0, kStart + 1, kStart + 2, kStart + 3,
83 kStart + 4, kStart + 5, kStart + 6,
86 cctz::weekday::monday, cctz::weekday::tuesday, cctz::weekday::wednesday,
87 cctz::weekday::thursday, cctz::weekday::friday, cctz::weekday::saturday,
88 cctz::weekday::sunday,
90 while (
state.KeepRunningBatch(7 * 7)) {
91 for (
const auto from : kDays) {
92 for (
const auto to : kWeekdays) {
101 const char RFC3339_sec[] =
"%Y-%m-%d%ET%H:%M:%S%Ez";
108 const char*
const kTimeZoneNames[] = {
"Africa/Abidjan",
110 "Africa/Addis_Ababa",
119 "Africa/Brazzaville",
126 "Africa/Dar_es_Salaam",
133 "Africa/Johannesburg",
155 "Africa/Ouagadougou",
167 "America/Argentina/Buenos_Aires",
168 "America/Argentina/Catamarca",
169 "America/Argentina/ComodRivadavia",
170 "America/Argentina/Cordoba",
171 "America/Argentina/Jujuy",
172 "America/Argentina/La_Rioja",
173 "America/Argentina/Mendoza",
174 "America/Argentina/Rio_Gallegos",
175 "America/Argentina/Salta",
176 "America/Argentina/San_Juan",
177 "America/Argentina/San_Luis",
178 "America/Argentina/Tucuman",
179 "America/Argentina/Ushuaia",
185 "America/Bahia_Banderas",
189 "America/Blanc-Sablon",
193 "America/Buenos_Aires",
194 "America/Cambridge_Bay",
195 "America/Campo_Grande",
203 "America/Coral_Harbour",
205 "America/Costa_Rica",
209 "America/Danmarkshavn",
211 "America/Dawson_Creek",
217 "America/El_Salvador",
219 "America/Fort_Nelson",
220 "America/Fort_Wayne",
225 "America/Grand_Turk",
227 "America/Guadeloupe",
233 "America/Hermosillo",
234 "America/Indiana/Indianapolis",
235 "America/Indiana/Knox",
236 "America/Indiana/Marengo",
237 "America/Indiana/Petersburg",
238 "America/Indiana/Tell_City",
239 "America/Indiana/Vevay",
240 "America/Indiana/Vincennes",
241 "America/Indiana/Winamac",
242 "America/Indianapolis",
248 "America/Kentucky/Louisville",
249 "America/Kentucky/Monticello",
251 "America/Kralendijk",
254 "America/Los_Angeles",
255 "America/Louisville",
256 "America/Lower_Princes",
261 "America/Martinique",
267 "America/Metlakatla",
268 "America/Mexico_City",
272 "America/Montevideo",
274 "America/Montserrat",
280 "America/North_Dakota/Beulah",
281 "America/North_Dakota/Center",
282 "America/North_Dakota/New_Salem",
286 "America/Pangnirtung",
287 "America/Paramaribo",
289 "America/Port-au-Prince",
290 "America/Port_of_Spain",
291 "America/Porto_Acre",
292 "America/Porto_Velho",
293 "America/Puerto_Rico",
294 "America/Punta_Arenas",
295 "America/Rainy_River",
296 "America/Rankin_Inlet",
300 "America/Rio_Branco",
302 "America/Santa_Isabel",
305 "America/Santo_Domingo",
307 "America/Scoresbysund",
310 "America/St_Barthelemy",
315 "America/St_Vincent",
316 "America/Swift_Current",
317 "America/Tegucigalpa",
319 "America/Thunder_Bay",
325 "America/Whitehorse",
328 "America/Yellowknife",
331 "Antarctica/DumontDUrville",
332 "Antarctica/Macquarie",
334 "Antarctica/McMurdo",
336 "Antarctica/Rothera",
337 "Antarctica/South_Pole",
341 "Arctic/Longyearbyen",
420 "Asia/Srednekolymsk",
430 "Asia/Ujung_Pandang",
439 "Asia/Yekaterinburg",
444 "Atlantic/Cape_Verde",
447 "Atlantic/Jan_Mayen",
449 "Atlantic/Reykjavik",
450 "Atlantic/South_Georgia",
451 "Atlantic/St_Helena",
454 "Australia/Adelaide",
455 "Australia/Brisbane",
456 "Australia/Broken_Hill",
457 "Australia/Canberra",
463 "Australia/Lindeman",
464 "Australia/Lord_Howe",
465 "Australia/Melbourne",
469 "Australia/Queensland",
472 "Australia/Tasmania",
473 "Australia/Victoria",
475 "Australia/Yancowinna",
486 "Canada/Newfoundland",
488 "Canada/Saskatchewan",
491 "Chile/EasterIsland",
551 "Europe/Isle_of_Man",
554 "Europe/Kaliningrad",
606 "Indian/Antananarivo",
636 "Pacific/Bougainville",
647 "Pacific/Guadalcanal",
652 "Pacific/Kiritimati",
667 "Pacific/Port_Moresby",
704 std::vector<std::string> AllTimeZoneNames() {
705 std::vector<std::string>
names;
706 for (
const char*
const* namep = kTimeZoneNames; *namep !=
nullptr; ++namep) {
709 assert(!
names.empty());
711 std::mt19937 urbg(42);
712 std::shuffle(
names.begin(),
names.end(), urbg);
725 cctz::time_zone::Impl::ClearTimeZoneMapTestOnly();
726 while (
state.KeepRunning()) {
734 for (
const auto&
name : AllTimeZoneNames()) {
737 while (
state.KeepRunning()) {
746 while (
state.KeepRunning()) {
748 cctz::time_zone::Impl::ClearTimeZoneMapTestOnly();
749 state.ResumeTiming();
757 cctz::time_zone::Impl::ClearTimeZoneMapTestOnly();
760 while (
state.KeepRunning()) {
768 cctz::time_zone::Impl::ClearTimeZoneMapTestOnly();
770 while (
state.KeepRunning()) {
774 BENCHMARK(BM_Zone_LoadLocalTimeZoneCached);
778 const std::vector<std::string>
names = AllTimeZoneNames();
785 cctz::time_zone::Impl::ClearTimeZoneMapTestOnly();
786 state.ResumeTiming();
791 BENCHMARK(BM_Zone_LoadAllTimeZonesFirst);
795 const std::vector<std::string>
names = AllTimeZoneNames();
806 BENCHMARK(BM_Zone_LoadAllTimeZonesCached);
810 while (
state.KeepRunning()) {
814 BENCHMARK(BM_Zone_TimeZoneEqualityImplicit);
818 while (
state.KeepRunning()) {
822 BENCHMARK(BM_Zone_TimeZoneEqualityExplicit);
826 while (
state.KeepRunning()) {
841 std::chrono::system_clock::from_time_t(1384569027);
843 std::chrono::system_clock::from_time_t(1418962578);
844 while (
state.KeepRunning()) {
854 time_t
t = 1384569027;
855 time_t t2 = 1418962578;
857 while (
state.KeepRunning()) {
860 #if defined(_WIN32) || defined(_WIN64)
872 std::chrono::system_clock::from_time_t(1384569027);
873 while (
state.KeepRunning()) {
881 time_t
t = 1384569027;
883 while (
state.KeepRunning()) {
885 #if defined(_WIN32) || defined(_WIN64)
904 while (
state.KeepRunning()) {
905 if ((
i++ & 1) == 0) {
919 while (
state.KeepRunning()) {
921 if ((
i++ & 1) == 0) {
922 tm.tm_year = 2014 - 1900;
929 tm.tm_year = 2013 - 1900;
944 while (
state.KeepRunning()) {
956 while (
state.KeepRunning()) {
957 if ((
i++ & 1) == 0) {
971 while (
state.KeepRunning()) {
973 if ((
i++ & 1) == 0) {
974 tm.tm_year = 2014 - 1900;
981 tm.tm_year = 2013 - 1900;
994 const char*
const kFormats[] = {
999 "%Y-%m-%d%ET%H:%M:%S",
1002 const int kNumFormats =
sizeof(kFormats) /
sizeof(kFormats[0]);
1010 std::chrono::microseconds(1);
1011 while (
state.KeepRunning()) {
1015 BENCHMARK(BM_Format_FormatTime)->DenseRange(0, kNumFormats - 1);
1023 std::chrono::microseconds(1);
1025 while (
state.KeepRunning()) {
1029 BENCHMARK(BM_Format_ParseTime)->DenseRange(0, kNumFormats - 1);