blob: 3dbc0ef17e0296f71a754e691a29d35418d188e1 [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.
joshualitt87a721b2016-01-12 12:59:28 -080061 * name is of type const char* and target is of type GrDrawTarget*
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000062 */
joshualitt4897ff22016-01-11 08:30:47 -080063#define GR_CREATE_TRACE_MARKER(name, target) \
64 /* Chromium tracing */ \
65 static int SK_MACRO_APPEND_LINE(name_counter) = 0; \
66 bool SK_MACRO_APPEND_LINE(gpuTracingEnabled); \
67 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), \
68 &SK_MACRO_APPEND_LINE(gpuTracingEnabled)); \
69 if (SK_MACRO_APPEND_LINE(gpuTracingEnabled)) { \
70 INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED(name, SK_MACRO_APPEND_LINE(name_counter), target) \
71 } \
72 INTERNAL_TRACE_EVENT_ADD_SCOPED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), name, \
73 "id", SK_MACRO_APPEND_LINE(name_counter));
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000074
joshualitt4897ff22016-01-11 08:30:47 -080075#define INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED(name, name_counter, target) \
egdaniel93a37bc2014-07-21 13:47:57 -070076 static const char* SK_MACRO_APPEND_LINE(static_name) = name; \
egdaniel93a37bc2014-07-21 13:47:57 -070077 INTERNAL_GR_CREATE_TRACE_MARKER(SK_MACRO_APPEND_LINE(static_name), \
joshualitt4897ff22016-01-11 08:30:47 -080078 name_counter, \
79 target) \
80 sk_atomic_inc(&name_counter);
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000081
egdaniel93a37bc2014-07-21 13:47:57 -070082#define INTERNAL_GR_CREATE_TRACE_MARKER(name, name_counter, target, ...) \
83 GR_CREATE_GPU_TRACE_MARKER(name, name_counter, target) \
egdanielbbcb38d2014-06-19 10:19:29 -070084
joshualitt4897ff22016-01-11 08:30:47 -080085#define GR_CREATE_GPU_TRACE_MARKER(name, name_counter, target) \
86 GrGpuTraceMarkerGenerator SK_MACRO_APPEND_LINE(TMG)(target); \
87 SK_MACRO_APPEND_LINE(TMG).initialize(name, &name_counter); \
egdanielbbcb38d2014-06-19 10:19:29 -070088
joshualitt87a721b2016-01-12 12:59:28 -080089/**
90 * Context level GrTracing macros, classname and op are const char*, context is GrContext
91 * TODO can we just have one set of macros? Probably.
92 */
joshualitt5651ee62016-01-11 10:39:11 -080093#define GR_CREATE_TRACE_MARKER_CONTEXT(classname, op, context) \
joshualitt4897ff22016-01-11 08:30:47 -080094 /* Chromium tracing */ \
95 static int SK_MACRO_APPEND_LINE(name_counter) = 0; \
96 bool SK_MACRO_APPEND_LINE(gpuTracingEnabled); \
97 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), \
98 &SK_MACRO_APPEND_LINE(gpuTracingEnabled)); \
99 if (SK_MACRO_APPEND_LINE(gpuTracingEnabled)) { \
joshualitt5651ee62016-01-11 10:39:11 -0800100 INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED_C(classname "::" op, \
101 SK_MACRO_APPEND_LINE(name_counter), context) \
joshualitt4897ff22016-01-11 08:30:47 -0800102 } \
joshualitt87a721b2016-01-12 12:59:28 -0800103 GR_AUDIT_TRAIL_AUTO_FRAME(context->getAuditTrail(), classname "::" op); \
joshualitt5651ee62016-01-11 10:39:11 -0800104 INTERNAL_TRACE_EVENT_ADD_SCOPED(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), classname "::" op, \
joshualitt4897ff22016-01-11 08:30:47 -0800105 "id", SK_MACRO_APPEND_LINE(name_counter));
egdaniel93a37bc2014-07-21 13:47:57 -0700106
joshualitt4897ff22016-01-11 08:30:47 -0800107#define INTERNAL_GR_CREATE_TRACE_MARKER_SCOPED_C(name, name_counter, context) \
egdaniel93a37bc2014-07-21 13:47:57 -0700108 static const char* SK_MACRO_APPEND_LINE(static_name) = name; \
egdaniel93a37bc2014-07-21 13:47:57 -0700109 INTERNAL_GR_CREATE_TRACE_MARKER_C(SK_MACRO_APPEND_LINE(static_name), \
joshualitt4897ff22016-01-11 08:30:47 -0800110 name_counter, \
111 context) \
112 sk_atomic_inc(&name_counter);
egdaniel93a37bc2014-07-21 13:47:57 -0700113
114#define INTERNAL_GR_CREATE_TRACE_MARKER_C(name, name_counter, context, ...) \
115 GR_CREATE_GPU_TRACE_MARKER_C(name, name_counter, context) \
egdaniel93a37bc2014-07-21 13:47:57 -0700116
joshualitt4897ff22016-01-11 08:30:47 -0800117#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); \
egdaniel93a37bc2014-07-21 13:47:57 -0700120
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +0000121#endif