1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef SIMPLE_PERF_RECORD_FILE_FORMAT_H_
18 #define SIMPLE_PERF_RECORD_FILE_FORMAT_H_
19 
20 #include "perf_event.h"
21 
22 // The file structure of perf.data:
23 //    file_header
24 //    id_section
25 //    attr section
26 //    data section
27 //    feature section
28 //
29 //  The feature section has the following structure:
30 //    a section descriptor array, each element contains the section information of one add_feature.
31 //    data section of feature 1
32 //    data section of feature 2
33 //    ....
34 
35 namespace PerfFileFormat {
36 
37 enum {
38   FEAT_RESERVED = 0,
39   FEAT_FIRST_FEATURE = 1,
40   FEAT_TRACING_DATA = 1,
41   FEAT_BUILD_ID,
42   FEAT_HOSTNAME,
43   FEAT_OSRELEASE,
44   FEAT_VERSION,
45   FEAT_ARCH,
46   FEAT_NRCPUS,
47   FEAT_CPUDESC,
48   FEAT_CPUID,
49   FEAT_TOTAL_MEM,
50   FEAT_CMDLINE,
51   FEAT_EVENT_DESC,
52   FEAT_CPU_TOPOLOGY,
53   FEAT_NUMA_TOPOLOGY,
54   FEAT_BRANCH_STACK,
55   FEAT_PMU_MAPPINGS,
56   FEAT_GROUP_DESC,
57   FEAT_LAST_FEATURE,
58   FEAT_MAX_NUM = 256,
59 };
60 
61 struct SectionDesc {
62   uint64_t offset;
63   uint64_t size;
64 };
65 
66 static const char* PERF_MAGIC = "PERFILE2";
67 
68 struct FileHeader {
69   char magic[8];
70   uint64_t header_size;
71   uint64_t attr_size;
72   SectionDesc attrs;
73   SectionDesc data;
74   SectionDesc event_types;
75   unsigned char features[FEAT_MAX_NUM / 8];
76 };
77 
78 struct FileAttr {
79   perf_event_attr attr;
80   SectionDesc ids;
81 };
82 
83 }  // namespace PerfFileFormat
84 
85 #endif  // SIMPLE_PERF_RECORD_FILE_FORMAT_H_
86