ROOT logo
#if !defined( __CINT__) || defined(__MAKECINT__)

#include <iostream>

#include "AliTRDcalibDB.h"
#include "AliCDBManager.h"
#include <TStopwatch.h>
#include <TRandom.h>

extern TRandom* gRandom;

#endif

#define BENCHMARK(code, comment) \
  timer.Reset(); timer.Start(); \
  for (Int_t i=0; i<NUMBER; ++i) { \
  code \
  } \
  timer.Stop(); \
  cerr   << "Tested " << NUMBER << " times: " << comment << ". Time/call: " << timer.CpuTime() / NUMBER << endl; \
  timer.Print();

#define NUMBER 100000

void AliTRDbenchmarkCalibDB()
{
  TStopwatch timer;
  AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  AliTRDcalibDB* calib = AliTRDcalibDB::Instance();
  if (!calib)
  {
    cerr << "calibDB singleton has already been terminated." << endl;
    return;
  }

  Float_t xyz[3];
  
  calib->SetRun(1);
  calib->SetRun(0);
  calib->GetNumberOfTimeBins();
  
  BENCHMARK(calib->GetNumberOfTimeBins();, "GetNumberOfTimeBins");
  BENCHMARK(calib->GetChamberPos(1, xyz);, "GetChamberPos");
  BENCHMARK(calib->GetVdrift((Int_t) (gRandom->Uniform() * 500), (Int_t) (gRandom->Uniform() * 100), (Int_t) (gRandom->Uniform() * 10));, "GetVdrift");

  #undef NUMBER
  #define NUMBER 10000
  BENCHMARK(calib->SetRun(1); calib->SetRun(0); calib->GetNumberOfTimeBins();, "GetNumberOfTimeBins with invalidating");
  BENCHMARK(calib->SetRun(1); calib->SetRun(0); calib->GetChamberPos(1, xyz);, "GetChamberPos with invalidating");
  #undef NUMBER
  #define NUMBER 200
  BENCHMARK(calib->SetRun(1); calib->SetRun(0); calib->GetVdrift(1, 1, 1);, "GetVdrift with invalidating");
  
  AliTRDcalibDB::Terminate();
}
 AliTRDbenchmarkCalibDB.C:1
 AliTRDbenchmarkCalibDB.C:2
 AliTRDbenchmarkCalibDB.C:3
 AliTRDbenchmarkCalibDB.C:4
 AliTRDbenchmarkCalibDB.C:5
 AliTRDbenchmarkCalibDB.C:6
 AliTRDbenchmarkCalibDB.C:7
 AliTRDbenchmarkCalibDB.C:8
 AliTRDbenchmarkCalibDB.C:9
 AliTRDbenchmarkCalibDB.C:10
 AliTRDbenchmarkCalibDB.C:11
 AliTRDbenchmarkCalibDB.C:12
 AliTRDbenchmarkCalibDB.C:13
 AliTRDbenchmarkCalibDB.C:14
 AliTRDbenchmarkCalibDB.C:15
 AliTRDbenchmarkCalibDB.C:16
 AliTRDbenchmarkCalibDB.C:17
 AliTRDbenchmarkCalibDB.C:18
 AliTRDbenchmarkCalibDB.C:19
 AliTRDbenchmarkCalibDB.C:20
 AliTRDbenchmarkCalibDB.C:21
 AliTRDbenchmarkCalibDB.C:22
 AliTRDbenchmarkCalibDB.C:23
 AliTRDbenchmarkCalibDB.C:24
 AliTRDbenchmarkCalibDB.C:25
 AliTRDbenchmarkCalibDB.C:26
 AliTRDbenchmarkCalibDB.C:27
 AliTRDbenchmarkCalibDB.C:28
 AliTRDbenchmarkCalibDB.C:29
 AliTRDbenchmarkCalibDB.C:30
 AliTRDbenchmarkCalibDB.C:31
 AliTRDbenchmarkCalibDB.C:32
 AliTRDbenchmarkCalibDB.C:33
 AliTRDbenchmarkCalibDB.C:34
 AliTRDbenchmarkCalibDB.C:35
 AliTRDbenchmarkCalibDB.C:36
 AliTRDbenchmarkCalibDB.C:37
 AliTRDbenchmarkCalibDB.C:38
 AliTRDbenchmarkCalibDB.C:39
 AliTRDbenchmarkCalibDB.C:40
 AliTRDbenchmarkCalibDB.C:41
 AliTRDbenchmarkCalibDB.C:42
 AliTRDbenchmarkCalibDB.C:43
 AliTRDbenchmarkCalibDB.C:44
 AliTRDbenchmarkCalibDB.C:45
 AliTRDbenchmarkCalibDB.C:46
 AliTRDbenchmarkCalibDB.C:47
 AliTRDbenchmarkCalibDB.C:48
 AliTRDbenchmarkCalibDB.C:49
 AliTRDbenchmarkCalibDB.C:50
 AliTRDbenchmarkCalibDB.C:51
 AliTRDbenchmarkCalibDB.C:52
 AliTRDbenchmarkCalibDB.C:53
 AliTRDbenchmarkCalibDB.C:54
 AliTRDbenchmarkCalibDB.C:55
 AliTRDbenchmarkCalibDB.C:56