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

Unified Diff: observatory_pub_packages/barback/src/graph/group_runner.dart

Issue 816693004: Add observatory_pub_packages snapshot to third_party (Closed) Base URL: http://dart.googlecode.com/svn/third_party/
Patch Set: Created 6 years 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: observatory_pub_packages/barback/src/graph/group_runner.dart
===================================================================
--- observatory_pub_packages/barback/src/graph/group_runner.dart (revision 0)
+++ observatory_pub_packages/barback/src/graph/group_runner.dart (working copy)
@@ -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