// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/files/file_tracing.h"

#include "base/files/file.h"

namespace base {

namespace {
FileTracing::Provider* g_provider = nullptr;
}

// static
bool FileTracing::IsCategoryEnabled() {
  return g_provider && g_provider->FileTracingCategoryIsEnabled();
}

// static
void FileTracing::SetProvider(FileTracing::Provider* provider) {
  g_provider = provider;
}

FileTracing::ScopedEnabler::ScopedEnabler() {
  if (g_provider)
    g_provider->FileTracingEnable(this);
}

FileTracing::ScopedEnabler::~ScopedEnabler() {
  if (g_provider)
    g_provider->FileTracingDisable(this);
}

FileTracing::ScopedTrace::ScopedTrace() : id_(nullptr) {}

FileTracing::ScopedTrace::~ScopedTrace() {
  if (id_ && g_provider)
    g_provider->FileTracingEventEnd(name_, id_);
}

void FileTracing::ScopedTrace::Initialize(const char* name,
                                          File* file,
                                          int64_t size) {
  id_ = &file->trace_enabler_;
  name_ = name;
  g_provider->FileTracingEventBegin(name_, id_, file->tracing_path_, size);
}

}  // namespace base
