| #!mojo mojo:dart_content_handler |
| // 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. |
| |
| // This example application illustrates how to use Mojo Tracing from Dart code. |
| // |
| // To run this app: |
| // mojo/devtools/common/mojo_run --trace-startup \ |
| // https://core.mojoapps.io/examples/dart/traced_application/lib/main.dart |
| // |
| // This will produce a file called |mojo_shell.trace| that may be loaded |
| // by Chrome's about:tracing. |
| |
| import 'dart:async'; |
| import 'dart:io'; |
| |
| import 'package:common/tracing_helper.dart'; |
| import 'package:mojo/application.dart'; |
| import 'package:mojo/bindings.dart'; |
| import 'package:mojo/core.dart'; |
| |
| class TestUsingTracingApp extends Application { |
| TracingHelper _tracing; |
| Timer _timer; |
| |
| TestUsingTracingApp.fromHandle(MojoHandle handle) : super.fromHandle(handle); |
| |
| void initialize(List<String> args, String url) { |
| // This sets up a connection between this application and the Mojo |
| // tracing service. |
| _tracing = new TracingHelper.fromApplication( |
| this, "example_traced_application", TraceSendTiming.AT_END); |
| _tracing.traceInstant("initialized", "traced_application"); |
| |
| // Now we schedule some random work just so we have something to trace. |
| _timer = new Timer.periodic(new Duration(seconds: 1), (t) => function1()); |
| |
| onError = (() { |
| if (_timer != null) { |
| _timer.cancel(); |
| } |
| }); |
| } |
| |
| @override |
| void acceptConnection(String requestorUrl, String resolvedUrl, |
| ApplicationConnection connection) { |
| _tracing.traceInstant("connected", "traced_application"); |
| } |
| |
| Future function1() { |
| return _tracing.traceAsync("function1", "traced_application", () async { |
| await waitForMilliseconds(100); |
| await function2(42); |
| await waitForMilliseconds(100); |
| }); |
| } |
| |
| Future function2(int x) { |
| return _tracing.traceAsync("function2", "traced_application", () async { |
| await waitForMilliseconds(200); |
| assert(await identity(42) == 42); |
| assert(await fourtyTwo() == 42); |
| assert(await addOne(42) == 43); |
| await doNothing(); |
| }, args: {"x": x}); |
| } |
| |
| Future identity(int x) { |
| return _tracing.traceAsync("identity", "traced_application", () async { |
| await waitForMilliseconds(10); |
| return x; |
| }); |
| } |
| |
| Future addOne(int x) { |
| return _tracing.traceAsync("add1", "traced_application", () async { |
| await waitForMilliseconds(10); |
| return x + 1; |
| }, args: {"x": x}); |
| } |
| |
| Future fourtyTwo() { |
| return _tracing.traceAsync("fourtyTwo", "traced_application", () async { |
| await waitForMilliseconds(10); |
| return 42; |
| }); |
| } |
| |
| Future doNothing() { |
| return _tracing.traceAsync("doNothing", "traced_application", () async { |
| await waitForMilliseconds(10); |
| }); |
| } |
| } |
| |
| Future waitForMilliseconds(int milliseconds) { |
| return new Future.delayed(new Duration(milliseconds: milliseconds), () {}); |
| } |
| |
| main(List args) { |
| MojoHandle appHandle = new MojoHandle(args[0]); |
| new TestUsingTracingApp.fromHandle(appHandle); |
| } |