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_
10 #include "base/basictypes.h"
11 #include "base/time.h"
15 // ----------------------------------------------------------------------
16 // Initializes and finalizes the perf log. These functions should be
17 // called at the beginning and end (respectively) of running all the
18 // performance tests. The init function returns true on success.
19 // ----------------------------------------------------------------------
20 bool InitPerfLog(const FilePath
& log_path
);
21 void FinalizePerfLog();
23 // ----------------------------------------------------------------------
25 // Writes to the perf result log the given 'value' resulting from the
26 // named 'test'. The units are to aid in reading the log by people.
27 // ----------------------------------------------------------------------
28 void LogPerfResult(const char* test_name
, double value
, const char* units
);
30 // ----------------------------------------------------------------------
32 // A simple wrapper around Now()
33 // ----------------------------------------------------------------------
37 begin_
= base::TimeTicks::Now();
40 // Returns the time elapsed since object construction
41 base::TimeDelta
Elapsed() const {
42 return base::TimeTicks::Now() - begin_
;
46 base::TimeTicks begin_
;
49 // ----------------------------------------------------------------------
51 // Automates calling LogPerfResult for the common case where you want
52 // to measure the time that something took. Call Done() when the test
53 // is complete if you do extra work after the test or there are stack
54 // objects with potentially expensive constructors. Otherwise, this
55 // class with automatically log on destruction.
56 // ----------------------------------------------------------------------
57 class PerfTimeLogger
{
59 explicit PerfTimeLogger(const char* test_name
)
61 test_name_(test_name
) {
70 // we use a floating-point millisecond value because it is more
71 // intuitive than microseconds and we want more precision than
72 // integer milliseconds
73 LogPerfResult(test_name_
.c_str(), timer_
.Elapsed().InMillisecondsF(), "ms");
79 std::string test_name_
;
83 #endif // BASE_PERFTIMER_H_