00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __CODEX_TIMING_H__
00019 #define __CODEX_TIMING_H__
00020
00021 #ifdef TIMING
00022 # ifndef TIMING_IMPL
00023 # define TIME_EXT extern
00024 # else
00025 # define TIME_EXT
00026 # endif
00027
00028 #include <sys/time.h>
00029 #include <string>
00030 #include <map>
00031 #include <vector>
00032 #include <iosfwd>
00033 class Timer
00034 {
00035 public :
00036 Timer( const std::string& tag ) : m_tag( tag )
00037 {}
00038
00039 Timer( const char* tag ) : m_tag( tag )
00040 {}
00041
00042 void clear() { m_timings.clear(); }
00043
00044 void print( std::ostream& s ) const;
00045
00046 void start();
00047 void stop();
00048 void cancel();
00049
00050 private :
00051 typedef std::pair< struct timeval, struct timeval > Pair;
00052 typedef std::vector< Pair > Vector;
00053
00054 Vector m_timings;
00055 std::string m_tag;
00056 };
00057
00058 #ifdef TIMING_IMPL
00059 Timer OneWayTimer("oneway");
00060 Timer APSSTimer[2] = {"apss0","apss1"};
00061 Timer InitTimer[2] = {"init0","init1"};
00062 Timer InitActTimer[2] = {"initact0","initact1"};
00063 Timer ComputeTimer[2] = {"compute0","compute1"};
00064 Timer SSLTimer("ssl");
00065 Timer SignTimer("sign");
00066 Timer SignVerifyTimer("signverify");
00067 Timer InitIdleTimer[2] = {"initidle0","initidle1"};
00068 Timer InitActIdleTimer[2] = {"initactidle0","initactidle1"};
00069 Timer ComputeIdleTimer[2] = {"computeidle0","computeidle1"};
00070 Timer ActiveTimer("active");
00071
00072 Timer PartialSigTimer("partialsig");
00073 Timer PartialDecTimer("partialdec");
00074 Timer ThresholdSigTimer("threshsig");
00075 Timer ThresholdDecTimer("threshdec");
00076 Timer LookupTimer("lookup");
00077 Timer SchnorrTimer("schnorr");
00078 Timer DLProofTimer("dlproof");
00079 Timer DLProofVerifyTimer("dlproofverify");
00080 Timer RSAPPKTimer("rsappk");
00081 Timer PartialRSADecTimer("partialrsadec");
00082 #else
00083 extern Timer OneWayTimer;
00084 extern Timer APSSTimer[2];
00085 extern Timer InitTimer[2];
00086 extern Timer InitActTimer[2];
00087 extern Timer ComputeTimer[2];
00088 extern Timer SSLTimer;
00089 extern Timer SignTimer;
00090 extern Timer SignVerifyTimer;
00091 extern Timer InitIdleTimer[2];
00092 extern Timer InitActIdleTimer[2];
00093 extern Timer ComputeIdleTimer[2];
00094 extern Timer ActiveTimer;
00095
00096 extern Timer PartialSigTimer;
00097 extern Timer PartialDecTimer;
00098 extern Timer ThresholdSigTimer;
00099 extern Timer ThresholdDecTimer;
00100 extern Timer LookupTimer;
00101 extern Timer SchnorrTimer;
00102 extern Timer DLProofTimer;
00103 extern Timer DLProofVerifyTimer;
00104 extern Timer RSAPPKTimer;
00105 extern Timer PartialRSADecTimer;
00106 #endif
00107
00108 #endif
00109
00110 #endif