Make TracingImpl take a Shell* and args, instead of an ApplicationImpl*.

R=vardhan@google.com

Review URL: https://codereview.chromium.org/2014043002 .
diff --git a/examples/echo/echo_benchmark.cc b/examples/echo/echo_benchmark.cc
index e8da193..30e8044 100644
--- a/examples/echo/echo_benchmark.cc
+++ b/examples/echo/echo_benchmark.cc
@@ -50,7 +50,7 @@
         benchmark_duration_(base::TimeDelta::FromSeconds(10)) {}
 
   void Initialize(ApplicationImpl* app) override {
-    tracing_.Initialize(app);
+    tracing_.Initialize(app->shell(), &app->args());
 
     ParseArguments(app);
 
diff --git a/examples/trace_me/trace_me_app.cc b/examples/trace_me/trace_me_app.cc
index b26b004..81887cf 100644
--- a/examples/trace_me/trace_me_app.cc
+++ b/examples/trace_me/trace_me_app.cc
@@ -53,7 +53,7 @@
   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);
+    tracing_.Initialize(app->shell(), &app->args());
 
     TRACE_EVENT0("trace_me", "initialized");
 
diff --git a/mojo/common/tracing_impl.cc b/mojo/common/tracing_impl.cc
index 93f6e55..827ac17 100644
--- a/mojo/common/tracing_impl.cc
+++ b/mojo/common/tracing_impl.cc
@@ -4,6 +4,8 @@
 
 #include "mojo/common/tracing_impl.h"
 
+#include <algorithm>
+
 #include "base/trace_event/trace_event_impl.h"
 #include "mojo/public/cpp/application/application_impl.h"
 #include "mojo/public/cpp/application/connect.h"
@@ -18,17 +20,19 @@
 
 TracingImpl::~TracingImpl() {}
 
-void TracingImpl::Initialize(ApplicationImpl* app) {
+void TracingImpl::Initialize(Shell* shell,
+                             const std::vector<std::string>* args) {
   tracing::TraceProviderRegistryPtr registry;
-  ConnectToService(app->shell(), "mojo:tracing", GetProxy(&registry));
+  ConnectToService(shell, "mojo:tracing", GetProxy(&registry));
 
   mojo::InterfaceHandle<tracing::TraceProvider> provider;
   provider_impl_.Bind(GetProxy(&provider));
   registry->RegisterTraceProvider(provider.Pass());
 
 #ifdef NDEBUG
-  if (app->HasArg("--early-tracing")) {
-    provider_impl_.ForceEnableTracing();
+  if (args) {
+    if (std::find(args->begin(), args->end(), "--early-tracing") != args->end())
+      provider_impl_.ForceEnableTracing();
   }
 #else
   provider_impl_.ForceEnableTracing();
diff --git a/mojo/common/tracing_impl.h b/mojo/common/tracing_impl.h
index d3f93c6..95c44ea 100644
--- a/mojo/common/tracing_impl.h
+++ b/mojo/common/tracing_impl.h
@@ -5,12 +5,15 @@
 #ifndef MOJO_COMMON_TRACING_IMPL_H_
 #define MOJO_COMMON_TRACING_IMPL_H_
 
+#include <string>
+#include <vector>
+
 #include "base/macros.h"
 #include "mojo/common/trace_provider_impl.h"
 
 namespace mojo {
 
-class ApplicationImpl;
+class Shell;
 
 class TracingImpl {
  public:
@@ -18,8 +21,10 @@
   ~TracingImpl();
 
   // This connects to the tracing service and registers ourselves to provide
-  // tracing data on demand.
-  void Initialize(ApplicationImpl* app);
+  // tracing data on demand. |shell| will not be stored (so it need only be
+  // valid for this call). |args| may be null, but if not should typically point
+  // to the applications "command line".
+  void Initialize(Shell* shell, const std::vector<std::string>* args);
 
  private:
   TraceProviderImpl provider_impl_;
diff --git a/services/dart/content_handler_app.cc b/services/dart/content_handler_app.cc
index 5db8dac..380cd92 100644
--- a/services/dart/content_handler_app.cc
+++ b/services/dart/content_handler_app.cc
@@ -132,9 +132,9 @@
 
 void DartContentHandlerApp::Initialize(mojo::ApplicationImpl* app) {
   // Tracing of content handler and controller.
-  tracing_.Initialize(app);
+  tracing_.Initialize(app->shell(), &app->args());
   // Tracing of isolates and VM.
-  dart_tracing_.Initialize(app);
+  dart_tracing_.Initialize(app->shell());
 
   // TODO(qsr): This has no effect for now, as the tracing infrastructure
   // doesn't allow to trace anything before the tracing app connects to the
diff --git a/services/dart/dart_tracing.cc b/services/dart/dart_tracing.cc
index 45104c6..bf5b9a7 100644
--- a/services/dart/dart_tracing.cc
+++ b/services/dart/dart_tracing.cc
@@ -133,9 +133,9 @@
 DartTracingImpl::~DartTracingImpl() {
 }
 
-void DartTracingImpl::Initialize(mojo::ApplicationImpl* app) {
+void DartTracingImpl::Initialize(mojo::Shell* shell) {
   tracing::TraceProviderRegistryPtr registry;
-  ConnectToService(app->shell(), "mojo:tracing", GetProxy(&registry));
+  ConnectToService(shell, "mojo:tracing", GetProxy(&registry));
 
   mojo::InterfaceHandle<tracing::TraceProvider> provider;
   provider_impl_.Bind(GetProxy(&provider));
diff --git a/services/dart/dart_tracing.h b/services/dart/dart_tracing.h
index d9a669c..8e5fb54 100644
--- a/services/dart/dart_tracing.h
+++ b/services/dart/dart_tracing.h
@@ -48,7 +48,7 @@
 
   // This connects to the tracing service and registers ourselves to provide
   // tracing data on demand.
-  void Initialize(mojo::ApplicationImpl* app);
+  void Initialize(mojo::Shell* shell);
 
  private:
   DartTraceProvider provider_impl_;
diff --git a/services/gfx/compositor/compositor_app.cc b/services/gfx/compositor/compositor_app.cc
index 8c28965..bd05c8a 100644
--- a/services/gfx/compositor/compositor_app.cc
+++ b/services/gfx/compositor/compositor_app.cc
@@ -29,7 +29,7 @@
   settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
   logging::InitLogging(settings);
 
-  tracing_.Initialize(app_impl_);
+  tracing_.Initialize(app_impl_->shell(), &app_impl_->args());
 
   engine_.reset(new CompositorEngine());
 }
diff --git a/services/java_handler/java_handler.cc b/services/java_handler/java_handler.cc
index b7949de..177eee1 100644
--- a/services/java_handler/java_handler.cc
+++ b/services/java_handler/java_handler.cc
@@ -90,7 +90,7 @@
 }
 
 void JavaHandler::Initialize(mojo::ApplicationImpl* app) {
-  tracing_.Initialize(app);
+  tracing_.Initialize(app->shell(), &app->args());
   handler_task_runner_ = base::MessageLoop::current()->task_runner();
   mojo::ConnectToService(app->shell(), "mojo:url_response_disk_cache",
                          GetProxy(&url_response_disk_cache_));
diff --git a/services/native_viewport/app_delegate.cc b/services/native_viewport/app_delegate.cc
index 0848298..f1f53fc 100644
--- a/services/native_viewport/app_delegate.cc
+++ b/services/native_viewport/app_delegate.cc
@@ -33,7 +33,7 @@
   application_ = application;
 
   InitLogging(application);
-  tracing_.Initialize(application);
+  tracing_.Initialize(application->shell(), &application->args());
 
   // Apply the switch for kTouchEvents to CommandLine (if set). This allows
   // redirecting the mouse to a touch device on X for testing.
diff --git a/services/ui/input_manager/input_manager_app.cc b/services/ui/input_manager/input_manager_app.cc
index 4d47940..d75969c 100644
--- a/services/ui/input_manager/input_manager_app.cc
+++ b/services/ui/input_manager/input_manager_app.cc
@@ -29,7 +29,7 @@
   settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
   logging::InitLogging(settings);
 
-  tracing_.Initialize(app_impl);
+  tracing_.Initialize(app_impl->shell(), &app_impl->args());
 }
 
 bool InputManagerApp::ConfigureIncomingConnection(
diff --git a/services/ui/launcher/launcher_app.cc b/services/ui/launcher/launcher_app.cc
index d301cc1..c231ce6 100644
--- a/services/ui/launcher/launcher_app.cc
+++ b/services/ui/launcher/launcher_app.cc
@@ -30,7 +30,7 @@
   settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
   logging::InitLogging(settings);
 
-  tracing_.Initialize(app_impl_);
+  tracing_.Initialize(app_impl_->shell(), &app_impl_->args());
   TRACE_EVENT0("launcher", __func__);
 
   InitCompositor();
diff --git a/services/ui/view_manager/view_manager_app.cc b/services/ui/view_manager/view_manager_app.cc
index 3ea2d69..7a80178 100644
--- a/services/ui/view_manager/view_manager_app.cc
+++ b/services/ui/view_manager/view_manager_app.cc
@@ -33,7 +33,7 @@
   settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
   logging::InitLogging(settings);
 
-  tracing_.Initialize(app_impl_);
+  tracing_.Initialize(app_impl_->shell(), &app_impl_->args());
 
   // Connect to compositor.
   mojo::gfx::composition::CompositorPtr compositor;