blob: 95b42bfa30c00360813532c3a7a16fde3a452e8f [file] [log] [blame]
Jon Medhurst15ce78d2014-04-10 09:02:02 +01001/**
Jon Medhurstb1d07442015-05-08 12:04:18 +01002 * Copyright (C) ARM Limited 2013-2015. All rights reserved.
Jon Medhurst15ce78d2014-04-10 09:02:02 +01003 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#ifndef PERFDRIVER_H
10#define PERFDRIVER_H
11
Jon Medhurst96b56152014-10-30 18:01:15 +000012#include <stdint.h>
13
Jon Medhurst15ce78d2014-04-10 09:02:02 +010014#include "Driver.h"
15
16// If debugfs is not mounted at /sys/kernel/debug, update DEBUGFS_PATH
17#define DEBUGFS_PATH "/sys/kernel/debug"
18#define EVENTS_PATH DEBUGFS_PATH "/tracing/events"
19
20#define SCHED_SWITCH "sched/sched_switch"
Jon Medhurst96b56152014-10-30 18:01:15 +000021#define CPU_IDLE "power/cpu_idle"
Jon Medhurstb1d07442015-05-08 12:04:18 +010022#define CPU_FREQUENCY "power/cpu_frequency"
Jon Medhurst15ce78d2014-04-10 09:02:02 +010023
24class Buffer;
25class DynBuf;
Jon Medhurst15ce78d2014-04-10 09:02:02 +010026class PerfGroup;
27
Jon Medhurst96b56152014-10-30 18:01:15 +000028class PerfDriver : public SimpleDriver {
Jon Medhurst15ce78d2014-04-10 09:02:02 +010029public:
30 PerfDriver();
31 ~PerfDriver();
32
Jon Medhurste31266f2014-08-04 15:47:44 +010033 bool getLegacySupport() const { return mLegacySupport; }
34
Jon Medhurst15ce78d2014-04-10 09:02:02 +010035 bool setup();
36 bool summary(Buffer *const buffer);
Jon Medhurstb1d07442015-05-08 12:04:18 +010037 void coreName(const uint64_t currTime, Buffer *const buffer, const int cpu);
Jon Medhurst15ce78d2014-04-10 09:02:02 +010038 bool isSetup() const { return mIsSetup; }
39
Jon Medhurst15ce78d2014-04-10 09:02:02 +010040 void setupCounter(Counter &counter);
41
Jon Medhurst96b56152014-10-30 18:01:15 +000042 bool enable(const uint64_t currTime, PerfGroup *const group, Buffer *const buffer) const;
Jon Medhurstb1d07442015-05-08 12:04:18 +010043 void read(Buffer *const buffer, const int cpu);
Jon Medhurst15ce78d2014-04-10 09:02:02 +010044
45 static long long getTracepointId(const char *const name, DynBuf *const printb);
46
47private:
Jon Medhurst15ce78d2014-04-10 09:02:02 +010048 void addCpuCounters(const char *const counterName, const int type, const int numCounters);
Jon Medhurstb1d07442015-05-08 12:04:18 +010049 void addUncoreCounters(const char *const counterName, const int type, const int numCounters, const bool hasCyclesCounter);
Jon Medhurst15ce78d2014-04-10 09:02:02 +010050
Jon Medhurst15ce78d2014-04-10 09:02:02 +010051 bool mIsSetup;
Jon Medhurste31266f2014-08-04 15:47:44 +010052 bool mLegacySupport;
Jon Medhurst15ce78d2014-04-10 09:02:02 +010053
54 // Intentionally undefined
55 PerfDriver(const PerfDriver &);
56 PerfDriver &operator=(const PerfDriver &);
57};
58
59#endif // PERFDRIVER_H