CodeTimer is a very simple utility for recording the performance of blocks of code in C++. It lets us record timings against a specific key, and then aggregates all of the timings for a key.
CodeTimer is designed to perform well when called concurrently by multiple threads. Internally it uses a libcuckoo hash table.
CodeTimer meaures wall-clock time (as opposed to CPU time). It uses the <chrono> library's high_resolution_clock to measure timings with high precision.
Here is a simple usage example:
#include <chrono>
#include <iostream>
#include <thread>
#include "codetimer.h"
void sleepMillis(long milliseconds) {
std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
}
int main () {
auto start = std::chrono::high_resolution_clock::now();
sleepMillis(100);
CodeTimer::record("key1", start);
start = std::chrono::high_resolution_clock::now();
sleepMillis(200);
CodeTimer::record("key2", start);
start = std::chrono::high_resolution_clock::now();
sleepMillis(300);
CodeTimer::record("key1", start);
CodeTimer::printStats();
return 0;
}
When run this will produce something like the following:
key1: total=0.400211; occurrences=2
key2: total=0.200093; occurrences=1
For each key that we recorded a timing against, we can see the total time for that key, and the number of times we recorded a timing for the key.
In the above example we use CodeTimer::record
to record a timing for a specific key, and CodeTimer::printStats()
to print an aggregated view
of the timings we have recorded. See the API docs in codetimer.h for more details.
To build the usage example, first build and install libcuckoo. Then, compile as follows:
g++ -o timerexample -std=c++11 timerexample.cc codetimer.cc codetimer.h
This assumes you have a version of GCC that supports C++ 11 installed.
You can then run the usage example as follows:
./timerexample
To use CodeTimer in your own projects, add #include "codetimer.h"
to your source code, and add
codetimer.h and codetimer.cc to your build.
CodeTimer is licensed under the Apache License, Version 2.0