1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef _PERF_RECORD_H
3  #define _PERF_RECORD_H
4  
5  #include <time.h>
6  #include <stdbool.h>
7  #include <linux/types.h>
8  #include <linux/stddef.h>
9  #include <linux/perf_event.h>
10  #include "util/target.h"
11  
12  struct option;
13  
14  struct record_opts {
15  	struct target target;
16  	bool	      inherit_stat;
17  	bool	      no_buffering;
18  	bool	      no_inherit;
19  	bool	      no_inherit_set;
20  	bool	      no_samples;
21  	bool	      raw_samples;
22  	bool	      sample_address;
23  	bool	      sample_phys_addr;
24  	bool	      sample_data_page_size;
25  	bool	      sample_code_page_size;
26  	bool	      sample_weight;
27  	bool	      sample_time;
28  	bool	      sample_time_set;
29  	bool	      sample_cpu;
30  	bool	      sample_identifier;
31  	bool	      period;
32  	bool	      period_set;
33  	bool	      running_time;
34  	bool	      full_auxtrace;
35  	bool	      auxtrace_snapshot_mode;
36  	bool	      auxtrace_snapshot_on_exit;
37  	bool	      auxtrace_sample_mode;
38  	bool	      record_namespaces;
39  	bool	      record_cgroup;
40  	bool	      record_switch_events;
41  	bool	      record_switch_events_set;
42  	bool	      all_kernel;
43  	bool	      all_user;
44  	bool	      kernel_callchains;
45  	bool	      user_callchains;
46  	bool	      tail_synthesize;
47  	bool	      overwrite;
48  	bool	      ignore_missing_thread;
49  	bool	      strict_freq;
50  	bool	      sample_id;
51  	bool	      no_bpf_event;
52  	bool	      kcore;
53  	bool	      text_poke;
54  	bool	      build_id;
55  	unsigned int  freq;
56  	unsigned int  mmap_pages;
57  	unsigned int  auxtrace_mmap_pages;
58  	unsigned int  user_freq;
59  	u64	      branch_stack;
60  	u64	      sample_intr_regs;
61  	u64	      sample_user_regs;
62  	u64	      default_interval;
63  	u64	      user_interval;
64  	size_t	      auxtrace_snapshot_size;
65  	const char    *auxtrace_snapshot_opts;
66  	const char    *auxtrace_sample_opts;
67  	bool	      sample_transaction;
68  	bool	      use_clockid;
69  	clockid_t     clockid;
70  	u64	      clockid_res_ns;
71  	int	      nr_cblocks;
72  	int	      affinity;
73  	int	      mmap_flush;
74  	unsigned int  comp_level;
75  	unsigned int  nr_threads_synthesize;
76  	int	      ctl_fd;
77  	int	      ctl_fd_ack;
78  	bool	      ctl_fd_close;
79  	int	      synth;
80  	int	      threads_spec;
81  	const char    *threads_user_spec;
82  };
83  
84  extern const char * const *record_usage;
85  extern struct option *record_options;
86  
87  int record__parse_freq(const struct option *opt, const char *str, int unset);
88  
record_opts__no_switch_events(const struct record_opts * opts)89  static inline bool record_opts__no_switch_events(const struct record_opts *opts)
90  {
91  	return opts->record_switch_events_set && !opts->record_switch_events;
92  }
93  
94  #endif // _PERF_RECORD_H
95