Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RtmpCamera2 seems to have a critical memory leak issue. #1384

Open
JokerIce opened this issue Jan 16, 2024 · 1 comment
Open

RtmpCamera2 seems to have a critical memory leak issue. #1384

JokerIce opened this issue Jan 16, 2024 · 1 comment

Comments

@JokerIce
Copy link

In your demo, both the SurfaceModeRtmpActivity and TextureModeRtmpActivity use RtmpCamera2. Additionally, I have attempted to use RtmpCamera2 in both RtmpActivity and OpenGLRtmpActivity. Upon entering the Activity, without recording any video or live streaming, and then directly exiting the Activity, a memory leak error is triggered.
By adding debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10' to your project, you can observe the log details of the memory leak issue.

====================================
HEAP ANALYSIS RESULT
====================================
1 APPLICATION LEAKS

                                                                                                References underlined with "~~~" are likely causes.
                                                                                                Learn more at https://squ.re/leaks.
                                                                                                
                                                                                                129007 bytes retained by leaking objects
                                                                                                Signature: e4e8f6bdef6a4ff99124d3675fd6288d0680281b
                                                                                                ┬───
                                                                                                │ GC Root: System class
                                                                                                │
                                                                                                ├─ android.hardware.devicestate.DeviceStateManagerGlobal class
                                                                                                │    Leaking: NO (a class is never leaking)
                                                                                                │    ↓ static DeviceStateManagerGlobal.sInstance
                                                                                                │                                      ~~~~~~~~~
                                                                                                ├─ android.hardware.devicestate.DeviceStateManagerGlobal instance
                                                                                                │    Leaking: UNKNOWN
                                                                                                │    Retaining 299.2 kB in 5002 objects
                                                                                                │    ↓ DeviceStateManagerGlobal.mCallbacks
                                                                                                │                               ~~~~~~~~~~
                                                                                                ├─ java.util.ArrayList instance
                                                                                                │    Leaking: UNKNOWN
                                                                                                │    Retaining 298.1 kB in 4995 objects
                                                                                                │    ↓ ArrayList[1]
                                                                                                │               ~~~
                                                                                                ├─ android.hardware.devicestate.DeviceStateManagerGlobal$DeviceStateCallbackWrapper instance
                                                                                                │    Leaking: UNKNOWN
                                                                                                │    Retaining 129.3 kB in 2399 objects
                                                                                                │    ↓ DeviceStateManagerGlobal$DeviceStateCallbackWrapper.mDeviceStateCallback
                                                                                                │                                                          ~~~~~~~~~~~~~~~~~~~~
                                                                                                ├─ android.hardware.camera2.CameraManager$FoldStateListener instance
                                                                                                │    Leaking: UNKNOWN
                                                                                                │    Retaining 129.3 kB in 2396 objects
                                                                                                │    ↓ CameraManager$FoldStateListener.this$0
                                                                                                │                                      ~~~~~~
                                                                                                ├─ android.hardware.camera2.CameraManager instance
                                                                                                │    Leaking: UNKNOWN
                                                                                                │    Retaining 129.2 kB in 2394 objects
                                                                                                │    mContext instance of android.app.ContextImpl
                                                                                                │    ↓ CameraManager.mContext
                                                                                                │                    ~~~~~~~~
                                                                                                ├─ android.app.ContextImpl instance
                                                                                                │    Leaking: YES (ContextImpl.mOuterContext is an instance of com.pedro.streamer.texturemodeexample.
                                                                                                │    TextureModeRtmpActivity with Activity.mDestroyed true)
                                                                                                │    Retaining 129.0 kB in 2385 objects
                                                                                                │    mOuterContext instance of com.pedro.streamer.texturemodeexample.TextureModeRtmpActivity with mDestroyed = true
                                                                                                │    ↓ ContextImpl.mOuterContext
                                                                                                ╰→ com.pedro.streamer.texturemodeexample.TextureModeRtmpActivity instance
                                                                                                ​     Leaking: YES (ObjectWatcher was watching this because com.pedro.streamer.texturemodeexample.
                                                                                                ​     TextureModeRtmpActivity received Activity#onDestroy() callback and Activity#mDestroyed is true)
                                                                                                ​     Retaining 120.1 kB in 2261 objects
                                                                                                ​     key = 1236661e-c83f-45b7-b2c6-d50cd4a8c857
                                                                                                ​     watchDurationMillis = 9215
                                                                                                ​     retainedDurationMillis = 4214
                                                                                                ​     mApplication instance of com.pedro.streamer.App
                                                                                                ​     mBase instance of androidx.appcompat.view.ContextThemeWrapper
                                                                                                ====================================
                                                                                                0 LIBRARY LEAKS
                                                                                                
                                                                                                A Library Leak is a leak caused by a known bug in 3rd party code that you do not have control over.
                                                                                                See https://square.github.io/leakcanary/fundamentals-how-leakcanary-works/#4-categorizing-leaks
                                                                                                ====================================
                                                                                                0 UNREACHABLE OBJECTS
                                                                                                
                                                                                                An unreachable object is still in memory but LeakCanary could not find a strong reference path
                                                                                                from GC roots.
                                                                                                ====================================
                                                                                                METADATA
                                                                                                
                                                                                                Please include this in bug reports and Stack Overflow questions.
                                                                                                
                                                                                                Build.VERSION.SDK_INT: 33
                                                                                                Build.MANUFACTURER: HONOR
                                                                                                LeakCanary version: 2.10
                                                                                                App process name: com.pedro.streamer
                                                                                                Class count: 25429
                                                                                                Instance count: 194309
                                                                                                Primitive array count: 140083
                                                                                                Object array count: 24172
                                                                                                Thread count: 26
                                                                                                Heap total bytes: 26790552
                                                                                                Bitmap count: 5
                                                                                                Bitmap total bytes: 220689
                                                                                                Large bitmap count: 0
                                                                                                Large bitmap total bytes: 0
                                                                                                Stats: LruCache[maxSize=3000,hits=115400,misses=183421,hitRate=38%]
                                                                                                RandomAccess[bytes=9483492,reads=183421,travel=94305186323,range=32358887,size=40298187]
                                                                                                Heap dump reason: user request
                                                                                                Analysis duration: 5339 ms
                                                                                                Heap dump file path: /storage/emulated/0/Download/leakcanary-com.pedro.streamer/2024-01-16_16-05-54_504.hprof
                                                                                                Heap dump timestamp: 1705392362805
                                                                                                Heap dump duration: 1842 ms
@pedroSG94
Copy link
Owner

Hello,

Thank you for the report. I will check it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants