For the performance tuning, the simplest way is to record how many time is elapsed in a function. The only difficulty we’re facing is that: there maybe many exit for a function. Thanks to C++’s constructor/deconstructor feature, it’s easy for developer to record the elsaped time.
Compared to C, constructor/deconstructor is an important improvement of C++. It’s not only make sure that the object/struct will be automatically initialized, but also keep C++ developer far away from MLK issue by Smart Pointer. And it’s also a good guidance for developer to do simple performance tuning; here is a implemention of the auto timer:
class AutoTimer
{
public:
AutoTimer(const char* label) : m_label(label)
{
m_start = new timeval();
gettimeofday((timeval*)m_start, NULL);
}
~AutoTimer()
{
m_end = new timeval();
gettimeofday((timeval*)m_end, NULL);
double start, end;
start = ((timeval*)m_start)->tv_sec * 1000 + ((timeval*)m_start)->tv_usec / 1000.0;
end = ((timeval*)m_end)->tv_sec * 1000 + ((timeval*)m_end)->tv_usec / 1000.0;
if (logger) {
loggerDrv->log2(__FILE__, __LINE__, "%s : start: <%lf>, end: <%lf>, duration: <%lf>.",
m_label.c_str(), start, end, end - start);
}
delete (timeval*) m_start;
delete (timeval*) m_end;
}
private:
timeval* m_start;
timeval* m_end;
std::string m_label;
};
Now, we have a simple performance testing tool: auto timeer; and the it’s easy to use as follow:
int handle_input(ogl::Handler fd)
{
AutoTimer timer("handle_input");
....
}