1*6777b538SAndroid Build Coastguard Worker // Copyright 2015 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/files/file_tracing.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <atomic> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include "base/files/file.h" 10*6777b538SAndroid Build Coastguard Worker #include "base/trace_event/base_tracing.h" 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker namespace base { 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker namespace { 15*6777b538SAndroid Build Coastguard Worker std::atomic<FileTracing::Provider*> g_provider; 16*6777b538SAndroid Build Coastguard Worker } 17*6777b538SAndroid Build Coastguard Worker GetProvider()18*6777b538SAndroid Build Coastguard WorkerFileTracing::Provider* GetProvider() { 19*6777b538SAndroid Build Coastguard Worker return g_provider.load(std::memory_order_acquire); 20*6777b538SAndroid Build Coastguard Worker } 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker // static IsCategoryEnabled()23*6777b538SAndroid Build Coastguard Workerbool FileTracing::IsCategoryEnabled() { 24*6777b538SAndroid Build Coastguard Worker FileTracing::Provider* provider = GetProvider(); 25*6777b538SAndroid Build Coastguard Worker return provider && provider->FileTracingCategoryIsEnabled(); 26*6777b538SAndroid Build Coastguard Worker } 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker // static SetProvider(FileTracing::Provider * provider)29*6777b538SAndroid Build Coastguard Workervoid FileTracing::SetProvider(FileTracing::Provider* provider) { 30*6777b538SAndroid Build Coastguard Worker g_provider.store(provider, std::memory_order_release); 31*6777b538SAndroid Build Coastguard Worker } 32*6777b538SAndroid Build Coastguard Worker ScopedEnabler()33*6777b538SAndroid Build Coastguard WorkerFileTracing::ScopedEnabler::ScopedEnabler() { 34*6777b538SAndroid Build Coastguard Worker FileTracing::Provider* provider = GetProvider(); 35*6777b538SAndroid Build Coastguard Worker if (provider) 36*6777b538SAndroid Build Coastguard Worker provider->FileTracingEnable(this); 37*6777b538SAndroid Build Coastguard Worker } 38*6777b538SAndroid Build Coastguard Worker ~ScopedEnabler()39*6777b538SAndroid Build Coastguard WorkerFileTracing::ScopedEnabler::~ScopedEnabler() { 40*6777b538SAndroid Build Coastguard Worker FileTracing::Provider* provider = GetProvider(); 41*6777b538SAndroid Build Coastguard Worker if (provider) 42*6777b538SAndroid Build Coastguard Worker provider->FileTracingDisable(this); 43*6777b538SAndroid Build Coastguard Worker // TODO(crbug.com/1021571): Remove this once fixed. 44*6777b538SAndroid Build Coastguard Worker PERFETTO_INTERNAL_ADD_EMPTY_EVENT(); 45*6777b538SAndroid Build Coastguard Worker } 46*6777b538SAndroid Build Coastguard Worker ~ScopedTrace()47*6777b538SAndroid Build Coastguard WorkerFileTracing::ScopedTrace::~ScopedTrace() { 48*6777b538SAndroid Build Coastguard Worker if (id_) { 49*6777b538SAndroid Build Coastguard Worker FileTracing::Provider* provider = GetProvider(); 50*6777b538SAndroid Build Coastguard Worker if (provider) 51*6777b538SAndroid Build Coastguard Worker provider->FileTracingEventEnd(name_, id_); 52*6777b538SAndroid Build Coastguard Worker } 53*6777b538SAndroid Build Coastguard Worker } 54*6777b538SAndroid Build Coastguard Worker Initialize(const char * name,const File * file,int64_t size)55*6777b538SAndroid Build Coastguard Workervoid FileTracing::ScopedTrace::Initialize(const char* name, 56*6777b538SAndroid Build Coastguard Worker const File* file, 57*6777b538SAndroid Build Coastguard Worker int64_t size) { 58*6777b538SAndroid Build Coastguard Worker id_ = &file->trace_enabler_; 59*6777b538SAndroid Build Coastguard Worker name_ = name; 60*6777b538SAndroid Build Coastguard Worker GetProvider()->FileTracingEventBegin(name_, id_, file->tracing_path_, size); 61*6777b538SAndroid Build Coastguard Worker } 62*6777b538SAndroid Build Coastguard Worker 63*6777b538SAndroid Build Coastguard Worker } // namespace base 64