#include "perfetto/public/abi/data_source_abi.h"
#include <bitset>
#include "perfetto/tracing/buffer_exhausted_policy.h"
#include "perfetto/tracing/data_source.h"
#include "perfetto/tracing/internal/basic_types.h"
#include "protos/perfetto/common/data_source_descriptor.gen.h"
#include "protos/perfetto/config/data_source_config.gen.h"
#include "src/shared_lib/reset_for_testing.h"
#include "src/shared_lib/stream_writer.h"
namespace {
DataSourceInstanceThreadLocalState;
DataSourceThreadLocalState;
DataSourceType;
thread_local DataSourceThreadLocalState*
g_tls_cache[perfetto::internal::kMaxDataSources];
}
struct PerfettoDsImpl { … };
namespace perfetto {
namespace shlib {
void ResetDataSourceTls() { … }
void DsImplDestroy(struct PerfettoDsImpl* ds_impl) { … }
}
}
namespace {
class ShlibDataSource : public perfetto::DataSourceBase { … };
struct DataSourceTraits { … };
struct TracePointTraits { … };
DataSourceInstanceThreadLocalState::ObjectWithDeleter CreateShlibTls(
DataSourceInstanceThreadLocalState* tls_inst,
uint32_t inst_idx,
void* ctx) { … }
DataSourceInstanceThreadLocalState::ObjectWithDeleter
CreateShlibIncrementalState(DataSourceInstanceThreadLocalState* tls_inst,
uint32_t inst_idx,
void* ctx) { … }
}
std::atomic<bool> perfetto_atomic_false{ … };
struct PerfettoDsImpl* PerfettoDsImplCreate() { … }
void PerfettoDsSetOnSetupCallback(struct PerfettoDsImpl* ds_impl,
PerfettoDsOnSetupCb cb) { … }
void PerfettoDsSetOnStartCallback(struct PerfettoDsImpl* ds_impl,
PerfettoDsOnStartCb cb) { … }
void PerfettoDsSetOnStopCallback(struct PerfettoDsImpl* ds_impl,
PerfettoDsOnStopCb cb) { … }
void PerfettoDsSetOnDestroyCallback(struct PerfettoDsImpl* ds_impl,
PerfettoDsOnDestroyCb cb) { … }
void PerfettoDsSetOnFlushCallback(struct PerfettoDsImpl* ds_impl,
PerfettoDsOnFlushCb cb) { … }
void PerfettoDsSetOnCreateTls(struct PerfettoDsImpl* ds_impl,
PerfettoDsOnCreateCustomState cb) { … }
void PerfettoDsSetOnDeleteTls(struct PerfettoDsImpl* ds_impl,
PerfettoDsOnDeleteCustomState cb) { … }
void PerfettoDsSetOnCreateIncr(struct PerfettoDsImpl* ds_impl,
PerfettoDsOnCreateCustomState cb) { … }
void PerfettoDsSetOnDeleteIncr(struct PerfettoDsImpl* ds_impl,
PerfettoDsOnDeleteCustomState cb) { … }
void PerfettoDsSetCbUserArg(struct PerfettoDsImpl* ds_impl, void* user_arg) { … }
bool PerfettoDsSetBufferExhaustedPolicy(struct PerfettoDsImpl* ds_impl,
uint32_t policy) { … }
bool PerfettoDsImplRegister(struct PerfettoDsImpl* ds_impl,
PERFETTO_ATOMIC(bool) * *enabled_ptr,
const void* descriptor,
size_t descriptor_size) { … }
void PerfettoDsImplUpdateDescriptor(struct PerfettoDsImpl* ds_impl,
const void* descriptor,
size_t descriptor_size) { … }
PerfettoDsAsyncStopper* PerfettoDsOnStopArgsPostpone(
PerfettoDsOnStopArgs* args) { … }
void PerfettoDsStopDone(PerfettoDsAsyncStopper* stopper) { … }
PerfettoDsAsyncFlusher* PerfettoDsOnFlushArgsPostpone(
PerfettoDsOnFlushArgs* args) { … }
void PerfettoDsFlushDone(PerfettoDsAsyncFlusher* stopper) { … }
void* PerfettoDsImplGetInstanceLocked(struct PerfettoDsImpl* ds_impl,
PerfettoDsInstanceIndex idx) { … }
void PerfettoDsImplReleaseInstanceLocked(struct PerfettoDsImpl* ds_impl,
PerfettoDsInstanceIndex idx) { … }
void* PerfettoDsImplGetCustomTls(struct PerfettoDsImpl*,
struct PerfettoDsTracerImpl* tracer,
PerfettoDsInstanceIndex) { … }
void* PerfettoDsImplGetIncrementalState(struct PerfettoDsImpl* ds_impl,
struct PerfettoDsTracerImpl* tracer,
PerfettoDsInstanceIndex idx) { … }
struct PerfettoDsImplTracerIterator PerfettoDsImplTraceIterateBegin(
struct PerfettoDsImpl* ds_impl) { … }
void PerfettoDsImplTraceIterateNext(
struct PerfettoDsImpl* ds_impl,
struct PerfettoDsImplTracerIterator* iterator) { … }
void PerfettoDsImplTraceIterateBreak(
struct PerfettoDsImpl* ds_impl,
struct PerfettoDsImplTracerIterator* iterator) { … }
struct PerfettoStreamWriter PerfettoDsTracerImplPacketBegin(
struct PerfettoDsTracerImpl* tracer) { … }
void PerfettoDsTracerImplPacketEnd(struct PerfettoDsTracerImpl* tracer,
struct PerfettoStreamWriter* w) { … }
void PerfettoDsTracerImplFlush(struct PerfettoDsTracerImpl* tracer,
PerfettoDsTracerOnFlushCb cb,
void* user_arg) { … }