iiVisu
iiVisu copied to clipboard
Bump leakcanary-android from 2.7 to 2.9.1
Bumps leakcanary-android from 2.7 to 2.9.1.
Release notes
Sourced from leakcanary-android's releases.
v2.9.1
See Change Log
v2.9
See Change Log
v2.8.1
See Change Log
v2.8
See Change Log
Changelog
Sourced from leakcanary-android's changelog.
Version 2.9.1 (2022-04-20)
Preface
What are some things you'd like to see in a future LeakCanary 3 version? Tell me on Twitter!
Some ideas I'm playing with:
- Moving heap analysis leak visualisation to a separate single app (written with Compose!) available on the PlayStore.
- Bumping Okio to 3.0
- Multiplatform heap analysis? Analyze a JVM heap dump in your browser?!
- Visualize the heap dominators / retained size as a treemap.
- A backend for LeakCanary?
New metrics in heap analysis metadata
I built LeakCanary to help fix leaks, but in doing so I accidentally wrote a fairly flexible heap dump parser. Since we're parsing the heap to find leaks anyway, we might as well report additional interesting metrics. Here's what you'll now see in the heap dump metadata:
- Class count: count of loaded classes
- Instance count
- Primitive array count
- Object array count
- Thread count
- Heap total bytes
- Bitmap count
- Bitmap total bytes
- Large bitmap count (bitmaps with more pixels than 1.1x the pixels on screen)
- Large bitmap total bytes
- SQLiteDatabase in memory (open or closed, as well as their file path)
This is just a first pass, feedback and ideas welcome!
Performance improvements
The heap analysis now traverses the heap dump using
RandomAccessFile
instead ofFileChannel.transferTo()
and is now 40% faster on API 23 and 20% faster on newer APIs. Also, sticky class GC roots are now deduplicated, which great reduces the memory footprint of LeakCanary on API 23 (#2324). You can read about the related investigation on py.hashnode.dev.Breaking change: FailTestOnLeakRunListener deleted
FailTestOnLeakRunListener
,FailTestOnLeak
andFailAnnotatedTestOnLeakRunListener
were deprecated in LeakCanary 2.8 as they rely on hacking the Android Test library internals which have since changed, and have been replaced byLeakAssertions.assertNoLeak()
and theDetectLeaksAfterTestSuccess
test rule. I was initially planning of keep these around, but as I tried to increase API level coverage in LeakCanary I needed to upgrade the Android Test library to a more recent version, and the hacks now had compilation errors. So they're gone: #2282. If you can't use the test rules just yet, you're welcome to copy paste the listener implementations in your own codebase.Other bug fixes and improvements 🐛🔨
- 💥 #2367 Fixed
AndroidLeakFixes.FLUSH_HANDLER_THREADS
(HandlerThread
can have a nullLooper
).- 💥 #2286 Update Curtains to include Proguard rules and prevent
WindowCallbackWrapper
crashes.- 💥 #2294 Fixed
WindowDelegateCallback.onMenuOpened()
crash.- 🐤 #2328 Fixed ToastEventListener leak. Sorry 😬!
- 💥 #2310 Fixed crash when using WorkManager < 2.1.0.
- 💥 #2342 Fixed crash when
HashSet.map
is null (which isn't supposed to happen, oh well, Android 🤷♂️).- 🐛 #2117 Fixed StrictMode disk read violations.
... (truncated)
Commits
99a5606
Prepare 2.9.1 releasecacd5b3
Merge pull request #2367 from square/py/looper_null207a77e
Handler null looperbe925ba
Prepare for next development iterationfefb65e
Merge branch 'release_2.9'5abae5d
Prepare 2.9 release67e41fa
Merge pull request #2366 from square/py/metadata_moar3c82359
Add more metadata about the heapf367992
Merge pull request #2365 from square/py/ids27bcd90
Introduce additional ways to represent object ids- Additional commits viewable in compare view
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase
.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
-
@dependabot rebase
will rebase this PR -
@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it -
@dependabot merge
will merge this PR after your CI passes on it -
@dependabot squash and merge
will squash and merge this PR after your CI passes on it -
@dependabot cancel merge
will cancel a previously requested merge and block automerging -
@dependabot reopen
will reopen this PR if it is closed -
@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually -
@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) -
@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) -
@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)