Extract out a delegation base for timing.

Change-Id: I688b55e2f66a109a246f0a65fbbc11816212a640
diff --git a/src/main/java/com/android/tools/r8/utils/Timing.java b/src/main/java/com/android/tools/r8/utils/Timing.java
index dc7db26..7fef060 100644
--- a/src/main/java/com/android/tools/r8/utils/Timing.java
+++ b/src/main/java/com/android/tools/r8/utils/Timing.java
@@ -62,13 +62,11 @@
     return Timing.EMPTY;
   }
 
-  private static class TimingWithCancellation extends Timing {
-    private final InternalOptions options;
+  private abstract static class TimingDelegateBase extends Timing {
     private final Timing timing;
 
-    TimingWithCancellation(InternalOptions options, Timing timing) {
-      super("<cancel>", false);
-      this.options = options;
+    public TimingDelegateBase(String title, Timing timing) {
+      super(title);
       this.timing = timing;
     }
 
@@ -79,9 +77,6 @@
 
     @Override
     public void begin(String title) {
-      if (options.checkIfCancelled()) {
-        throw new CancelCompilationException();
-      }
       timing.begin(title);
     }
 
@@ -106,6 +101,23 @@
     }
   }
 
+  private static class TimingWithCancellation extends TimingDelegateBase {
+    private final InternalOptions options;
+
+    TimingWithCancellation(InternalOptions options, Timing timing) {
+      super("<cancel>", timing);
+      this.options = options;
+    }
+
+    @Override
+    public void begin(String title) {
+      if (options.checkIfCancelled()) {
+        throw new CancelCompilationException();
+      }
+      super.begin(title);
+    }
+  }
+
   public static Timing create(String title, InternalOptions options) {
     // We also create a timer when running assertions to validate wellformedness of the node stack.
     Timing timing =