| Index: base/files/file_tracing.cc
|
| diff --git a/base/files/file_tracing.cc b/base/files/file_tracing.cc
|
| index 6d11cbc746ed268a357e0d2ba08d463c501e5d96..df859a454de58318f1ce977442f69cf2ebbc39a1 100644
|
| --- a/base/files/file_tracing.cc
|
| +++ b/base/files/file_tracing.cc
|
| @@ -4,39 +4,54 @@
|
|
|
| #include "base/files/file_tracing.h"
|
|
|
| +#include "base/atomicops.h"
|
| #include "base/files/file.h"
|
|
|
| +using base::subtle::AtomicWord;
|
| +
|
| namespace base {
|
|
|
| namespace {
|
| -FileTracing::Provider* g_provider = nullptr;
|
| +AtomicWord g_provider;
|
| +}
|
| +
|
| +FileTracing::Provider* GetProvider() {
|
| + AtomicWord provider = base::subtle::Acquire_Load(&g_provider);
|
| + return reinterpret_cast<FileTracing::Provider*>(provider);
|
| }
|
|
|
| // static
|
| bool FileTracing::IsCategoryEnabled() {
|
| - return g_provider && g_provider->FileTracingCategoryIsEnabled();
|
| + FileTracing::Provider* provider = GetProvider();
|
| + return provider && provider->FileTracingCategoryIsEnabled();
|
| }
|
|
|
| // static
|
| void FileTracing::SetProvider(FileTracing::Provider* provider) {
|
| - g_provider = provider;
|
| + base::subtle::Release_Store(&g_provider,
|
| + reinterpret_cast<AtomicWord>(provider));
|
| }
|
|
|
| FileTracing::ScopedEnabler::ScopedEnabler() {
|
| - if (g_provider)
|
| - g_provider->FileTracingEnable(this);
|
| + FileTracing::Provider* provider = GetProvider();
|
| + if (provider)
|
| + provider->FileTracingEnable(this);
|
| }
|
|
|
| FileTracing::ScopedEnabler::~ScopedEnabler() {
|
| - if (g_provider)
|
| - g_provider->FileTracingDisable(this);
|
| + FileTracing::Provider* provider = GetProvider();
|
| + if (provider)
|
| + provider->FileTracingDisable(this);
|
| }
|
|
|
| FileTracing::ScopedTrace::ScopedTrace() : id_(nullptr) {}
|
|
|
| FileTracing::ScopedTrace::~ScopedTrace() {
|
| - if (id_ && g_provider)
|
| - g_provider->FileTracingEventEnd(name_, id_);
|
| + if (id_) {
|
| + FileTracing::Provider* provider = GetProvider();
|
| + if (provider)
|
| + provider->FileTracingEventEnd(name_, id_);
|
| + }
|
| }
|
|
|
| void FileTracing::ScopedTrace::Initialize(const char* name,
|
| @@ -44,7 +59,7 @@ void FileTracing::ScopedTrace::Initialize(const char* name,
|
| int64_t size) {
|
| id_ = &file->trace_enabler_;
|
| name_ = name;
|
| - g_provider->FileTracingEventBegin(name_, id_, file->tracing_path_, size);
|
| + GetProvider()->FileTracingEventBegin(name_, id_, file->tracing_path_, size);
|
| }
|
|
|
| } // namespace base
|
|
|