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 Workervoid 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 WorkerPerfettoProducerBackendInitArgsCreate() { 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 Workervoid 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 Workervoid 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 Workervoid 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 Workervoid 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 Workervoid 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