Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: src/platform/microbenchmark/microbenchmark.h

Issue 492005: Overhaul microbenchmark so that it can be pulled in easily by any package (Closed)
Patch Set: fix cmasone's comments Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/platform/microbenchmark/make_pkg.sh ('k') | src/platform/microbenchmark/microbenchmark.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // Some portions Copyright (c) 2009 The Chromium Authors.
5 // 4 //
6 // Simple microbenchmark framework 5 // Simple microbenchmark framework
7 6
8 #ifndef __CHROMEOS_MICROBENCHMARK_MICROBENCHMARK_H 7 #ifndef __CHROMEOS_MICROBENCHMARK_MICROBENCHMARK_H
9 #define __CHROMEOS_MICROBENCHMARK_MICROBENCHMARK_H 8 #define __CHROMEOS_MICROBENCHMARK_MICROBENCHMARK_H
10 9
11 #include <errno.h> 10 #include <errno.h>
12 #include <time.h> 11 #include <time.h>
13 12
14 #include <iostream> 13 #include <iostream>
15 14
16 #include <base/basictypes.h> 15 #include <base/basictypes.h>
17 #include <base/command_line.h> 16 #include <base/command_line.h>
18 #include <base/logging.h> 17 #include <base/logging.h>
19 #include <base/scoped_ptr.h> 18 #include <base/scoped_ptr.h>
20 #include <gtest/gtest.h> 19 #include <gtest/gtest.h>
21 20
21 // CHROMEOS_MICROBENCHMARK_WITH_SETUP is the primary macro for
22 // using a microbenchmark from this framework.
23 //
24 // For quick use, create a new .cc file in your project.
25 // Include this header and create two static functions,
26 // one for setup and one for executing the test once.
27 // After both are defined, append:
28 // CHROMEOS_MICROBENCHMARK_WITH_SETUP(MySetup, MyTest, 100000)
29 // The last argument is the default number of runs. This may
30 // be overridden at run-time and, in the future, may be automatically
31 // tweaked to avoid measurement errors.
32 //
33 // The _NAME function should be of the prototype:
34 // void MyTest(bool scaffold_only);
35 // The _SETUP_NAME function should be of the prototype:
36 // void SetupMyTest(uint64 number_of_runs);
22 #define CHROMEOS_MICROBENCHMARK_WITH_SETUP(_SETUP_NAME, _NAME, _RUNS) \ 37 #define CHROMEOS_MICROBENCHMARK_WITH_SETUP(_SETUP_NAME, _NAME, _RUNS) \
23 class _NAME ## Class : public Microbenchmark { \ 38 class _NAME ## Class : public Microbenchmark { \
24 public: \ 39 public: \
25 _NAME ## Class() {} \ 40 _NAME ## Class() {} \
26 ~_NAME ## Class() {} \ 41 ~_NAME ## Class() {} \
27 const char *name() const { return #_NAME; } \ 42 const char *name() const { return #_NAME; } \
28 void Setup(uint64 runs) { _SETUP_NAME(runs); } \ 43 void Setup(uint64 runs) { _SETUP_NAME(runs); } \
29 void SingleTest(bool scaffold_only) { _NAME(scaffold_only); } \ 44 void SingleTest(bool scaffold_only) { _NAME(scaffold_only); } \
30 }; \ 45 }; \
31 TEST(_NAME, Microbenchmark) { \ 46 TEST(_NAME, Microbenchmark) { \
32 _NAME ## Class chromeos_benchmark; \ 47 _NAME ## Class chromeos_benchmark; \
33 CommandLine *cl = CommandLine::ForCurrentProcess(); \ 48 CommandLine *cl = CommandLine::ForCurrentProcess(); \
34 errno = 0; \ 49 errno = 0; \
35 std::string runs_str = \ 50 std::string runs_str = \
36 cl->GetSwitchValueASCII(chromeos::Microbenchmark::kRunsSwitch); \ 51 cl->GetSwitchValueASCII(chromeos::Microbenchmark::kRunsSwitch); \
37 unsigned long long runs = _RUNS; \ 52 unsigned long long runs = _RUNS; \
38 if (!runs_str.empty()) { \ 53 if (!runs_str.empty()) { \
39 errno = 0; \ 54 errno = 0; \
40 runs = strtoull(runs_str.c_str(), NULL, 0); \ 55 runs = strtoull(runs_str.c_str(), NULL, 0); \
41 if (errno) \ 56 if (errno) \
42 runs = _RUNS; \ 57 runs = _RUNS; \
43 } \ 58 } \
44 chromeos_benchmark.Run(runs); \ 59 chromeos_benchmark.Run(runs); \
45 chromeos_benchmark.Print(); \ 60 chromeos_benchmark.Print(); \
46 } 61 }
47 62
63 // This is a shortcut macro. If you don't need to setup any global state for
64 // use in your test, you can use this instead of _WITH_SETUP.
48 #define CHROMEOS_MICROBENCHMARK(_NAME, _RUNS) \ 65 #define CHROMEOS_MICROBENCHMARK(_NAME, _RUNS) \
49 CHROMEOS_MICROBENCHMARK_WITH_SETUP(chromeos::microbenchmark_helper::NoSetup, \ 66 CHROMEOS_MICROBENCHMARK_WITH_SETUP(chromeos::microbenchmark_helper::NoSetup, \
50 _NAME, \ 67 _NAME, \
51 _RUNS) 68 _RUNS)
52 namespace chromeos { 69 namespace chromeos {
53 70
54 namespace microbenchmark_helper { 71 namespace microbenchmark_helper {
55 void NoSetup(uint64 runs); 72 void NoSetup(uint64 runs);
56 } // microbenchmark 73 } // microbenchmark_helper
57 74
58 // A simple microbenchmarking abstract class. 75 // A simple microbenchmarking abstract class.
59 // This class is not thread-safe and should only be invoked 76 // This class is not thread-safe and should only be invoked
60 // from one thread at a time. 77 // from one thread at a time.
61 class Microbenchmark { 78 class Microbenchmark {
62 public: 79 public:
63 Microbenchmark() : scaffold_total_ns_(0), 80 Microbenchmark() : scaffold_total_ns_(0),
64 scaffold_per_run_ns_(0), 81 scaffold_per_run_ns_(0),
65 total_ns_(0), 82 total_ns_(0),
66 per_run_ns_(0), 83 per_run_ns_(0),
(...skipping 25 matching lines...) Expand all
92 uint64 scaffold_total_ns_; 109 uint64 scaffold_total_ns_;
93 uint64 scaffold_per_run_ns_; 110 uint64 scaffold_per_run_ns_;
94 uint64 total_ns_; 111 uint64 total_ns_;
95 uint64 per_run_ns_; 112 uint64 per_run_ns_;
96 uint64 runs_; 113 uint64 runs_;
97 DISALLOW_COPY_AND_ASSIGN(Microbenchmark); 114 DISALLOW_COPY_AND_ASSIGN(Microbenchmark);
98 }; 115 };
99 116
100 } // chromeos 117 } // chromeos
101 #endif // __CHROMEOS_MICROBENCHMARK_MICROBENCHMARK_H 118 #endif // __CHROMEOS_MICROBENCHMARK_MICROBENCHMARK_H
OLDNEW
« no previous file with comments | « src/platform/microbenchmark/make_pkg.sh ('k') | src/platform/microbenchmark/microbenchmark.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698