blob: 815a8b369c6ee0b2d0ab12dabb60980acce476e2 [file] [log] [blame]
// Copyright 2018 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.
// TODO(PT-63): This file contains wrappers that use fdio to connect to
// trace manager. An open question is whether to keep them.
#include <stdio.h>
#include <lib/zx/process.h>
#include <trace-provider/fdio_connect.h>
#include <trace-provider/provider.h>
#include <zircon/assert.h>
#include <zircon/status.h>
trace_provider_t* trace_provider_create_with_name_fdio(
async_dispatcher_t* dispatcher, const char* name) {
ZX_DEBUG_ASSERT(dispatcher);
zx_handle_t to_service;
auto status = trace_provider_connect_with_fdio(&to_service);
if (status != ZX_OK) {
fprintf(stderr, "TraceProvider: connection failed: status=%d(%s)\n",
status, zx_status_get_string(status));
return nullptr;
}
return trace_provider_create_with_name_etc(to_service, dispatcher, name);
}
trace_provider_t* trace_provider_create_with_fdio(
async_dispatcher_t* dispatcher) {
auto self = zx::process::self();
char name[ZX_MAX_NAME_LEN];
auto status = self->get_property(ZX_PROP_NAME, name, sizeof(name));
if (status != ZX_OK) {
fprintf(stderr, "TraceProvider: error getting process name: status=%d(%s)\n",
status, zx_status_get_string(status));
name[0] = '\0';
}
return trace_provider_create_with_name(dispatcher, name);
}
trace_provider_t* trace_provider_create_synchronously_with_fdio(
async_dispatcher_t* dispatcher, const char* name,
bool* out_manager_is_tracing_already) {
ZX_DEBUG_ASSERT(dispatcher);
zx_handle_t to_service;
auto status = trace_provider_connect_with_fdio(&to_service);
if (status != ZX_OK) {
fprintf(stderr, "TraceProvider: connection failed: status=%d(%s)\n",
status, zx_status_get_string(status));
return nullptr;
}
return trace_provider_create_synchronously_etc(
to_service, dispatcher, name, out_manager_is_tracing_already);
}
trace_provider_t* trace_provider_create_with_name(
async_dispatcher_t* dispatcher, const char* name) {
return trace_provider_create_with_name_fdio(dispatcher, name);
}
trace_provider_t* trace_provider_create(async_dispatcher_t* dispatcher) {
return trace_provider_create_with_fdio(dispatcher);
}
trace_provider_t* trace_provider_create_synchronously(
async_dispatcher_t* dispatcher, const char* name,
bool* out_manager_is_tracing_already) {
return trace_provider_create_synchronously_with_fdio(
dispatcher, name, out_manager_is_tracing_already);
}