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()27void 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()45PerfettoProducerBackendInitArgsCreate() { 46 return new PerfettoProducerBackendInitArgs(); 47 } 48 PerfettoProducerBackendInitArgsSetShmemSizeHintKb(struct PerfettoProducerBackendInitArgs * backend_args,uint32_t size)49void 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)55void PerfettoProducerBackendInitArgsDestroy( 56 struct PerfettoProducerBackendInitArgs* backend_args) { 57 delete backend_args; 58 } 59 PerfettoProducerInProcessInit(const struct PerfettoProducerBackendInitArgs * backend_args)60void 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)68void 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)76void 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