diff options
author | tobo <tobo@yandex-team.com> | 2022-08-25 07:36:11 +0300 |
---|---|---|
committer | tobo <tobo@yandex-team.com> | 2022-08-25 07:36:11 +0300 |
commit | 62b3eaa578ea03c63d0fd1ee409e13e360b1ab93 (patch) | |
tree | c21c3b755623ef7e111d7786adb69103554318c3 /util/datetime/base_ut.cpp | |
parent | 25270694776a35000bcb18c5302b1ad1ba9b87a8 (diff) | |
download | ydb-62b3eaa578ea03c63d0fd1ee409e13e360b1ab93.tar.gz |
speedup GmTimeR function
в профиле перфа Маркетного репорта постоянно вижу GmTimeR
там в цикле вычитается по количеству дней в году и прибавляется по 1 году с 1970 по 2022 на каждый вызов
В Маркете проблема стреляла и раньше
в последней итерации функция становится на ~~30% быстрее системной gmtime_r
%%
----------- GmTimeR ---------------
samples: 20691
iterations: 264304536
iterations hr: 264M
run time: 5.002055225
per iteration: 39.85866484 cycles
----------- gmtime_r ---------------
samples: 17452
iterations: 188034528
iterations hr: 188M
run time: 5.001259884
per iteration: 56.96146577 cycles
%%
текущая верся почти в 2 раза медленнее системной:
%%
----------- GmTimeR ---------------
samples: 12760
iterations: 100514931
iterations hr: 101M
run time: 5.00096133
per iteration: 105.4334174 cycles
----------- gmtime_r ---------------
samples: 17667
iterations: 192697896
iterations hr: 193M
run time: 5.001356603
per iteration: 55.69031415 cycles
%%
Diffstat (limited to 'util/datetime/base_ut.cpp')
-rw-r--r-- | util/datetime/base_ut.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/util/datetime/base_ut.cpp b/util/datetime/base_ut.cpp index afc3f802eb..56b7496d19 100644 --- a/util/datetime/base_ut.cpp +++ b/util/datetime/base_ut.cpp @@ -10,7 +10,7 @@ #include <util/system/compat.h> #include <util/random/random.h> -#include <limits.h> +#include <climits> using namespace std::chrono_literals; @@ -412,6 +412,8 @@ Y_UNIT_TEST_SUITE(DateTimeTest) { Y_UNIT_TEST(TestInstantToString) { UNIT_ASSERT_VALUES_EQUAL(TString("2009-08-06T15:19:06.023455Z"), ToString(TInstant::Seconds(1249571946) + TDuration::MicroSeconds(23455))); + UNIT_ASSERT_VALUES_EQUAL(TString("2022-08-23T13:04:43.023455Z"), ToString(TInstant::Seconds(1661259883) + TDuration::MicroSeconds(23455))); + UNIT_ASSERT_VALUES_EQUAL(TString("2122-11-23T15:12:26.023455Z"), ToString(TInstant::Seconds(4824889946) + TDuration::MicroSeconds(23455))); UNIT_ASSERT_VALUES_EQUAL(TString("2009-08-06T15:19:06.023455Z"), (TInstant::Seconds(1249571946) + TDuration::MicroSeconds(23455)).ToString()); UNIT_ASSERT_VALUES_EQUAL(TString("2009-08-06T15:19:06Z"), (TInstant::Seconds(1249571946) + TDuration::MicroSeconds(23455)).ToStringUpToSeconds()); } |