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

Side by Side Diff: mojo/common/dart/lib/src/trace_provider_impl.dart

Issue 1401853005: Dart: Makes timing of sending trace events configurable. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « mojo/common/dart/BUILD.gn ('k') | mojo/common/dart/lib/trace_provider_impl.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:mojo/core.dart'; 7 import 'package:mojo/core.dart';
8 import 'package:mojo_services/tracing/tracing.mojom.dart'; 8 import 'package:mojo_services/tracing/tracing.mojom.dart';
9 9
10 enum TraceSendTiming {
11 IMMEDIATE,
12 // TODO: Add BATCHED?
13 AT_END,
14 }
15
10 class TraceProviderImpl implements TraceProvider { 16 class TraceProviderImpl implements TraceProvider {
11 // Any messages sent before the tracing service connects to us will be 17 // Any messages sent before the tracing service connects to us will be
12 // recorded and kept until one second after construction of the trace 18 // recorded and kept until one second after construction of the trace
13 // provider. If the tracing service connects before that time, we will replay 19 // provider. If the tracing service connects before that time, we will replay
14 // the recorded trace events. 20 // the recorded trace events.
15 // 21 //
16 // This allows the client to record trace events early during initialization 22 // This allows the client to record trace events early during initialization
17 // of the app. 23 // of the app.
18 List<String> _message_queue; 24 List<String> _message_queue;
19 bool _enqueuing; 25 bool _enqueuing;
20 26
21 TraceProviderStub _stub; 27 TraceProviderStub _stub;
22 TraceRecorderProxy _recorder; 28 TraceRecorderProxy _recorder;
23 // TODO(rudominer) We currently ignore _categories. 29 // TODO(rudominer) We currently ignore _categories.
24 String _categories; 30 String _categories;
25 31
26 TraceProviderImpl() { 32 TraceSendTiming _timing;
33
34 TraceProviderImpl([TraceSendTiming timing = TraceSendTiming.IMMEDIATE]) {
27 _message_queue = []; 35 _message_queue = [];
28 _enqueuing = true; 36 _enqueuing = true;
29 new Future(() { 37 _timing = timing;
30 new Future.delayed(const Duration(seconds: 1), () { 38 new Future.delayed(const Duration(seconds: 1), () {
31 if (_enqueuing) { 39 if (_enqueuing) {
32 _enqueuing = false; 40 _enqueuing = false;
33 _message_queue.clear(); 41 _message_queue.clear();
34 } 42 }
35 });
36 }); 43 });
37 } 44 }
38 45
39 void connect(MojoMessagePipeEndpoint e) { 46 void connect(MojoMessagePipeEndpoint e) {
40 _stub = TraceProviderStub.newFromEndpoint(e); 47 _stub = TraceProviderStub.newFromEndpoint(e);
41 _stub.impl = this; 48 _stub.impl = this;
42 } 49 }
43 50
44 @override 51 @override
45 void startTracing(String categories, TraceRecorderProxy recorder) { 52 void startTracing(String categories, TraceRecorderProxy recorder) {
46 assert(_recorder == null); 53 assert(_recorder == null);
47 _recorder = recorder; 54 _recorder = recorder;
48 _categories = categories; 55 _categories = categories;
49 _enqueuing = false; 56 _enqueuing = false;
57 if (_timing == TraceSendTiming.IMMEDIATE) {
58 for (String message in _message_queue) {
59 _recorder.ptr.record(message);
60 }
61 _message_queue.clear();
62 }
50 } 63 }
51 64
52 @override 65 @override
53 void stopTracing() { 66 void stopTracing() {
54 assert(_recorder != null); 67 assert(_recorder != null);
55 for (String message in _message_queue) { 68 if (_timing == TraceSendTiming.AT_END) {
56 _recorder.ptr.record(message); 69 for (String message in _message_queue) {
70 _recorder.ptr.record(message);
71 }
72 _message_queue.clear();
57 } 73 }
58 _recorder.close(); 74 _recorder.close();
59 _recorder = null; 75 _recorder = null;
60 _message_queue.clear();
61 } 76 }
62 77
63 bool isActive() { 78 bool isActive() {
64 return _enqueuing || _recorder != null; 79 return _enqueuing || _recorder != null;
65 } 80 }
66 81
67 void sendTraceMessage(String message) { 82 void sendTraceMessage(String message) {
68 if (isActive()) { 83 switch (_timing) {
69 _message_queue.add(message); 84 case TraceSendTiming.IMMEDIATE:
85 if (_recorder != null) {
86 _recorder.ptr.record(message);
87 } else if (_enqueuing) {
88 _message_queue.add(message);
89 }
90 break;
91 case TraceSendTiming.AT_END:
92 if (isActive()) {
93 _message_queue.add(message);
94 }
95 break;
70 } 96 }
71 } 97 }
72 } 98 }
OLDNEW
« no previous file with comments | « mojo/common/dart/BUILD.gn ('k') | mojo/common/dart/lib/trace_provider_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698