1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef SRC_SYSTEM_WRAPPERS_SOURCE_CPU_MEASUREMENT_HARNESS_H_
12 #define SRC_SYSTEM_WRAPPERS_SOURCE_CPU_MEASUREMENT_HARNESS_H_
13 
14 #include "system_wrappers/interface/scoped_ptr.h"
15 
16 namespace webrtc {
17 
18 class CpuWrapper;
19 class EventWrapper;
20 class ThreadWrapper;
21 
22 // This abstract class provides an interface that should be passed to
23 // CpuMeasurementHarness. CpuMeasurementHarness will call it with the
24 // frequency requested and measure the CPU usage for all calls.
25 class CpuTarget {
26  public:
27   // Callback function for which the CPU usage should be calculated.
28   virtual bool DoWork() = 0;
29 
30  protected:
CpuTarget()31   CpuTarget() {}
~CpuTarget()32   virtual ~CpuTarget() {}
33 };
34 
35 class CpuMeasurementHarness {
36  public:
37   static CpuMeasurementHarness* Create(CpuTarget* target,
38                                        int work_period_ms,
39                                        int work_iterations_per_period,
40                                        int duration_ms);
41   ~CpuMeasurementHarness();
42   bool Run();
43   int AverageCpu();
44 
45  protected:
46   CpuMeasurementHarness(CpuTarget* target, int work_period_ms,
47                         int work_iterations_per_period, int duration_ms);
48 
49  private:
50   bool WaitForCpuInit();
51   void Measure();
52   bool DoWork();
53 
54   CpuTarget* cpu_target_;
55   const int work_period_ms_;
56   const int work_iterations_per_period_;
57   const int duration_ms_;
58   int cpu_sum_;
59   int cpu_iterations_;
60   scoped_ptr<CpuWrapper> cpu_;
61   scoped_ptr<EventWrapper> event_;
62 };
63 
64 }  // namespace webrtc
65 
66 #endif  // SRC_SYSTEM_WRAPPERS_SOURCE_CPU_MEASUREMENT_HARNESS_H_
67