blob: b33ccc50c8a047b5c9992813b163c2a834197926 [file] [log] [blame]
// Copyright 2015 The Chromium 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/bind.h"
#include "base/logging.h"
#include "base/macros.h"
#include "base/threading/thread.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "mojo/application/application_runner_chromium.h"
#include "mojo/common/tracing_impl.h"
#include "mojo/public/c/system/main.h"
#include "mojo/public/cpp/application/application_delegate.h"
#include "mojo/public/cpp/application/application_impl.h"
#include "mojo/public/cpp/application/application_runner.h"
#include "mojo/public/cpp/application/service_provider_impl.h"
// This is an example app that uses implementation of tracing from mojo/common
// to participate in the tracing ecosystem.
//
// To collect a startup trace, run:
// `mojo_run mojo:trace_me --trace-startup [--android]
//
// You can also use `mojo_debug` to start and stop tracing interactively.
namespace examples {
static const base::TimeDelta kDoWorkDelay =
base::TimeDelta::FromMilliseconds(100);
static const base::TimeDelta kSleepTime =
base::TimeDelta::FromMilliseconds(100);
void NestedFunction() {
TRACE_EVENT0("trace_me", "NestedFunction");
base::PlatformThread::Sleep(kSleepTime);
}
void DoWork() {
TRACE_EVENT0("trace_me", "DoWork");
base::PlatformThread::Sleep(kSleepTime);
NestedFunction();
base::PlatformThread::Sleep(kSleepTime);
base::MessageLoop::current()->PostDelayedTask(FROM_HERE, base::Bind(&DoWork),
kDoWorkDelay);
}
class TraceMeApp : public mojo::ApplicationDelegate {
public:
TraceMeApp() {}
~TraceMeApp() override {}
// mojo:ApplicationDelegate:
void Initialize(mojo::ApplicationImpl* app) override {
// Allow TracingImpl to connect to the central tracing service, advertising
// its ability to provide trace events.
tracing_.Initialize(app);
TRACE_EVENT0("trace_me", "initialized");
base::MessageLoop::current()->PostDelayedTask(
FROM_HERE, base::Bind(&DoWork), kDoWorkDelay);
}
// mojo:ApplicationDelegate:
bool ConfigureIncomingConnection(
mojo::ServiceProviderImpl* service_provider_impl) override {
TRACE_EVENT0("trace_me", "connected");
return true;
}
private:
mojo::TracingImpl tracing_;
DISALLOW_COPY_AND_ASSIGN(TraceMeApp);
};
} // namespace examples
MojoResult MojoMain(MojoHandle application_request) {
mojo::ApplicationRunnerChromium runner(new examples::TraceMeApp);
return runner.Run(application_request);
}