blob: d758c0329d9afdc070f61d04d25a20039985b40b [file] [log] [blame]
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +00001/*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrTracing_DEFINED
9#define GrTracing_DEFINED
10
11#include "GrDrawTarget.h"
egdanielbbcb38d2014-06-19 10:19:29 -070012#include "GrGpu.h"
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000013#include "GrTraceMarker.h"
bungeman72440a32015-08-12 13:37:16 -070014#include "SkTLazy.h"
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000015#include "SkTraceEvent.h"
16
17/**
18 * Marker generation class used for adding and removing markers around code blocks
19 */
20class GrGpuTraceMarkerGenerator : public ::SkNoncopyable {
21public:
joshualittdac70052015-09-01 08:19:46 -070022 GrGpuTraceMarkerGenerator(GrDrawTarget* target) {}
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000023
24 ~GrGpuTraceMarkerGenerator() {
25 if (fTraceMarker.isValid()) {
joshualittdac70052015-09-01 08:19:46 -070026 // TODO remove trace marker
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000027 }
28 }
29
30 void initialize(const char* marker_str, int* marker_counter) {
joshualittdac70052015-09-01 08:19:46 -070031 // GrGpuTraceMarker* traceMarker = fTraceMarker.init(marker_str, *marker_counter);
32 // TODO add trace marker
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000033 }
34
35private:
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000036 SkTLazy<GrGpuTraceMarker> fTraceMarker;
37};
38
egdanielbbcb38d2014-06-19 10:19:29 -070039class GrGpuTraceMarkerGeneratorContext : public ::SkNoncopyable {
40public:
joshualittdac70052015-09-01 08:19:46 -070041 GrGpuTraceMarkerGeneratorContext(GrContext* context) {}
egdanielbbcb38d2014-06-19 10:19:29 -070042
43 ~GrGpuTraceMarkerGeneratorContext() {
44 if (fTraceMarker.isValid()) {
joshualittdac70052015-09-01 08:19:46 -070045 // TODO remove trace marker
egdanielbbcb38d2014-06-19 10:19:29 -070046 }
47 }
48
49 void initialize(const char* marker_str, int* marker_counter) {
joshualittdac70052015-09-01 08:19:46 -070050 // GrGpuTraceMarker* traceMarker = fTraceMarker.init(marker_str, *marker_counter);
51 // TODO add trace marker
egdanielbbcb38d2014-06-19 10:19:29 -070052 }
53
54private:
egdanielbbcb38d2014-06-19 10:19:29 -070055 SkTLazy<GrGpuTraceMarker> fTraceMarker;
56};
57
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000058/**
59 * GR_CREATE_TRACE_MARKER will place begin and end trace markers for both
60 * cpu and gpu (if gpu tracing enabled) for the current scope.
61 * marker is of type const char* and target is of type GrDrawTarget*
62 */
egdaniel93a37bc2014-07-21 13:47:57 -070063#define GR_CREATE_TRACE_MARKER(name, target) \
64 INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED(name, target)
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000065
egdaniel93a37bc2014-07-21 13:47:57 -070066#define GR_CREATE_TRACE_MARKER1(name, target, arg1_name, arg1_val) \
67 INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED(name, target, arg1_name, arg1_val)
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000068
egdaniel93a37bc2014-07-21 13:47:57 -070069#define INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED(name, target, ...) \
70 static const char* SK_MACRO_APPEND_LINE(static_name) = name; \
71 static int SK_MACRO_APPEND_LINE(name_counter) = 0; \
72 INTERNAL_GR_CREATE_TRACE_MARKER(SK_MACRO_APPEND_LINE(static_name), \
73 SK_MACRO_APPEND_LINE(name_counter), \
74 target, ##__VA_ARGS__) \
75 sk_atomic_inc(&SK_MACRO_APPEND_LINE(name_counter));
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000076
egdaniel93a37bc2014-07-21 13:47:57 -070077#define INTERNAL_GR_CREATE_TRACE_MARKER(name, name_counter, target, ...) \
78 GR_CREATE_GPU_TRACE_MARKER(name, name_counter, target) \
79 INTERNAL_TRACE_EVENT_ADD_SCOPED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"),name, \
80 "id", name_counter, ##__VA_ARGS__);
egdanielbbcb38d2014-06-19 10:19:29 -070081
egdanielbdad9c32015-03-05 12:19:17 -080082#if GR_FORCE_GPU_TRACE_DEBUGGING
83#define GR_CREATE_GPU_TRACE_MARKER(name, name_counter, target) \
84 GrGpuTraceMarkerGenerator SK_MACRO_APPEND_LINE(TMG)(target); \
85 SK_MACRO_APPEND_LINE(TMG).initialize(name, &name_counter);
86#else
egdaniel6d7f5fa2014-08-04 12:54:39 -070087#define GR_CREATE_GPU_TRACE_MARKER(name, name_counter, target) \
88 GrGpuTraceMarkerGenerator SK_MACRO_APPEND_LINE(TMG)(target); \
89 bool SK_MACRO_APPEND_LINE(gpuTracingEnabled); \
90 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), \
91 &SK_MACRO_APPEND_LINE(gpuTracingEnabled)); \
92 if (SK_MACRO_APPEND_LINE(gpuTracingEnabled)) { \
93 SK_MACRO_APPEND_LINE(TMG).initialize(name, &name_counter); \
egdaniel93a37bc2014-07-21 13:47:57 -070094 }
egdanielbdad9c32015-03-05 12:19:17 -080095#endif
egdanielbbcb38d2014-06-19 10:19:29 -070096
egdaniel93a37bc2014-07-21 13:47:57 -070097#define GR_CREATE_TRACE_MARKER_CONTEXT(name, context) \
98 INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED_C(name, context)
99
100#define GR_CREATE_TRACE_MARKER_CONTEXT1(name, context, arg1_name, arg1_val) \
101 INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED_C(name, context, arg1_name, arg1_val)
102
103#define INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED_C(name, context, ...) \
104 static const char* SK_MACRO_APPEND_LINE(static_name) = name; \
105 static int SK_MACRO_APPEND_LINE(name_counter) = 0; \
106 INTERNAL_GR_CREATE_TRACE_MARKER_C(SK_MACRO_APPEND_LINE(static_name), \
107 SK_MACRO_APPEND_LINE(name_counter), \
108 context, ##__VA_ARGS__) \
109 sk_atomic_inc(&SK_MACRO_APPEND_LINE(name_counter));
110
111#define INTERNAL_GR_CREATE_TRACE_MARKER_C(name, name_counter, context, ...) \
112 GR_CREATE_GPU_TRACE_MARKER_C(name, name_counter, context) \
113 INTERNAL_TRACE_EVENT_ADD_SCOPED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"),name, \
114 "id", name_counter, ##__VA_ARGS__);
115
egdanielbdad9c32015-03-05 12:19:17 -0800116#if GR_FORCE_GPU_TRACE_DEBUGGING
117#define GR_CREATE_GPU_TRACE_MARKER_C(name, name_counter, context) \
118 GrGpuTraceMarkerGeneratorContext SK_MACRO_APPEND_LINE(TMG)(context); \
119 SK_MACRO_APPEND_LINE(TMG).initialize(name, &name_counter);
120#else
egdaniel6d7f5fa2014-08-04 12:54:39 -0700121#define GR_CREATE_GPU_TRACE_MARKER_C(name, name_counter, context) \
122 GrGpuTraceMarkerGeneratorContext SK_MACRO_APPEND_LINE(TMG)(context); \
123 bool SK_MACRO_APPEND_LINE(gpuTracingEnabled); \
124 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), \
125 &SK_MACRO_APPEND_LINE(gpuTracingEnabled)); \
126 if (SK_MACRO_APPEND_LINE(gpuTracingEnabled)) { \
127 SK_MACRO_APPEND_LINE(TMG).initialize(name, &name_counter); \
egdaniel93a37bc2014-07-21 13:47:57 -0700128 }
egdanielbdad9c32015-03-05 12:19:17 -0800129#endif
egdaniel93a37bc2014-07-21 13:47:57 -0700130
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +0000131#endif