Ignore:
Timestamp:
Mar 2, 2013, 10:45:46 PM (13 years ago)
Author:
Frederik Heber <heber@…>
Children:
b9273a
Parents:
8f60da
git-author:
Frederik Heber <heber@…> (03/01/13 13:41:05)
git-committer:
Frederik Heber <heber@…> (03/02/13 22:45:46)
Message:

Enhanced Chronos for more accurate timekeeping.

  • Chronos is now safe to use w.r.t. recursive function calls.
  • Chronos now gets const ref of token name in each function.
  • TESTFIX: dummyTest() now checks on recursive function.
  • Chronos now offers its internal timekeeping via const ref to outside.
  • Chronos also now has up to nanoseconds precision when either time.h or sys/time.h is present.
  • librt required from clock_gettime().
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Helpers/unittests/ChronosUnitTest.cpp

    r8f60da r3f06bb  
    5454}
    5555
     56static size_t level = 0;
     57
     58void dummyRecursion()
     59{
     60  if (level > 2)
     61    return;
     62  ++level;
     63  Chronos::getInstance().startTiming(__func__);
     64  for (int i=0;i<10;++i) {
     65    std::cout << "";
     66    dummyRecursion();
     67  }
     68  Chronos::getInstance().endTiming(__func__);
     69  --level;
     70}
     71
    5672
    5773void ChronosTest::setUp()
     
    7894void ChronosTest::dummyTest()
    7995{
    80   double timings[4];
     96  double timings[5];
    8197  // first dummy
    8298  dummy();
    83   CPPUNIT_ASSERT( Chronos::getInstance().TimeRunning.find(std::string("dummy"))
    84       != Chronos::getInstance().TimeRunning.end() );
     99  CPPUNIT_ASSERT( Chronos::getInstance().StartingTime.find(std::string("dummy"))
     100      == Chronos::getInstance().StartingTime.end() );
     101  CPPUNIT_ASSERT( Chronos::getInstance().AccountedTime.find(std::string("dummy"))
     102      != Chronos::getInstance().AccountedTime.end() );
    85103  CPPUNIT_ASSERT_EQUAL( (size_t) 1, Chronos::getInstance().SumUpTotalFunctions() );
    86104  timings[0] = Chronos::getInstance().AccountedTime[std::string("dummy")];
    87105  std::cout << "Timing[0]: " << timings[0] << std::endl;
    88106  CPPUNIT_ASSERT(timings[0] > 0.);
     107
     108  // second call goes to same entry
    89109  dummy();
    90   // second call goes to same entry
    91110  CPPUNIT_ASSERT_EQUAL( (size_t) 1, Chronos::getInstance().SumUpTotalFunctions() );
    92111  timings[1] = Chronos::getInstance().AccountedTime[std::string("dummy")] - timings[0];
     
    94113  CPPUNIT_ASSERT(timings[1] > 0.);
    95114
    96 
    97115  // second dummy
    98116  dummy_two();
    99   CPPUNIT_ASSERT( Chronos::getInstance().TimeRunning.find(std::string("dummy_two"))
    100       != Chronos::getInstance().TimeRunning.end() );
     117  CPPUNIT_ASSERT( Chronos::getInstance().AccountedTime.find(std::string("dummy_two"))
     118      != Chronos::getInstance().AccountedTime.end() );
    101119  CPPUNIT_ASSERT_EQUAL( (size_t) 2, Chronos::getInstance().SumUpTotalFunctions() );
    102120  timings[2] = Chronos::getInstance().AccountedTime[std::string("dummy_two")];
    103121  std::cout << "Timing[2]: " << timings[2] << std::endl;
    104122  CPPUNIT_ASSERT(timings[2] > 0.);
     123
     124  // recursive dummy
     125  dummyRecursion();
     126  CPPUNIT_ASSERT( Chronos::getInstance().RecursionMap.find(std::string("dummyRecursion"))
     127      != Chronos::getInstance().RecursionMap.end() );
     128  CPPUNIT_ASSERT( Chronos::getInstance().AccountedTime.find(std::string("dummyRecursion"))
     129      != Chronos::getInstance().AccountedTime.end() );
     130  CPPUNIT_ASSERT_EQUAL( (size_t) 3, Chronos::getInstance().SumUpTotalFunctions() );
     131  timings[3] = Chronos::getInstance().AccountedTime[std::string("dummyRecursion")];
     132  std::cout << "Timing[3]: " << timings[3] << std::endl;
     133  CPPUNIT_ASSERT(timings[3] > 0.);
    105134
    106135  // "inline" dummy
     
    111140    Chronos::getInstance().endTiming("dummy_three");
    112141  }
    113   CPPUNIT_ASSERT( Chronos::getInstance().TimeRunning.find(std::string("dummy_three"))
    114       != Chronos::getInstance().TimeRunning.end() );
    115   CPPUNIT_ASSERT_EQUAL( (size_t) 3, Chronos::getInstance().SumUpTotalFunctions() );
    116   timings[3] = Chronos::getInstance().AccountedTime[std::string("dummy_three")];
    117   std::cout << "Timing[3]: " << timings[3] << std::endl;
    118   CPPUNIT_ASSERT(timings[3] > 0.);
     142  CPPUNIT_ASSERT( Chronos::getInstance().AccountedTime.find(std::string("dummy_three"))
     143      != Chronos::getInstance().AccountedTime.end() );
     144  CPPUNIT_ASSERT_EQUAL( (size_t) 4, Chronos::getInstance().SumUpTotalFunctions() );
     145  timings[4] = Chronos::getInstance().AccountedTime[std::string("dummy_three")];
     146  std::cout << "Timing[4]: " << timings[4] << std::endl;
     147  CPPUNIT_ASSERT(timings[4] > 0.);
    119148
    120149  // check summing of times
    121   CPPUNIT_ASSERT( fabs(timings[0] + timings[1] + timings[2] + timings[3]- Chronos::getInstance().SumUpTotalTime()) < numeric_limits<double>::epsilon());
     150  CPPUNIT_ASSERT( fabs(timings[0] + timings[1] + timings[2] + timings[3] + timings[4]- Chronos::getInstance().SumUpTotalTime()) < numeric_limits<double>::epsilon());
    122151
    123152  std::cout << Chronos::getInstance() << std::endl;
Note: See TracChangeset for help on using the changeset viewer.