AndroidIDEOfficial / AndroidIDE

AndroidIDE is an IDE for Android to develop full featured Android apps.
https://m.androidide.com
GNU General Public License v3.0
2.09k stars 250 forks source link

Out of memory issue when parsing classes created by Protobuf #1764

Closed ihtarlik closed 3 months ago

ihtarlik commented 3 months ago

Issue Checklist

Additional terms

Issue explanation

I used protoc to generate Java code based on my .proto file, and the resulting file is 4.65mb. AndroidIDE had difficulty parsing the file for class definitions, and the code editor was lagging while editing code that referenced those classes. Then it failed and included a crash log.

Expected behavior

I am running a Pixel 5 with 8gb of RAM, so it should have had plenty of headroom to process the class definitions, even in a large file.

Version name

Version : v2.7.1-beta (27102) CI Build : false Branch : HEAD Commit : 55bb46b31 Variant : arm64-v8a (release) Build type : OFFICIAL F-Droid Build : true F-Droid Version : v2.7.1-beta F-Droid Version code : 27102 SDK Version : 33 Supported ABIs : [arm64-v8a, armeabi-v7a, armeabi] Manufacturer : Google Device : Pixel5

Download source

GitHub

Relevant log output

AndroidIDE Crash Report
Version : v2.7.1-beta (27102)
CI Build : false
Branch : HEAD
Commit : 55bb46b31
Variant : arm64-v8a (release)
Build type : OFFICIAL
F-Droid Build : true
F-Droid Version : v2.7.1-beta
F-Droid Version code : 27102
SDK Version : 33
Supported ABIs : [arm64-v8a, armeabi-v7a, armeabi]
Manufacturer : Google
Device : Pixel5

Stacktrace:
java.lang.OutOfMemoryError: Failed to allocate a 24 byte allocation with 1685072 free bytes and 1645KB until OOM, target footprint 536870912, growth limit 536870912; giving up on allocation because <1% of heap free after GC.
    at libcore.util.NativeAllocationRegistry.registerNativeAllocation(NativeAllocationRegistry.java:261)
    at android.graphics.Matrix.<init>(Matrix.java:242)
    at com.google.android.material.shape.ShapePath$PathOperation.<init>(Unknown Source:5)
    at com.google.android.material.shape.ShapePath.lineTo(Unknown Source:2)
    at _COROUTINE.ArtificialStackFrames.getEdgePath(Unknown Source:1)
    at com.google.android.material.shape.ShapeAppearancePathProvider.calculatePath(Unknown Source:451)
    at com.google.android.material.shape.MaterialShapeDrawable.draw(Unknown Source:169)
    at android.graphics.drawable.LayerDrawable.draw(LayerDrawable.java:1019)
    at android.graphics.drawable.DrawableWrapper.draw(DrawableWrapper.java:241)
    at android.graphics.drawable.RippleDrawable.drawContent(RippleDrawable.java:1150)
    at android.graphics.drawable.RippleDrawable.drawPatterned(RippleDrawable.java:894)
    at android.graphics.drawable.RippleDrawable.draw(RippleDrawable.java:807)
    at android.view.View.getDrawableRenderNode(View.java:23555)
    at android.view.View.drawBackground(View.java:23484)
    at android.view.View.draw(View.java:23258)
    at android.view.View.updateDisplayListIfDirty(View.java:22133)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at androidx.recyclerview.widget.RecyclerView.drawChild(Unknown Source:0)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.draw(View.java:23269)
    at androidx.recyclerview.widget.RecyclerView.draw(Unknown Source:0)
    at android.view.View.updateDisplayListIfDirty(View.java:22133)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.draw(View.java:23269)
    at android.view.View.updateDisplayListIfDirty(View.java:22133)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.updateDisplayListIfDirty(View.java:22124)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.updateDisplayListIfDirty(View.java:22124)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild(Unknown Source:13)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.updateDisplayListIfDirty(View.java:22124)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at androidx.drawerlayout.widget.DrawerLayout.drawChild(Unknown Source:98)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.updateDisplayListIfDirty(View.java:22124)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.updateDisplayListIfDirty(View.java:22124)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.updateDisplayListIfDirty(View.java:22124)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.updateDisplayListIfDirty(View.java:22124)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.updateDisplayListIfDirty(View.java:22124)
    at android.view.View.draw(View.java:22997)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4529)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290)
    at android.view.View.draw(View.java:23269)
    at com.android.internal.policy.DecorView.draw(DecorView.java:821)
    at android.view.View.updateDisplayListIfDirty(View.java:22133)
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:689)
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:695)
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:793)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:4789)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4500)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3687)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2371)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9297)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1231)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239)
    at android.view.Choreographer.doCallbacks(Choreographer.java:899)
    at android.view.Choreographer.doFrame(Choreographer.java:832)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214)
    at android.os.Handler.handleCallback(Handler.java:942)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loopOnce(Looper.java:201)
    at android.os.Looper.loop(Looper.java:288)
    at android.app.ActivityThread.main(ActivityThread.java:7924)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
itsaky commented 3 months ago

Duplicate of #1694