xref: /aosp_15_r20/external/perfetto/src/shared_lib/producer.cc (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "perfetto/public/abi/producer_abi.h"
18 
19 #include "perfetto/tracing/backend_type.h"
20 #include "perfetto/tracing/tracing.h"
21 #include "src/shared_lib/reset_for_testing.h"
22 #include "src/tracing/internal/tracing_muxer_impl.h"
23 
24 namespace perfetto {
25 namespace shlib {
26 
ResetForTesting()27 void ResetForTesting() {
28   auto* muxer = static_cast<internal::TracingMuxerImpl*>(
29       internal::TracingMuxerImpl::instance_);
30   muxer->AppendResetForTestingCallback([] {
31     perfetto::shlib::ResetDataSourceTls();
32     perfetto::shlib::ResetTrackEventTls();
33   });
34   perfetto::Tracing::ResetForTesting();
35 }
36 
37 }  // namespace shlib
38 }  // namespace perfetto
39 
40 struct PerfettoProducerBackendInitArgs {
41   uint32_t shmem_size_hint_kb = 0;
42 };
43 
44 struct PerfettoProducerBackendInitArgs*
PerfettoProducerBackendInitArgsCreate()45 PerfettoProducerBackendInitArgsCreate() {
46   return new PerfettoProducerBackendInitArgs();
47 }
48 
PerfettoProducerBackendInitArgsSetShmemSizeHintKb(struct PerfettoProducerBackendInitArgs * backend_args,uint32_t size)49 void PerfettoProducerBackendInitArgsSetShmemSizeHintKb(
50     struct PerfettoProducerBackendInitArgs* backend_args,
51     uint32_t size) {
52   backend_args->shmem_size_hint_kb = size;
53 }
54 
PerfettoProducerBackendInitArgsDestroy(struct PerfettoProducerBackendInitArgs * backend_args)55 void PerfettoProducerBackendInitArgsDestroy(
56     struct PerfettoProducerBackendInitArgs* backend_args) {
57   delete backend_args;
58 }
59 
PerfettoProducerInProcessInit(const struct PerfettoProducerBackendInitArgs * backend_args)60 void PerfettoProducerInProcessInit(
61     const struct PerfettoProducerBackendInitArgs* backend_args) {
62   perfetto::TracingInitArgs args;
63   args.backends = perfetto::kInProcessBackend;
64   args.shmem_size_hint_kb = backend_args->shmem_size_hint_kb;
65   perfetto::Tracing::Initialize(args);
66 }
67 
PerfettoProducerSystemInit(const struct PerfettoProducerBackendInitArgs * backend_args)68 void PerfettoProducerSystemInit(
69     const struct PerfettoProducerBackendInitArgs* backend_args) {
70   perfetto::TracingInitArgs args;
71   args.backends = perfetto::kSystemBackend;
72   args.shmem_size_hint_kb = backend_args->shmem_size_hint_kb;
73   perfetto::Tracing::Initialize(args);
74 }
75 
PerfettoProducerActivateTriggers(const char * trigger_names[],uint32_t ttl_ms)76 void PerfettoProducerActivateTriggers(const char* trigger_names[],
77                                       uint32_t ttl_ms) {
78   std::vector<std::string> triggers;
79   for (size_t i = 0; trigger_names[i] != nullptr; i++) {
80     triggers.push_back(trigger_names[i]);
81   }
82   perfetto::Tracing::ActivateTriggers(triggers, ttl_ms);
83 }
84