dart-sdk/sdk_nnbd
Ben Konyi 8fd83cb222 [ 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>
2019-10-14 23:37:48 +00:00
..
bin Add a script and target to run dartfix 2019-10-14 15:50:21 +00:00
lib [ dart:developer ] Remove optional 'parent' parameter from TimelineTask.withTaskId to avoid ID collisions 2019-10-14 23:37:48 +00:00
api_readme.md Make a fork of sdk/lib for use by NNBD. 2019-09-10 19:20:12 +00:00
BUILD.gn [analyzer] move the ml model from sdk/model to sdk/bin/model 2019-10-09 19:26:34 +00:00