xref: /aosp_15_r20/external/pigweed/pw_trace_tokenized/example/rpc.cc (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker // Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker //
3*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker // the License at
6*61c4878aSAndroid Build Coastguard Worker //
7*61c4878aSAndroid Build Coastguard Worker //     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker //
9*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker // the License.
14*61c4878aSAndroid Build Coastguard Worker //==============================================================================
15*61c4878aSAndroid Build Coastguard Worker /*
16*61c4878aSAndroid Build Coastguard Worker 
17*61c4878aSAndroid Build Coastguard Worker NOTE
18*61c4878aSAndroid Build Coastguard Worker To use this example you need to enable nanopb. One option is to first install
19*61c4878aSAndroid Build Coastguard Worker the nanopb package by running the command:
20*61c4878aSAndroid Build Coastguard Worker 
21*61c4878aSAndroid Build Coastguard Worker pw package install nanopb
22*61c4878aSAndroid Build Coastguard Worker 
23*61c4878aSAndroid Build Coastguard Worker Next add nanopb to your args.gn by running the command
24*61c4878aSAndroid Build Coastguard Worker 
25*61c4878aSAndroid Build Coastguard Worker gn args out
26*61c4878aSAndroid Build Coastguard Worker 
27*61c4878aSAndroid Build Coastguard Worker Then add the following line to that text file:
28*61c4878aSAndroid Build Coastguard Worker 
29*61c4878aSAndroid Build Coastguard Worker dir_pw_third_party_nanopb = getenv("PW_PACKAGE_ROOT") + "/nanopb"
30*61c4878aSAndroid Build Coastguard Worker 
31*61c4878aSAndroid Build Coastguard Worker BUILD
32*61c4878aSAndroid Build Coastguard Worker ninja -C out \
33*61c4878aSAndroid Build Coastguard Worker pw_strict_host_clang_debug/obj/pw_trace_tokenized/bin/trace_tokenized_example_rpc
34*61c4878aSAndroid Build Coastguard Worker 
35*61c4878aSAndroid Build Coastguard Worker RUN
36*61c4878aSAndroid Build Coastguard Worker ./out/pw_strict_host_clang_debug/obj/pw_trace_tokenized/bin/trace_tokenized_example_rpc
37*61c4878aSAndroid Build Coastguard Worker 
38*61c4878aSAndroid Build Coastguard Worker DECODE
39*61c4878aSAndroid Build Coastguard Worker python pw_trace_tokenized/py/pw_trace_tokenized/get_trace.py \
40*61c4878aSAndroid Build Coastguard Worker  -s localhost:33000 \
41*61c4878aSAndroid Build Coastguard Worker  -o trace.json \
42*61c4878aSAndroid Build Coastguard Worker  -t \
43*61c4878aSAndroid Build Coastguard Worker  out/pw_strict_host_clang_debug/obj/pw_trace_tokenized/bin/trace_tokenized_example_rpc\
44*61c4878aSAndroid Build Coastguard Worker  pw_trace_tokenized/pw_trace_protos/trace_rpc.proto
45*61c4878aSAndroid Build Coastguard Worker 
46*61c4878aSAndroid Build Coastguard Worker VIEW
47*61c4878aSAndroid Build Coastguard Worker In chrome navigate to chrome://tracing, and load the trace.json file.
48*61c4878aSAndroid Build Coastguard Worker */
49*61c4878aSAndroid Build Coastguard Worker #include <thread>
50*61c4878aSAndroid Build Coastguard Worker 
51*61c4878aSAndroid Build Coastguard Worker #include "pw_assert/check.h"
52*61c4878aSAndroid Build Coastguard Worker #include "pw_log/log.h"
53*61c4878aSAndroid Build Coastguard Worker #include "pw_rpc/server.h"
54*61c4878aSAndroid Build Coastguard Worker #include "pw_rpc_system_server/rpc_server.h"
55*61c4878aSAndroid Build Coastguard Worker #include "pw_trace/example/sample_app.h"
56*61c4878aSAndroid Build Coastguard Worker #include "pw_trace_tokenized/trace_rpc_service_nanopb.h"
57*61c4878aSAndroid Build Coastguard Worker #include "pw_trace_tokenized/trace_tokenized.h"
58*61c4878aSAndroid Build Coastguard Worker 
59*61c4878aSAndroid Build Coastguard Worker namespace {
60*61c4878aSAndroid Build Coastguard Worker 
61*61c4878aSAndroid Build Coastguard Worker pw::trace::TraceService trace_service(pw::trace::GetTokenizedTracer());
62*61c4878aSAndroid Build Coastguard Worker 
RpcThread()63*61c4878aSAndroid Build Coastguard Worker void RpcThread() {
64*61c4878aSAndroid Build Coastguard Worker   pw::rpc::system_server::Init();
65*61c4878aSAndroid Build Coastguard Worker 
66*61c4878aSAndroid Build Coastguard Worker   // Set up the server and start processing data.
67*61c4878aSAndroid Build Coastguard Worker   pw::rpc::system_server::Server().RegisterService(trace_service);
68*61c4878aSAndroid Build Coastguard Worker   PW_CHECK_OK(pw::rpc::system_server::Start());
69*61c4878aSAndroid Build Coastguard Worker }
70*61c4878aSAndroid Build Coastguard Worker 
71*61c4878aSAndroid Build Coastguard Worker }  // namespace
72*61c4878aSAndroid Build Coastguard Worker 
main()73*61c4878aSAndroid Build Coastguard Worker int main() {
74*61c4878aSAndroid Build Coastguard Worker   std::thread rpc_thread(RpcThread);
75*61c4878aSAndroid Build Coastguard Worker 
76*61c4878aSAndroid Build Coastguard Worker   // Enable tracing.
77*61c4878aSAndroid Build Coastguard Worker   PW_TRACE_SET_ENABLED(true);
78*61c4878aSAndroid Build Coastguard Worker 
79*61c4878aSAndroid Build Coastguard Worker   PW_LOG_INFO("Running basic trace example...\n");
80*61c4878aSAndroid Build Coastguard Worker   RunTraceSampleApp();
81*61c4878aSAndroid Build Coastguard Worker   return 0;
82*61c4878aSAndroid Build Coastguard Worker }
83