blob: 2c66b78799f6f0af201dfe84d38eec638a496812 [file] [log] [blame]
// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <base/logging.h>
#include <base/threading/platform_thread.h>
#include <base/threading/thread.h>
#include <base/time/time.h>
#include "perfetto_simple_producer/my_app_tracing_categories.h"
void Trial2() {
TRACE_EVENT("perfetto_simple_producer", "Trial2");
base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(500));
}
// This demonstrates an event that begins and ends on different threads.
void OnNewRequest(size_t request_id) {
// Open a slice when the request came in.
TRACE_EVENT_BEGIN("perfetto_simple_producer", "HandleRequest",
perfetto::Track(request_id));
std::unique_ptr<base::Thread> thread(
new base::Thread("HandleRequest Thread"));
// Start a thread to handle the request.
thread->Start();
thread->task_runner()->PostTask(
FROM_HERE, base::BindOnce(
[](size_t request_id) {
TRACE_EVENT_END("perfetto_simple_producer",
perfetto::Track(request_id));
},
request_id));
thread->Stop();
}
int main(int argc, char** argv) {
perfetto::TracingInitArgs args;
// The system backend writes events into a system Perfetto daemon. Requires
// the Perfetto `traced` daemon to be running (e.g., on Android Pie and
// newer).
args.backends |= perfetto::kSystemBackend;
perfetto::Tracing::Initialize(args);
perfetto::TrackEvent::Register();
// Wait for the connection to the system Perfetto daemon being setup.
base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(500));
TRACE_EVENT("perfetto_simple_producer", "Trial1", "int", 100);
// This demonstrates the nesting of trace events.
Trial2();
TRACE_EVENT_BEGIN("perfetto_simple_producer", "Trial3");
OnNewRequest(100);
base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(500));
TRACE_EVENT_END("perfetto_simple_producer");
LOG(INFO) << "Category enabled: "
<< TRACE_EVENT_CATEGORY_ENABLED("perfetto_simple_producer");
LOG(INFO) << "Done tracing events";
return 0;
}