| /* | |
| * Copyright (C) 2022 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| #include <unistd.h> | |
| #include "perfetto/public/data_source.h" | |
| #include "perfetto/public/producer.h" | |
| #include "perfetto/public/protos/trace/test_event.pzc.h" | |
| #include "perfetto/public/protos/trace/trace_packet.pzc.h" | |
| static struct PerfettoDs custom = PERFETTO_DS_INIT(); | |
| int main(void) { | |
| struct PerfettoProducerInitArgs args = PERFETTO_PRODUCER_INIT_ARGS_INIT(); | |
| args.backends = PERFETTO_BACKEND_SYSTEM; | |
| PerfettoProducerInit(args); | |
| PerfettoDsRegister(&custom, "com.example.custom_data_source", | |
| PerfettoDsParamsDefault()); | |
| for (;;) { | |
| PERFETTO_DS_TRACE(custom, ctx) { | |
| struct PerfettoDsRootTracePacket root; | |
| PerfettoDsTracerPacketBegin(&ctx, &root); | |
| perfetto_protos_TracePacket_set_timestamp(&root.msg, 42); | |
| { | |
| struct perfetto_protos_TestEvent for_testing; | |
| perfetto_protos_TracePacket_begin_for_testing(&root.msg, &for_testing); | |
| perfetto_protos_TestEvent_set_cstr_str(&for_testing, | |
| "This is a long string"); | |
| { | |
| struct perfetto_protos_TestEvent_TestPayload payload; | |
| perfetto_protos_TestEvent_begin_payload(&for_testing, &payload); | |
| for (int i = 0; i < 1000; i++) { | |
| perfetto_protos_TestEvent_TestPayload_set_cstr_str(&payload, | |
| "nested"); | |
| } | |
| perfetto_protos_TestEvent_end_payload(&for_testing, &payload); | |
| } | |
| perfetto_protos_TracePacket_end_for_testing(&root.msg, &for_testing); | |
| } | |
| PerfettoDsTracerPacketEnd(&ctx, &root); | |
| } | |
| sleep(1); | |
| } | |
| } | |
| // These headers are not needed but are pulled in to check that we don't | |
| // accidentally slip in regressions of C++ code in public/ headers. | |
| #include "perfetto/public/abi/atomic.h" | |
| #include "perfetto/public/abi/backend_type.h" | |
| #include "perfetto/public/abi/data_source_abi.h" | |
| #include "perfetto/public/abi/export.h" | |
| #include "perfetto/public/abi/heap_buffer.h" | |
| #include "perfetto/public/abi/pb_decoder_abi.h" | |
| #include "perfetto/public/abi/pb_msg_writer_abi.h" | |
| #include "perfetto/public/abi/producer_abi.h" | |
| #include "perfetto/public/abi/thread_utils_abi.h" | |
| #include "perfetto/public/abi/tracing_session_abi.h" | |
| #include "perfetto/public/abi/track_event_abi.h" | |
| #include "perfetto/public/abi/track_event_hl_abi.h" | |
| #include "perfetto/public/abi/track_event_ll_abi.h" | |
| #include "perfetto/public/compiler.h" | |
| #include "perfetto/public/data_source.h" | |
| #include "perfetto/public/fnv1a.h" | |
| #include "perfetto/public/pb_decoder.h" | |
| #include "perfetto/public/pb_macros.h" | |
| #include "perfetto/public/pb_msg.h" | |
| #include "perfetto/public/pb_msg_writer.h" | |
| #include "perfetto/public/pb_packed.h" | |
| #include "perfetto/public/pb_utils.h" | |
| #include "perfetto/public/producer.h" | |
| #include "perfetto/public/protos/common/builtin_clock.pzc.h" | |
| #include "perfetto/public/protos/common/data_source_descriptor.pzc.h" | |
| #include "perfetto/public/protos/config/data_source_config.pzc.h" | |
| #include "perfetto/public/protos/config/trace_config.pzc.h" | |
| #include "perfetto/public/protos/config/track_event/track_event_config.pzc.h" | |
| #include "perfetto/public/protos/trace/clock_snapshot.pzc.h" | |
| #include "perfetto/public/protos/trace/interned_data/interned_data.pzc.h" | |
| #include "perfetto/public/protos/trace/test_event.pzc.h" | |
| #include "perfetto/public/protos/trace/trace.pzc.h" | |
| #include "perfetto/public/protos/trace/trace_packet.pzc.h" | |
| #include "perfetto/public/protos/trace/track_event/counter_descriptor.pzc.h" | |
| #include "perfetto/public/protos/trace/track_event/debug_annotation.pzc.h" | |
| #include "perfetto/public/protos/trace/track_event/track_descriptor.pzc.h" | |
| #include "perfetto/public/protos/trace/track_event/track_event.pzc.h" | |
| #include "perfetto/public/protos/trace/trigger.pzc.h" | |
| #include "perfetto/public/te_category_macros.h" | |
| #include "perfetto/public/te_macros.h" | |
| #include "perfetto/public/thread_utils.h" | |
| #include "perfetto/public/tracing_session.h" | |
| #include "perfetto/public/track_event.h" |