xref: /aosp_15_r20/external/cronet/base/files/file_tracing.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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   // TODO(crbug.com/1021571): Remove this once fixed.
44   PERFETTO_INTERNAL_ADD_EMPTY_EVENT();
45 }
46 
~ScopedTrace()47 FileTracing::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)55 void 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