michael@0: #ifndef mozilla__ipdltest_TestLatency_h michael@0: #define mozilla__ipdltest_TestLatency_h 1 michael@0: michael@0: #include "mozilla/_ipdltest/IPDLUnitTests.h" michael@0: michael@0: #include "mozilla/_ipdltest/PTestLatencyParent.h" michael@0: #include "mozilla/_ipdltest/PTestLatencyChild.h" michael@0: michael@0: #include "mozilla/TimeStamp.h" michael@0: michael@0: #define NR_TRIALS 10000 michael@0: #define NR_SPAMS 25000 michael@0: michael@0: namespace mozilla { michael@0: namespace _ipdltest { michael@0: michael@0: class TestLatencyParent : michael@0: public PTestLatencyParent michael@0: { michael@0: private: michael@0: typedef mozilla::TimeStamp TimeStamp; michael@0: typedef mozilla::TimeDuration TimeDuration; michael@0: michael@0: public: michael@0: TestLatencyParent(); michael@0: virtual ~TestLatencyParent(); michael@0: michael@0: static bool RunTestInProcesses() { return true; } michael@0: static bool RunTestInThreads() { return true; } michael@0: michael@0: void Main(); michael@0: michael@0: protected: michael@0: virtual bool RecvPong() MOZ_OVERRIDE; michael@0: virtual bool RecvPong5() MOZ_OVERRIDE; michael@0: michael@0: virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE michael@0: { michael@0: if (NormalShutdown != why) michael@0: fail("unexpected destruction!"); michael@0: michael@0: passed("\n" michael@0: " average #ping-pong/sec: %g\n" michael@0: " average #ping5-pong5/sec: %g\n" michael@0: " average #RPC call-answer/sec: %g\n" michael@0: " average #spams/sec: %g\n" michael@0: " pct. spams compressed away: %g\n", michael@0: double(NR_TRIALS) / mPPTimeTotal.ToSecondsSigDigits(), michael@0: double(NR_TRIALS) / mPP5TimeTotal.ToSecondsSigDigits(), michael@0: double(NR_TRIALS) / mRpcTimeTotal.ToSecondsSigDigits(), michael@0: double(NR_SPAMS) / mSpamTimeTotal.ToSecondsSigDigits(), michael@0: 100.0 * (double(NR_SPAMS - mNumChildProcessedCompressedSpams) / michael@0: double(NR_SPAMS))); michael@0: michael@0: QuitParent(); michael@0: } michael@0: michael@0: private: michael@0: void PingPongTrial(); michael@0: void Ping5Pong5Trial(); michael@0: void RpcTrials(); michael@0: void SpamTrial(); michael@0: void CompressedSpamTrial(); michael@0: void Exit(); michael@0: michael@0: TimeStamp mStart; michael@0: TimeDuration mPPTimeTotal; michael@0: TimeDuration mPP5TimeTotal; michael@0: TimeDuration mRpcTimeTotal; michael@0: TimeDuration mSpamTimeTotal; michael@0: michael@0: int mPPTrialsToGo; michael@0: int mPP5TrialsToGo; michael@0: uint32_t mNumChildProcessedCompressedSpams; michael@0: }; michael@0: michael@0: michael@0: class TestLatencyChild : michael@0: public PTestLatencyChild michael@0: { michael@0: public: michael@0: TestLatencyChild(); michael@0: virtual ~TestLatencyChild(); michael@0: michael@0: protected: michael@0: virtual bool RecvPing() MOZ_OVERRIDE; michael@0: virtual bool RecvPing5() MOZ_OVERRIDE; michael@0: virtual bool AnswerRpc() MOZ_OVERRIDE; michael@0: virtual bool RecvSpam() MOZ_OVERRIDE; michael@0: virtual bool AnswerSynchro() MOZ_OVERRIDE; michael@0: virtual bool RecvCompressedSpam(const uint32_t& seqno) MOZ_OVERRIDE; michael@0: virtual bool AnswerSynchro2(uint32_t* lastSeqno, michael@0: uint32_t* numMessagesDispatched) MOZ_OVERRIDE; michael@0: michael@0: virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE michael@0: { michael@0: if (NormalShutdown != why) michael@0: fail("unexpected destruction!"); michael@0: QuitChild(); michael@0: } michael@0: michael@0: uint32_t mLastSeqno; michael@0: uint32_t mNumProcessedCompressedSpams; michael@0: }; michael@0: michael@0: michael@0: } // namespace _ipdltest michael@0: } // namespace mozilla michael@0: michael@0: michael@0: #endif // ifndef mozilla__ipdltest_TestLatency_h