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