File indexing completed on 2025-07-31 02:19:16
0001
0002
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 }