| // Copyright (c) 2016, 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 com.android.tools.r8.CompilationMode; |
| import com.android.tools.r8.ToolHelper; |
| import com.android.tools.r8.utils.AndroidApiLevel; |
| import com.android.tools.r8.utils.AndroidApp; |
| import com.android.tools.r8.utils.InternalOptions; |
| import java.nio.file.Paths; |
| import org.junit.Test; |
| |
| public class R8GMSCoreFixedPointTest extends GMSCoreCompilationTestBase { |
| |
| @Test |
| public void fixedPoint() throws Exception { |
| // First compilation. |
| AndroidApp app = ToolHelper.builderFromProgramDirectory(Paths.get(GMSCORE_V7_DIR)).build(); |
| |
| AndroidApp app1 = |
| ToolHelper.runR8( |
| ToolHelper.prepareR8CommandBuilder(app) |
| .setMode(CompilationMode.DEBUG) |
| .setMinApiLevel(AndroidApiLevel.L.getLevel()) |
| .build(), |
| this::configure); |
| |
| // Second compilation. |
| // Add option --skip-outline-opt for second compilation. The second compilation can find |
| // additional outlining opportunities as member rebinding from the first compilation can move |
| // methods. |
| // See b/33410508 and b/33475705. |
| AndroidApp app2 = |
| ToolHelper.runR8( |
| ToolHelper.prepareR8CommandBuilder(app1) |
| .setMode(CompilationMode.DEBUG) |
| .setMinApiLevel(AndroidApiLevel.L.getLevel()) |
| .build(), |
| this::configure); |
| |
| assertIdenticalApplicationsUpToCode(app1, app2, false); |
| } |
| |
| private void configure(InternalOptions options) { |
| options.ignoreMissingClasses = true; |
| } |
| } |