1 /* Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file. */
5 /* XRay -- a simple profiler for Native Client */
7 /* This header file is the private internal interface. */
9 #ifndef LIBRARIES_XRAY_XRAY_PRIV_H_
10 #define LIBRARIES_XRAY_XRAY_PRIV_H_
16 #include "xray/xray.h"
24 #define XRAY_FORCE_INLINE __attribute__((always_inline, no_instrument_function))
26 #define XRAY_TRACE_STACK_SIZE (256)
27 #define XRAY_TRACE_ANNOTATION_LENGTH (2048)
28 #define XRAY_TRACE_BUFFER_SIZE (1048576)
29 #define XRAY_ANNOTATION_STACK_SIZE ((XRAY_TRACE_STACK_SIZE) * \
30 (XRAY_TRACE_ANNOTATION_LENGTH))
31 #define XRAY_STRING_POOL_NODE_SIZE (32768)
32 #define XRAY_FRAME_MARKER (0xFFFFFFFF)
33 #define XRAY_NULL_ANNOTATION (0x0)
34 #define XRAY_FUNCTION_ALIGNMENT_BITS (4)
35 #define XRAY_ADDR_MASK (0xFFFFFF00)
36 #define XRAY_ADDR_SHIFT (4)
37 #define XRAY_DEPTH_MASK (0x000000FF)
38 #define XRAY_SYMBOL_TABLE_MAX_RATIO (0.66f)
39 #define XRAY_LINE_SIZE (1024)
40 #define XRAY_MAX_FRAMES (60)
41 #define XRAY_MAX_LABEL (64)
42 #define XRAY_DEFAULT_SYMBOL_TABLE_SIZE (4096)
43 #define XRAY_SYMBOL_POOL_NODE_SIZE (1024)
44 #define XRAY_GUARD_VALUE_0x12345678 (0x12345678)
45 #define XRAY_GUARD_VALUE_0x87654321 (0x87654321)
46 #define XRAY_EXTRACT_ADDR(x) (((x) & XRAY_ADDR_MASK) >> XRAY_ADDR_SHIFT)
47 #define XRAY_EXTRACT_DEPTH(x) ((x) & XRAY_DEPTH_MASK)
48 #define XRAY_PACK_ADDR(x) (((x) << XRAY_ADDR_SHIFT) & XRAY_ADDR_MASK)
49 #define XRAY_PACK_DEPTH(x) ((x) & XRAY_DEPTH_MASK)
50 #define XRAY_PACK_DEPTH_ADDR(d, a) (XRAY_PACK_DEPTH(d) | XRAY_PACK_ADDR(a))
51 #define XRAY_ALIGN64 __attribute((aligned(64)))
53 struct XRayStringPool
;
55 struct XRaySymbolPool
;
57 struct XRaySymbolTable
;
58 struct XRayTraceCapture
;
60 struct XRayTraceBufferEntry
{
62 uint32_t annotation_index
;
68 /* Important: don't instrument xray itself, so use */
69 /* XRAY_NO_INSTRUMENT on all xray functions */
71 XRAY_NO_INSTRUMENT
char* XRayStringPoolAppend(struct XRayStringPool
* pool
,
73 XRAY_NO_INSTRUMENT
struct XRayStringPool
* XRayStringPoolCreate();
74 XRAY_NO_INSTRUMENT
void XRayStringPoolFree(struct XRayStringPool
* pool
);
76 XRAY_NO_INSTRUMENT
void* XRayHashTableLookup(struct XRayHashTable
* table
,
78 XRAY_NO_INSTRUMENT
void* XRayHashTableInsert(struct XRayHashTable
* table
,
79 void* data
, uint32_t addr
);
80 XRAY_NO_INSTRUMENT
void* XRayHashTableAtIndex(
81 struct XRayHashTable
* table
, int i
);
82 XRAY_NO_INSTRUMENT
int XRayHashTableGetCapacity(struct XRayHashTable
* table
);
83 XRAY_NO_INSTRUMENT
int XRayHashTableGetCount(struct XRayHashTable
* table
);
84 XRAY_NO_INSTRUMENT
struct XRayHashTable
* XRayHashTableCreate(int capacity
);
85 XRAY_NO_INSTRUMENT
void XRayHashTableFree(struct XRayHashTable
* table
);
86 XRAY_NO_INSTRUMENT
void XRayHashTableHisto(FILE* f
);
88 XRAY_NO_INSTRUMENT
struct XRaySymbol
* XRaySymbolPoolAlloc(
89 struct XRaySymbolPool
* sympool
);
90 XRAY_NO_INSTRUMENT
struct XRaySymbolPool
* XRaySymbolPoolCreate();
91 XRAY_NO_INSTRUMENT
void XRaySymbolPoolFree(struct XRaySymbolPool
* sympool
);
93 XRAY_NO_INSTRUMENT
const char* XRayDemangle(char* demangle
, size_t buffersize
,
96 XRAY_NO_INSTRUMENT
const char* XRaySymbolGetName(struct XRaySymbol
* symbol
);
97 XRAY_NO_INSTRUMENT
struct XRaySymbol
* XRaySymbolCreate(
98 struct XRaySymbolPool
* sympool
, const char* name
);
99 XRAY_NO_INSTRUMENT
void XRaySymbolFree(struct XRaySymbol
* symbol
);
100 XRAY_NO_INSTRUMENT
int XRaySymbolCount(struct XRaySymbolTable
* symtab
);
102 XRAY_NO_INSTRUMENT
struct XRaySymbol
* XRaySymbolTableCreateEntry(
103 struct XRaySymbolTable
* symtab
, char* line
);
104 XRAY_NO_INSTRUMENT
void XRaySymbolTableParseMapfile(
105 struct XRaySymbolTable
* symbols
, const char* mapfilename
);
107 XRAY_NO_INSTRUMENT
struct XRaySymbol
* XRaySymbolTableAddByName(
108 struct XRaySymbolTable
* symtab
, const char* name
, uint32_t addr
);
110 XRAY_NO_INSTRUMENT
int XRaySymbolTableGetCount(struct XRaySymbolTable
* symtab
);
111 XRAY_NO_INSTRUMENT
struct XRaySymbol
* XRaySymbolTableLookup(
112 struct XRaySymbolTable
* symbols
, uint32_t addr
);
113 XRAY_NO_INSTRUMENT
struct XRaySymbol
* XRaySymbolTableAtIndex(
114 struct XRaySymbolTable
* symbols
, int i
);
115 XRAY_NO_INSTRUMENT
struct XRaySymbolTable
* XRaySymbolTableCreate(int size
);
116 XRAY_NO_INSTRUMENT
void XRaySymbolTableFree(struct XRaySymbolTable
* symbtab
);
118 XRAY_NO_INSTRUMENT
struct XRaySymbolTable
* XRayGetSymbolTable(
119 struct XRayTraceCapture
* capture
);
121 XRAY_NO_INSTRUMENT
void XRayCheckGuards(struct XRayTraceCapture
* capture
);
123 XRAY_NO_INSTRUMENT
struct XRayTraceBufferEntry
* XRayTraceGetEntry(
124 struct XRayTraceCapture
* capture
, int index
);
125 XRAY_NO_INSTRUMENT
int XRayTraceIncrementIndex(
126 struct XRayTraceCapture
* capture
, int i
);
127 XRAY_NO_INSTRUMENT
int XRayTraceDecrementIndex(
128 struct XRayTraceCapture
* capture
, int i
);
129 XRAY_NO_INSTRUMENT
bool XRayTraceIsAnnotation(
130 struct XRayTraceCapture
* capture
, int index
);
131 XRAY_NO_INSTRUMENT
void XRayTraceAppendString(
132 struct XRayTraceCapture
* capture
, char* src
);
133 XRAY_NO_INSTRUMENT
int XRayTraceCopyToString(
134 struct XRayTraceCapture
* capture
, int index
, char* dst
);
135 XRAY_NO_INSTRUMENT
int XRayTraceSkipAnnotation(
136 struct XRayTraceCapture
* capture
, int index
);
137 XRAY_NO_INSTRUMENT
int XRayTraceNextEntry(
138 struct XRayTraceCapture
* capture
, int index
);
140 XRAY_NO_INSTRUMENT
void XRayFrameMakeLabel(struct XRayTraceCapture
* capture
,
143 XRAY_NO_INSTRUMENT
int XRayFrameFindTail(struct XRayTraceCapture
* capture
);
145 XRAY_NO_INSTRUMENT
int XRayFrameGetCount(struct XRayTraceCapture
* capture
);
146 XRAY_NO_INSTRUMENT
int XRayFrameGetHead(struct XRayTraceCapture
* capture
);
147 XRAY_NO_INSTRUMENT
int XRayFrameGetTail(struct XRayTraceCapture
* capture
);
148 XRAY_NO_INSTRUMENT
int XRayFrameGetNext(
149 struct XRayTraceCapture
* capture
, int index
);
150 XRAY_NO_INSTRUMENT
uint64_t XRayFrameGetTotalTicks(
151 struct XRayTraceCapture
* capture
, int frame
);
152 XRAY_NO_INSTRUMENT
int XRayFrameGetTraceCount(
153 struct XRayTraceCapture
* capture
, int frame
);
154 XRAY_NO_INSTRUMENT
int XRayFrameGetTraceStartIndex(
155 struct XRayTraceCapture
* capture
, int frame
);
156 XRAY_NO_INSTRUMENT
int XRayFrameGetTraceEndIndex(
157 struct XRayTraceCapture
* capture
, int frame
);
158 XRAY_NO_INSTRUMENT
int XRayFrameGetAnnotationCount(
159 struct XRayTraceCapture
* capture
, int frame
);
160 XRAY_NO_INSTRUMENT
bool XRayFrameIsValid(
161 struct XRayTraceCapture
* capture
, int frame
);
164 XRAY_NO_INSTRUMENT
void XRayTraceReport(struct XRayTraceCapture
* capture
,
168 float percent_cutoff
,
170 XRAY_NO_INSTRUMENT
void XRayFrameReport(struct XRayTraceCapture
* capture
,
173 XRAY_NO_INSTRUMENT
void* XRayMalloc(size_t t
);
174 XRAY_NO_INSTRUMENT
void XRayFree(void* data
);
176 XRAY_NO_INSTRUMENT
void XRaySetMaxStackDepth(
177 struct XRayTraceCapture
* capture
, int stack_depth
);
178 XRAY_NO_INSTRUMENT
int XRayGetLastFrame(struct XRayTraceCapture
* capture
);
179 XRAY_NO_INSTRUMENT
void XRayDisableCapture(struct XRayTraceCapture
* capture
);
180 XRAY_NO_INSTRUMENT
void XRayEnableCapture(struct XRayTraceCapture
* capture
);
181 XRAY_NO_INSTRUMENT
void XRayLoadMapfile(
182 struct XRayTraceCapture
* capture
, const char* mapfilename
);
184 struct XRayTimestampPair
{
185 uint64_t xray
; /* internal xray timestamp */
186 int64_t pepper
; /* corresponding timestamp from PPAPI interface */
189 #ifndef XRAY_DISABLE_BROWSER_INTEGRATION
190 XRAY_NO_INSTRUMENT
void XRayGetTSC(uint64_t* tsc
);
191 XRAY_NO_INSTRUMENT
int32_t XRayGetSavedThreadID(
192 struct XRayTraceCapture
* capture
);
193 XRAY_NO_INSTRUMENT
struct XRayTimestampPair
XRayFrameGetStartTimestampPair(
194 struct XRayTraceCapture
* capture
, int frame
);
195 XRAY_NO_INSTRUMENT
struct XRayTimestampPair
XRayFrameGetEndTimestampPair(
196 struct XRayTraceCapture
* capture
, int frame
);
197 XRAY_NO_INSTRUMENT
struct XRayTimestampPair
XRayGenerateTimestampsNow(void);
201 #endif /* defined(XRAY) */
207 #endif /* LIBRARIES_XRAY_XRAY_PRIV_H_ */