You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.5 KiB
60 lines
1.5 KiB
// Copyright The OpenTelemetry Authors |
|
// SPDX-License-Identifier: Apache-2.0 |
|
|
|
#pragma once |
|
|
|
#include <mutex> |
|
|
|
#include "opentelemetry/common/spin_lock_mutex.h" |
|
#include "opentelemetry/nostd/shared_ptr.h" |
|
#include "opentelemetry/trace/noop.h" |
|
#include "opentelemetry/trace/tracer_provider.h" |
|
#include "opentelemetry/version.h" |
|
|
|
OPENTELEMETRY_BEGIN_NAMESPACE |
|
namespace trace |
|
{ |
|
|
|
/** |
|
* Stores the singleton global TracerProvider. |
|
*/ |
|
class OPENTELEMETRY_EXPORT Provider |
|
{ |
|
public: |
|
/** |
|
* Returns the singleton TracerProvider. |
|
* |
|
* By default, a no-op TracerProvider is returned. This will never return a |
|
* nullptr TracerProvider. |
|
*/ |
|
static nostd::shared_ptr<TracerProvider> GetTracerProvider() noexcept |
|
{ |
|
std::lock_guard<common::SpinLockMutex> guard(GetLock()); |
|
return nostd::shared_ptr<TracerProvider>(GetProvider()); |
|
} |
|
|
|
/** |
|
* Changes the singleton TracerProvider. |
|
*/ |
|
static void SetTracerProvider(const nostd::shared_ptr<TracerProvider> &tp) noexcept |
|
{ |
|
std::lock_guard<common::SpinLockMutex> guard(GetLock()); |
|
GetProvider() = tp; |
|
} |
|
|
|
private: |
|
OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr<TracerProvider> &GetProvider() noexcept |
|
{ |
|
static nostd::shared_ptr<TracerProvider> provider(new NoopTracerProvider); |
|
return provider; |
|
} |
|
|
|
OPENTELEMETRY_API_SINGLETON static common::SpinLockMutex &GetLock() noexcept |
|
{ |
|
static common::SpinLockMutex lock; |
|
return lock; |
|
} |
|
}; |
|
|
|
} // namespace trace |
|
OPENTELEMETRY_END_NAMESPACE
|
|
|