mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 00:09:20 +00:00
[ dart:developer ] Remove optional 'parent' parameter from TimelineTask.withTaskId to avoid ID collisions
If parent is a param in the TimelineTask.withTaskId() constructor, we have the possibility of running into this situation: TimelineTaskA - id 0 TimelineTaskB - id 1 TimelineTaskC - id 2 - parentId 1 TimelineTaskD - id 0 - parentId 2 (this task created with TimelineTask.withTaskId(0, parent: C)) TimelineTaskE - id 3 - parentId 0 (now who is the parent of E? D or A?) If we do not allow the user to specify parent in the withTaskId() constructor, we remove the possibility of this clash. This clash happens because the user was able to inject an event with id 0 into an async tree defined by the parent parameter. By removing the parent parameter from the withTaskId() constructor, we can rely on different sources of truth for the different TimelineTask constructors. - If taskId is specified via TimelineTask.withTaskId(), then that is the source of truth for inferring the async event tree (events with the same async id are in the same async tree). - If parent is specified via TimelineTask(parent: parent), then that is the source of truth for inferring the async event tree. - If neither taskId nor parent are specified (e.g. TimelineTask()), we default to timestamp inference. Change-Id: I491a20cf1d1aaea744ab92e56602269390e73fb0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121680 Commit-Queue: Ben Konyi <bkonyi@google.com> Reviewed-by: Kenzie Schmoll <kenzieschmoll@google.com>
This commit is contained in:
parent
aab88791b8
commit
8fd83cb222
|
@ -77,7 +77,7 @@ main() { foo(() {}); }
|
|||
|
||||
#### `dart:developer`
|
||||
|
||||
* Added optional `parent` paremeter to `TimelineTask` constructors to allow for
|
||||
* Added optional `parent` parameter to `TimelineTask` constructor to allow for
|
||||
linking of asynchronous timeline events in the DevTools timeline view.
|
||||
|
||||
### Dart VM
|
||||
|
|
|
@ -190,12 +190,8 @@ class TimelineTask {
|
|||
|
||||
/// Create a task with an explicit [taskId]. This is useful if you are
|
||||
/// passing a task from one isolate to another.
|
||||
///
|
||||
/// If [parent] is provided, the parent's task ID is provided as argument
|
||||
/// 'parentId' when [start] is called. In DevTools, this argument will result
|
||||
/// in this [TimelineTask] being linked to the [parent] [TimelineTask].
|
||||
TimelineTask.withTaskId(int taskId, {TimelineTask parent})
|
||||
: _parent = parent,
|
||||
TimelineTask.withTaskId(int taskId)
|
||||
: _parent = null,
|
||||
_taskId = taskId {
|
||||
ArgumentError.checkNotNull(taskId, 'taskId');
|
||||
}
|
||||
|
|
|
@ -192,12 +192,8 @@ class TimelineTask {
|
|||
|
||||
/// Create a task with an explicit [taskId]. This is useful if you are
|
||||
/// passing a task from one isolate to another.
|
||||
///
|
||||
/// If [parent] is provided, the parent's task ID is provided as argument
|
||||
/// 'parentId' when [start] is called. In DevTools, this argument will result
|
||||
/// in this [TimelineTask] being linked to the [parent] [TimelineTask].
|
||||
TimelineTask.withTaskId(int taskId, {TimelineTask parent})
|
||||
: _parent = parent,
|
||||
TimelineTask.withTaskId(int taskId)
|
||||
: _parent = null,
|
||||
_taskId = taskId {
|
||||
ArgumentError.checkNotNull(taskId, 'taskId');
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue