xref: /aosp_15_r20/external/perfetto/src/shared_lib/producer.cc (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker /*
2*6dbdd20aSAndroid Build Coastguard Worker  * Copyright (C) 2022 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 #include "perfetto/public/abi/producer_abi.h"
18*6dbdd20aSAndroid Build Coastguard Worker 
19*6dbdd20aSAndroid Build Coastguard Worker #include "perfetto/tracing/backend_type.h"
20*6dbdd20aSAndroid Build Coastguard Worker #include "perfetto/tracing/tracing.h"
21*6dbdd20aSAndroid Build Coastguard Worker #include "src/shared_lib/reset_for_testing.h"
22*6dbdd20aSAndroid Build Coastguard Worker #include "src/tracing/internal/tracing_muxer_impl.h"
23*6dbdd20aSAndroid Build Coastguard Worker 
24*6dbdd20aSAndroid Build Coastguard Worker namespace perfetto {
25*6dbdd20aSAndroid Build Coastguard Worker namespace shlib {
26*6dbdd20aSAndroid Build Coastguard Worker 
ResetForTesting()27*6dbdd20aSAndroid Build Coastguard Worker void ResetForTesting() {
28*6dbdd20aSAndroid Build Coastguard Worker   auto* muxer = static_cast<internal::TracingMuxerImpl*>(
29*6dbdd20aSAndroid Build Coastguard Worker       internal::TracingMuxerImpl::instance_);
30*6dbdd20aSAndroid Build Coastguard Worker   muxer->AppendResetForTestingCallback([] {
31*6dbdd20aSAndroid Build Coastguard Worker     perfetto::shlib::ResetDataSourceTls();
32*6dbdd20aSAndroid Build Coastguard Worker     perfetto::shlib::ResetTrackEventTls();
33*6dbdd20aSAndroid Build Coastguard Worker   });
34*6dbdd20aSAndroid Build Coastguard Worker   perfetto::Tracing::ResetForTesting();
35*6dbdd20aSAndroid Build Coastguard Worker }
36*6dbdd20aSAndroid Build Coastguard Worker 
37*6dbdd20aSAndroid Build Coastguard Worker }  // namespace shlib
38*6dbdd20aSAndroid Build Coastguard Worker }  // namespace perfetto
39*6dbdd20aSAndroid Build Coastguard Worker 
40*6dbdd20aSAndroid Build Coastguard Worker struct PerfettoProducerBackendInitArgs {
41*6dbdd20aSAndroid Build Coastguard Worker   uint32_t shmem_size_hint_kb = 0;
42*6dbdd20aSAndroid Build Coastguard Worker };
43*6dbdd20aSAndroid Build Coastguard Worker 
44*6dbdd20aSAndroid Build Coastguard Worker struct PerfettoProducerBackendInitArgs*
PerfettoProducerBackendInitArgsCreate()45*6dbdd20aSAndroid Build Coastguard Worker PerfettoProducerBackendInitArgsCreate() {
46*6dbdd20aSAndroid Build Coastguard Worker   return new PerfettoProducerBackendInitArgs();
47*6dbdd20aSAndroid Build Coastguard Worker }
48*6dbdd20aSAndroid Build Coastguard Worker 
PerfettoProducerBackendInitArgsSetShmemSizeHintKb(struct PerfettoProducerBackendInitArgs * backend_args,uint32_t size)49*6dbdd20aSAndroid Build Coastguard Worker void PerfettoProducerBackendInitArgsSetShmemSizeHintKb(
50*6dbdd20aSAndroid Build Coastguard Worker     struct PerfettoProducerBackendInitArgs* backend_args,
51*6dbdd20aSAndroid Build Coastguard Worker     uint32_t size) {
52*6dbdd20aSAndroid Build Coastguard Worker   backend_args->shmem_size_hint_kb = size;
53*6dbdd20aSAndroid Build Coastguard Worker }
54*6dbdd20aSAndroid Build Coastguard Worker 
PerfettoProducerBackendInitArgsDestroy(struct PerfettoProducerBackendInitArgs * backend_args)55*6dbdd20aSAndroid Build Coastguard Worker void PerfettoProducerBackendInitArgsDestroy(
56*6dbdd20aSAndroid Build Coastguard Worker     struct PerfettoProducerBackendInitArgs* backend_args) {
57*6dbdd20aSAndroid Build Coastguard Worker   delete backend_args;
58*6dbdd20aSAndroid Build Coastguard Worker }
59*6dbdd20aSAndroid Build Coastguard Worker 
PerfettoProducerInProcessInit(const struct PerfettoProducerBackendInitArgs * backend_args)60*6dbdd20aSAndroid Build Coastguard Worker void PerfettoProducerInProcessInit(
61*6dbdd20aSAndroid Build Coastguard Worker     const struct PerfettoProducerBackendInitArgs* backend_args) {
62*6dbdd20aSAndroid Build Coastguard Worker   perfetto::TracingInitArgs args;
63*6dbdd20aSAndroid Build Coastguard Worker   args.backends = perfetto::kInProcessBackend;
64*6dbdd20aSAndroid Build Coastguard Worker   args.shmem_size_hint_kb = backend_args->shmem_size_hint_kb;
65*6dbdd20aSAndroid Build Coastguard Worker   perfetto::Tracing::Initialize(args);
66*6dbdd20aSAndroid Build Coastguard Worker }
67*6dbdd20aSAndroid Build Coastguard Worker 
PerfettoProducerSystemInit(const struct PerfettoProducerBackendInitArgs * backend_args)68*6dbdd20aSAndroid Build Coastguard Worker void PerfettoProducerSystemInit(
69*6dbdd20aSAndroid Build Coastguard Worker     const struct PerfettoProducerBackendInitArgs* backend_args) {
70*6dbdd20aSAndroid Build Coastguard Worker   perfetto::TracingInitArgs args;
71*6dbdd20aSAndroid Build Coastguard Worker   args.backends = perfetto::kSystemBackend;
72*6dbdd20aSAndroid Build Coastguard Worker   args.shmem_size_hint_kb = backend_args->shmem_size_hint_kb;
73*6dbdd20aSAndroid Build Coastguard Worker   perfetto::Tracing::Initialize(args);
74*6dbdd20aSAndroid Build Coastguard Worker }
75*6dbdd20aSAndroid Build Coastguard Worker 
PerfettoProducerActivateTriggers(const char * trigger_names[],uint32_t ttl_ms)76*6dbdd20aSAndroid Build Coastguard Worker void PerfettoProducerActivateTriggers(const char* trigger_names[],
77*6dbdd20aSAndroid Build Coastguard Worker                                       uint32_t ttl_ms) {
78*6dbdd20aSAndroid Build Coastguard Worker   std::vector<std::string> triggers;
79*6dbdd20aSAndroid Build Coastguard Worker   for (size_t i = 0; trigger_names[i] != nullptr; i++) {
80*6dbdd20aSAndroid Build Coastguard Worker     triggers.push_back(trigger_names[i]);
81*6dbdd20aSAndroid Build Coastguard Worker   }
82*6dbdd20aSAndroid Build Coastguard Worker   perfetto::Tracing::ActivateTriggers(triggers, ttl_ms);
83*6dbdd20aSAndroid Build Coastguard Worker }
84