Add YouTube 16.12

Change-Id: I968e74fe0ddde0777857beea034f1bd03eedb6cb
diff --git a/build.gradle b/build.gradle
index 18cbc2a..12efa84 100644
--- a/build.gradle
+++ b/build.gradle
@@ -442,7 +442,8 @@
         "youtube/youtube.android_14.44",
         "youtube/youtube.android_15.08",
         "youtube/youtube.android_15.09",
-        "youtube/youtube.android_15.33"
+        "youtube/youtube.android_15.33",
+        "youtube/youtube.android_16.12"
     ],
 ]
 
diff --git a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
index b165f4b..83a8577 100644
--- a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
+++ b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
@@ -18,8 +18,8 @@
 import com.android.tools.r8.R8Command;
 import com.android.tools.r8.R8RunArtTestsTest.CompilerUnderTest;
 import com.android.tools.r8.ResourceException;
-import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
 import com.android.tools.r8.naming.MemberNaming.FieldSignature;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
 import com.android.tools.r8.utils.AndroidApiLevel;
@@ -38,9 +38,6 @@
 import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
 import com.google.common.io.ByteStreams;
 import com.google.common.io.Closer;
-import it.unimi.dsi.fastutil.ints.IntList;
-import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
-import it.unimi.dsi.fastutil.ints.IntSet;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -64,7 +61,7 @@
 import org.junit.Rule;
 import org.junit.rules.TemporaryFolder;
 
-public abstract class CompilationTestBase extends TestBase {
+public abstract class CompilationTestBase extends DesugaredLibraryTestBase {
 
   protected KeepingDiagnosticHandler handler;
   protected Reporter reporter;
diff --git a/src/test/java/com/android/tools/r8/internal/D8YouTubeDeployJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/D8YouTubeDeployJarVerificationTest.java
index 202878c..f6de3f9 100644
--- a/src/test/java/com/android/tools/r8/internal/D8YouTubeDeployJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/D8YouTubeDeployJarVerificationTest.java
@@ -7,7 +7,7 @@
 import com.android.tools.r8.R8RunArtTestsTest.CompilerUnderTest;
 import org.junit.Test;
 
-public class D8YouTubeDeployJarVerificationTest extends YouTubeCompilationBase {
+public class D8YouTubeDeployJarVerificationTest extends YouTubeCompilationTestBase {
 
   public D8YouTubeDeployJarVerificationTest() {
     super(12, 17);
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeCompilationBase.java b/src/test/java/com/android/tools/r8/internal/YouTubeCompilationTestBase.java
similarity index 84%
rename from src/test/java/com/android/tools/r8/internal/YouTubeCompilationBase.java
rename to src/test/java/com/android/tools/r8/internal/YouTubeCompilationTestBase.java
index c8be865..1e87434 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeCompilationBase.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeCompilationTestBase.java
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.internal;
 
+import static org.junit.Assert.assertTrue;
+
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.R8RunArtTestsTest.CompilerUnderTest;
 import com.android.tools.r8.ToolHelper;
@@ -14,7 +16,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public abstract class YouTubeCompilationBase extends CompilationTestBase {
+public abstract class YouTubeCompilationTestBase extends CompilationTestBase {
 
   static final String APK = "YouTubeRelease_unsigned.apk";
   static final String DEPLOY_JAR = "YouTubeRelease_deploy.jar";
@@ -26,7 +28,7 @@
 
   final String base;
 
-  public YouTubeCompilationBase(int majorVersion, int minorVersion) {
+  public YouTubeCompilationTestBase(int majorVersion, int minorVersion) {
     this.base =
         "third_party/youtube/youtube.android_"
             + majorVersion
@@ -49,7 +51,14 @@
   }
 
   protected List<Path> getLibraryFiles() {
-    return ImmutableList.of(Paths.get(base, "legacy_YouTubeRelease_combined_library_jars.jar"));
+    Path filtered =
+        Paths.get(base).resolve("legacy_YouTubeRelease_combined_library_jars_filtered.jar");
+    if (filtered.toFile().exists()) {
+      return ImmutableList.of(filtered);
+    }
+    Path unfiltered = Paths.get(base, "legacy_YouTubeRelease_combined_library_jars.jar");
+    assertTrue(unfiltered.toFile().exists());
+    return ImmutableList.of(unfiltered);
   }
 
   protected List<Path> getMainDexRuleFiles() {
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeDeployJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeDeployJarVerificationTest.java
index 5bf893d..f6b78f6 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeDeployJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeDeployJarVerificationTest.java
@@ -7,7 +7,7 @@
 import com.android.tools.r8.R8RunArtTestsTest.CompilerUnderTest;
 import org.junit.Test;
 
-public class YouTubeDeployJarVerificationTest extends YouTubeCompilationBase {
+public class YouTubeDeployJarVerificationTest extends YouTubeCompilationTestBase {
 
   public YouTubeDeployJarVerificationTest() {
     super(12, 17);
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeDexVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeDexVerificationTest.java
index a01ee01..32b7973 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeDexVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeDexVerificationTest.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.CompilationMode;
 import org.junit.Test;
 
-public class YouTubeDexVerificationTest extends YouTubeCompilationBase {
+public class YouTubeDexVerificationTest extends YouTubeCompilationTestBase {
 
   public YouTubeDexVerificationTest() {
     super(12, 17);
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeProguardJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeProguardJarVerificationTest.java
index 5092831..ffe4e14 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeProguardJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeProguardJarVerificationTest.java
@@ -8,7 +8,7 @@
 import com.google.common.collect.ImmutableList;
 import org.junit.Test;
 
-public class YouTubeProguardJarVerificationTest extends YouTubeCompilationBase {
+public class YouTubeProguardJarVerificationTest extends YouTubeCompilationTestBase {
 
   public YouTubeProguardJarVerificationTest() {
     super(12, 17);
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1217TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1217TreeShakeJarVerificationTest.java
index 69b4748..5f39a31 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1217TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1217TreeShakeJarVerificationTest.java
@@ -14,7 +14,7 @@
 import java.nio.file.Path;
 import org.junit.Test;
 
-public class YouTubeV1217TreeShakeJarVerificationTest extends YouTubeCompilationBase {
+public class YouTubeV1217TreeShakeJarVerificationTest extends YouTubeCompilationTestBase {
 
   public YouTubeV1217TreeShakeJarVerificationTest() {
     super(12, 17);
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java
index 15d8928..42fc8f7 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1419TreeShakeJarVerificationTest.java
@@ -23,7 +23,7 @@
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class YouTubeV1419TreeShakeJarVerificationTest extends YouTubeCompilationBase {
+public class YouTubeV1419TreeShakeJarVerificationTest extends YouTubeCompilationTestBase {
 
   private static final int MAX_SIZE = 27500000;
 
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java
index f2afcb4..a998521 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1444TreeShakeJarVerificationTest.java
@@ -23,7 +23,7 @@
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class YouTubeV1444TreeShakeJarVerificationTest extends YouTubeCompilationBase {
+public class YouTubeV1444TreeShakeJarVerificationTest extends YouTubeCompilationTestBase {
 
   private static final boolean DUMP = false;
   private static final int MAX_SIZE = 27500000;
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1508TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1508TreeShakeJarVerificationTest.java
index 406ff62..eccb336d 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1508TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1508TreeShakeJarVerificationTest.java
@@ -23,7 +23,7 @@
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class YouTubeV1508TreeShakeJarVerificationTest extends YouTubeCompilationBase {
+public class YouTubeV1508TreeShakeJarVerificationTest extends YouTubeCompilationTestBase {
 
   private static final boolean DUMP = false;
   private static final int MAX_SIZE = 27500000;
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1533TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1533TreeShakeJarVerificationTest.java
index 8bb7f4c..1fe6af5 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1533TreeShakeJarVerificationTest.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1533TreeShakeJarVerificationTest.java
@@ -20,7 +20,7 @@
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class YouTubeV1533TreeShakeJarVerificationTest extends YouTubeCompilationBase {
+public class YouTubeV1533TreeShakeJarVerificationTest extends YouTubeCompilationTestBase {
 
   private static final boolean DUMP = false;
   private static final int MAX_SIZE = 27500000;
@@ -56,7 +56,6 @@
             .addMainDexRuleFiles(getMainDexRuleFiles())
             .addIgnoreWarnings()
             .allowDiagnosticMessages()
-            .allowStdoutMessages()
             .allowUnusedDontWarnPatterns()
             .allowUnusedProguardConfigurationRules()
             .setMinApi(AndroidApiLevel.H_MR2)
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1612TreeShakeJarVerificationTest.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1612TreeShakeJarVerificationTest.java
new file mode 100644
index 0000000..81be8fe
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1612TreeShakeJarVerificationTest.java
@@ -0,0 +1,92 @@
+// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.internal;
+
+import static com.android.tools.r8.ToolHelper.isLocalDevelopment;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
+
+import com.android.tools.r8.R8TestCompileResult;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.analysis.ProtoApplicationStats;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class YouTubeV1612TreeShakeJarVerificationTest extends YouTubeCompilationTestBase {
+
+  private static final boolean DUMP = false;
+  private static final int MAX_SIZE = 30000000;
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withNoneRuntime().build();
+  }
+
+  public YouTubeV1612TreeShakeJarVerificationTest(TestParameters parameters) {
+    super(16, 12);
+    parameters.assertNoneRuntime();
+  }
+
+  @Test
+  public void testR8() throws Exception {
+    assumeTrue(isLocalDevelopment());
+
+    KeepRuleConsumer keepRuleConsumer = new PresentKeepRuleConsumer();
+    R8TestCompileResult compileResult =
+        testForR8(Backend.DEX)
+            .addProgramFiles(getProgramFiles())
+            .addLibraryFiles(getLibraryFiles())
+            .addKeepRuleFiles(getKeepRuleFiles())
+            .addIgnoreWarnings()
+            .allowDiagnosticMessages()
+            .allowUnusedDontWarnPatterns()
+            .allowUnusedProguardConfigurationRules()
+            .setMinApi(AndroidApiLevel.L)
+            .enableCoreLibraryDesugaring(AndroidApiLevel.L, keepRuleConsumer)
+            .compile();
+
+    if (ToolHelper.isLocalDevelopment()) {
+      if (DUMP) {
+        long time = System.currentTimeMillis();
+        compileResult.writeToZip(Paths.get("YouTubeV1612-" + time + ".zip"));
+        compileResult.writeProguardMap(Paths.get("YouTubeV1612-" + time + ".map"));
+      }
+
+      DexItemFactory dexItemFactory = new DexItemFactory();
+      ProtoApplicationStats original =
+          new ProtoApplicationStats(dexItemFactory, new CodeInspector(getProgramFiles()));
+      ProtoApplicationStats actual =
+          new ProtoApplicationStats(dexItemFactory, compileResult.inspector(), original);
+      ProtoApplicationStats baseline =
+          new ProtoApplicationStats(
+              dexItemFactory, new CodeInspector(getReleaseApk(), getReleaseProguardMap()));
+      System.out.println(actual.getStats(baseline));
+    }
+
+    long applicationSize = compileResult.getApp().applicationSize();
+    System.out.println("Dex size (app, excluding desugared library): " + applicationSize);
+
+    Path desugaredLibrary = buildDesugaredLibrary(AndroidApiLevel.L, keepRuleConsumer.get());
+    long desugaredLibrarySize = Files.size(desugaredLibrary);
+    System.out.println("Dex size (desugared library): " + desugaredLibrarySize);
+
+    long totalApplicationSize = applicationSize + desugaredLibrarySize;
+    System.out.println("Dex size (total): " + totalApplicationSize);
+
+    assertTrue(
+        "Expected max size of " + MAX_SIZE + ", got " + totalApplicationSize,
+        totalApplicationSize < MAX_SIZE);
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/internal/proto/YouTubeV1508ProtoRewritingTest.java b/src/test/java/com/android/tools/r8/internal/proto/YouTubeV1508ProtoRewritingTest.java
index 7cdab46..dbdeed0 100644
--- a/src/test/java/com/android/tools/r8/internal/proto/YouTubeV1508ProtoRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/internal/proto/YouTubeV1508ProtoRewritingTest.java
@@ -13,7 +13,7 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.internal.LibrarySanitizer;
-import com.android.tools.r8.internal.YouTubeCompilationBase;
+import com.android.tools.r8.internal.YouTubeCompilationTestBase;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import org.junit.Test;
@@ -22,7 +22,7 @@
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class YouTubeV1508ProtoRewritingTest extends YouTubeCompilationBase {
+public class YouTubeV1508ProtoRewritingTest extends YouTubeCompilationTestBase {
 
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
diff --git a/third_party/youtube/youtube.android_16.12.tar.gz.sha1 b/third_party/youtube/youtube.android_16.12.tar.gz.sha1
new file mode 100644
index 0000000..b4ba7e4
--- /dev/null
+++ b/third_party/youtube/youtube.android_16.12.tar.gz.sha1
@@ -0,0 +1 @@
+8e572873935b39dc65790631ffcdcd0a8f749c0f
\ No newline at end of file