diff options
author | Eugene Kosov <claprix@yandex.ru> | 2019-05-06 15:38:02 +0300 |
---|---|---|
committer | Eugene Kosov <claprix@yandex.ru> | 2019-05-06 15:38:02 +0300 |
commit | 8dc670a5e8d322d8e1871b8c2ae8695a8779f739 (patch) | |
tree | d55f481bcba67a4c53a7e6a736824bc27cc3b5d2 /storage/xtradb/ut | |
parent | 15f065599e161e861e69edfc89b755c888e80135 (diff) | |
download | mariadb-git-8dc670a5e8d322d8e1871b8c2ae8695a8779f739.tar.gz |
MDEV-19399 do not call slow my_timer_init() several times
No functional change.
Call my_timer_init() only once and then reuse it from InnoDB and
perfschema storage engines.
This patch speeds up empty test for me like this:
./mtr -mem innodb.kevg,xtradb 1.21s user 0.84s system 34% cpu 5.999 total
./mtr -mem innodb.kevg,xtradb 1.12s user 0.60s system 31% cpu 5.385 total
Diffstat (limited to 'storage/xtradb/ut')
-rw-r--r-- | storage/xtradb/ut/ut0timer.cc | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/storage/xtradb/ut/ut0timer.cc b/storage/xtradb/ut/ut0timer.cc index 85292cce28c..b7a02ffa342 100644 --- a/storage/xtradb/ut/ut0timer.cc +++ b/storage/xtradb/ut/ut0timer.cc @@ -47,6 +47,8 @@ ulonglong (*ut_timer_now)(void) = &ut_timer_none; struct my_timer_unit_info ut_timer; +extern MY_TIMER_INFO sys_timer_info; + /**************************************************************//** Sets up the data required for use of my_timer_* functions. Selects the best timer by high frequency, and tight resolution. @@ -57,30 +59,27 @@ void ut_init_timer(void) /*===============*/ { - MY_TIMER_INFO all_timer_info; - my_timer_init(&all_timer_info); - - if (all_timer_info.cycles.frequency > 1000000 && - all_timer_info.cycles.resolution == 1) { - ut_timer = all_timer_info.cycles; + if (sys_timer_info.cycles.frequency > 1000000 && + sys_timer_info.cycles.resolution == 1) { + ut_timer = sys_timer_info.cycles; ut_timer_now = &my_timer_cycles; - } else if (all_timer_info.nanoseconds.frequency > 1000000 && - all_timer_info.nanoseconds.resolution == 1) { - ut_timer = all_timer_info.nanoseconds; + } else if (sys_timer_info.nanoseconds.frequency > 1000000 && + sys_timer_info.nanoseconds.resolution == 1) { + ut_timer = sys_timer_info.nanoseconds; ut_timer_now = &my_timer_nanoseconds; - } else if (all_timer_info.microseconds.frequency >= 1000000 && - all_timer_info.microseconds.resolution == 1) { - ut_timer = all_timer_info.microseconds; + } else if (sys_timer_info.microseconds.frequency >= 1000000 && + sys_timer_info.microseconds.resolution == 1) { + ut_timer = sys_timer_info.microseconds; ut_timer_now = &my_timer_microseconds; - } else if (all_timer_info.milliseconds.frequency >= 1000 && - all_timer_info.milliseconds.resolution == 1) { - ut_timer = all_timer_info.milliseconds; + } else if (sys_timer_info.milliseconds.frequency >= 1000 && + sys_timer_info.milliseconds.resolution == 1) { + ut_timer = sys_timer_info.milliseconds; ut_timer_now = &my_timer_milliseconds; - } else if (all_timer_info.ticks.frequency >= 1000 && + } else if (sys_timer_info.ticks.frequency >= 1000 && /* Will probably be false */ - all_timer_info.ticks.resolution == 1) { - ut_timer = all_timer_info.ticks; + sys_timer_info.ticks.resolution == 1) { + ut_timer = sys_timer_info.ticks; ut_timer_now = &my_timer_ticks; } else { /* None are acceptable, so leave it as "None", and fill in struct */ |