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()18FileTracing::Provider* GetProvider() { 19 return g_provider.load(std::memory_order_acquire); 20 } 21 22 // static IsCategoryEnabled()23bool FileTracing::IsCategoryEnabled() { 24 FileTracing::Provider* provider = GetProvider(); 25 return provider && provider->FileTracingCategoryIsEnabled(); 26 } 27 28 // static SetProvider(FileTracing::Provider * provider)29void FileTracing::SetProvider(FileTracing::Provider* provider) { 30 g_provider.store(provider, std::memory_order_release); 31 } 32 ScopedEnabler()33FileTracing::ScopedEnabler::ScopedEnabler() { 34 FileTracing::Provider* provider = GetProvider(); 35 if (provider) 36 provider->FileTracingEnable(this); 37 } 38 ~ScopedEnabler()39FileTracing::ScopedEnabler::~ScopedEnabler() { 40 FileTracing::Provider* provider = GetProvider(); 41 if (provider) 42 provider->FileTracingDisable(this); 43 } 44 ~ScopedTrace()45FileTracing::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)53void 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