| Index: mojo/common/dart/lib/src/trace_provider_impl.dart
|
| diff --git a/mojo/common/dart/lib/trace_provider_impl.dart b/mojo/common/dart/lib/src/trace_provider_impl.dart
|
| similarity index 59%
|
| rename from mojo/common/dart/lib/trace_provider_impl.dart
|
| rename to mojo/common/dart/lib/src/trace_provider_impl.dart
|
| index 07effcadbdce095ac5f24ae1f85ac186817a03d1..43066a029d3cf2ecafcae6c1788beef45f154359 100644
|
| --- a/mojo/common/dart/lib/trace_provider_impl.dart
|
| +++ b/mojo/common/dart/lib/src/trace_provider_impl.dart
|
| @@ -7,6 +7,12 @@ import 'dart:async';
|
| import 'package:mojo/core.dart';
|
| import 'package:mojo_services/tracing/tracing.mojom.dart';
|
|
|
| +enum TraceSendTiming {
|
| + IMMEDIATE,
|
| + // TODO: Add BATCHED?
|
| + AT_END,
|
| +}
|
| +
|
| class TraceProviderImpl implements TraceProvider {
|
| // Any messages sent before the tracing service connects to us will be
|
| // recorded and kept until one second after construction of the trace
|
| @@ -23,16 +29,17 @@ class TraceProviderImpl implements TraceProvider {
|
| // TODO(rudominer) We currently ignore _categories.
|
| String _categories;
|
|
|
| - TraceProviderImpl() {
|
| + TraceSendTiming _timing;
|
| +
|
| + TraceProviderImpl([TraceSendTiming timing = TraceSendTiming.IMMEDIATE]) {
|
| _message_queue = [];
|
| _enqueuing = true;
|
| - new Future(() {
|
| - new Future.delayed(const Duration(seconds: 1), () {
|
| - if (_enqueuing) {
|
| - _enqueuing = false;
|
| - _message_queue.clear();
|
| - }
|
| - });
|
| + _timing = timing;
|
| + new Future.delayed(const Duration(seconds: 1), () {
|
| + if (_enqueuing) {
|
| + _enqueuing = false;
|
| + _message_queue.clear();
|
| + }
|
| });
|
| }
|
|
|
| @@ -47,17 +54,25 @@ class TraceProviderImpl implements TraceProvider {
|
| _recorder = recorder;
|
| _categories = categories;
|
| _enqueuing = false;
|
| + if (_timing == TraceSendTiming.IMMEDIATE) {
|
| + for (String message in _message_queue) {
|
| + _recorder.ptr.record(message);
|
| + }
|
| + _message_queue.clear();
|
| + }
|
| }
|
|
|
| @override
|
| void stopTracing() {
|
| assert(_recorder != null);
|
| - for (String message in _message_queue) {
|
| - _recorder.ptr.record(message);
|
| + if (_timing == TraceSendTiming.AT_END) {
|
| + for (String message in _message_queue) {
|
| + _recorder.ptr.record(message);
|
| + }
|
| + _message_queue.clear();
|
| }
|
| _recorder.close();
|
| _recorder = null;
|
| - _message_queue.clear();
|
| }
|
|
|
| bool isActive() {
|
| @@ -65,8 +80,19 @@ class TraceProviderImpl implements TraceProvider {
|
| }
|
|
|
| void sendTraceMessage(String message) {
|
| - if (isActive()) {
|
| - _message_queue.add(message);
|
| + switch (_timing) {
|
| + case TraceSendTiming.IMMEDIATE:
|
| + if (_recorder != null) {
|
| + _recorder.ptr.record(message);
|
| + } else if (_enqueuing) {
|
| + _message_queue.add(message);
|
| + }
|
| + break;
|
| + case TraceSendTiming.AT_END:
|
| + if (isActive()) {
|
| + _message_queue.add(message);
|
| + }
|
| + break;
|
| }
|
| }
|
| }
|
|
|