mirror of
https://fuchsia.googlesource.com/third_party/pigweed.googlesource.com/pigweed/pigweed
synced 2024-09-20 13:51:05 +00:00
38dd043be6
Applications need to be able to provide the devices trace clock rate to the decoder. NOTE: A future change will add an RPC and do this step automatically for devices using the trace_rpc_server. Test: Reran the included examples with different clock rates as args. Change-Id: I2da937ede4a1d2fc296e268191ca12bc7fd78226 Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/58720 Commit-Queue: Tri Pho <tripho@google.com> Reviewed-by: Keir Mierle <keir@google.com>
95 lines
3.3 KiB
C++
95 lines
3.3 KiB
C++
// 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#trace
|
|
//
|
|
// 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)
|
|
.IgnoreError(); // TODO(pwbug/387): Handle Status properly
|
|
|
|
// 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;
|
|
}
|