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_
11 #include "base/basictypes.h"
12 #include "base/time.h"
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 // ----------------------------------------------------------------------
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 // ----------------------------------------------------------------------
33 // A simple wrapper around Now()
34 // ----------------------------------------------------------------------
38 begin_
= base::TimeTicks::Now();
41 // Returns the time elapsed since object construction
42 base::TimeDelta
Elapsed() const {
43 return base::TimeTicks::Now() - begin_
;
47 base::TimeTicks begin_
;
50 // ----------------------------------------------------------------------
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
{
60 explicit PerfTimeLogger(const char* test_name
)
62 test_name_(test_name
) {
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");
80 std::string test_name_
;
84 #endif // BASE_PERFTIMER_H_