Status Update
Comments
ap...@google.com <ap...@google.com> #2
Thank you for your patience while our engineering team worked to resolve this issue. A fix for this issue is now available in:
- Android Studio Ladybug Feature Drop | 2024.2.2 Canary 3
- Android Gradle Plugin 8.8.0-alpha03
We encourage you to try the latest update.
If you notice further issues or have questions, please file a new bug report.
Thank you for taking the time to submit feedback — we really appreciate it!
ch...@google.com <ch...@google.com> #3
A few findings from compiling the dump artifact myself:
-
Tree shaking takes around 65 % of compilation time. Total build time is around 535 seconds.
-
The first round of tree shaking hits a tracing fixpoint ~50 times.
-
At each fixpoint we process deferred annotations. Most fixpoints spend 0.3 seconds doing this (+10 seconds in total). Maybe a simple check if this step can be skipped would remove most of this.
-
Repeatedly rebuilding SubtypingInfo after desugaring takes 20 seconds.
-
If rule evaluation only takes around 10 seconds in the first round of tree shaking, but goes up to 115 seconds in the second round of tree shaking (20% of compilation time). I witnessed a similar issue on SystemUI at some point.
ap...@google.com <ap...@google.com> #4
Project: r8
Branch: main
Author: Christoffer Adamsen <
Link:
Improve performance of if rules with fixed class name
Expand for full commit details
Improve performance of if rules with fixed class name
This improves the build speed of an app that contains thousands of Moshi generated -if rules by 10-20%.
Bug: b/378464445
Change-Id: I8c84281c6d2ff3d08ccf81962a0541ed87077571
Files:
- M
src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
- M
src/main/java/com/android/tools/r8/shaking/IfRuleEvaluatorFactory.java
- M
src/main/java/com/android/tools/r8/shaking/ProguardClassNameList.java
Hash: 0b227e5e12e878477f0466e58d3f6301d7f23a40
Date: Tue Dec 03 13:54:16 2024
ap...@google.com <ap...@google.com> #5
Project: r8
Branch: 8.8
Author: Christoffer Adamsen <
Link:
Version 8.8.22
Expand for full commit details
Version 8.8.22
Bug: b/378464445
Change-Id: I5ad06779a1f18a97eb6c81a205078ddf27cd42ac
Files:
- M
src/main/java/com/android/tools/r8/Version.java
Hash: 49d46b133793bd6a9125f36e23c4e2e6469cbb92
Date: Wed Dec 04 12:05:30 2024
ap...@google.com <ap...@google.com> #6
Project: r8
Branch: 8.8
Author: Christoffer Adamsen <
Link:
Improve performance of if rules with fixed class name
Expand for full commit details
Improve performance of if rules with fixed class name
This improves the build speed of an app that contains thousands of Moshi generated -if rules by 10-20%.
Bug: b/378464445
Change-Id: I8c84281c6d2ff3d08ccf81962a0541ed87077571
Files:
- M
src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
- M
src/main/java/com/android/tools/r8/shaking/IfRuleEvaluatorFactory.java
- M
src/main/java/com/android/tools/r8/shaking/ProguardClassNameList.java
Hash: 73d7b9311141ec412f3f67ba2712ae04553e3b84
Date: Wed Dec 04 12:05:21 2024
ch...@google.com <ch...@google.com> #7
ch...@google.com <ch...@google.com>
ap...@google.com <ap...@google.com> #8
Project: r8
Branch: main
Author: Christoffer Adamsen <
Link:
Report timing for enqueuer worklist items
Expand for full commit details
Report timing for enqueuer worklist items
Bug: b/378464445
Change-Id: If1e1f3e93943ebc5d5177fc7e3848ab1bd49e374
Files:
- M
src/main/java/com/android/tools/r8/shaking/Enqueuer.java
- M
src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
Hash: 941526d868f84abe4404fb838c6be63a3ac25e8c
Date: Thu Jan 02 09:07:07 2025
ch...@google.com <ch...@google.com> #9
We seem to be spending a lot of time in transitionMethodsForInstantiatedClass
.
ap...@google.com <ap...@google.com> #10
Project: r8
Branch: main
Author: Christoffer Adamsen <
Link:
Optimize processing of virtual calls when classes are instantiated
Expand for full commit details
Optimize processing of virtual calls when classes are instantiated
Bug: b/378464445
Change-Id: I174655f1bbd4b8aa963020957a5c9f6f7a394ec1
Files:
- M
src/main/java/com/android/tools/r8/graph/LookupResult.java
- M
src/main/java/com/android/tools/r8/shaking/Enqueuer.java
- M
src/main/java/com/android/tools/r8/shaking/InstantiatedObject.java
Hash: 73ca6a237bda4dc7b250bd7e4870567271477dbe
Date: Tue Jan 07 17:15:32 2025
ap...@google.com <ap...@google.com> #11
Project: r8
Branch: main
Author: Christoffer Adamsen <
Link:
Only consider relevant instruction desugarings for given instruction opcode
Expand for full commit details
Only consider relevant instruction desugarings for given instruction opcode
This CL creates a dense array where the element at index i is an array containing all relevant CF instruction desugarings for instructions with opcode i.
Bug: b/378464445
Change-Id: I54b36eb428affff0a077078e29251ec6128e3cbe
Files:
- M
src/main/java/com/android/tools/r8/cf/CfCodePrinter.java
- M
src/main/java/com/android/tools/r8/cf/CfPrinter.java
- M
src/main/java/com/android/tools/r8/cf/code/CfArithmeticBinop.java
- M
src/main/java/com/android/tools/r8/cf/code/CfArrayLength.java
- M
src/main/java/com/android/tools/r8/cf/code/CfArrayLoad.java
- M
src/main/java/com/android/tools/r8/cf/code/CfArrayStore.java
- M
src/main/java/com/android/tools/r8/cf/code/CfCheckCast.java
- M
src/main/java/com/android/tools/r8/cf/code/CfCmp.java
- M
src/main/java/com/android/tools/r8/cf/code/CfConstClass.java
- M
src/main/java/com/android/tools/r8/cf/code/CfConstDynamic.java
- M
src/main/java/com/android/tools/r8/cf/code/CfConstMethodHandle.java
- M
src/main/java/com/android/tools/r8/cf/code/CfConstMethodType.java
- M
src/main/java/com/android/tools/r8/cf/code/CfConstNull.java
- M
src/main/java/com/android/tools/r8/cf/code/CfConstNumber.java
- M
src/main/java/com/android/tools/r8/cf/code/CfConstString.java
- M
src/main/java/com/android/tools/r8/cf/code/CfDexItemBasedConstString.java
- M
src/main/java/com/android/tools/r8/cf/code/CfFieldInstruction.java
- M
src/main/java/com/android/tools/r8/cf/code/CfFrame.java
- M
src/main/java/com/android/tools/r8/cf/code/CfGoto.java
- M
src/main/java/com/android/tools/r8/cf/code/CfIf.java
- M
src/main/java/com/android/tools/r8/cf/code/CfIfCmp.java
- M
src/main/java/com/android/tools/r8/cf/code/CfIinc.java
- M
src/main/java/com/android/tools/r8/cf/code/CfInitClass.java
- M
src/main/java/com/android/tools/r8/cf/code/CfInstanceFieldRead.java
- M
src/main/java/com/android/tools/r8/cf/code/CfInstanceFieldWrite.java
- M
src/main/java/com/android/tools/r8/cf/code/CfInstanceOf.java
- M
src/main/java/com/android/tools/r8/cf/code/CfInstruction.java
- M
src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
- M
src/main/java/com/android/tools/r8/cf/code/CfInvokeDynamic.java
- M
src/main/java/com/android/tools/r8/cf/code/CfJsrRet.java
- M
src/main/java/com/android/tools/r8/cf/code/CfLabel.java
- M
src/main/java/com/android/tools/r8/cf/code/CfLoad.java
- M
src/main/java/com/android/tools/r8/cf/code/CfLogicalBinop.java
- M
src/main/java/com/android/tools/r8/cf/code/CfMonitor.java
- M
src/main/java/com/android/tools/r8/cf/code/CfMultiANewArray.java
- M
src/main/java/com/android/tools/r8/cf/code/CfNeg.java
- M
src/main/java/com/android/tools/r8/cf/code/CfNew.java
- M
src/main/java/com/android/tools/r8/cf/code/CfNewArray.java
- M
src/main/java/com/android/tools/r8/cf/code/CfNewUnboxedEnum.java
- M
src/main/java/com/android/tools/r8/cf/code/CfNop.java
- M
src/main/java/com/android/tools/r8/cf/code/CfNumberConversion.java
- A
src/main/java/com/android/tools/r8/cf/code/CfOpcodeUtils.java
- M
src/main/java/com/android/tools/r8/cf/code/CfPosition.java
- M
src/main/java/com/android/tools/r8/cf/code/CfRecordFieldValues.java
- M
src/main/java/com/android/tools/r8/cf/code/CfReturn.java
- M
src/main/java/com/android/tools/r8/cf/code/CfReturnVoid.java
- M
src/main/java/com/android/tools/r8/cf/code/CfStackInstruction.java
- M
src/main/java/com/android/tools/r8/cf/code/CfStaticFieldRead.java
- M
src/main/java/com/android/tools/r8/cf/code/CfStaticFieldWrite.java
- M
src/main/java/com/android/tools/r8/cf/code/CfStore.java
- M
src/main/java/com/android/tools/r8/cf/code/CfSwitch.java
- M
src/main/java/com/android/tools/r8/cf/code/CfThrow.java
- M
src/main/java/com/android/tools/r8/graph/CfCompareHelper.java
- M
src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java
- M
src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
- M
src/main/java/com/android/tools/r8/ir/desugar/BufferCovariantReturnTypeRewriter.java
- M
src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/InvokeToPrivateRewriter.java
- M
src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java
- M
src/main/java/com/android/tools/r8/ir/desugar/OutlineArrayCloneFromInterfaceMethodDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/UnrepresentableInDexInstructionRemover.java
- M
src/main/java/com/android/tools/r8/ir/desugar/apimodel/ApiInvokeOutlinerDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicInstructionDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPIConverter.java
- M
src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/disabledesugarer/DesugaredLibraryDisableDesugarer.java
- M
src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryLibRewriter.java
- M
src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeter.java
- M
src/main/java/com/android/tools/r8/ir/desugar/icce/AlwaysThrowingInstructionDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/invokespecial/InvokeSpecialToSelfDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
- M
src/main/java/com/android/tools/r8/ir/desugar/lambda/LambdaInstructionDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/records/RecordInstructionDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/stringconcat/StringConcatInstructionDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/twr/TwrInstructionDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/typeswitch/TypeSwitchDesugaring.java
- M
src/main/java/com/android/tools/r8/ir/desugar/varhandle/VarHandleDesugaring.java
- M
src/main/java/com/android/tools/r8/shaking/Enqueuer.java
- M
src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
- M
src/main/java/com/android/tools/r8/utils/Timing.java
- M
src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
Hash: defd4f864fc516af28d9e9144db6ef8b4934624f
Date: Thu Jan 09 09:16:29 2025
ch...@google.com <ch...@google.com> #12
I will mark this as fixed. Tree shaking in Monzo now takes around 40-45% of the build instead of 65%.
an...@google.com <an...@google.com> #13
Thank you for your patience while our engineering team worked to resolve this issue. A fix for this issue is now available in:
- Android Studio Ladybug Feature Drop | 2024.2.2 Patch 1
- Android Gradle Plugin 8.8.1
We encourage you to try the latest update.
If you notice further issues or have questions, please file a new bug report.
Thank you for taking the time to submit feedback — we really appreciate it!
Description
No description yet.