blob: 19d435a9623b542cc6b53411eb91b92276731e3b [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Thomas Gleixner6eda5832009-05-01 18:29:57 +02002#ifndef _PERF_PERF_H
3#define _PERF_PERF_H
4
Jiri Olsa82baa0e2014-05-05 12:58:31 +02005#include <time.h>
6#include <stdbool.h>
7#include <linux/types.h>
Arnaldo Carvalho de Melo44fe6192018-07-30 13:15:03 -03008#include <linux/stddef.h>
Jiri Olsa82baa0e2014-05-05 12:58:31 +02009#include <linux/perf_event.h>
10
11extern bool test_attr__enabled;
Jiri Olsa10213e22017-07-03 16:50:18 +020012void test_attr__ready(void);
Jiri Olsa82baa0e2014-05-05 12:58:31 +020013void test_attr__init(void);
14void test_attr__open(struct perf_event_attr *attr, pid_t pid, int cpu,
15 int fd, int group_fd, unsigned long flags);
16
17#define HAVE_ATTR_TEST
Jiri Olsa43599d12014-05-05 12:53:20 +020018#include "perf-sys.h"
Peter Zijlstraa94d3422013-10-30 11:42:46 +010019
Thomas Gleixnera92e702372009-05-01 18:39:47 +020020static inline unsigned long long rdclock(void)
21{
22 struct timespec ts;
23
24 clock_gettime(CLOCK_MONOTONIC, &ts);
25 return ts.tv_sec * 1000000000ULL + ts.tv_nsec;
26}
Thomas Gleixner6eda5832009-05-01 18:29:57 +020027
Christophe Leroy21b87322017-09-22 13:20:43 +020028#ifndef MAX_NR_CPUS
Kyle Meyer1182ff22019-06-20 14:36:30 -050029#define MAX_NR_CPUS 2048
Christophe Leroy21b87322017-09-22 13:20:43 +020030#endif
Thomas Gleixner6eda5832009-05-01 18:29:57 +020031
Feng Tang70cb4e92012-10-30 11:56:02 +080032extern const char *input_name;
Arnaldo Carvalho de Melo80354582010-05-17 15:51:10 -030033extern bool perf_host, perf_guest;
Stephane Eranianfbe96f22011-09-30 15:40:40 +020034extern const char perf_version_string[];
Zhang, Yanmina1645ce2010-04-19 13:32:50 +080035
Arnaldo Carvalho de Melo3af6e332011-10-13 08:52:46 -030036void pthread__unblock_sigwinch(void);
37
Namhyung Kim12864b32012-04-26 14:15:22 +090038#include "util/target.h"
Namhyung Kimbea03402012-04-26 14:15:15 +090039
Arnaldo Carvalho de Melob4006792013-12-19 14:43:45 -030040struct record_opts {
Arnaldo Carvalho de Melo602ad872013-11-12 16:46:16 -030041 struct target target;
Arnaldo Carvalho de Meloed80f582011-11-11 15:12:56 -020042 bool group;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020043 bool inherit_stat;
Arnaldo Carvalho de Melo509051e2014-01-14 17:52:14 -030044 bool no_buffering;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020045 bool no_inherit;
Adrian Hunter69e7e5b2013-11-18 11:55:57 +020046 bool no_inherit_set;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020047 bool no_samples;
48 bool raw_samples;
49 bool sample_address;
Kan Liang3b0a5da2017-08-29 13:11:08 -040050 bool sample_phys_addr;
Andi Kleen05484292013-01-24 16:10:29 +010051 bool sample_weight;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020052 bool sample_time;
Adrian Hunter3abebc52015-07-06 14:51:01 +030053 bool sample_time_set;
Jiri Olsab6f35ed2016-08-01 20:02:35 +020054 bool sample_cpu;
Andrew Vagin3e76ac72011-12-20 17:32:45 +030055 bool period;
Jiri Olsaf290aa12018-02-01 09:38:11 +010056 bool period_set;
Andi Kleen85c273d2015-02-24 15:13:40 -080057 bool running_time;
Adrian Hunter9e0cc4f2015-04-09 18:53:44 +030058 bool full_auxtrace;
Adrian Hunterd20031b2015-04-30 17:37:31 +030059 bool auxtrace_snapshot_mode;
Hari Bathinif3b36142017-03-08 02:11:43 +053060 bool record_namespaces;
Adrian Hunterb757bb02015-07-21 12:44:04 +030061 bool record_switch_events;
Jiri Olsa85723882016-02-15 09:34:31 +010062 bool all_kernel;
63 bool all_user;
Wang Nan4ea648a2016-07-14 08:34:47 +000064 bool tail_synthesize;
Wang Nan626a6b72016-07-14 08:34:45 +000065 bool overwrite;
Jiri Olsaa359c172016-12-13 08:46:22 +010066 bool ignore_missing_thread;
Arnaldo Carvalho de Melob09c2362018-03-01 14:52:50 -030067 bool strict_freq;
Jiri Olsaad46e48c2018-03-02 17:13:54 +010068 bool sample_id;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020069 unsigned int freq;
Arnaldo Carvalho de Melo01c2d992011-11-09 09:16:26 -020070 unsigned int mmap_pages;
Adrian Hunter9e0cc4f2015-04-09 18:53:44 +030071 unsigned int auxtrace_mmap_pages;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020072 unsigned int user_freq;
Stephane Eraniana00dc312012-05-25 23:13:44 +020073 u64 branch_stack;
Stephane Eranianbcc84ec2015-08-31 18:41:12 +020074 u64 sample_intr_regs;
Andi Kleen84c41742017-09-05 10:00:28 -070075 u64 sample_user_regs;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020076 u64 default_interval;
77 u64 user_interval;
Adrian Hunterd20031b2015-04-30 17:37:31 +030078 size_t auxtrace_snapshot_size;
79 const char *auxtrace_snapshot_opts;
Andi Kleen475eeab2013-09-20 07:40:43 -070080 bool sample_transaction;
Andi Kleen6619a532014-01-11 13:38:27 -080081 unsigned initial_delay;
Peter Zijlstra814c8c32015-03-31 00:19:31 +020082 bool use_clockid;
83 clockid_t clockid;
Kan Liang9d9cad72015-06-17 09:51:11 -040084 unsigned int proc_map_timeout;
Arnaldo Carvalho de Melo0f82ebc2011-11-08 14:41:57 -020085};
86
Namhyung Kime5b2c202014-10-23 00:15:46 +090087struct option;
88extern const char * const *record_usage;
89extern struct option *record_options;
Jin Yao3aa94b12018-03-30 17:27:15 +080090extern int version_verbose;
Arnaldo Carvalho de Melo67230472018-03-01 13:46:23 -030091
92int record__parse_freq(const struct option *opt, const char *str, int unset);
Thomas Gleixner6eda5832009-05-01 18:29:57 +020093#endif