Add try-with-resources scope method for timing.

Change-Id: I38268cbf033e8a5bafdedd095c8d89ffb7864402
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 58e68dc..1e73572 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -88,6 +88,7 @@
 import com.android.tools.r8.utils.StringDiagnostic;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.android.tools.r8.utils.Timing;
+import com.android.tools.r8.utils.Timing.TimingScope;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.io.ByteStreams;
@@ -264,9 +265,8 @@
       appView.setAppServices(AppServices.builder(appView).build());
 
       List<ProguardConfigurationRule> synthesizedProguardRules = new ArrayList<>();
-      timing.begin("Strip unused code");
       Set<DexType> classesToRetainInnerClassAttributeFor = null;
-      try {
+      try (TimingScope ignored = timing.scope("Strip unused code")) {
         Set<DexType> missingClasses = appView.appInfo().getMissingClasses();
         missingClasses = filterMissingClasses(
             missingClasses, options.getProguardConfiguration().getDontWarnPatterns());
@@ -360,9 +360,6 @@
         new AnnotationRemover(appView.withLiveness(), classesToRetainInnerClassAttributeFor)
             .ensureValid()
             .run();
-
-      } finally {
-        timing.end();
       }
 
       assert appView.appInfo().hasLiveness();
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 77df36a..5f7ef67 100644
--- a/src/main/java/com/android/tools/r8/utils/Timing.java
+++ b/src/main/java/com/android/tools/r8/utils/Timing.java
@@ -57,8 +57,8 @@
         }
 
         @Override
-        public void scope(String title, TimingScope fn) {
-          // Ignore.
+        public TimingScope scope(String title) {
+          return () -> {};
         }
       };
 
@@ -336,17 +336,14 @@
     top.report(0, top);
   }
 
-  public void scope(String title, TimingScope fn) {
+  public TimingScope scope(String title) {
     begin(title);
-    try {
-      fn.apply();
-    } finally {
-      end();
-    }
+    return this::end;
   }
 
-  public interface TimingScope {
-    void apply();
+  public interface TimingScope extends AutoCloseable {
+    @Override
+    void close();
   }
 
   private static Map<String, MemInfo> computeMemoryInformation() {