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 // TODO(crbug.com/1021571): Remove this once fixed. 44 PERFETTO_INTERNAL_ADD_EMPTY_EVENT(); 45 } 46 ~ScopedTrace()47FileTracing::ScopedTrace::~ScopedTrace() { 48 if (id_) { 49 FileTracing::Provider* provider = GetProvider(); 50 if (provider) 51 provider->FileTracingEventEnd(name_, id_); 52 } 53 } 54 Initialize(const char * name,const File * file,int64_t size)55void FileTracing::ScopedTrace::Initialize(const char* name, 56 const File* file, 57 int64_t size) { 58 id_ = &file->trace_enabler_; 59 name_ = name; 60 GetProvider()->FileTracingEventBegin(name_, id_, file->tracing_path_, size); 61 } 62 63 } // namespace base 64