1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/files/file_tracing.h"
6 
7 #include "base/files/file.h"
8 
9 namespace base {
10 
11 namespace {
12 FileTracing::Provider* g_provider = nullptr;
13 }
14 
15 // static
IsCategoryEnabled()16 bool FileTracing::IsCategoryEnabled() {
17   return g_provider && g_provider->FileTracingCategoryIsEnabled();
18 }
19 
20 // static
SetProvider(FileTracing::Provider * provider)21 void FileTracing::SetProvider(FileTracing::Provider* provider) {
22   g_provider = provider;
23 }
24 
ScopedEnabler()25 FileTracing::ScopedEnabler::ScopedEnabler() {
26   if (g_provider)
27     g_provider->FileTracingEnable(this);
28 }
29 
~ScopedEnabler()30 FileTracing::ScopedEnabler::~ScopedEnabler() {
31   if (g_provider)
32     g_provider->FileTracingDisable(this);
33 }
34 
ScopedTrace()35 FileTracing::ScopedTrace::ScopedTrace() : id_(nullptr) {}
36 
~ScopedTrace()37 FileTracing::ScopedTrace::~ScopedTrace() {
38   if (id_ && g_provider)
39     g_provider->FileTracingEventEnd(name_, id_);
40 }
41 
Initialize(const char * name,File * file,int64_t size)42 void FileTracing::ScopedTrace::Initialize(const char* name,
43                                           File* file,
44                                           int64_t size) {
45   id_ = &file->trace_enabler_;
46   name_ = name;
47   g_provider->FileTracingEventBegin(name_, id_, file->tracing_path_, size);
48 }
49 
50 }  // namespace base
51