#include #include #ifdef WIN32 # include "windows.h" # include "winbase.h" #else # include #endif #include "RawProfiling.h" namespace RawProfiling { unsigned long Chronograph::getTimeInMillis() { if (active_) { stop(); start(); } return (unsigned long) (elapsed_ / freqInMillis_); } int64 Chronograph::now() { #ifdef WIN32 LARGE_INTEGER value; QueryPerformanceCounter(&value); return (int64)value.QuadPart; #else struct timeb tb; ftime(&tb); return (int64)tb.time * 1000 + (int64)tb.millitm; #endif } int64 Chronograph::freq() { #ifdef WIN32 LARGE_INTEGER freq; QueryPerformanceFrequency(&freq); return (int64)freq.QuadPart; #else return 1000; #endif } void RawProfiling::displayResults() { std::cout << "TowersOfHanoi::start (" << TowersOfHanoi_start_counter << ", " << TowersOfHanoi_start_chronograph.getTimeInMillis() << "ms)" << std::endl; std::cout << "TowersOfHanoi::playNDisks (" << TowersOfHanoi_playNDisks_counter << ", " << TowersOfHanoi_playNDisks_chronograph.getTimeInMillis() << "ms)" << std::endl; std::cout << "TowersOfHanoi::moveDisk (" << TowersOfHanoi_moveDisk_counter << ", " << TowersOfHanoi_moveDisk_chronograph.getTimeInMillis() << "ms)" << std::endl; std::cout << "TowersOfHanoi::displayGame (" << TowersOfHanoi_displayGame_counter << ", " << TowersOfHanoi_displayGame_chronograph.getTimeInMillis() << "ms)" << std::endl; } bool RawProfiling::writeToHTML(const std::string& sFilename) { std::ofstream HTMLFile(sFilename.c_str(), std::ios::out | std::ios::binary); if (HTMLFile.fail()) return false; HTMLFile << "" << std::endl; HTMLFile << "\t" << std::endl; HTMLFile << "\t\t

Profiling results

" << std::endl; HTMLFile << "\t\t" << std::endl; HTMLFile << "\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t" << std::endl; HTMLFile << "\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t" << std::endl; HTMLFile << "\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t" << std::endl; HTMLFile << "\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t" << std::endl; HTMLFile << "\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t\t" << std::endl; HTMLFile << "\t\t\t" << std::endl; HTMLFile << "\t\t
FunctionOccurrencesTime in ms
TowersOfHanoi::start" << TowersOfHanoi_start_counter << "" << TowersOfHanoi_start_chronograph.getTimeInMillis() << "
TowersOfHanoi::playNDisks" << TowersOfHanoi_playNDisks_counter << "" << TowersOfHanoi_playNDisks_chronograph.getTimeInMillis() << "
TowersOfHanoi::moveDisk" << TowersOfHanoi_moveDisk_counter << "" << TowersOfHanoi_moveDisk_chronograph.getTimeInMillis() << "
TowersOfHanoi::displayGame" << TowersOfHanoi_displayGame_counter << "" << TowersOfHanoi_displayGame_chronograph.getTimeInMillis() << "
" << std::endl; HTMLFile << "\t" << std::endl; HTMLFile << "" << std::endl; HTMLFile.close(); return true; } int RawProfiling::TowersOfHanoi_start_counter = 0; Chronograph RawProfiling::TowersOfHanoi_start_chronograph = Chronograph(); int RawProfiling::TowersOfHanoi_playNDisks_counter = 0; Chronograph RawProfiling::TowersOfHanoi_playNDisks_chronograph = Chronograph(); int RawProfiling::TowersOfHanoi_moveDisk_counter = 0; Chronograph RawProfiling::TowersOfHanoi_moveDisk_chronograph = Chronograph(); int RawProfiling::TowersOfHanoi_displayGame_counter = 0; Chronograph RawProfiling::TowersOfHanoi_displayGame_chronograph = Chronograph(); }