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. */ 4 5 /* XRay -- a simple profiler for Native Client */ 6 7 8 #ifndef LIBRARIES_XRAY_XRAY_H_ 9 #define LIBRARIES_XRAY_XRAY_H_ 10 11 #include <stdint.h> 12 13 #ifndef XRAY_DISABLE_BROWSER_INTEGRATION 14 #include "ppapi/c/ppb.h" 15 #endif 16 17 #if defined(__arm__) 18 #undef XRAY 19 #endif 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 #define XRAY_NO_INSTRUMENT __attribute__((no_instrument_function)) 26 #define XRAY_INLINE __attribute__((always_inline, no_instrument_function)) 27 28 #if defined(XRAY) 29 30 /* Do not call __XRayAnnotate* directly; instead use the */ 31 /* XRayAnnotate() macros below. */ 32 XRAY_NO_INSTRUMENT void __XRayAnnotate(const char* str, ...) 33 __attribute__ ((format(printf, 1, 2))); 34 XRAY_NO_INSTRUMENT void __XRayAnnotateFiltered(const uint32_t filter, 35 const char* str, ...) __attribute__ ((format(printf, 2, 3))); 36 37 /* This is the beginning of the public XRay API */ 38 39 /* Ok if mapfilename is NULL, no symbols will be loaded. On glibc builds, 40 * XRay will also attempt to populate the symbol table with dladdr() 41 */ 42 XRAY_NO_INSTRUMENT struct XRayTraceCapture* XRayInit(int stack_size, 43 int buffer_size, 44 int frame_count, 45 const char* mapfilename); 46 XRAY_NO_INSTRUMENT void XRayShutdown(struct XRayTraceCapture* capture); 47 XRAY_NO_INSTRUMENT void XRayStartFrame(struct XRayTraceCapture* capture); 48 XRAY_NO_INSTRUMENT void XRayEndFrame(struct XRayTraceCapture* capture); 49 XRAY_NO_INSTRUMENT void XRaySetAnnotationFilter( 50 struct XRayTraceCapture* capture, uint32_t filter); 51 XRAY_NO_INSTRUMENT void XRaySaveReport(struct XRayTraceCapture* capture, 52 const char* filename, 53 float percent_cutoff, 54 int cycle_cutoff); 55 XRAY_NO_INSTRUMENT void XRayReport(struct XRayTraceCapture* capture, 56 FILE* f, 57 float percent_cutoff, 58 int ticks_cutoff); 59 60 #ifndef XRAY_DISABLE_BROWSER_INTEGRATION 61 XRAY_NO_INSTRUMENT void XRayBrowserTraceReport( 62 struct XRayTraceCapture* capture); 63 XRAY_NO_INSTRUMENT void XRayRegisterBrowserInterface( 64 PPB_GetInterface get_browser_interface); 65 #endif /* XRAY_DISABLE_BROWSER_INTEGRATION */ 66 67 68 #if defined(XRAY_ANNOTATE) 69 #define XRayAnnotate(...) __XRayAnnotate(__VA_ARGS__) 70 #define XRayAnnotateFiltered(...) __XRayAnnotateFiltered(__VA_ARGS__) 71 #else 72 #define XRayAnnotate(...) 73 #define XRayAnnotateFiltered(...) 74 #endif 75 /* This is the end of the public XRay API */ 76 77 #else /* defined(XRAY) */ 78 79 /* Builds that don't define XRAY will use these 'null' functions instead. */ 80 81 #define XRayAnnotate(...) 82 #define XRayAnnotateFiltered(...) 83 84 inline struct XRayTraceCapture* XRayInit(int stack_size, 85 int buffer_size, 86 int frame_count, 87 const char* mapfilename) { 88 return NULL; 89 } 90 inline void XRayShutdown(struct XRayTraceCapture* capture) {} 91 inline void XRayStartFrame(struct XRayTraceCapture* capture) {} 92 inline void XRayEndFrame(struct XRayTraceCapture* capture) {} 93 inline void XRaySetAnnotationFilter(struct XRayTraceCapture* capture, 94 uint32_t filter) {} 95 inline void XRaySaveReport(struct XRayTraceCapture* capture, 96 const char* filename, 97 float percent_cutoff, 98 int cycle_cutoff) {} 99 inline void XRayReport(struct XRayTraceCapture* capture, 100 FILE* f, 101 float percent_cutoff, 102 int ticks_cutoff) {} 103 104 #ifndef XRAY_DISABLE_BROWSER_INTEGRATION 105 inline void XRayBrowserTraceReport(struct XRayTraceCapture* capture) {} 106 inline void XRayRegisterBrowserInterface( 107 PPB_GetInterface get_browser_interface) {} 108 #endif /* XRAY_DISABLE_BROWSER_INTEGRATION */ 109 110 111 #endif /* defined(XRAY) */ 112 113 #ifdef __cplusplus 114 } 115 #endif 116 117 #endif /* LIBRARIES_XRAY_XRAY_H_ */ 118