1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Copyright (c) 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * Use of this source code is governed by a BSD-style license that can be 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * found in the LICENSE file. */ 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* XRay -- a simple profiler for Native Client */ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef LIBRARIES_XRAY_XRAY_H_ 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define LIBRARIES_XRAY_XRAY_H_ 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <stdint.h> 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef XRAY_DISABLE_BROWSER_INTEGRATION 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ppapi/c/ppb.h" 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(__arm__) 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#undef XRAY 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifdef __cplusplus 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochextern "C" { 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define XRAY_NO_INSTRUMENT __attribute__((no_instrument_function)) 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define XRAY_INLINE __attribute__((always_inline, no_instrument_function)) 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(XRAY) 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Do not call __XRayAnnotate* directly; instead use the */ 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* XRayAnnotate() macros below. */ 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochXRAY_NO_INSTRUMENT void __XRayAnnotate(const char* str, ...) 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch __attribute__ ((format(printf, 1, 2))); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochXRAY_NO_INSTRUMENT void __XRayAnnotateFiltered(const uint32_t filter, 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const char* str, ...) __attribute__ ((format(printf, 2, 3))); 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* This is the beginning of the public XRay API */ 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Ok if mapfilename is NULL, no symbols will be loaded. On glibc builds, 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * XRay will also attempt to populate the symbol table with dladdr() 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochXRAY_NO_INSTRUMENT struct XRayTraceCapture* XRayInit(int stack_size, 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int buffer_size, 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int frame_count, 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const char* mapfilename); 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochXRAY_NO_INSTRUMENT void XRayShutdown(struct XRayTraceCapture* capture); 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochXRAY_NO_INSTRUMENT void XRayStartFrame(struct XRayTraceCapture* capture); 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochXRAY_NO_INSTRUMENT void XRayEndFrame(struct XRayTraceCapture* capture); 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochXRAY_NO_INSTRUMENT void XRaySetAnnotationFilter( 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch struct XRayTraceCapture* capture, uint32_t filter); 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochXRAY_NO_INSTRUMENT void XRaySaveReport(struct XRayTraceCapture* capture, 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const char* filename, 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch float percent_cutoff, 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int cycle_cutoff); 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochXRAY_NO_INSTRUMENT void XRayReport(struct XRayTraceCapture* capture, 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE* f, 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch float percent_cutoff, 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int ticks_cutoff); 59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef XRAY_DISABLE_BROWSER_INTEGRATION 61ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochXRAY_NO_INSTRUMENT void XRayBrowserTraceReport( 62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch struct XRayTraceCapture* capture); 63ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochXRAY_NO_INSTRUMENT void XRayRegisterBrowserInterface( 64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PPB_GetInterface get_browser_interface); 65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif /* XRAY_DISABLE_BROWSER_INTEGRATION */ 66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(XRAY_ANNOTATE) 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define XRayAnnotate(...) __XRayAnnotate(__VA_ARGS__) 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define XRayAnnotateFiltered(...) __XRayAnnotateFiltered(__VA_ARGS__) 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#else 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define XRayAnnotate(...) 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define XRayAnnotateFiltered(...) 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* This is the end of the public XRay API */ 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#else /* defined(XRAY) */ 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* Builds that don't define XRAY will use these 'null' functions instead. */ 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define XRayAnnotate(...) 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define XRayAnnotateFiltered(...) 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochinline struct XRayTraceCapture* XRayInit(int stack_size, 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int buffer_size, 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int frame_count, 87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const char* mapfilename) { 88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return NULL; 89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochinline void XRayShutdown(struct XRayTraceCapture* capture) {} 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochinline void XRayStartFrame(struct XRayTraceCapture* capture) {} 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochinline void XRayEndFrame(struct XRayTraceCapture* capture) {} 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochinline void XRaySetAnnotationFilter(struct XRayTraceCapture* capture, 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch uint32_t filter) {} 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochinline void XRaySaveReport(struct XRayTraceCapture* capture, 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const char* filename, 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch float percent_cutoff, 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int cycle_cutoff) {} 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochinline void XRayReport(struct XRayTraceCapture* capture, 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE* f, 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch float percent_cutoff, 102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int ticks_cutoff) {} 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef XRAY_DISABLE_BROWSER_INTEGRATION 105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochinline void XRayBrowserTraceReport(struct XRayTraceCapture* capture) {} 106ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochinline void XRayRegisterBrowserInterface( 107ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PPB_GetInterface get_browser_interface) {} 108ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif /* XRAY_DISABLE_BROWSER_INTEGRATION */ 109ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 110ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif /* defined(XRAY) */ 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifdef __cplusplus 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif /* LIBRARIES_XRAY_XRAY_H_ */ 118