MXS-2218 Add functionality for mxs_clock

This commit is contained in:
Johan Wikman
2019-01-08 09:43:41 +02:00
parent 2d2f62ed6f
commit 026bf747e6
2 changed files with 30 additions and 7 deletions

View File

@ -48,6 +48,8 @@ public:
void show_tasks(DCB* pDcb) const; void show_tasks(DCB* pDcb) const;
json_t* tasks_to_json(const char* zhost) const; json_t* tasks_to_json(const char* zhost) const;
static int64_t ticks();
private: private:
bool pre_run() override; bool pre_run() override;
void post_run() override; void post_run() override;
@ -75,6 +77,7 @@ private:
}; };
bool call_task(Worker::Call::action_t action, Task* pTask); bool call_task(Worker::Call::action_t action, Task* pTask);
static bool inc_ticks(Worker::Call::action_t action);
std::map<std::string, Task> m_tasks_by_name; std::map<std::string, Task> m_tasks_by_name;
}; };

View File

@ -20,7 +20,8 @@ namespace
static struct ThisUnit static struct ThisUnit
{ {
maxscale::MainWorker* pThis; maxscale::MainWorker* pCurrent_main;
int64_t clock_ticks;
} this_unit; } this_unit;
} }
@ -30,24 +31,26 @@ namespace maxscale
MainWorker::MainWorker() MainWorker::MainWorker()
{ {
mxb_assert(!this_unit.pThis); mxb_assert(!this_unit.pCurrent_main);
this_unit.pThis = this; this_unit.pCurrent_main = this;
delayed_call(100, &MainWorker::inc_ticks);
} }
MainWorker::~MainWorker() MainWorker::~MainWorker()
{ {
mxb_assert(this_unit.pThis); mxb_assert(this_unit.pCurrent_main);
this_unit.pThis = nullptr; this_unit.pCurrent_main = nullptr;
} }
//static //static
MainWorker& MainWorker::get() MainWorker& MainWorker::get()
{ {
mxb_assert(this_unit.pThis); mxb_assert(this_unit.pCurrent_main);
return *this_unit.pThis; return *this_unit.pCurrent_main;
} }
void MainWorker::add_task(const char* zName, TASKFN func, void* pData, int frequency) void MainWorker::add_task(const char* zName, TASKFN func, void* pData, int frequency)
@ -144,6 +147,12 @@ json_t* MainWorker::tasks_to_json(const char* zHost) const
return pResult; return pResult;
} }
//static
int64_t MainWorker::ticks()
{
return mxb::atomic::load(&this_unit.clock_ticks, mxb::atomic::RELAXED);
}
bool MainWorker::pre_run() bool MainWorker::pre_run()
{ {
return true; return true;
@ -185,4 +194,15 @@ bool MainWorker::call_task(Worker::Call::action_t action, MainWorker::Task* pTas
return call_again; return call_again;
} }
//static
bool MainWorker::inc_ticks(Worker::Call::action_t action)
{
if (action == Worker::Call::EXECUTE)
{
mxb::atomic::add(&this_unit.clock_ticks, 1, mxb::atomic::RELAXED);
}
return true;
}
} }