Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-07-31 02:19:16

0001 /*----------------------------------------------------------------------
0002 Test program for edm::TypeIDBase class.
0003  ----------------------------------------------------------------------*/
0004 
0005 #include <cassert>
0006 #include <iostream>
0007 #include <string>
0008 #include <unistd.h>
0009 #include <sys/resource.h>
0010 #include <catch.hpp>
0011 #include "FWCore/Utilities/interface/CPUTimer.h"
0012 
0013 using std::cerr;
0014 using std::endl;
0015 
0016 TEST_CASE("CPUTimer", "[CPUTimer]") {
0017   SECTION("testTiming") {
0018     edm::CPUTimer timer;
0019     REQUIRE(timer.realTime() == 0.0);
0020     REQUIRE(timer.cpuTime() == 0.0);
0021     timer.start();
0022     sleep(2);
0023     timer.stop();
0024     if ((timer.realTime() <= 2.0) || (timer.cpuTime() + 2.0 - 0.02 > timer.realTime())) {
0025       std::cerr << "real " << timer.realTime() << " cpu " << timer.cpuTime() << std::endl;
0026     }
0027     REQUIRE(timer.realTime() > 2.0);
0028     REQUIRE(timer.cpuTime() + 2.0 - 0.02 <= timer.realTime());
0029     timer.start();
0030     sleep(2);
0031     if (timer.realTime() <= 4.0) {
0032       std::cerr << "real " << timer.realTime() << " cpu " << timer.cpuTime() << std::endl;
0033     }
0034     REQUIRE(timer.realTime() > 4.0);
0035     timer.start();
0036     REQUIRE(timer.realTime() > 4.0);
0037     sleep(2);
0038     timer.stop();
0039     double real = timer.realTime();
0040     double cpu = timer.cpuTime();
0041     timer.stop();
0042     REQUIRE(timer.realTime() == real);
0043     REQUIRE(timer.cpuTime() == cpu);
0044     timer.reset();
0045     REQUIRE(timer.realTime() == 0.0);
0046     REQUIRE(timer.cpuTime() == 0.0);
0047     rusage theUsage;
0048     getrusage(RUSAGE_SELF, &theUsage);
0049     struct timeval startTime;
0050     startTime.tv_sec = theUsage.ru_utime.tv_sec;
0051     startTime.tv_usec = theUsage.ru_utime.tv_usec;
0052     timer.start();
0053     struct timeval nowTime;
0054     do {
0055       rusage theUsage2;
0056       getrusage(RUSAGE_SELF, &theUsage2);
0057       nowTime.tv_sec = theUsage2.ru_utime.tv_sec;
0058       nowTime.tv_usec = theUsage2.ru_utime.tv_usec;
0059     } while (nowTime.tv_sec - startTime.tv_sec + 1E-6 * (nowTime.tv_usec - startTime.tv_usec) < 1);
0060     timer.stop();
0061     if ((timer.realTime() < 1.0) || (timer.cpuTime() < 1.0)) {
0062       std::cerr << "real " << timer.realTime() << " cpu " << timer.cpuTime() << std::endl;
0063     }
0064     REQUIRE(timer.realTime() >= 1.0);
0065     REQUIRE(timer.cpuTime() >= 1.0);
0066   }
0067 }