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

Unified Diff: sdk/lib/_internal/compiler/implementation/types/container_tracer.dart

Issue 19376003: Add some cheap optimization, and another computation limit in the container tracer. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 5 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
« no previous file with comments | « no previous file | sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/compiler/implementation/types/container_tracer.dart
===================================================================
--- sdk/lib/_internal/compiler/implementation/types/container_tracer.dart (revision 25104)
+++ sdk/lib/_internal/compiler/implementation/types/container_tracer.dart (working copy)
@@ -94,13 +94,17 @@
measure(() {
SimpleTypesInferrer inferrer = compiler.typesTask.typesInferrer;
var internal = inferrer.internal;
+ int maxAnalysis = internal.numberOfElementsToAnalyze;
+ int analysisCount = 0;
// Walk over all created [ContainerTypeMask].
- internal.concreteTypes.values.forEach((ContainerTypeMask mask) {
+ for (ContainerTypeMask mask in internal.concreteTypes.values) {
// The element type has already been set for const containers.
- if (mask.elementType != null) return;
- mask.elementType = new TracerForConcreteContainer(
- mask, this, compiler, inferrer).run();
- });
+ if (mask.elementType != null) continue;
+ TracerForConcreteContainer tracer = new TracerForConcreteContainer(
+ mask, this, compiler, inferrer);
+ mask.elementType = tracer.run();
+ if ((analysisCount += tracer.analysisCount) > maxAnalysis) break;
+ }
});
}
}
@@ -139,6 +143,7 @@
TypeMask potentialType;
bool continueAnalyzing = true;
+ int analysisCount = 0;
TracerForConcreteContainer(ContainerTypeMask mask,
this.tracer,
@@ -148,7 +153,6 @@
startElement = mask.allocationElement;
TypeMask run() {
- int analysisCount = 0;
workList.add(startElement);
while (!workList.isEmpty) {
if (workList.length + analysisCount > MAX_ANALYSIS_COUNT) {
« no previous file with comments | « no previous file | sdk/lib/_internal/compiler/implementation/types/inferrer_visitor.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698