291befa1cd
A TimelineTask represents an asynchronous track of operations on the timeline.
The old API allowed multiple isolates to emit events simultaneously on the same task or to start / finish events in any order. This isn't supported by our UI and probably many other tools that consume trace-event.
With this change, operations within a TimelineTask must complete in the reverse order of their start calls (aka a stack). You can pass a TimelineTask from one isolate to another but you must first complete all open operations before passing it.
Example:
var task = new TimelineTask();
task.start('Some phase');
await someFuture;
task.finish();
Also: Add support for instant events.
R=rmacnak@google.com
Review URL: https://codereview.chromium.org/1412183008 .
24 lines
567 B
Dart
24 lines
567 B
Dart
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
import 'dart:developer';
|
|
import 'package:expect/expect.dart';
|
|
|
|
void testUnbalancedStartFinish() {
|
|
Timeline.startSync('A');
|
|
Timeline.finishSync();
|
|
|
|
bool exceptionCaught = false;
|
|
try {
|
|
Timeline.finishSync();
|
|
} catch (e) {
|
|
exceptionCaught = true;
|
|
}
|
|
Expect.isTrue(exceptionCaught);
|
|
}
|
|
|
|
void main() {
|
|
testUnbalancedStartFinish();
|
|
}
|