Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: runtime/bin/vmservice/client/lib/tracer.dart

Issue 429293002: Add request tracing to Observatory: (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library tracer;
6
7 import 'dart:async';
8 import 'dart:html';
9
10 import 'package:logging/logging.dart';
11 import 'package:observe/observe.dart';
12
13 _deepCopy(src) {
14 if (src is Map) {
15 var dest = {};
16 src.forEach((key, val) {
17 dest[key] = _deepCopy(val);
18 });
19 return dest;
20 } else if (src is List) {
21 var dest = [];
22 src.forEach((val) {
23 dest.add(_deepCopy(val));
24 });
25 return dest;
26 } else {
27 return src;
28 }
29 }
30
31 class TraceEvent {
32 TraceEvent.msg(this._time, this.message, Map originalMap) {
33 map = _deepCopy(originalMap);
34 }
35
36 String get timeStamp => "T+${_time.toStringAsFixed(3)}";
37
38 String toString() {
39 return "[${timeStamp}] ${message}";
40 }
41
42 double _time;
43 String message;
44 Map map;
45 }
46
47 class Tracer extends Observable {
48 // The current global tracer.
49 static Tracer get current => _current;
50
51 static Tracer _current;
52
53 static void start() {
54 if (_current == null) {
55 _current = new Tracer();
56 }
57 }
58 static void stop() {
59 _current = null;
60 }
61
62 // The tracer subscribes to all logging events.
63 StreamSubscription loggerSub = null;
64
65 // The start time for the current request.
66 double _startTime;
67
68 // A list of all tracing events for thre current request.
69 ObservableList<TraceEvent> events = new ObservableList<TraceEvent>();
70
71 Tracer() {
72 loggerSub = Logger.root.onRecord.listen((LogRecord rec) {
73 // Echo all log messages to the trace.
74 trace('${rec.level.name}: ${rec.message}');
75 });
Cutch 2014/07/30 18:20:46 Should we cancel this subscription in stop()?
turnidge 2014/07/30 19:28:15 Done.
76 reset();
77 }
78
79 void reset() {
80 _startTime = window.performance.now();
Cutch 2014/07/30 18:20:46 If you use a Stopwatch you could not depend on dar
turnidge 2014/07/30 19:28:15 Done.
81 events.clear();
82 }
83
84 TraceEvent trace(String message, {Map map: null}) {
85 double now = window.performance.now();
86 var event = new TraceEvent.msg((now - _startTime), message, map);
87 events.add(event);
88 return event;
89 }
90 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698