Let's benchmark malloc
[WebKit-https.git] / PerformanceTests / MallocBench / MallocBench / Benchmark.h
1 /*
2  * Copyright (C) 2014 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef Benchmark_h
27 #define Benchmark_h
28
29 #include <map>
30 #include <string>
31
32 typedef void (*BenchmarkFunction)(bool isParallel);
33 struct BenchmarkPair;
34
35 class Benchmark {
36 public:
37     struct Memory {
38         Memory()
39             : resident()
40             , residentMax()
41         {
42         }
43         
44         Memory(size_t resident, size_t residentMax)
45             : resident(resident)
46             , residentMax(residentMax)
47         {
48         }
49
50         Memory operator-(const Memory& other)
51         {
52             return Memory(resident - other.resident, residentMax - other.residentMax);
53         }
54     
55         size_t resident;
56         size_t residentMax;
57     };
58
59     static double currentTimeMS();
60     static Memory currentMemoryBytes();
61
62     Benchmark(const std::string&, bool isParallel, bool measureHeap, size_t heapSize);
63     
64     bool isValid() { return m_benchmarkPair; }
65     
66     void printBenchmarks();
67     void run();
68     void printReport();
69
70 private:
71     typedef std::map<std::string, BenchmarkFunction> MapType;
72     
73     void runOnce();
74
75     MapType m_map;
76
77     const BenchmarkPair* m_benchmarkPair;
78     bool m_isParallel;
79     bool m_measureHeap;
80     size_t m_heapSize;
81
82     Memory m_memory;
83     double m_elapsedTime;
84 };
85
86 #endif // Benchmark_h