Updating trunk VERSION from 833.0 to 834.0
[chromium-blink-merge.git] / base / perftimer.h
blobdae6d615e109bd195d6bb2ea96641931b81750d8
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef BASE_PERFTIMER_H_
6 #define BASE_PERFTIMER_H_
7 #pragma once
9 #include <string>
11 #include "base/basictypes.h"
12 #include "base/time.h"
14 class FilePath;
16 // ----------------------------------------------------------------------
17 // Initializes and finalizes the perf log. These functions should be
18 // called at the beginning and end (respectively) of running all the
19 // performance tests. The init function returns true on success.
20 // ----------------------------------------------------------------------
21 bool InitPerfLog(const FilePath& log_path);
22 void FinalizePerfLog();
24 // ----------------------------------------------------------------------
25 // LogPerfResult
26 // Writes to the perf result log the given 'value' resulting from the
27 // named 'test'. The units are to aid in reading the log by people.
28 // ----------------------------------------------------------------------
29 void LogPerfResult(const char* test_name, double value, const char* units);
31 // ----------------------------------------------------------------------
32 // PerfTimer
33 // A simple wrapper around Now()
34 // ----------------------------------------------------------------------
35 class PerfTimer {
36 public:
37 PerfTimer() {
38 begin_ = base::TimeTicks::Now();
41 // Returns the time elapsed since object construction
42 base::TimeDelta Elapsed() const {
43 return base::TimeTicks::Now() - begin_;
46 private:
47 base::TimeTicks begin_;
50 // ----------------------------------------------------------------------
51 // PerfTimeLogger
52 // Automates calling LogPerfResult for the common case where you want
53 // to measure the time that something took. Call Done() when the test
54 // is complete if you do extra work after the test or there are stack
55 // objects with potentially expensive constructors. Otherwise, this
56 // class with automatically log on destruction.
57 // ----------------------------------------------------------------------
58 class PerfTimeLogger {
59 public:
60 explicit PerfTimeLogger(const char* test_name)
61 : logged_(false),
62 test_name_(test_name) {
65 ~PerfTimeLogger() {
66 if (!logged_)
67 Done();
70 void Done() {
71 // we use a floating-point millisecond value because it is more
72 // intuitive than microseconds and we want more precision than
73 // integer milliseconds
74 LogPerfResult(test_name_.c_str(), timer_.Elapsed().InMillisecondsF(), "ms");
75 logged_ = true;
78 private:
79 bool logged_;
80 std::string test_name_;
81 PerfTimer timer_;
84 #endif // BASE_PERFTIMER_H_