blob: 1f2a04ace4f64f25c7b2084fcb311b247b37d5d7 [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
egdanielbbcb38d2014-06-19 10:19:29 -070011#include "GrGpu.h"
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000012#include "GrTraceMarker.h"
bungeman72440a32015-08-12 13:37:16 -070013#include "SkTLazy.h"
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000014#include "SkTraceEvent.h"
15
16/**
17 * Marker generation class used for adding and removing markers around code blocks
18 */
19class GrGpuTraceMarkerGenerator : public ::SkNoncopyable {
20public:
robertphillips73c4e642016-03-02 11:36:59 -080021 GrGpuTraceMarkerGenerator() {}
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000022
23 ~GrGpuTraceMarkerGenerator() {
24 if (fTraceMarker.isValid()) {
joshualittdac70052015-09-01 08:19:46 -070025 // TODO remove trace marker
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000026 }
27 }
28
29 void initialize(const char* marker_str, int* marker_counter) {
joshualittdac70052015-09-01 08:19:46 -070030 // GrGpuTraceMarker* traceMarker = fTraceMarker.init(marker_str, *marker_counter);
31 // TODO add trace marker
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000032 }
33
34private:
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000035 SkTLazy<GrGpuTraceMarker> fTraceMarker;
36};
37
egdanielbbcb38d2014-06-19 10:19:29 -070038class GrGpuTraceMarkerGeneratorContext : public ::SkNoncopyable {
39public:
joshualittdac70052015-09-01 08:19:46 -070040 GrGpuTraceMarkerGeneratorContext(GrContext* context) {}
egdanielbbcb38d2014-06-19 10:19:29 -070041
42 ~GrGpuTraceMarkerGeneratorContext() {
43 if (fTraceMarker.isValid()) {
joshualittdac70052015-09-01 08:19:46 -070044 // TODO remove trace marker
egdanielbbcb38d2014-06-19 10:19:29 -070045 }
46 }
47
48 void initialize(const char* marker_str, int* marker_counter) {
joshualittdac70052015-09-01 08:19:46 -070049 // GrGpuTraceMarker* traceMarker = fTraceMarker.init(marker_str, *marker_counter);
50 // TODO add trace marker
egdanielbbcb38d2014-06-19 10:19:29 -070051 }
52
53private:
egdanielbbcb38d2014-06-19 10:19:29 -070054 SkTLazy<GrGpuTraceMarker> fTraceMarker;
55};
56
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000057/**
58 * GR_CREATE_TRACE_MARKER will place begin and end trace markers for both
59 * cpu and gpu (if gpu tracing enabled) for the current scope.
Robert Phillipsf2361d22016-10-25 14:20:06 -040060 * name is of type const char* and target is of type GrOpList*
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000061 */
joshualitt4897ff22016-01-11 08:30:47 -080062#define GR_CREATE_TRACE_MARKER(name, target) \
63 /* Chromium tracing */ \
64 static int SK_MACRO_APPEND_LINE(name_counter) = 0; \
65 bool SK_MACRO_APPEND_LINE(gpuTracingEnabled); \
66 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), \
67 &SK_MACRO_APPEND_LINE(gpuTracingEnabled)); \
68 if (SK_MACRO_APPEND_LINE(gpuTracingEnabled)) { \
69 INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED(name, SK_MACRO_APPEND_LINE(name_counter), target) \
70 } \
71 INTERNAL_TRACE_EVENT_ADD_SCOPED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), name, \
72 "id", SK_MACRO_APPEND_LINE(name_counter));
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000073
joshualitt4897ff22016-01-11 08:30:47 -080074#define INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED(name, name_counter, target) \
egdaniel93a37bc2014-07-21 13:47:57 -070075 static const char* SK_MACRO_APPEND_LINE(static_name) = name; \
egdaniel93a37bc2014-07-21 13:47:57 -070076 INTERNAL_GR_CREATE_TRACE_MARKER(SK_MACRO_APPEND_LINE(static_name), \
joshualitt4897ff22016-01-11 08:30:47 -080077 name_counter, \
78 target) \
79 sk_atomic_inc(&name_counter);
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000080
egdaniel93a37bc2014-07-21 13:47:57 -070081#define INTERNAL_GR_CREATE_TRACE_MARKER(name, name_counter, target, ...) \
82 GR_CREATE_GPU_TRACE_MARKER(name, name_counter, target) \
egdanielbbcb38d2014-06-19 10:19:29 -070083
joshualitt4897ff22016-01-11 08:30:47 -080084#define GR_CREATE_GPU_TRACE_MARKER(name, name_counter, target) \
85 GrGpuTraceMarkerGenerator SK_MACRO_APPEND_LINE(TMG)(target); \
86 SK_MACRO_APPEND_LINE(TMG).initialize(name, &name_counter); \
egdanielbbcb38d2014-06-19 10:19:29 -070087
joshualitt87a721b2016-01-12 12:59:28 -080088/**
89 * Context level GrTracing macros, classname and op are const char*, context is GrContext
90 * TODO can we just have one set of macros? Probably.
91 */
joshualitt5651ee62016-01-11 10:39:11 -080092#define GR_CREATE_TRACE_MARKER_CONTEXT(classname, op, context) \
joshualitt4897ff22016-01-11 08:30:47 -080093 /* Chromium tracing */ \
94 static int SK_MACRO_APPEND_LINE(name_counter) = 0; \
95 bool SK_MACRO_APPEND_LINE(gpuTracingEnabled); \
96 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), \
97 &SK_MACRO_APPEND_LINE(gpuTracingEnabled)); \
98 if (SK_MACRO_APPEND_LINE(gpuTracingEnabled)) { \
joshualitt5651ee62016-01-11 10:39:11 -080099 INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED_C(classname "::" op, \
100 SK_MACRO_APPEND_LINE(name_counter), context) \
joshualitt4897ff22016-01-11 08:30:47 -0800101 } \
joshualitt87a721b2016-01-12 12:59:28 -0800102 GR_AUDIT_TRAIL_AUTO_FRAME(context->getAuditTrail(), classname "::" op); \
joshualitt5651ee62016-01-11 10:39:11 -0800103 INTERNAL_TRACE_EVENT_ADD_SCOPED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), classname "::" op, \
joshualitt4897ff22016-01-11 08:30:47 -0800104 "id", SK_MACRO_APPEND_LINE(name_counter));
egdaniel93a37bc2014-07-21 13:47:57 -0700105
joshualitt4897ff22016-01-11 08:30:47 -0800106#define INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED_C(name, name_counter, context) \
egdaniel93a37bc2014-07-21 13:47:57 -0700107 static const char* SK_MACRO_APPEND_LINE(static_name) = name; \
egdaniel93a37bc2014-07-21 13:47:57 -0700108 INTERNAL_GR_CREATE_TRACE_MARKER_C(SK_MACRO_APPEND_LINE(static_name), \
joshualitt4897ff22016-01-11 08:30:47 -0800109 name_counter, \
110 context) \
111 sk_atomic_inc(&name_counter);
egdaniel93a37bc2014-07-21 13:47:57 -0700112
113#define INTERNAL_GR_CREATE_TRACE_MARKER_C(name, name_counter, context, ...) \
114 GR_CREATE_GPU_TRACE_MARKER_C(name, name_counter, context) \
egdaniel93a37bc2014-07-21 13:47:57 -0700115
joshualitt4897ff22016-01-11 08:30:47 -0800116#define GR_CREATE_GPU_TRACE_MARKER_C(name, name_counter, context) \
117 GrGpuTraceMarkerGeneratorContext SK_MACRO_APPEND_LINE(TMG)(context); \
118 SK_MACRO_APPEND_LINE(TMG).initialize(name, &name_counter); \
egdaniel93a37bc2014-07-21 13:47:57 -0700119
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +0000120#endif