Support for -whyareyounotinlining in InliningStrategy.stillHasBudget()

Bug: 142108662
Change-Id: I64d9d331f244265937e8dcf61625491aae13d818
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
index 1b51071..f308b8c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
@@ -541,7 +541,14 @@
   @Override
   public boolean stillHasBudget(
       InlineAction action, WhyAreYouNotInliningReporter whyAreYouNotInliningReporter) {
-    return instructionAllowance > 0 || action.reason.mustBeInlined();
+    if (action.reason.mustBeInlined()) {
+      return true;
+    }
+    boolean stillHasBudget = instructionAllowance > 0;
+    if (!stillHasBudget) {
+      whyAreYouNotInliningReporter.reportInstructionBudgetIsExceeded();
+    }
+    return stillHasBudget;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 27c3831..816c40c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -746,8 +746,7 @@
             continue;
           }
           if (!strategy.stillHasBudget(action, whyAreYouNotInliningReporter)) {
-            // TODO(b/142108662): Enable assertion once reporting is complete.
-            // assert whyAreYouNotInliningReporter.verifyReasonHasBeenReported();
+            assert whyAreYouNotInliningReporter.verifyReasonHasBeenReported();
             continue;
           }
 
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotKeepingReporter.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotKeepingReporter.java
index 56f97b1..dce73a6 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotKeepingReporter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotKeepingReporter.java
@@ -16,6 +16,9 @@
   }
 
   @Override
+  public void reportInstructionBudgetIsExceeded() {}
+
+  @Override
   public void reportPotentialExplosionInExceptionalControlFlowResolutionBlocks(
       int estimatedNumberOfControlFlowResolutionBlocks, int threshold) {}
 
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
index a86ab56..6b5d786 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
@@ -41,6 +41,8 @@
     }
   }
 
+  public abstract void reportInstructionBudgetIsExceeded();
+
   public abstract void reportPotentialExplosionInExceptionalControlFlowResolutionBlocks(
       int estimatedNumberOfControlFlowResolutionBlocks, int threshold);
 
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
index 9d469d0..c59ddba 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
@@ -38,6 +38,11 @@
   }
 
   @Override
+  public void reportInstructionBudgetIsExceeded() {
+    print("caller's instruction budget is exceeded.");
+  }
+
+  @Override
   public void reportPotentialExplosionInExceptionalControlFlowResolutionBlocks(
       int estimatedNumberOfControlFlowResolutionBlocks, int threshold) {
     printWithExceededThreshold(