| Index: pkg/analyzer/lib/src/task/driver.dart
 | 
| diff --git a/pkg/analyzer/lib/src/task/driver.dart b/pkg/analyzer/lib/src/task/driver.dart
 | 
| index 87929c0cb2fb75ec6d10b1a4f2ce4b51ba7c449e..ad76d3dd2aae9ab2c4daa7b44933ad77177a73b0 100644
 | 
| --- a/pkg/analyzer/lib/src/task/driver.dart
 | 
| +++ b/pkg/analyzer/lib/src/task/driver.dart
 | 
| @@ -17,6 +17,9 @@ import 'package:analyzer/src/task/inputs.dart';
 | 
|  import 'package:analyzer/src/task/manager.dart';
 | 
|  import 'package:analyzer/task/model.dart';
 | 
|  
 | 
| +final PerformanceTag workOrderMoveNextPerfTag =
 | 
| +    new PerformanceTag('WorkOrder.moveNext');
 | 
| +
 | 
|  /**
 | 
|   * An object that is used to cause analysis to be performed until all of the
 | 
|   * required analysis information has been computed.
 | 
| @@ -716,29 +719,31 @@ class WorkOrder implements Iterator<WorkItem> {
 | 
|  
 | 
|    @override
 | 
|    bool moveNext() {
 | 
| -    if (currentItems != null && currentItems.length > 1) {
 | 
| -      // Yield more items.
 | 
| -      currentItems.removeLast();
 | 
| -      return true;
 | 
| -    } else {
 | 
| -      // Get a new strongly connected component.
 | 
| -      StronglyConnectedComponent<WorkItem> nextStronglyConnectedComponent =
 | 
| -          _dependencyWalker.getNextStronglyConnectedComponent();
 | 
| -      if (nextStronglyConnectedComponent == null) {
 | 
| -        currentItems = null;
 | 
| -        return false;
 | 
| -      }
 | 
| -      currentItems = nextStronglyConnectedComponent.nodes;
 | 
| -      if (nextStronglyConnectedComponent.containsCycle) {
 | 
| -        // A cycle has been found.
 | 
| -        for (WorkItem item in currentItems) {
 | 
| -          item.dependencyCycle = currentItems.toList();
 | 
| -        }
 | 
| +    return workOrderMoveNextPerfTag.makeCurrentWhile(() {
 | 
| +      if (currentItems != null && currentItems.length > 1) {
 | 
| +        // Yield more items.
 | 
| +        currentItems.removeLast();
 | 
| +        return true;
 | 
|        } else {
 | 
| -        assert(currentItems.length == 1);
 | 
| +        // Get a new strongly connected component.
 | 
| +        StronglyConnectedComponent<WorkItem> nextStronglyConnectedComponent =
 | 
| +            _dependencyWalker.getNextStronglyConnectedComponent();
 | 
| +        if (nextStronglyConnectedComponent == null) {
 | 
| +          currentItems = null;
 | 
| +          return false;
 | 
| +        }
 | 
| +        currentItems = nextStronglyConnectedComponent.nodes;
 | 
| +        if (nextStronglyConnectedComponent.containsCycle) {
 | 
| +          // A cycle has been found.
 | 
| +          for (WorkItem item in currentItems) {
 | 
| +            item.dependencyCycle = currentItems.toList();
 | 
| +          }
 | 
| +        } else {
 | 
| +          assert(currentItems.length == 1);
 | 
| +        }
 | 
| +        return true;
 | 
|        }
 | 
| -      return true;
 | 
| -    }
 | 
| +    });
 | 
|    }
 | 
|  }
 | 
|  
 | 
| 
 |