The open source OpenXR runtime
1// Copyright 2020-2021, Collabora, Ltd.
2// SPDX-License-Identifier: BSL-1.0
3/*!
4 * @file
5 * @brief Tracing support code, see @ref tracing.
6 * @author Jakob Bornecrantz <jakob@collabora.com>
7 * @ingroup aux_util
8 */
9
10#include "xrt/xrt_compiler.h"
11#include "xrt/xrt_config_os.h"
12#include "xrt/xrt_config_have.h"
13
14#include "os/os_time.h"
15
16#include "util/u_debug.h"
17#include "util/u_trace_marker.h"
18
19
20
21#ifdef U_TRACE_PERCETTO
22
23DEBUG_GET_ONCE_BOOL_OPTION(tracing, "XRT_TRACING", false)
24
25PERCETTO_CATEGORY_DEFINE(U_TRACE_CATEGORIES)
26
27PERCETTO_TRACK_DEFINE(pc_cpu, PERCETTO_TRACK_EVENTS);
28PERCETTO_TRACK_DEFINE(pc_allotted, PERCETTO_TRACK_EVENTS);
29PERCETTO_TRACK_DEFINE(pc_gpu, PERCETTO_TRACK_EVENTS);
30PERCETTO_TRACK_DEFINE(pc_margin, PERCETTO_TRACK_EVENTS);
31PERCETTO_TRACK_DEFINE(pc_error, PERCETTO_TRACK_EVENTS);
32PERCETTO_TRACK_DEFINE(pc_info, PERCETTO_TRACK_EVENTS);
33PERCETTO_TRACK_DEFINE(pc_present, PERCETTO_TRACK_EVENTS);
34PERCETTO_TRACK_DEFINE(pa_cpu, PERCETTO_TRACK_EVENTS);
35PERCETTO_TRACK_DEFINE(pa_draw, PERCETTO_TRACK_EVENTS);
36PERCETTO_TRACK_DEFINE(pa_wait, PERCETTO_TRACK_EVENTS);
37
38static enum u_trace_which static_which;
39static bool static_inited = false;
40
41
42void
43u_trace_marker_setup(enum u_trace_which which)
44{
45 static_which = which;
46
47 I_PERCETTO_TRACK_PTR(pc_cpu)->name = "PC 1 Sleep";
48 I_PERCETTO_TRACK_PTR(pc_allotted)->name = "PC 2 Allotted time";
49 I_PERCETTO_TRACK_PTR(pc_gpu)->name = "PC 3 GPU";
50 I_PERCETTO_TRACK_PTR(pc_margin)->name = "PC 4 Margin";
51 I_PERCETTO_TRACK_PTR(pc_error)->name = "PC 5 Error";
52 I_PERCETTO_TRACK_PTR(pc_info)->name = "PC 6 Info";
53 I_PERCETTO_TRACK_PTR(pc_present)->name = "PC 7 Present";
54
55 I_PERCETTO_TRACK_PTR(pa_cpu)->name = "PA 1 App";
56 I_PERCETTO_TRACK_PTR(pa_draw)->name = "PA 2 Draw";
57 I_PERCETTO_TRACK_PTR(pa_wait)->name = "PA 3 Wait";
58}
59
60void
61u_trace_marker_init(void)
62{
63 if (!debug_get_bool_option_tracing()) {
64 return;
65 }
66
67 if (static_inited) {
68 return;
69 }
70 static_inited = true;
71
72 int ret = PERCETTO_INIT(PERCETTO_CLOCK_MONOTONIC);
73 if (ret != 0) {
74 return;
75 }
76
77 if (static_which == U_TRACE_WHICH_SERVICE) {
78 PERCETTO_REGISTER_TRACK(pc_cpu);
79 PERCETTO_REGISTER_TRACK(pc_allotted);
80 PERCETTO_REGISTER_TRACK(pc_gpu);
81 PERCETTO_REGISTER_TRACK(pc_margin);
82 PERCETTO_REGISTER_TRACK(pc_error);
83 PERCETTO_REGISTER_TRACK(pc_info);
84 PERCETTO_REGISTER_TRACK(pc_present);
85
86 PERCETTO_REGISTER_TRACK(pa_cpu);
87 PERCETTO_REGISTER_TRACK(pa_draw);
88 PERCETTO_REGISTER_TRACK(pa_wait);
89 }
90}
91
92#else // !U_TRACE_PERCETTO
93
94void
95u_trace_marker_setup(enum u_trace_which which)
96{
97 (void)which;
98
99 // Noop
100}
101
102void
103u_trace_marker_init(void)
104{
105 // Noop
106}
107
108#endif // !U_TRACE_PERCETTO