blob: 76e5e63339f3827b2df23895cf5ee6c8cc8c9950 [file] [log] [blame]
The Android Open Source Project10e23ee2009-03-03 19:30:30 -08001/**
2 * @file daemon/opd_sfile.h
3 * Management of sample files
4 *
5 * @remark Copyright 2002 OProfile authors
6 * @remark Read the file COPYING
7 *
8 * @author John Levon
9 * @author Philippe Elie
10 */
11
12#ifndef OPD_SFILE_H
13#define OPD_SFILE_H
14
15#include "opd_cookie.h"
16
17#include "odb.h"
18#include "op_hw_config.h"
19#include "op_types.h"
20#include "op_list.h"
21
22#include <sys/types.h>
23
24struct kernel_image;
25struct transient;
26
27#define CG_HASH_SIZE 16
28#define UNUSED_EMBEDDED_OFFSET ~0LLU
29
30/**
31 * Each set of sample files (where a set is over the physical counter
32 * types) will have one of these for it. We match against the
33 * descriptions here to find which sample DB file we need to modify.
34 *
35 * cg files are stored in the hash.
36 */
37struct sfile {
38 /** hash value for this sfile */
39 unsigned long hashval;
40 /** cookie value for the binary profiled */
41 cookie_t cookie;
42 /** cookie value for the application owner, INVALID_COOKIE if not set */
43 cookie_t app_cookie;
44 /** thread ID, -1 if not set */
45 pid_t tid;
46 /** thread group ID, -1 if not set */
47 pid_t tgid;
48 /** CPU number */
49 unsigned int cpu;
50 /** kernel image if applicable */
51 struct kernel_image * kernel;
52 /** anonymous mapping */
53 struct anon_mapping * anon;
54 /** embedded offset for Cell BE SPU */
55 uint64_t embedded_offset;
56
57 /** hash table link */
58 struct list_head hash;
59 /** lru list */
60 struct list_head lru;
61 /** true if this file should be ignored in profiles */
62 int ignored;
63 /** opened sample files */
64 odb_t files[OP_MAX_COUNTERS];
Ben Cheng5a4eb4e2009-09-14 16:00:41 -070065 /** extended sample files */
66 odb_t * ext_files;
The Android Open Source Project10e23ee2009-03-03 19:30:30 -080067 /** hash table of opened cg sample files */
68 struct list_head cg_hash[CG_HASH_SIZE];
69};
70
71/** a call-graph entry */
72struct cg_entry {
73 /** where arc is to */
74 struct sfile to;
75 /** next in the hash slot */
76 struct list_head hash;
77};
78
79/** clear any sfiles that are for the kernel */
80void sfile_clear_kernel(void);
81
82struct anon_mapping;
83
84/** clear any sfiles for the given anon mapping */
85void sfile_clear_anon(struct anon_mapping *);
86
87/** sync sample files */
88void sfile_sync_files(void);
89
90/** close sample files */
91void sfile_close_files(void);
92
93/** clear out a certain amount of LRU entries
94 * return non-zero if the lru is already empty */
95int sfile_lru_clear(void);
96
97/** remove a sfile from the lru list, protecting it from sfile_lru_clear() */
98void sfile_get(struct sfile * sf);
99
100/** add this sfile to lru list */
101void sfile_put(struct sfile * sf);
102
103/**
104 * Find the sfile for the current parameters. Note that is required
105 * that the PC value be set appropriately (needed for kernel images)
106 */
107struct sfile * sfile_find(struct transient const * trans);
108
109/** Log the sample in a previously located sfile. */
110void sfile_log_sample(struct transient const * trans);
111
Ben Cheng5a4eb4e2009-09-14 16:00:41 -0700112/** Log the event/cycle count in a previously located sfile */
113void sfile_log_sample_count(struct transient const * trans,
114 unsigned long int count);
115
The Android Open Source Project10e23ee2009-03-03 19:30:30 -0800116/** initialise hashes */
117void sfile_init(void);
118
119#endif /* OPD_SFILE_H */