| // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BASE_PERFTIMER_H_ |
| #define BASE_PERFTIMER_H_ |
| #pragma once |
| |
| #include <string> |
| |
| #include "base/basictypes.h" |
| #include "base/time.h" |
| |
| class FilePath; |
| |
| // ---------------------------------------------------------------------- |
| // Initializes and finalizes the perf log. These functions should be |
| // called at the beginning and end (respectively) of running all the |
| // performance tests. The init function returns true on success. |
| // ---------------------------------------------------------------------- |
| bool InitPerfLog(const FilePath& log_path); |
| void FinalizePerfLog(); |
| |
| // ---------------------------------------------------------------------- |
| // LogPerfResult |
| // Writes to the perf result log the given 'value' resulting from the |
| // named 'test'. The units are to aid in reading the log by people. |
| // ---------------------------------------------------------------------- |
| void LogPerfResult(const char* test_name, double value, const char* units); |
| |
| // ---------------------------------------------------------------------- |
| // PerfTimer |
| // A simple wrapper around Now() |
| // ---------------------------------------------------------------------- |
| class PerfTimer { |
| public: |
| PerfTimer() { |
| begin_ = base::TimeTicks::Now(); |
| } |
| |
| // Returns the time elapsed since object construction |
| base::TimeDelta Elapsed() const { |
| return base::TimeTicks::Now() - begin_; |
| } |
| |
| private: |
| base::TimeTicks begin_; |
| }; |
| |
| // ---------------------------------------------------------------------- |
| // PerfTimeLogger |
| // Automates calling LogPerfResult for the common case where you want |
| // to measure the time that something took. Call Done() when the test |
| // is complete if you do extra work after the test or there are stack |
| // objects with potentially expensive constructors. Otherwise, this |
| // class with automatically log on destruction. |
| // ---------------------------------------------------------------------- |
| class PerfTimeLogger { |
| public: |
| explicit PerfTimeLogger(const char* test_name) |
| : logged_(false), |
| test_name_(test_name) { |
| } |
| |
| ~PerfTimeLogger() { |
| if (!logged_) |
| Done(); |
| } |
| |
| void Done() { |
| // we use a floating-point millisecond value because it is more |
| // intuitive than microseconds and we want more precision than |
| // integer milliseconds |
| LogPerfResult(test_name_.c_str(), timer_.Elapsed().InMillisecondsF(), "ms"); |
| logged_ = true; |
| } |
| |
| private: |
| bool logged_; |
| std::string test_name_; |
| PerfTimer timer_; |
| }; |
| |
| #endif // BASE_PERFTIMER_H_ |