Index: tools/testing/dart/dependency_graph.dart |
diff --git a/tools/testing/dart/dependency_graph.dart b/tools/testing/dart/dependency_graph.dart |
deleted file mode 100644 |
index 1de7b9ed172bf827eeeb714ae830f1dffc662b46..0000000000000000000000000000000000000000 |
--- a/tools/testing/dart/dependency_graph.dart |
+++ /dev/null |
@@ -1,147 +0,0 @@ |
-// Copyright (c) 2013, 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. |
- |
-library dependency_graph; |
- |
-import 'dart:async'; |
-import 'utils.dart'; |
- |
- |
-/* |
- * [Graph] represents a datastructure for representing an DAG (directed acyclic |
- * graph). Each node in the graph is in a given [NodeState] and can have data |
- * attachted to it with [Node.userData]. |
- * |
- * It's interface consists basically of these methods: |
- * - newNode: Adds a new node to the graph with the given dependencies and |
- * the given user data. The node is in the [NodeState.Initialized] |
- * state. |
- * - changeState: Changes the state of a node. |
- * - sealGraph: Makes the graph immutable. |
- * - stateCount: Counts the number of nodes who are in a given [NodeState]. |
- * |
- * Users of a [Graph] can listen for events by subscribing to the [events] |
- * stream. Three types of events will be fired (after the graph was modified): |
- * - NodeAddedEvent: Fired after a node was added ot the graph. |
- * - StateChangedEvent: Fired after the state of a node changed. |
- * - GraphSealedEvent: Fired after the graph was marked as immutable/sealed. |
- */ |
-class Graph { |
- final _nodes = new Set<Node>(); |
- final _eventController = new StreamController<GraphEvent>(); |
- final _stateCounts = new Map<NodeState, int>(); |
- var _eventStream; |
- bool _isSealed = false; |
- |
- Graph() { |
- _eventStream = _eventController.stream.asBroadcastStream(); |
- } |
- |
- Iterable<Node> get nodes => _nodes; |
- Stream<GraphEvent> get events => _eventStream; |
- bool get isSealed => _isSealed; |
- |
- int stateCount(NodeState state) { |
- int count = _stateCounts[state]; |
- return count == null ? 0 : count; |
- } |
- |
- void DumpCounts() { |
- for (var state in _stateCounts.keys) { |
- print("Count[$state] = ${_stateCounts[state]}"); |
- } |
- } |
- |
- void sealGraph() { |
- assert(!_isSealed); |
- _isSealed = true; |
- _emitEvent(new GraphSealedEvent()); |
- } |
- |
- Node newNode(Object userData, Iterable<Node> dependencies) { |
- assert(!_isSealed); |
- |
- var node = new Node._(userData); |
- _nodes.add(node); |
- |
- for (var dependency in dependencies) { |
- dependency._neededFor.add(node); |
- node._dependencies.add(dependency); |
- } |
- |
- _emitEvent(new NodeAddedEvent(node)); |
- |
- _stateCounts.putIfAbsent(node.state, () => 0); |
- _stateCounts[node.state] += 1; |
- |
- return node; |
- } |
- |
- void changeState(Node node, NodeState newState) { |
- var fromState = node.state; |
- node._state = newState; |
- |
- _stateCounts[fromState] -= 1; |
- _stateCounts.putIfAbsent(newState, () => 0); |
- _stateCounts[newState] += 1; |
- |
- _emitEvent(new StateChangedEvent(node, fromState, newState)); |
- } |
- |
- _emitEvent(GraphEvent event) { |
- // We emit events asynchronously so the graph can be build up in small |
- // batches and the events are delivered in small batches. |
- Timer.run(() { |
- _eventController.add(event); |
- }); |
- } |
-} |
- |
-class Node extends UniqueObject { |
- final Object _userData; |
- NodeState _state = NodeState.Initialized; |
- Set<Node> _dependencies = new Set<Node>(); |
- Set<Node> _neededFor = new Set<Node>(); |
- |
- Node._(this._userData); |
- |
- Object get userData => _userData; |
- NodeState get state => _state; |
- Iterable<Node> get dependencies => _dependencies; |
- Iterable<Node> get neededFor => _neededFor; |
-} |
- |
-class NodeState extends UniqueObject { |
- static NodeState Initialized = new NodeState._("Initialized"); |
- static NodeState Waiting = new NodeState._("Waiting"); |
- static NodeState Enqueuing = new NodeState._("Enqueuing"); |
- static NodeState Processing = new NodeState._("Running"); |
- static NodeState Successful = new NodeState._("Successful"); |
- static NodeState Failed = new NodeState._("Failed"); |
- static NodeState UnableToRun = new NodeState._("UnableToRun"); |
- |
- final String name; |
- |
- NodeState._(this.name); |
- |
- String toString() => name; |
-} |
- |
-abstract class GraphEvent {} |
- |
-class GraphSealedEvent extends GraphEvent {} |
- |
-class NodeAddedEvent extends GraphEvent { |
- final Node node; |
- |
- NodeAddedEvent(this.node); |
-} |
- |
-class StateChangedEvent extends GraphEvent { |
- final Node node; |
- final NodeState from; |
- final NodeState to; |
- |
- StateChangedEvent(this.node, this.from, this.to); |
-} |