// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

//
// The API for initializing the trace provider for a process.
//

#pragma once

#include <zircon/compiler.h>

#include <async/dispatcher.h>

__BEGIN_CDECLS

// Represents a trace provider.
typedef struct trace_provider trace_provider_t;

// Creates a trace provider associated with the specified async dispatcher
// and registers it with the tracing system.
//
// The trace provider will start and stop the trace engine in response to requests
// from the tracing system.
//
// |async| is the asynchronous dispatcher which the trace provider and trace
// engine will use for dispatch.  This must outlive the trace provider instance.
//
// Returns the trace provider, or null if creation failed.
//
// TODO(MG-1036): Currently this connects to the trace manager service.
// Switch to passively exporting the trace provider via the "hub" through
// the process's exported directory once that stuff is implemented.  We'll
// probably need to pass some extra parameters to the trace provider then.
trace_provider_t* trace_provider_create(async_t* async);

// Destroys the trace provider.
void trace_provider_destroy(trace_provider_t* provider);

__END_CDECLS

#ifdef __cplusplus
namespace trace {

// Convenience RAII wrapper for creating and destroying a trace provider.
class TraceProvider {
public:
    // Creates a trace provider.
    TraceProvider(async_t* async)
        : provider_(trace_provider_create(async)) {}

    // Destroys a trace provider.
    ~TraceProvider() {
        if (provider_)
            trace_provider_destroy(provider_);
    }

    // Returns true if the trace provider was created successfully.
    zx_status_t is_valid() const {
        return provider_ != nullptr;
    }

private:
    trace_provider_t* provider_;
};

} // namespace trace
#endif // __cplusplus
