1 // Copyright 2018 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // TODO(PT-63): This file contains wrappers that use fdio to connect to
6 // trace manager. An open question is whether to keep them.
7
8 #include <stdio.h>
9
10 #include <lib/zx/process.h>
11 #include <trace-provider/fdio_connect.h>
12 #include <trace-provider/provider.h>
13
14 #include <zircon/assert.h>
15 #include <zircon/status.h>
16
trace_provider_create_with_name_fdio(async_dispatcher_t * dispatcher,const char * name)17 trace_provider_t* trace_provider_create_with_name_fdio(
18 async_dispatcher_t* dispatcher, const char* name) {
19 ZX_DEBUG_ASSERT(dispatcher);
20
21 zx_handle_t to_service;
22 auto status = trace_provider_connect_with_fdio(&to_service);
23 if (status != ZX_OK) {
24 fprintf(stderr, "TraceProvider: connection failed: status=%d(%s)\n",
25 status, zx_status_get_string(status));
26 return nullptr;
27 }
28
29 return trace_provider_create_with_name_etc(to_service, dispatcher, name);
30 }
31
trace_provider_create_with_fdio(async_dispatcher_t * dispatcher)32 trace_provider_t* trace_provider_create_with_fdio(
33 async_dispatcher_t* dispatcher) {
34 auto self = zx::process::self();
35 char name[ZX_MAX_NAME_LEN];
36 auto status = self->get_property(ZX_PROP_NAME, name, sizeof(name));
37 if (status != ZX_OK) {
38 fprintf(stderr, "TraceProvider: error getting process name: status=%d(%s)\n",
39 status, zx_status_get_string(status));
40 name[0] = '\0';
41 }
42 return trace_provider_create_with_name(dispatcher, name);
43 }
44
trace_provider_create_synchronously_with_fdio(async_dispatcher_t * dispatcher,const char * name,bool * out_manager_is_tracing_already)45 trace_provider_t* trace_provider_create_synchronously_with_fdio(
46 async_dispatcher_t* dispatcher, const char* name,
47 bool* out_manager_is_tracing_already) {
48 ZX_DEBUG_ASSERT(dispatcher);
49
50 zx_handle_t to_service;
51 auto status = trace_provider_connect_with_fdio(&to_service);
52 if (status != ZX_OK) {
53 fprintf(stderr, "TraceProvider: connection failed: status=%d(%s)\n",
54 status, zx_status_get_string(status));
55 return nullptr;
56 }
57
58 return trace_provider_create_synchronously_etc(
59 to_service, dispatcher, name, out_manager_is_tracing_already);
60 }
61
trace_provider_create_with_name(async_dispatcher_t * dispatcher,const char * name)62 trace_provider_t* trace_provider_create_with_name(
63 async_dispatcher_t* dispatcher, const char* name) {
64 return trace_provider_create_with_name_fdio(dispatcher, name);
65 }
66
trace_provider_create(async_dispatcher_t * dispatcher)67 trace_provider_t* trace_provider_create(async_dispatcher_t* dispatcher) {
68 return trace_provider_create_with_fdio(dispatcher);
69 }
70
trace_provider_create_synchronously(async_dispatcher_t * dispatcher,const char * name,bool * out_manager_is_tracing_already)71 trace_provider_t* trace_provider_create_synchronously(
72 async_dispatcher_t* dispatcher, const char* name,
73 bool* out_manager_is_tracing_already) {
74 return trace_provider_create_synchronously_with_fdio(
75 dispatcher, name, out_manager_is_tracing_already);
76 }
77