diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java
index 227851f..36719be 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagator.java
@@ -128,10 +128,12 @@
     timing.begin("Argument propagator");
 
     // Compute the strongly connected program components for parallel execution.
+    timing.begin("Compute components");
     ImmediateProgramSubtypingInfo immediateSubtypingInfo =
         ImmediateProgramSubtypingInfo.create(appView);
     List<Set<DexProgramClass>> stronglyConnectedProgramComponents =
         computeStronglyConnectedProgramClasses(appView, immediateSubtypingInfo);
+    timing.end();
 
     // Set the optimization info on each method.
     populateParameterOptimizationInfo(
@@ -142,16 +144,17 @@
     Set<DexProgramClass> affectedClasses = Sets.newConcurrentHashSet();
     ArgumentPropagatorGraphLens graphLens =
         new ArgumentPropagatorProgramOptimizer(appView, immediateSubtypingInfo)
-            .run(stronglyConnectedProgramComponents, affectedClasses::add, executorService);
+            .run(stronglyConnectedProgramComponents, affectedClasses::add, executorService, timing);
 
     // Find all the code objects that need reprocessing.
     new ArgumentPropagatorMethodReprocessingEnqueuer(appView)
-        .enqueueMethodForReprocessing(graphLens, postMethodProcessorBuilder, executorService);
+        .enqueueMethodForReprocessing(
+            graphLens, postMethodProcessorBuilder, executorService, timing);
 
     // Finally, apply the graph lens to the program (i.e., remove constant parameters from method
     // definitions).
     new ArgumentPropagatorApplicationFixer(appView, graphLens)
-        .fixupApplication(affectedClasses, executorService);
+        .fixupApplication(affectedClasses, executorService, timing);
 
     timing.end();
   }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
index ff551ca..beb3003 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.graph.RewrittenPrototypeDescription.ArgumentInfoCollection;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.ThreadUtils;
+import com.android.tools.r8.utils.Timing;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
@@ -31,7 +32,7 @@
   }
 
   public void fixupApplication(
-      Set<DexProgramClass> affectedClasses, ExecutorService executorService)
+      Set<DexProgramClass> affectedClasses, ExecutorService executorService, Timing timing)
       throws ExecutionException {
     // If the graph lens is null, argument propagation did not lead to any parameter removals. In
     // this case there is no needed to fixup the program.
@@ -42,8 +43,13 @@
 
     assert !affectedClasses.isEmpty();
 
+    timing.begin("Fixup application");
     ThreadUtils.processItems(affectedClasses, this::fixupClass, executorService);
+    timing.end();
+
+    timing.begin("Rewrite AppView");
     appView.rewriteWithLens(graphLens);
+    timing.end();
   }
 
   private void fixupClass(DexProgramClass clazz) {
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
index 37adcfa..68c7d12 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
@@ -19,6 +19,7 @@
 import com.android.tools.r8.ir.optimize.info.CallSiteOptimizationInfo;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.ThreadUtils;
+import com.android.tools.r8.utils.Timing;
 import com.android.tools.r8.utils.collections.LongLivedProgramMethodSetBuilder;
 import com.android.tools.r8.utils.collections.ProgramMethodSet;
 import java.util.ArrayList;
@@ -43,18 +44,31 @@
   public void enqueueMethodForReprocessing(
       ArgumentPropagatorGraphLens graphLens,
       PostMethodProcessor.Builder postMethodProcessorBuilder,
-      ExecutorService executorService)
+      ExecutorService executorService,
+      Timing timing)
       throws ExecutionException {
+    timing.begin("Enqueue methods for reprocessing");
+
     // Bring the methods to reprocess set up-to-date with the current graph lens (i.e., the one
     // prior to the argument propagator lens, which has not yet been installed!).
+    timing.begin("Rewrite methods to reprocess");
     LongLivedProgramMethodSetBuilder<ProgramMethodSet> methodsToReprocessBuilder =
         postMethodProcessorBuilder
             .getMethodsToReprocessBuilder()
             .rewrittenWithLens(appView.graphLens());
+    timing.end();
+
+    timing.begin("Enqueue methods with non-trivial info");
     enqueueMethodsWithNonTrivialOptimizationInfo(methodsToReprocessBuilder);
+    timing.end();
+
+    timing.begin("Enqueue affected methods");
     if (graphLens != null) {
       enqueueAffectedCallers(graphLens, methodsToReprocessBuilder, executorService);
     }
+    timing.end();
+
+    timing.end();
   }
 
   private void enqueueMethodsWithNonTrivialOptimizationInfo(
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorProgramOptimizer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorProgramOptimizer.java
index 41e2e9c..76845cc 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorProgramOptimizer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorProgramOptimizer.java
@@ -27,6 +27,7 @@
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.Pair;
 import com.android.tools.r8.utils.ThreadUtils;
+import com.android.tools.r8.utils.Timing;
 import com.android.tools.r8.utils.collections.DexMethodSignatureSet;
 import com.android.tools.r8.utils.collections.ProgramMethodSet;
 import com.google.common.collect.Iterables;
@@ -64,20 +65,27 @@
   public ArgumentPropagatorGraphLens run(
       List<Set<DexProgramClass>> stronglyConnectedProgramComponents,
       Consumer<DexProgramClass> affectedClassConsumer,
-      ExecutorService executorService)
+      ExecutorService executorService,
+      Timing timing)
       throws ExecutionException {
+    timing.begin("Optimize components");
     Collection<Builder> partialGraphLensBuilders =
         ThreadUtils.processItemsWithResults(
             stronglyConnectedProgramComponents,
             classes ->
                 new StronglyConnectedComponentOptimizer().optimize(classes, affectedClassConsumer),
             executorService);
+    timing.end();
 
     // Merge all the partial, disjoint graph lens builders into a single graph lens.
+    timing.begin("Build graph lens");
     ArgumentPropagatorGraphLens.Builder graphLensBuilder =
         ArgumentPropagatorGraphLens.builder(appView);
     partialGraphLensBuilders.forEach(graphLensBuilder::mergeDisjoint);
-    return graphLensBuilder.build();
+    ArgumentPropagatorGraphLens graphLens = graphLensBuilder.build();
+    timing.end();
+
+    return graphLens;
   }
 
   private DexMethodSignatureSet getOrComputeLibraryMethods(DexClass clazz) {
