Chromium Code Reviews| OLD | NEW |
|---|---|
| 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.phase; | 5 library barback.phase; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'asset_cascade.dart'; | 9 import 'asset_cascade.dart'; |
| 10 import 'asset_id.dart'; | 10 import 'asset_id.dart'; |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 129 /// will automatically begin determining which transforms can consume it as a | 129 /// will automatically begin determining which transforms can consume it as a |
| 130 /// primary input. The transforms themselves won't be applied until [process] | 130 /// primary input. The transforms themselves won't be applied until [process] |
| 131 /// is called, however. | 131 /// is called, however. |
| 132 /// | 132 /// |
| 133 /// This should only be used for brand-new assets or assets that have been | 133 /// This should only be used for brand-new assets or assets that have been |
| 134 /// removed and re-created. The phase will automatically handle updated assets | 134 /// removed and re-created. The phase will automatically handle updated assets |
| 135 /// using the [AssetNode.onStateChange] stream. | 135 /// using the [AssetNode.onStateChange] stream. |
| 136 void addInput(AssetNode node) { | 136 void addInput(AssetNode node) { |
| 137 if (_inputs.containsKey(node.id)) _inputs[node.id].remove(); | 137 if (_inputs.containsKey(node.id)) _inputs[node.id].remove(); |
| 138 | 138 |
| 139 node.materialize(); | |
|
Bob Nystrom
2014/01/30 19:33:44
Why is this being materialized?
nweiz
2014/01/31 03:43:27
The phase needs its inputs to be available if it's
| |
| 140 | |
| 139 // Each group is one channel along which an asset may be forwarded. Then | 141 // Each group is one channel along which an asset may be forwarded. Then |
| 140 // there's one additional channel for the non-grouped transformers. | 142 // there's one additional channel for the non-grouped transformers. |
| 141 var forwarder = new PhaseForwarder(_groups.length + 1); | 143 var forwarder = new PhaseForwarder(_groups.length + 1); |
| 142 _forwarders[node.id] = forwarder; | 144 _forwarders[node.id] = forwarder; |
| 143 forwarder.onForwarding.listen((asset) { | 145 forwarder.onForwarding.listen((asset) { |
| 144 _addOutput(asset); | 146 _addOutput(asset); |
| 145 | 147 |
| 146 var exception = _outputs[asset.id].collisionException; | 148 var exception = _outputs[asset.id].collisionException; |
| 147 if (exception != null) cascade.reportError(exception); | 149 if (exception != null) cascade.reportError(exception); |
| 148 }); | 150 }); |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 175 }); | 177 }); |
| 176 } | 178 } |
| 177 | 179 |
| 178 /// Gets the asset node for an output [id]. | 180 /// Gets the asset node for an output [id]. |
| 179 /// | 181 /// |
| 180 /// If an output with that ID cannot be found, returns null. | 182 /// If an output with that ID cannot be found, returns null. |
| 181 Future<AssetNode> getOutput(AssetId id) { | 183 Future<AssetNode> getOutput(AssetId id) { |
| 182 return newFuture(() { | 184 return newFuture(() { |
| 183 if (id.package != cascade.package) return cascade.graph.getAssetNode(id); | 185 if (id.package != cascade.package) return cascade.graph.getAssetNode(id); |
| 184 if (!_outputs.containsKey(id)) return null; | 186 if (!_outputs.containsKey(id)) return null; |
| 185 return _outputs[id].output; | 187 return _outputs[id].output..materialize(); |
|
Bob Nystrom
2014/01/30 19:33:44
Nit, but I'm really not a fan of using a single ca
nweiz
2014/01/31 03:43:27
I think it's nicer than making a variable, but oka
| |
| 186 }); | 188 }); |
| 187 } | 189 } |
| 188 | 190 |
| 189 /// Set this phase's transformers to [transformers]. | 191 /// Set this phase's transformers to [transformers]. |
| 190 void updateTransformers(Iterable transformers) { | 192 void updateTransformers(Iterable transformers) { |
| 191 _onDirtyController.add(null); | 193 _onDirtyController.add(null); |
| 192 | 194 |
| 193 var actualTransformers = transformers.where((op) => op is Transformer); | 195 var actualTransformers = transformers.where((op) => op is Transformer); |
| 194 _transformers.clear(); | 196 _transformers.clear(); |
| 195 _transformers.addAll(actualTransformers); | 197 _transformers.addAll(actualTransformers); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 212 for (var input in _inputs.values) { | 214 for (var input in _inputs.values) { |
| 213 runner.addInput(input.input); | 215 runner.addInput(input.input); |
| 214 } | 216 } |
| 215 } | 217 } |
| 216 | 218 |
| 217 for (var forwarder in _forwarders.values) { | 219 for (var forwarder in _forwarders.values) { |
| 218 forwarder.numChannels = _groups.length + 1; | 220 forwarder.numChannels = _groups.length + 1; |
| 219 } | 221 } |
| 220 } | 222 } |
| 221 | 223 |
| 224 /// Materialize all [LazyTransformer]s' transforms in this group. | |
| 225 void materializeAllTransforms() { | |
| 226 for (var group in _groups.values) { | |
| 227 group.materializeAllTransforms(); | |
| 228 } | |
| 229 | |
| 230 for (var input in _inputs.values) { | |
| 231 input.materializeAllTransforms(); | |
| 232 } | |
| 233 } | |
| 234 | |
| 222 /// Add a new phase after this one with [transformers]. | 235 /// Add a new phase after this one with [transformers]. |
| 223 /// | 236 /// |
| 224 /// This may only be called on a phase with no phase following it. | 237 /// This may only be called on a phase with no phase following it. |
| 225 Phase addPhase(Iterable transformers) { | 238 Phase addPhase(Iterable transformers) { |
| 226 assert(_next == null); | 239 assert(_next == null); |
| 227 _next = new Phase(cascade, transformers); | 240 _next = new Phase(cascade, transformers); |
| 228 for (var output in _outputs.values.toList()) { | 241 for (var output in _outputs.values.toList()) { |
| 229 // Remove [output]'s listeners because now they should get the asset from | 242 // Remove [output]'s listeners because now they should get the asset from |
| 230 // [_next], rather than this phase. Any transforms consuming [output] will | 243 // [_next], rather than this phase. Any transforms consuming [output] will |
| 231 // be re-run and will consume the output from the new final phase. | 244 // be re-run and will consume the output from the new final phase. |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 306 _outputs[asset.id].add(asset); | 319 _outputs[asset.id].add(asset); |
| 307 } else { | 320 } else { |
| 308 _outputs[asset.id] = new PhaseOutput(this, asset); | 321 _outputs[asset.id] = new PhaseOutput(this, asset); |
| 309 _outputs[asset.id].onAsset.listen((output) { | 322 _outputs[asset.id].onAsset.listen((output) { |
| 310 if (_next != null) _next.addInput(output); | 323 if (_next != null) _next.addInput(output); |
| 311 }, onDone: () => _outputs.remove(asset.id)); | 324 }, onDone: () => _outputs.remove(asset.id)); |
| 312 if (_next != null) _next.addInput(_outputs[asset.id].output); | 325 if (_next != null) _next.addInput(_outputs[asset.id].output); |
| 313 } | 326 } |
| 314 } | 327 } |
| 315 } | 328 } |
| OLD | NEW |