| Index: services/tracing/main.cc
|
| diff --git a/services/tracing/main.cc b/services/tracing/main.cc
|
| index 0d12a755f2add3d8c372ead56f1048ce04d84eda..76506d704040f73854d59ff4ec9caebc6d544930 100644
|
| --- a/services/tracing/main.cc
|
| +++ b/services/tracing/main.cc
|
| @@ -2,113 +2,9 @@
|
| // 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/memory/scoped_vector.h"
|
| #include "mojo/application/application_runner_chromium.h"
|
| -#include "mojo/common/weak_binding_set.h"
|
| -#include "mojo/common/weak_interface_ptr_set.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/bindings/strong_binding.h"
|
| -#include "services/tracing/trace_data_sink.h"
|
| -#include "services/tracing/tracing.mojom.h"
|
| -
|
| -namespace tracing {
|
| -
|
| -namespace {
|
| -
|
| -class CollectorImpl : public TraceDataCollector {
|
| - public:
|
| - CollectorImpl(mojo::InterfaceRequest<TraceDataCollector> request,
|
| - TraceDataSink* sink)
|
| - : sink_(sink), binding_(this, request.Pass()) {}
|
| -
|
| - ~CollectorImpl() override {}
|
| -
|
| - // tracing::TraceDataCollector implementation.
|
| - void DataCollected(const mojo::String& json) override {
|
| - sink_->AddChunk(json.To<std::string>());
|
| - }
|
| -
|
| - private:
|
| - TraceDataSink* sink_;
|
| - mojo::Binding<TraceDataCollector> binding_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(CollectorImpl);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class TracingApp : public mojo::ApplicationDelegate,
|
| - public mojo::InterfaceFactory<TraceCoordinator>,
|
| - public TraceCoordinator {
|
| - public:
|
| - TracingApp() {}
|
| - ~TracingApp() override {}
|
| -
|
| - private:
|
| - // mojo::ApplicationDelegate implementation.
|
| - bool ConfigureIncomingConnection(
|
| - mojo::ApplicationConnection* connection) override {
|
| - connection->AddService<TraceCoordinator>(this);
|
| -
|
| - // If someone connects to us they may want to use the TraceCoordinator
|
| - // interface and/or they may want to expose themselves to be traced. Attempt
|
| - // to connect to the TraceController interface to see if the application
|
| - // connecting to us wants to be traced. They can refuse the connection or
|
| - // close the pipe if not.
|
| - TraceControllerPtr controller_ptr;
|
| - connection->ConnectToService(&controller_ptr);
|
| - controller_ptrs_.AddInterfacePtr(controller_ptr.Pass());
|
| - return true;
|
| - }
|
| -
|
| - // mojo::InterfaceFactory<TraceCoordinator> implementation.
|
| - void Create(mojo::ApplicationConnection* connection,
|
| - mojo::InterfaceRequest<TraceCoordinator> request) override {
|
| - coordinator_bindings_.AddBinding(this, request.Pass());
|
| - }
|
| -
|
| - // tracing::TraceCoordinator implementation.
|
| - void Start(mojo::ScopedDataPipeProducerHandle stream,
|
| - const mojo::String& categories) override {
|
| - sink_.reset(new TraceDataSink(stream.Pass()));
|
| - controller_ptrs_.ForAllPtrs(
|
| - [categories, this](TraceController* controller) {
|
| - TraceDataCollectorPtr ptr;
|
| - collector_impls_.push_back(
|
| - new CollectorImpl(GetProxy(&ptr), sink_.get()));
|
| - controller->StartTracing(categories, ptr.Pass());
|
| - });
|
| - }
|
| - void StopAndFlush() override {
|
| - controller_ptrs_.ForAllPtrs(
|
| - [](TraceController* controller) { controller->StopTracing(); });
|
| -
|
| - // TODO: We really should keep track of how many connections we have here
|
| - // and flush + reset the sink after we receive a EndTracing or a detect a
|
| - // pipe closure on all pipes.
|
| - base::MessageLoop::current()->PostDelayedTask(
|
| - FROM_HERE,
|
| - base::Bind(&TracingApp::AllDataCollected, base::Unretained(this)),
|
| - base::TimeDelta::FromSeconds(1));
|
| - }
|
| -
|
| - void AllDataCollected() {
|
| - collector_impls_.clear();
|
| - sink_->Flush();
|
| - }
|
| -
|
| - scoped_ptr<TraceDataSink> sink_;
|
| - ScopedVector<CollectorImpl> collector_impls_;
|
| - mojo::WeakInterfacePtrSet<TraceController> controller_ptrs_;
|
| - mojo::WeakBindingSet<TraceCoordinator> coordinator_bindings_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TracingApp);
|
| -};
|
| -
|
| -} // namespace tracing
|
| +#include "services/tracing/tracing_app.h"
|
|
|
| MojoResult MojoMain(MojoHandle application_request) {
|
| mojo::ApplicationRunnerChromium runner(new tracing::TracingApp);
|
|
|