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 Workervoid 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 Workerint 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