Trace-based benchmarking via a mojo app.

This patch adds `benchmark.mojo` app for trace-based benchmarking and a
runner script.

$ mojo/devtools/common/mojo_benchmark mojo/tools/data/benchmarks
[Trace me]
measurement: time_until/trace_me/DoWork 4488.810000
measurement: avg_duration/trace_me/DoWork 300.449714
[Spinning cube]
measurement: time_until/gpu/GpuScheduler:PutChanged 4341.874000

Fixes #371.

R=etiennej@chromium.org, jamesr@chromium.org

Review URL: https://codereview.chromium.org/1305193002 .
diff --git a/apps/benchmark/BUILD.gn b/apps/benchmark/BUILD.gn
new file mode 100644
index 0000000..5bb84bb
--- /dev/null
+++ b/apps/benchmark/BUILD.gn
@@ -0,0 +1,59 @@
+# 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.
+
+import("//mojo/public/mojo_application.gni")
+
+source_set("lib") {
+  sources = [
+    "event.cc",
+    "event.h",
+    "measurements.cc",
+    "measurements.h",
+    "run_args.cc",
+    "run_args.h",
+    "trace_collector_client.cc",
+    "trace_collector_client.h",
+  ]
+
+  deps = [
+    "//base",
+    "//mojo/data_pipe_utils",
+  ]
+
+  public_deps = [
+    "//mojo/services/tracing/public/interfaces",
+  ]
+}
+
+mojo_native_application("benchmark") {
+  sources = [
+    "benchmark_app.cc",
+  ]
+
+  deps = [
+    ":lib",
+    "//base",
+    "//mojo/application:application",
+    "//mojo/public/cpp/application",
+  ]
+}
+
+mojo_native_application("apptests") {
+  output_name = "benchmark_apptests"
+
+  testonly = true
+
+  sources = [
+    "event_unittest.cc",
+    "measurements_unittest.cc",
+  ]
+
+  deps = [
+    ":lib",
+    "//mojo/application",
+    "//mojo/application:test_support",
+    "//mojo/public/cpp/bindings:callback",
+    "//testing/gtest",
+  ]
+}