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

Side by Side Diff: third_party/pkg/barback-0.13.0/lib/src/asset_cascade.dart

Issue 291843011: Run pub tests against older versions of barback. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library barback.graph.asset_cascade; 5 library barback.asset_cascade;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import '../asset/asset.dart'; 9 import 'asset.dart';
10 import '../asset/asset_id.dart'; 10 import 'asset_id.dart';
11 import '../asset/asset_node.dart'; 11 import 'asset_node.dart';
12 import '../asset/asset_set.dart'; 12 import 'asset_set.dart';
13 import '../errors.dart'; 13 import 'log.dart';
14 import '../log.dart'; 14 import 'cancelable_future.dart';
15 import '../transformer/transformer.dart'; 15 import 'errors.dart';
16 import '../utils/cancelable_future.dart';
17 import 'node_status.dart';
18 import 'node_streams.dart';
19 import 'package_graph.dart'; 16 import 'package_graph.dart';
20 import 'phase.dart'; 17 import 'phase.dart';
18 import 'stream_pool.dart';
19 import 'transformer.dart';
21 20
22 /// The asset cascade for an individual package. 21 /// The asset cascade for an individual package.
23 /// 22 ///
24 /// This keeps track of which [Transformer]s are applied to which assets, and 23 /// This keeps track of which [Transformer]s are applied to which assets, and
25 /// re-runs those transformers when their dependencies change. The transformed 24 /// re-runs those transformers when their dependencies change. The transformed
26 /// asset nodes are accessible via [getAssetNode]. 25 /// asset nodes are accessible via [getAssetNode].
27 /// 26 ///
28 /// A cascade consists of one or more [Phases], each of which has one or more 27 /// A cascade consists of one or more [Phases], each of which has one or more
29 /// [Transformer]s that run in parallel, potentially on the same inputs. The 28 /// [Transformer]s that run in parallel, potentially on the same inputs. The
30 /// inputs of the first phase are the source assets for this cascade's package. 29 /// inputs of the first phase are the source assets for this cascade's package.
(...skipping 18 matching lines...) Expand all
49 /// one. 48 /// one.
50 final _loadingSources = new Map<AssetId, CancelableFuture<Asset>>(); 49 final _loadingSources = new Map<AssetId, CancelableFuture<Asset>>();
51 50
52 /// The list of phases in this cascade. 51 /// The list of phases in this cascade.
53 /// 52 ///
54 /// This will always contain at least one phase, and the first phase will 53 /// This will always contain at least one phase, and the first phase will
55 /// never have any transformers. This ensures that every transformer can 54 /// never have any transformers. This ensures that every transformer can
56 /// request inputs from a previous phase. 55 /// request inputs from a previous phase.
57 final _phases = <Phase>[]; 56 final _phases = <Phase>[];
58 57
59 /// The subscription to the [Phase.onStatusChange] stream of the last [Phase] 58 /// The subscription to the [Phase.onDone] stream of the last [Phase] in
60 /// in [_phases]. 59 /// [_phases].
61 StreamSubscription _phaseStatusSubscription; 60 StreamSubscription _phaseOnDoneSubscription;
62 61
63 /// A stream that emits any errors from the cascade or the transformers. 62 /// A stream that emits any errors from the cascade or the transformers.
64 /// 63 ///
65 /// This emits errors as they're detected. If an error occurs in one part of 64 /// This emits errors as they're detected. If an error occurs in one part of
66 /// the cascade, unrelated parts will continue building. 65 /// the cascade, unrelated parts will continue building.
67 Stream<BarbackException> get errors => _errorsController.stream; 66 Stream<BarbackException> get errors => _errorsController.stream;
68 final _errorsController = 67 final _errorsController =
69 new StreamController<BarbackException>.broadcast(sync: true); 68 new StreamController<BarbackException>.broadcast(sync: true);
70 69
71 /// How far along [this] is in processing its assets. 70 /// A stream that emits an event whenever any transforms in this cascade logs
72 NodeStatus get status { 71 /// an entry.
72 Stream<LogEntry> get onLog => _onLogPool.stream;
73 final _onLogPool = new StreamPool<LogEntry>.broadcast();
74
75 /// Whether [this] is dirty and still has more processing to do.
76 bool get isDirty {
73 // Just check the last phase, since it will check all the previous phases 77 // Just check the last phase, since it will check all the previous phases
74 // itself. 78 // itself.
75 return _phases.last.status; 79 return _phases.last.isDirty;
76 } 80 }
77 81
78 /// The streams exposed by this cascade. 82 /// A stream that emits an event whenever [this] is no longer dirty.
79 final _streams = new NodeStreams(); 83 ///
80 Stream<LogEntry> get onLog => _streams.onLog; 84 /// This is synchronous in order to guarantee that it will emit an event as
81 Stream<NodeStatus> get onStatusChange => _streams.onStatusChange; 85 /// soon as [isDirty] flips from `true` to `false`.
86 Stream get onDone => _onDoneController.stream;
87 final _onDoneController = new StreamController.broadcast(sync: true);
82 88
83 /// Returns all currently-available output assets from this cascade. 89 /// Returns all currently-available output assets from this cascade.
84 AssetSet get availableOutputs => 90 AssetSet get availableOutputs =>
85 new AssetSet.from(_phases.last.availableOutputs.map((node) => node.asset)); 91 new AssetSet.from(_phases.last.availableOutputs.map((node) => node.asset));
86 92
87 /// Creates a new [AssetCascade]. 93 /// Creates a new [AssetCascade].
88 /// 94 ///
89 /// It loads source assets within [package] using [provider]. 95 /// It loads source assets within [package] using [provider].
90 AssetCascade(this.graph, this.package) { 96 AssetCascade(this.graph, this.package) {
91 _addPhase(new Phase(this, package)); 97 _addPhase(new Phase(this, package));
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 var phase = _phases.last.addPhase(); 190 var phase = _phases.last.addPhase();
185 _addPhase(phase); 191 _addPhase(phase);
186 phase.updateTransformers(transformers[i]); 192 phase.updateTransformers(transformers[i]);
187 } 193 }
188 194
189 for (var i = transformers.length + 1; i < _phases.length; i++) { 195 for (var i = transformers.length + 1; i < _phases.length; i++) {
190 _phases[i].remove(); 196 _phases[i].remove();
191 } 197 }
192 _phases.removeRange(transformers.length + 1, _phases.length); 198 _phases.removeRange(transformers.length + 1, _phases.length);
193 199
194 _phaseStatusSubscription.cancel(); 200 _phaseOnDoneSubscription.cancel();
195 _phaseStatusSubscription = _phases.last.onStatusChange 201 _phaseOnDoneSubscription = _phases.last.onDone
196 .listen(_streams.changeStatus); 202 .listen(_onDoneController.add);
197 } 203 }
198 204
199 /// Force all [LazyTransformer]s' transforms in this cascade to begin 205 /// Force all [LazyTransformer]s' transforms in this cascade to begin
200 /// producing concrete assets. 206 /// producing concrete assets.
201 void forceAllTransforms() { 207 void forceAllTransforms() {
202 for (var phase in _phases) { 208 for (var phase in _phases) {
203 phase.forceAllTransforms(); 209 phase.forceAllTransforms();
204 } 210 }
205 } 211 }
206 212
207 void reportError(BarbackException error) { 213 void reportError(BarbackException error) {
208 _errorsController.add(error); 214 _errorsController.add(error);
209 } 215 }
210 216
211 /// Add [phase] to the end of [_phases] and watch its streams. 217 /// Add [phase] to the end of [_phases] and watch its streams.
212 void _addPhase(Phase phase) { 218 void _addPhase(Phase phase) {
213 _streams.onLogPool.add(phase.onLog); 219 _onLogPool.add(phase.onLog);
214 if (_phaseStatusSubscription != null) _phaseStatusSubscription.cancel(); 220 if (_phaseOnDoneSubscription != null) _phaseOnDoneSubscription.cancel();
215 _phaseStatusSubscription = 221 _phaseOnDoneSubscription = phase.onDone.listen(_onDoneController.add);
216 phase.onStatusChange.listen(_streams.changeStatus);
217 222
218 _phases.add(phase); 223 _phases.add(phase);
219 } 224 }
220 225
221 String toString() => "cascade for $package"; 226 String toString() => "cascade for $package";
222 } 227 }
OLDNEW
« no previous file with comments | « third_party/pkg/barback-0.13.0/lib/src/asset.dart ('k') | third_party/pkg/barback-0.13.0/lib/src/asset_forwarder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698