/* * Records elapsed since the last Cache_TimedOperationStart. * * Accumulated total time goes in totalTime, maximum time goes into maxTime. * * Used in conjunction with Cache_TimedOperationStart */ void Cache_TimedOperationRecord(instr_time *totalTime, instr_time *maxTime) { Assert(!INSTR_TIME_IS_ZERO(timedOpStart)); instr_time elapsedTime; INSTR_TIME_SET_CURRENT(elapsedTime); INSTR_TIME_SUBTRACT(elapsedTime, timedOpStart); /* Add difference to totalTime */ /* FIXME This is not atomic */ INSTR_TIME_ADD(*totalTime, elapsedTime); /* Compare elapsed time with current maximum and record if new maximum */ if (INSTR_TIME_GET_DOUBLE(elapsedTime) > INSTR_TIME_GET_DOUBLE(*maxTime)) { /* FIXME This is not atomic */ INSTR_TIME_ASSIGN(*maxTime, elapsedTime); } #ifdef USE_ASSERT_CHECKING INSTR_TIME_SET_ZERO(timedOpStart); #endif }
void executormgr_get_statistics(QueryExecutor *executor, instr_time *time_connect_begin, instr_time *time_connect_end, instr_time *time_dispatch_begin, instr_time *time_dispatch_end, instr_time *time_consume_begin, instr_time *time_consume_end, instr_time *time_free_begin, instr_time *time_free_end) { INSTR_TIME_ASSIGN(*time_connect_begin, executor->time_connect_begin); INSTR_TIME_ASSIGN(*time_connect_end, executor->time_connect_end); INSTR_TIME_ASSIGN(*time_dispatch_begin, executor->time_dispatch_begin); INSTR_TIME_ASSIGN(*time_dispatch_end, executor->time_dispatch_end); INSTR_TIME_ASSIGN(*time_consume_begin, executor->time_consume_begin); INSTR_TIME_ASSIGN(*time_consume_end, executor->time_consume_end); INSTR_TIME_ASSIGN(*time_free_begin, executor->time_free_begin); INSTR_TIME_ASSIGN(*time_free_end, executor->time_free_end); }