/*
 * Copyright 2016 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <cstddef>

#include "glimp/tracing/tracing.h"

#if defined(ENABLE_GLIMP_TRACING)

namespace glimp {

namespace {
TraceEventImpl* g_trace_event_implementation = NULL;
}  // namespace

ScopedTraceEvent::ScopedTraceEvent(const char* name) : name_(name) {
  if (g_trace_event_implementation) {
    g_trace_event_implementation->BeginTrace(name_);
  }
}

ScopedTraceEvent::~ScopedTraceEvent() {
  if (g_trace_event_implementation) {
    g_trace_event_implementation->EndTrace(name_);
  }
}

void SetTraceEventImplementation(TraceEventImpl* impl) {
  g_trace_event_implementation = impl;
}

}  // namespace glimp

#endif  // #if defined(ENABLE_GLIMP_TRACING)
