• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 The Chromium Authors
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 <atomic>
8 
9 #include "base/files/file.h"
10 #include "base/trace_event/base_tracing.h"
11 
12 namespace base {
13 
14 namespace {
15 std::atomic<FileTracing::Provider*> g_provider;
16 }
17 
GetProvider()18 FileTracing::Provider* GetProvider() {
19   return g_provider.load(std::memory_order_acquire);
20 }
21 
22 // static
IsCategoryEnabled()23 bool FileTracing::IsCategoryEnabled() {
24   FileTracing::Provider* provider = GetProvider();
25   return provider && provider->FileTracingCategoryIsEnabled();
26 }
27 
28 // static
SetProvider(FileTracing::Provider * provider)29 void FileTracing::SetProvider(FileTracing::Provider* provider) {
30   g_provider.store(provider, std::memory_order_release);
31 }
32 
ScopedEnabler()33 FileTracing::ScopedEnabler::ScopedEnabler() {
34   FileTracing::Provider* provider = GetProvider();
35   if (provider)
36     provider->FileTracingEnable(this);
37 }
38 
~ScopedEnabler()39 FileTracing::ScopedEnabler::~ScopedEnabler() {
40   FileTracing::Provider* provider = GetProvider();
41   if (provider)
42     provider->FileTracingDisable(this);
43 }
44 
~ScopedTrace()45 FileTracing::ScopedTrace::~ScopedTrace() {
46   if (id_) {
47     FileTracing::Provider* provider = GetProvider();
48     if (provider)
49       provider->FileTracingEventEnd(name_, id_);
50   }
51 }
52 
Initialize(const char * name,const File * file,int64_t size)53 void FileTracing::ScopedTrace::Initialize(const char* name,
54                                           const File* file,
55                                           int64_t size) {
56   id_ = &file->trace_enabler_;
57   name_ = name;
58   GetProvider()->FileTracingEventBegin(name_, id_, file->path_, size);
59 }
60 
61 }  // namespace base
62