xref: /aosp_15_r20/external/perfetto/examples/sdk/example_console.cc (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker /*
2*6dbdd20aSAndroid Build Coastguard Worker  * Copyright (C) 2020 The Android Open Source Project
3*6dbdd20aSAndroid Build Coastguard Worker  *
4*6dbdd20aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*6dbdd20aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*6dbdd20aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*6dbdd20aSAndroid Build Coastguard Worker  *
8*6dbdd20aSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*6dbdd20aSAndroid Build Coastguard Worker  *
10*6dbdd20aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*6dbdd20aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*6dbdd20aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6dbdd20aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*6dbdd20aSAndroid Build Coastguard Worker  * limitations under the License.
15*6dbdd20aSAndroid Build Coastguard Worker  */
16*6dbdd20aSAndroid Build Coastguard Worker 
17*6dbdd20aSAndroid Build Coastguard Worker // This example shows how to log trace events to the console using the console
18*6dbdd20aSAndroid Build Coastguard Worker // interceptor.
19*6dbdd20aSAndroid Build Coastguard Worker 
20*6dbdd20aSAndroid Build Coastguard Worker #include "trace_categories.h"
21*6dbdd20aSAndroid Build Coastguard Worker 
22*6dbdd20aSAndroid Build Coastguard Worker #include <chrono>
23*6dbdd20aSAndroid Build Coastguard Worker #include <thread>
24*6dbdd20aSAndroid Build Coastguard Worker 
InitializePerfetto()25*6dbdd20aSAndroid Build Coastguard Worker void InitializePerfetto() {
26*6dbdd20aSAndroid Build Coastguard Worker   perfetto::TracingInitArgs args;
27*6dbdd20aSAndroid Build Coastguard Worker   args.backends = perfetto::kInProcessBackend;
28*6dbdd20aSAndroid Build Coastguard Worker   perfetto::Tracing::Initialize(args);
29*6dbdd20aSAndroid Build Coastguard Worker   perfetto::TrackEvent::Register();
30*6dbdd20aSAndroid Build Coastguard Worker   perfetto::ConsoleInterceptor::Register();
31*6dbdd20aSAndroid Build Coastguard Worker }
32*6dbdd20aSAndroid Build Coastguard Worker 
StartTracing()33*6dbdd20aSAndroid Build Coastguard Worker std::unique_ptr<perfetto::TracingSession> StartTracing() {
34*6dbdd20aSAndroid Build Coastguard Worker   perfetto::TraceConfig cfg;
35*6dbdd20aSAndroid Build Coastguard Worker   cfg.add_buffers()->set_size_kb(1024);
36*6dbdd20aSAndroid Build Coastguard Worker   auto* ds_cfg = cfg.add_data_sources()->mutable_config();
37*6dbdd20aSAndroid Build Coastguard Worker   ds_cfg->set_name("track_event");
38*6dbdd20aSAndroid Build Coastguard Worker 
39*6dbdd20aSAndroid Build Coastguard Worker   // Enable the console interceptor.
40*6dbdd20aSAndroid Build Coastguard Worker   ds_cfg->mutable_interceptor_config()->set_name("console");
41*6dbdd20aSAndroid Build Coastguard Worker 
42*6dbdd20aSAndroid Build Coastguard Worker   auto tracing_session = perfetto::Tracing::NewTrace();
43*6dbdd20aSAndroid Build Coastguard Worker   tracing_session->Setup(cfg);
44*6dbdd20aSAndroid Build Coastguard Worker   tracing_session->StartBlocking();
45*6dbdd20aSAndroid Build Coastguard Worker   return tracing_session;
46*6dbdd20aSAndroid Build Coastguard Worker }
47*6dbdd20aSAndroid Build Coastguard Worker 
DrawPlayer(int player_number)48*6dbdd20aSAndroid Build Coastguard Worker void DrawPlayer(int player_number) {
49*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT("rendering", "DrawPlayer", "player_number", player_number);
50*6dbdd20aSAndroid Build Coastguard Worker   // Sleep to simulate a long computation.
51*6dbdd20aSAndroid Build Coastguard Worker   std::this_thread::sleep_for(std::chrono::milliseconds(500));
52*6dbdd20aSAndroid Build Coastguard Worker }
53*6dbdd20aSAndroid Build Coastguard Worker 
DrawGame()54*6dbdd20aSAndroid Build Coastguard Worker void DrawGame() {
55*6dbdd20aSAndroid Build Coastguard Worker   // This is an example of an unscoped slice, which begins and ends at specific
56*6dbdd20aSAndroid Build Coastguard Worker   // points (instead of at the end of the current block scope).
57*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("rendering", "DrawGame");
58*6dbdd20aSAndroid Build Coastguard Worker   DrawPlayer(1);
59*6dbdd20aSAndroid Build Coastguard Worker   DrawPlayer(2);
60*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_END("rendering");
61*6dbdd20aSAndroid Build Coastguard Worker }
62*6dbdd20aSAndroid Build Coastguard Worker 
main(int,const char **)63*6dbdd20aSAndroid Build Coastguard Worker int main(int, const char**) {
64*6dbdd20aSAndroid Build Coastguard Worker   InitializePerfetto();
65*6dbdd20aSAndroid Build Coastguard Worker   auto tracing_session = StartTracing();
66*6dbdd20aSAndroid Build Coastguard Worker 
67*6dbdd20aSAndroid Build Coastguard Worker   // Simulate some work that emits trace events.
68*6dbdd20aSAndroid Build Coastguard Worker   DrawGame();
69*6dbdd20aSAndroid Build Coastguard Worker 
70*6dbdd20aSAndroid Build Coastguard Worker   tracing_session->StopBlocking();
71*6dbdd20aSAndroid Build Coastguard Worker   return 0;
72*6dbdd20aSAndroid Build Coastguard Worker }
73