Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1331)

Unified Diff: mojo/public/dart/third_party/barback/lib/src/graph/group_runner.dart

Issue 1346773002: Stop running pub get at gclient sync time and fix build bugs (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/public/dart/third_party/barback/lib/src/graph/group_runner.dart
diff --git a/mojo/public/dart/third_party/barback/lib/src/graph/group_runner.dart b/mojo/public/dart/third_party/barback/lib/src/graph/group_runner.dart
new file mode 100644
index 0000000000000000000000000000000000000000..f9dcaa11c0397667c2f289f6693f1aca040be355
--- /dev/null
+++ b/mojo/public/dart/third_party/barback/lib/src/graph/group_runner.dart
@@ -0,0 +1,89 @@
+// 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 barback.graph.group_runner;
+
+import 'dart:async';
+
+import '../asset/asset_node.dart';
+import '../log.dart';
+import '../transformer/transformer_group.dart';
+import '../utils/stream_pool.dart';
+import 'node_status.dart';
+import 'phase.dart';
+
+/// A class that processes all of the phases in a single transformer group.
+///
+/// A group takes many inputs, processes them, and emits many outputs.
+class GroupRunner {
+ /// The group this runner runs.
+ final TransformerGroup _group;
+
+ /// A string describing the location of [this] in the transformer graph.
+ final String _location;
+
+ /// The phases defined by this group.
+ final _phases = new List<Phase>();
+
+ /// How far along [this] is in processing its assets.
+ NodeStatus get status {
+ // Just check the last phase, since it will check all the previous phases
+ // itself.
+ return _phases.last.status;
+ }
+
+ /// A stream that emits an event every time the group's status changes.
+ Stream<NodeStatus> get onStatusChange => _onStatusChange;
+ Stream _onStatusChange;
+
+ /// A stream that emits any new assets emitted by [this].
+ ///
+ /// Assets are emitted synchronously to ensure that any changes are thoroughly
+ /// propagated as soon as they occur.
+ Stream<AssetNode> get onAsset => _onAsset;
+ Stream<AssetNode> _onAsset;
+
+ /// A stream that emits an event whenever any transforms in this group logs
+ /// an entry.
+ Stream<LogEntry> get onLog => _onLogPool.stream;
+ final _onLogPool = new StreamPool<LogEntry>.broadcast();
+
+ GroupRunner(Phase previous, this._group, this._location) {
+ _addPhase(previous.addPhase(_location), []);
+ for (var phase in _group.phases) {
+ _addPhase(_phases.last.addPhase(), phase);
+ }
+
+ _onAsset = _phases.last.onAsset;
+ _onStatusChange = _phases.last.onStatusChange;
+ }
+
+ /// Add a phase with [contents] to [this]'s list of phases.
+ ///
+ /// [contents] should be an inner [Iterable] from a [TransformGroup.phases]
+ /// value.
+ void _addPhase(Phase phase, Iterable contents) {
+ _phases.add(phase);
+ _onLogPool.add(phase.onLog);
+ phase.updateTransformers(contents);
+ }
+
+ /// Force all [LazyTransformer]s' transforms in this group to begin producing
+ /// concrete assets.
+ void forceAllTransforms() {
+ for (var phase in _phases) {
+ phase.forceAllTransforms();
+ }
+ }
+
+ /// Removes this group and all sub-phases within it.
+ void remove() {
+ _onLogPool.close();
+ for (var phase in _phases) {
+ phase.remove();
+ }
+ }
+
+ String toString() => "group in phase $_location for $_group";
+}

Powered by Google App Engine
This is Rietveld 408576698