You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.2 KiB
93 lines
3.2 KiB
// Copyright 2020 The Pigweed Authors
|
|
//
|
|
// 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
|
|
//
|
|
// https://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.
|
|
//==============================================================================
|
|
// BUID
|
|
// ninja -C out
|
|
// host_clang_debug/obj/pw_trace_tokenized/bin/trace_tokenized_example_trigger
|
|
//
|
|
// RUN
|
|
// .out/host_clang_debug/obj/pw_trace_tokenized/bin/trace_tokenized_example_trigger
|
|
// trace.bin
|
|
//
|
|
// DECODE
|
|
// python pw_trace_tokenized/py/trace_tokenized.py -i trace.bin -o trace.json
|
|
// ./out/host_clang_debug/obj/pw_trace_tokenized/bin/trace_tokenized_example_basic
|
|
//
|
|
// VIEW
|
|
// In chrome navigate to chrome://tracing, and load the trace.json file.
|
|
|
|
#include "pw_log/log.h"
|
|
#include "pw_trace/example/sample_app.h"
|
|
#include "pw_trace/trace.h"
|
|
#include "pw_trace_tokenized/example/trace_to_file.h"
|
|
#include "pw_trace_tokenized/trace_callback.h"
|
|
#include "pw_trace_tokenized/trace_tokenized.h"
|
|
|
|
namespace {
|
|
|
|
constexpr uint32_t kTriggerId = 3;
|
|
constexpr uint32_t kTriggerStartTraceRef =
|
|
PW_TRACE_REF_DATA(PW_TRACE_TYPE_ASYNC_START,
|
|
"Processing", // Module
|
|
"Job", // Label
|
|
PW_TRACE_FLAGS_DEFAULT,
|
|
"Process",
|
|
"@pw_py_struct_fmt:B");
|
|
constexpr uint32_t kTriggerEndTraceRef = PW_TRACE_REF(PW_TRACE_TYPE_ASYNC_END,
|
|
"Processing", // Module
|
|
"Job", // Label
|
|
PW_TRACE_FLAGS_DEFAULT,
|
|
"Process");
|
|
|
|
} // namespace
|
|
|
|
pw_trace_TraceEventReturnFlags TraceEventCallback(
|
|
void* /* user_data */,
|
|
uint32_t trace_ref,
|
|
pw_trace_EventType /* event_type */,
|
|
const char* /* module */,
|
|
uint32_t trace_id,
|
|
uint8_t /* flags */) {
|
|
if (trace_ref == kTriggerStartTraceRef && trace_id == kTriggerId) {
|
|
PW_LOG_INFO("Trace capture started!");
|
|
PW_TRACE_SET_ENABLED(true);
|
|
}
|
|
if (trace_ref == kTriggerEndTraceRef && trace_id == kTriggerId) {
|
|
PW_LOG_INFO("Trace capture ended!");
|
|
return PW_TRACE_EVENT_RETURN_FLAGS_DISABLE_AFTER_PROCESSING;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int main(int argc, char** argv) { // Take filename as arg
|
|
if (argc != 2) {
|
|
PW_LOG_ERROR("Expected output file name as argument.\n");
|
|
return -1;
|
|
}
|
|
|
|
// Register trigger callback
|
|
pw::trace::Callbacks::Instance().RegisterEventCallback(
|
|
TraceEventCallback, pw::trace::CallbacksImpl::kCallOnEveryEvent);
|
|
|
|
// Ensure tracing is off at start, the trigger will turn it on.
|
|
PW_TRACE_SET_ENABLED(false);
|
|
|
|
// Dump trace data to the file passed in.
|
|
pw::trace::TraceToFile trace_to_file(argv[1]);
|
|
|
|
PW_LOG_INFO("Running trigger example...");
|
|
RunTraceSampleApp();
|
|
return 0;
|
|
}
|