1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
//
// This file is part of Easylogging++ samples
// PerformanceTrackingCallback sample to customize performance output
//
// Revision 1.0
// @author mkhan3189
//
#include "easylogging++.h"
INITIALIZE_EASYLOGGINGPP
class MyPerformanceTrackingOutput : public el::PerformanceTrackingCallback {
public:
MyPerformanceTrackingOutput() {
el::PerformanceTrackingCallback* defaultCallback =
el::Helpers::performanceTrackingCallback<el::base::DefaultPerformanceTrackingCallback>("DefaultPerformanceTrackingCallback");
defaultCallback->setEnabled(false);
}
virtual ~MyPerformanceTrackingOutput() {
el::PerformanceTrackingCallback* defaultCallback =
el::Helpers::performanceTrackingCallback<el::base::DefaultPerformanceTrackingCallback>("DefaultPerformanceTrackingCallback");
defaultCallback->setEnabled(true);
}
protected:
void handle(const el::PerformanceTrackingData* data) {
if (data->firstCheckpoint()) { return; } // ignore first check point
el::base::type::stringstream_t ss;
ss << data->blockName()->c_str() << " took " << *data->formattedTimeTaken() << " to run";
if (data->dataType() == el::PerformanceTrackingData::DataType::Checkpoint) {
ss << " [CHECKPOINT ONLY] ";
}
CLOG(INFO, data->loggerId().c_str()) << ss.str();
}
};
int main(void) {
TIMED_SCOPE(mainBlock, "main");
el::Helpers::installPerformanceTrackingCallback<MyPerformanceTrackingOutput>("MyPerformanceTrackingOutput");
{
TIMED_SCOPE(timer, "myblock");
for (int i = 0; i <= 500; ++i) {
// Spend time
for (int j = 0; j < 10000; ++j) { std::string tmp; }
if (i % 100 == 0) {
timer->checkpoint(std::string(std::string("checkpoint at ") + std::to_string(static_cast<unsigned long long>(i))).c_str());
}
}
}
LOG(INFO) << "By now, you should get performance result of above scope";
el::Helpers::uninstallPerformanceTrackingCallback<MyPerformanceTrackingOutput>("MyPerformanceTrackingOutput");
// You will get "main" block in normal format (default)
// Now that we have uninstalled our custom callback we should get our default call back enabled (see destructor of MyPerformanceTrackingOutput above)
return 0;
}
|