diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2019-05-06 17:15:32 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2019-05-06 17:15:32 +0300 |
commit | 0573744a83ad89958c4e48a9299cd9274db1b355 (patch) | |
tree | f8c1c68e1bc53194a5ed2ff148d2ff57de0f4dbe /storage | |
parent | 147c1239f1eb97c79dc498f16a2483e62aecb32d (diff) | |
download | mariadb-git-0573744a83ad89958c4e48a9299cd9274db1b355.tar.gz |
Revert "MDEV-19399 do not call slow my_timer_init() several times"
This reverts commit 8dc670a5e8d322d8e1871b8c2ae8695a8779f739.
The symbol sys_timer_info was not being exported correctly,
which caused linking failures on some platforms.
Diffstat (limited to 'storage')
-rw-r--r-- | storage/innobase/ut/ut0timer.cc | 34 | ||||
-rw-r--r-- | storage/perfschema/pfs_timer.cc | 23 | ||||
-rw-r--r-- | storage/perfschema/pfs_timer.h | 2 | ||||
-rw-r--r-- | storage/perfschema/table_performance_timers.cc | 10 | ||||
-rw-r--r-- | storage/xtradb/ut/ut0timer.cc | 35 |
5 files changed, 55 insertions, 49 deletions
diff --git a/storage/innobase/ut/ut0timer.cc b/storage/innobase/ut/ut0timer.cc index c3b846dde9e..85292cce28c 100644 --- a/storage/innobase/ut/ut0timer.cc +++ b/storage/innobase/ut/ut0timer.cc @@ -46,7 +46,6 @@ Function pointer to point selected timer function. 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. @@ -58,27 +57,30 @@ void ut_init_timer(void) /*===============*/ { - if (sys_timer_info.cycles.frequency > 1000000 && - sys_timer_info.cycles.resolution == 1) { - ut_timer = sys_timer_info.cycles; + 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; ut_timer_now = &my_timer_cycles; - } else if (sys_timer_info.nanoseconds.frequency > 1000000 && - sys_timer_info.nanoseconds.resolution == 1) { - ut_timer = sys_timer_info.nanoseconds; + } else if (all_timer_info.nanoseconds.frequency > 1000000 && + all_timer_info.nanoseconds.resolution == 1) { + ut_timer = all_timer_info.nanoseconds; ut_timer_now = &my_timer_nanoseconds; - } else if (sys_timer_info.microseconds.frequency >= 1000000 && - sys_timer_info.microseconds.resolution == 1) { - ut_timer = sys_timer_info.microseconds; + } else if (all_timer_info.microseconds.frequency >= 1000000 && + all_timer_info.microseconds.resolution == 1) { + ut_timer = all_timer_info.microseconds; ut_timer_now = &my_timer_microseconds; - } else if (sys_timer_info.milliseconds.frequency >= 1000 && - sys_timer_info.milliseconds.resolution == 1) { - ut_timer = sys_timer_info.milliseconds; + } else if (all_timer_info.milliseconds.frequency >= 1000 && + all_timer_info.milliseconds.resolution == 1) { + ut_timer = all_timer_info.milliseconds; ut_timer_now = &my_timer_milliseconds; - } else if (sys_timer_info.ticks.frequency >= 1000 && + } else if (all_timer_info.ticks.frequency >= 1000 && /* Will probably be false */ - sys_timer_info.ticks.resolution == 1) { - ut_timer = sys_timer_info.ticks; + all_timer_info.ticks.resolution == 1) { + ut_timer = all_timer_info.ticks; ut_timer_now = &my_timer_ticks; } else { /* None are acceptable, so leave it as "None", and fill in struct */ diff --git a/storage/perfschema/pfs_timer.cc b/storage/perfschema/pfs_timer.cc index cc99e69c3cc..8348f165e5c 100644 --- a/storage/perfschema/pfs_timer.cc +++ b/storage/perfschema/pfs_timer.cc @@ -26,6 +26,7 @@ enum_timer_name idle_timer= TIMER_NAME_MICROSEC; enum_timer_name wait_timer= TIMER_NAME_CYCLE; enum_timer_name stage_timer= TIMER_NAME_NANOSEC; enum_timer_name statement_timer= TIMER_NAME_NANOSEC; +MY_TIMER_INFO pfs_timer_info; static ulonglong cycle_v0; static ulonglong nanosec_v0; @@ -64,39 +65,41 @@ void init_timers(void) { double pico_frequency= 1.0e12; + my_timer_init(&pfs_timer_info); + cycle_v0= my_timer_cycles(); nanosec_v0= my_timer_nanoseconds(); microsec_v0= my_timer_microseconds(); millisec_v0= my_timer_milliseconds(); tick_v0= my_timer_ticks(); - if (sys_timer_info.cycles.frequency > 0) + if (pfs_timer_info.cycles.frequency > 0) cycle_to_pico= round_to_ulong(pico_frequency/ - (double)sys_timer_info.cycles.frequency); + (double)pfs_timer_info.cycles.frequency); else cycle_to_pico= 0; - if (sys_timer_info.nanoseconds.frequency > 0) + if (pfs_timer_info.nanoseconds.frequency > 0) nanosec_to_pico= round_to_ulong(pico_frequency/ - (double)sys_timer_info.nanoseconds.frequency); + (double)pfs_timer_info.nanoseconds.frequency); else nanosec_to_pico= 0; - if (sys_timer_info.microseconds.frequency > 0) + if (pfs_timer_info.microseconds.frequency > 0) microsec_to_pico= round_to_ulong(pico_frequency/ - (double)sys_timer_info.microseconds.frequency); + (double)pfs_timer_info.microseconds.frequency); else microsec_to_pico= 0; - if (sys_timer_info.milliseconds.frequency > 0) + if (pfs_timer_info.milliseconds.frequency > 0) millisec_to_pico= round_to_ulong(pico_frequency/ - (double)sys_timer_info.milliseconds.frequency); + (double)pfs_timer_info.milliseconds.frequency); else millisec_to_pico= 0; - if (sys_timer_info.ticks.frequency > 0) + if (pfs_timer_info.ticks.frequency > 0) tick_to_pico= round_to_ulonglong(pico_frequency/ - (double)sys_timer_info.ticks.frequency); + (double)pfs_timer_info.ticks.frequency); else tick_to_pico= 0; diff --git a/storage/perfschema/pfs_timer.h b/storage/perfschema/pfs_timer.h index ec4171f45b1..1cae20e89dd 100644 --- a/storage/perfschema/pfs_timer.h +++ b/storage/perfschema/pfs_timer.h @@ -102,7 +102,7 @@ extern enum_timer_name statement_timer; Timer information data. Characteristics about each suported timer. */ -extern MY_TIMER_INFO sys_timer_info; +extern MY_TIMER_INFO pfs_timer_info; /** Initialize the timer component. */ void init_timers(); diff --git a/storage/perfschema/table_performance_timers.cc b/storage/perfschema/table_performance_timers.cc index dc36874d6e9..780d507a64b 100644 --- a/storage/perfschema/table_performance_timers.cc +++ b/storage/perfschema/table_performance_timers.cc @@ -58,23 +58,23 @@ table_performance_timers::table_performance_timers() index= (int)TIMER_NAME_CYCLE - FIRST_TIMER_NAME; m_data[index].m_timer_name= TIMER_NAME_CYCLE; - m_data[index].m_info= sys_timer_info.cycles; + m_data[index].m_info= pfs_timer_info.cycles; index= (int)TIMER_NAME_NANOSEC - FIRST_TIMER_NAME; m_data[index].m_timer_name= TIMER_NAME_NANOSEC; - m_data[index].m_info= sys_timer_info.nanoseconds; + m_data[index].m_info= pfs_timer_info.nanoseconds; index= (int)TIMER_NAME_MICROSEC - FIRST_TIMER_NAME; m_data[index].m_timer_name= TIMER_NAME_MICROSEC; - m_data[index].m_info= sys_timer_info.microseconds; + m_data[index].m_info= pfs_timer_info.microseconds; index= (int)TIMER_NAME_MILLISEC - FIRST_TIMER_NAME; m_data[index].m_timer_name= TIMER_NAME_MILLISEC; - m_data[index].m_info= sys_timer_info.milliseconds; + m_data[index].m_info= pfs_timer_info.milliseconds; index= (int)TIMER_NAME_TICK - FIRST_TIMER_NAME; m_data[index].m_timer_name= TIMER_NAME_TICK; - m_data[index].m_info= sys_timer_info.ticks; + m_data[index].m_info= pfs_timer_info.ticks; } void table_performance_timers::reset_position(void) diff --git a/storage/xtradb/ut/ut0timer.cc b/storage/xtradb/ut/ut0timer.cc index b7a02ffa342..85292cce28c 100644 --- a/storage/xtradb/ut/ut0timer.cc +++ b/storage/xtradb/ut/ut0timer.cc @@ -47,8 +47,6 @@ 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. @@ -59,27 +57,30 @@ void ut_init_timer(void) /*===============*/ { - if (sys_timer_info.cycles.frequency > 1000000 && - sys_timer_info.cycles.resolution == 1) { - ut_timer = sys_timer_info.cycles; + 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; ut_timer_now = &my_timer_cycles; - } else if (sys_timer_info.nanoseconds.frequency > 1000000 && - sys_timer_info.nanoseconds.resolution == 1) { - ut_timer = sys_timer_info.nanoseconds; + } else if (all_timer_info.nanoseconds.frequency > 1000000 && + all_timer_info.nanoseconds.resolution == 1) { + ut_timer = all_timer_info.nanoseconds; ut_timer_now = &my_timer_nanoseconds; - } else if (sys_timer_info.microseconds.frequency >= 1000000 && - sys_timer_info.microseconds.resolution == 1) { - ut_timer = sys_timer_info.microseconds; + } else if (all_timer_info.microseconds.frequency >= 1000000 && + all_timer_info.microseconds.resolution == 1) { + ut_timer = all_timer_info.microseconds; ut_timer_now = &my_timer_microseconds; - } else if (sys_timer_info.milliseconds.frequency >= 1000 && - sys_timer_info.milliseconds.resolution == 1) { - ut_timer = sys_timer_info.milliseconds; + } else if (all_timer_info.milliseconds.frequency >= 1000 && + all_timer_info.milliseconds.resolution == 1) { + ut_timer = all_timer_info.milliseconds; ut_timer_now = &my_timer_milliseconds; - } else if (sys_timer_info.ticks.frequency >= 1000 && + } else if (all_timer_info.ticks.frequency >= 1000 && /* Will probably be false */ - sys_timer_info.ticks.resolution == 1) { - ut_timer = sys_timer_info.ticks; + all_timer_info.ticks.resolution == 1) { + ut_timer = all_timer_info.ticks; ut_timer_now = &my_timer_ticks; } else { /* None are acceptable, so leave it as "None", and fill in struct */ |