Chromium Code Reviews| Index: src/gpu/GrTracing.h |
| diff --git a/src/gpu/GrTracing.h b/src/gpu/GrTracing.h |
| index cfce039b6ce28cdef83954a121c3ba91d20c52ef..fd59703875f51fe79e512aca79394aeb540741af 100644 |
| --- a/src/gpu/GrTracing.h |
| +++ b/src/gpu/GrTracing.h |
| @@ -9,6 +9,8 @@ |
| #define GrTracing_DEFINED |
| #include "GrDrawTarget.h" |
| +#include "GrGpu.h" |
| +#include "GrInOrderDrawBuffer.h" |
| #include "GrTraceMarker.h" |
| #include "SkTraceEvent.h" |
| @@ -37,6 +39,30 @@ private: |
| SkTLazy<GrGpuTraceMarker> fTraceMarker; |
| }; |
| +class GrGpuTraceMarkerGeneratorContext : public ::SkNoncopyable { |
| +public: |
| + GrGpuTraceMarkerGeneratorContext(GrContext* context) : fContext(context) {} |
| + |
| + ~GrGpuTraceMarkerGeneratorContext() { |
| + if (fTraceMarker.isValid()) { |
| + fContext->getGpu()->removeGpuTraceMarker(fTraceMarker.get()); |
|
bsalomon
2014/06/18 20:35:17
rather than exposing the draw buffer can we make t
egdaniel
2014/06/18 21:03:43
Changed!
|
| + fContext->getDrawBuffer()->removeGpuTraceMarker(fTraceMarker.get()); |
| + } |
| + } |
| + |
| + void initialize(const char* marker_str, int* marker_counter) { |
| + GrGpuTraceMarker* traceMarker = fTraceMarker.init(); |
| + traceMarker->fMarker = marker_str; |
| + traceMarker->fID = *marker_counter; |
| + fContext->getGpu()->addGpuTraceMarker(traceMarker); |
| + fContext->getDrawBuffer()->addGpuTraceMarker(traceMarker); |
| + } |
| + |
| +private: |
| + GrContext* fContext; |
| + SkTLazy<GrGpuTraceMarker> fTraceMarker; |
| +}; |
| + |
| /** |
| * GR_CREATE_TRACE_MARKER will place begin and end trace markers for both |
| * cpu and gpu (if gpu tracing enabled) for the current scope. |
| @@ -48,12 +74,12 @@ private: |
| INTERNAL_GR_CREATE_TRACE_MARKER(SK_MACRO_APPEND_LINE(static_name), \ |
| SK_MACRO_APPEND_LINE(name_counter), \ |
| target) \ |
| + sk_atomic_inc(&SK_MACRO_APPEND_LINE(name_counter)); \ |
| #define INTERNAL_GR_CREATE_TRACE_MARKER(name, name_counter, target) \ |
| GR_CREATE_GPU_TRACE_MARKER(name, name_counter, target) \ |
| TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("skia.gpu"),name, \ |
| "id", name_counter) \ |
| - sk_atomic_inc(&name_counter); \ |
| #define GR_CREATE_GPU_TRACE_MARKER(name, name_counter, target) \ |
| GrGpuTraceMarkerGenerator SK_MACRO_APPEND_LINE(TMG)(target); \ |
| @@ -61,5 +87,24 @@ private: |
| SK_MACRO_APPEND_LINE(TMG).initialize(name, &name_counter); \ |
| } \ |
| +#define GR_CREATE_TRACE_MARKER_CONTEXT(name, context) \ |
| + static const char* SK_MACRO_APPEND_LINE(static_name) = name; \ |
| + static int SK_MACRO_APPEND_LINE(name_counter) = 0; \ |
| + INTERNAL_GR_CREATE_TRACE_MARKER_C(SK_MACRO_APPEND_LINE(static_name), \ |
| + SK_MACRO_APPEND_LINE(name_counter), \ |
| + context) \ |
| + sk_atomic_inc(&SK_MACRO_APPEND_LINE(name_counter)); \ |
| + |
| +#define INTERNAL_GR_CREATE_TRACE_MARKER_C(name, name_counter, context) \ |
| + GR_CREATE_GPU_TRACE_MARKER_C(name, name_counter, context) \ |
| + TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("skia.gpu"),name, \ |
| + "id", name_counter) \ |
| + |
| +#define GR_CREATE_GPU_TRACE_MARKER_C(name, name_counter, context) \ |
| + GrGpuTraceMarkerGeneratorContext SK_MACRO_APPEND_LINE(TMG)(context); \ |
| + if (context->isGpuTracingEnabled()) { \ |
| + SK_MACRO_APPEND_LINE(TMG).initialize(name, &name_counter); \ |
| + } \ |
| + |
| #endif |