Deployed 94332dd11 with MkDocs version: 1.4.2
diff --git a/api/leakcanary/-activity-watcher/index.html b/api/leakcanary/-activity-watcher/index.html
index 7437a48..fc83858 100644
--- a/api/leakcanary/-activity-watcher/index.html
+++ b/api/leakcanary/-activity-watcher/index.html
@@ -779,7 +779,7 @@
<h1 id="activitywatcher">ActivityWatcher<a class="headerlink" href="#activitywatcher" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
class <a href="./">ActivityWatcher</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, deletableObjectReporter: DeletableObjectReporter) : <a href="../-installable-watcher/">InstallableWatcher</a></p>
-<p>Expects activities to become weakly reachable soon after they receive the <a href="https://developer.android.com/reference/kotlin/android/app/Activity.html#ondestroy">Activity.onDestroy</a> callback.</p>
+<p>Expects activities to become weakly reachable soon after they receive the <a href="https://developer.android.com/reference/kotlin/android/app/Activity.html#onDestroy--">Activity.onDestroy</a> callback.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
diff --git a/api/leakcanary/-android-debug-heap-dumper/dump-heap/index.html b/api/leakcanary/-android-debug-heap-dumper/dump-heap/index.html
index 1339651..3ff88fa 100644
--- a/api/leakcanary/-android-debug-heap-dumper/dump-heap/index.html
+++ b/api/leakcanary/-android-debug-heap-dumper/dump-heap/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">AndroidDebugHeapDumper</a>/<a href="./">dumpHeap</a></p>
<h1 id="dumpheap">dumpHeap<a class="headerlink" href="#dumpheap" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-open override fun <a href="./">dumpHeap</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+open override fun <a href="./">dumpHeap</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
</article>
diff --git a/api/leakcanary/-android-debug-heap-dumper/index.html b/api/leakcanary/-android-debug-heap-dumper/index.html
index f556033..91e3ba5 100644
--- a/api/leakcanary/-android-debug-heap-dumper/index.html
+++ b/api/leakcanary/-android-debug-heap-dumper/index.html
@@ -772,8 +772,8 @@
<h1 id="androiddebugheapdumper">AndroidDebugHeapDumper<a class="headerlink" href="#androiddebugheapdumper" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
object <a href="./">AndroidDebugHeapDumper</a> : HeapDumper</p>
-<p>Dumps the Android heap using <a href="https://developer.android.com/reference/kotlin/android/os/Debug.html#dumphprofdata">Debug.dumpHprofData</a>.</p>
-<p>Note: despite being part of the Debug class, <a href="https://developer.android.com/reference/kotlin/android/os/Debug.html#dumphprofdata">Debug.dumpHprofData</a> can be called from non debuggable non profileable builds.</p>
+<p>Dumps the Android heap using <a href="https://developer.android.com/reference/kotlin/android/os/Debug.html#dumpHprofData-kotlin.String-">Debug.dumpHprofData</a>.</p>
+<p>Note: despite being part of the Debug class, <a href="https://developer.android.com/reference/kotlin/android/os/Debug.html#dumpHprofData-kotlin.String-">Debug.dumpHprofData</a> can be called from non debuggable non profileable builds.</p>
<h2 id="functions">Functions<a class="headerlink" href="#functions" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -785,7 +785,7 @@
<tbody>
<tr>
<td><a href="dump-heap/">dumpHeap</a></td>
-<td>[androidJvm]<br>open override fun <a href="dump-heap/">dumpHeap</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td>[androidJvm]<br>open override fun <a href="dump-heap/">dumpHeap</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
<tr>
<td><a href="../with-detector-warmup/">withDetectorWarmup</a></td>
diff --git a/api/leakcanary/-android-device-temp-heap-dump-directory-provider/heap-dump-directory/index.html b/api/leakcanary/-android-device-temp-heap-dump-directory-provider/heap-dump-directory/index.html
index 48f07aa..50efff1 100644
--- a/api/leakcanary/-android-device-temp-heap-dump-directory-provider/heap-dump-directory/index.html
+++ b/api/leakcanary/-android-device-temp-heap-dump-directory-provider/heap-dump-directory/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">AndroidDeviceTempHeapDumpDirectoryProvider</a>/<a href="./">heapDumpDirectory</a></p>
<h1 id="heapdumpdirectory">heapDumpDirectory<a class="headerlink" href="#heapdumpdirectory" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-open override fun <a href="./">heapDumpDirectory</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+open override fun <a href="./">heapDumpDirectory</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
</article>
diff --git a/api/leakcanary/-android-device-temp-heap-dump-directory-provider/index.html b/api/leakcanary/-android-device-temp-heap-dump-directory-provider/index.html
index 13de398..675cafb 100644
--- a/api/leakcanary/-android-device-temp-heap-dump-directory-provider/index.html
+++ b/api/leakcanary/-android-device-temp-heap-dump-directory-provider/index.html
@@ -805,7 +805,7 @@
<tbody>
<tr>
<td><a href="heap-dump-directory/">heapDumpDirectory</a></td>
-<td>[androidJvm]<br>open override fun <a href="heap-dump-directory/">heapDumpDirectory</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[androidJvm]<br>open override fun <a href="heap-dump-directory/">heapDumpDirectory</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-android-leak-fixes/-s-p-e-l-l_-c-h-e-c-k-e-r/index.html b/api/leakcanary/-android-leak-fixes/-s-p-e-l-l_-c-h-e-c-k-e-r/index.html
index 9b8dc4b..b2db8ed 100644
--- a/api/leakcanary/-android-leak-fixes/-s-p-e-l-l_-c-h-e-c-k-e-r/index.html
+++ b/api/leakcanary/-android-leak-fixes/-s-p-e-l-l_-c-h-e-c-k-e-r/index.html
@@ -776,7 +776,7 @@
<p>The SpellChecker sends the TextView content to the spell checker service every 400ms, ie every time the service calls back with a result the SpellChecker schedules another check for 400ms later.</p>
<p>When the TextView is detached from the window, the spell checker closes the session. In practice, SpellCheckerSessionListenerImpl.mHandler is set to null and when the service calls SpellCheckerSessionListenerImpl.onGetSuggestions or SpellCheckerSessionListenerImpl.onGetSentenceSuggestions back from another process, there’s a null check for SpellCheckerSessionListenerImpl.mHandler and the callback is dropped.</p>
<p>Unfortunately, on Android M there’s a race condition in how that’s done. When the service calls back into our app process, the IPC call is received on a binder thread. That’s when the null check happens. If the session is not closed at this point (mHandler not null), the callback is then posted to the main thread. If on the main thread the session is closed after that post but prior to that post being handled, then the post will still be processed, after the session has been closed.</p>
-<p>When the post is processed, SpellCheckerSession calls back into SpellChecker which in turns schedules a new spell check to be ran in 400ms. The check is an anonymous inner class (SpellChecker$1) stored as SpellChecker.mSpellRunnable and implementing Runnable. It is scheduled by calling <a href="https://developer.android.com/reference/kotlin/android/view/View.html#postdelayed">View.postDelayed</a>. As we’ve seen, at this point the session may be closed which means that the view has been detached. <a href="https://developer.android.com/reference/kotlin/android/view/View.html#postdelayed">View.postDelayed</a> behaves differently when a view is detached: instead of posting to the single <a href="https://developer.android.com/reference/kotlin/android/os/Handler.html">Handler</a> used by the view hierarchy, it enqueues the Runnable into ViewRootImpl.RunQueue, a static queue that holds on to "actions" to be executed. As soon as a view hierarchy is attached, the ViewRootImpl.RunQueue is processed and emptied.</p>
+<p>When the post is processed, SpellCheckerSession calls back into SpellChecker which in turns schedules a new spell check to be ran in 400ms. The check is an anonymous inner class (SpellChecker$1) stored as SpellChecker.mSpellRunnable and implementing Runnable. It is scheduled by calling <a href="https://developer.android.com/reference/kotlin/android/view/View.html#postDelayed-java.lang.Runnable-kotlin.Long-">View.postDelayed</a>. As we’ve seen, at this point the session may be closed which means that the view has been detached. <a href="https://developer.android.com/reference/kotlin/android/view/View.html#postDelayed-java.lang.Runnable-kotlin.Long-">View.postDelayed</a> behaves differently when a view is detached: instead of posting to the single <a href="https://developer.android.com/reference/kotlin/android/os/Handler.html">Handler</a> used by the view hierarchy, it enqueues the Runnable into ViewRootImpl.RunQueue, a static queue that holds on to "actions" to be executed. As soon as a view hierarchy is attached, the ViewRootImpl.RunQueue is processed and emptied.</p>
<p>Unfortunately, that means that as long as no view hierarchy is attached, ie as long as there are no activities alive, the actions stay in ViewRootImpl.RunQueue. That means SpellChecker$1 ends up being kept in memory. It holds on to SpellChecker which in turns holds on to the detached TextView and corresponding destroyed activity & view hierarchy.</p>
<p>We have a fix for this! When the spell check session is closed, we replace SpellCheckerSession.mSpellCheckerSessionListener (which normally is the SpellChecker) with a no-op implementation. So even if callbacks are enqueued to the main thread handler, these callbacks will call the no-op implementation and SpellChecker will not be scheduling a spell check.</p>
<p>Sources to corroborate:</p>
diff --git a/api/leakcanary/-app-watcher-startup-initializer/dependencies/index.html b/api/leakcanary/-app-watcher-startup-initializer/dependencies/index.html
index 33c4ec1..1fdc31f 100644
--- a/api/leakcanary/-app-watcher-startup-initializer/dependencies/index.html
+++ b/api/leakcanary/-app-watcher-startup-initializer/dependencies/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">AppWatcherStartupInitializer</a>/<a href="./">dependencies</a></p>
<h1 id="dependencies">dependencies<a class="headerlink" href="#dependencies" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-open override fun <a href="./">dependencies</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://developer.android.com/reference/kotlin/java/lang/Class.html">Class</a><out <a href="https://developer.android.com/reference/kotlin/androidx/startup/Initializer.html">Initializer</a><*>>></p>
+open override fun <a href="./">dependencies</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html">Class</a><out <a href="https://developer.android.com/reference/kotlin/androidx/startup/Initializer.html">Initializer</a><*>>></p>
</article>
diff --git a/api/leakcanary/-app-watcher-startup-initializer/index.html b/api/leakcanary/-app-watcher-startup-initializer/index.html
index 4af9d4c..e9026ca 100644
--- a/api/leakcanary/-app-watcher-startup-initializer/index.html
+++ b/api/leakcanary/-app-watcher-startup-initializer/index.html
@@ -809,7 +809,7 @@
</tr>
<tr>
<td><a href="dependencies/">dependencies</a></td>
-<td>[androidJvm]<br>open override fun <a href="dependencies/">dependencies</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://developer.android.com/reference/kotlin/java/lang/Class.html">Class</a><out <a href="https://developer.android.com/reference/kotlin/androidx/startup/Initializer.html">Initializer</a><*>>></td>
+<td>[androidJvm]<br>open override fun <a href="dependencies/">dependencies</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html">Class</a><out <a href="https://developer.android.com/reference/kotlin/androidx/startup/Initializer.html">Initializer</a><*>>></td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-background-trigger/-background-trigger/index.html b/api/leakcanary/-background-trigger/-background-trigger/index.html
index 9c33ec2..446b670 100644
--- a/api/leakcanary/-background-trigger/-background-trigger/index.html
+++ b/api/leakcanary/-background-trigger/-background-trigger/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">BackgroundTrigger</a>/<a href="./">BackgroundTrigger</a></p>
<h1 id="backgroundtrigger">BackgroundTrigger<a class="headerlink" href="#backgroundtrigger" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-constructor(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://developer.android.com/reference/kotlin/java/util/concurrent/Executor.html">Executor</a>, processInfo: <a href="../../-process-info/">ProcessInfo</a> = ProcessInfo.Real, analysisCallback: (<a href="../../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result ->
+constructor(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a>, processInfo: <a href="../../-process-info/">ProcessInfo</a> = ProcessInfo.Real, analysisCallback: (<a href="../../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result ->
SharkLog.d { "$result" }
})</p>
diff --git a/api/leakcanary/-background-trigger/index.html b/api/leakcanary/-background-trigger/index.html
index 1cc3d1e..eb2b9fa 100644
--- a/api/leakcanary/-background-trigger/index.html
+++ b/api/leakcanary/-background-trigger/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">leakcanary</a>/<a href="./">BackgroundTrigger</a></p>
<h1 id="backgroundtrigger">BackgroundTrigger<a class="headerlink" href="#backgroundtrigger" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-class <a href="./">BackgroundTrigger</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://developer.android.com/reference/kotlin/java/util/concurrent/Executor.html">Executor</a>, processInfo: <a href="../-process-info/">ProcessInfo</a> = ProcessInfo.Real, analysisCallback: (<a href="../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result ->
+class <a href="./">BackgroundTrigger</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a>, processInfo: <a href="../-process-info/">ProcessInfo</a> = ProcessInfo.Real, analysisCallback: (<a href="../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result ->
SharkLog.d { "$result" }
})</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
@@ -792,7 +792,7 @@
<tbody>
<tr>
<td><a href="-background-trigger/">BackgroundTrigger</a></td>
-<td>[androidJvm]<br>constructor(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://developer.android.com/reference/kotlin/java/util/concurrent/Executor.html">Executor</a>, processInfo: <a href="../-process-info/">ProcessInfo</a> = ProcessInfo.Real, analysisCallback: (<a href="../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result -> SharkLog.d { "$result" } })</td>
+<td>[androidJvm]<br>constructor(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a>, processInfo: <a href="../-process-info/">ProcessInfo</a> = ProcessInfo.Real, analysisCallback: (<a href="../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result -> SharkLog.d { "$result" } })</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-datetime-formatted-heap-dump-file-provider/-datetime-formatted-heap-dump-file-provider/index.html b/api/leakcanary/-datetime-formatted-heap-dump-file-provider/-datetime-formatted-heap-dump-file-provider/index.html
index f348a73..9190eca 100644
--- a/api/leakcanary/-datetime-formatted-heap-dump-file-provider/-datetime-formatted-heap-dump-file-provider/index.html
+++ b/api/leakcanary/-datetime-formatted-heap-dump-file-provider/-datetime-formatted-heap-dump-file-provider/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">DatetimeFormattedHeapDumpFileProvider</a>/<a href="./">DatetimeFormattedHeapDumpFileProvider</a></p>
<h1 id="datetimeformattedheapdumpfileprovider">DatetimeFormattedHeapDumpFileProvider<a class="headerlink" href="#datetimeformattedheapdumpfileprovider" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(heapDumpDirectoryProvider: <a href="../../-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>, dateProvider: () -> <a href="https://developer.android.com/reference/kotlin/java/util/Date.html">Date</a> = { Date() }, prefixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }, suffixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" })</p>
+constructor(heapDumpDirectoryProvider: <a href="../../-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>, dateProvider: () -> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html">Date</a> = { Date() }, prefixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }, suffixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" })</p>
</article>
diff --git a/api/leakcanary/-datetime-formatted-heap-dump-file-provider/index.html b/api/leakcanary/-datetime-formatted-heap-dump-file-provider/index.html
index 8a4eae4..a3f4073 100644
--- a/api/leakcanary/-datetime-formatted-heap-dump-file-provider/index.html
+++ b/api/leakcanary/-datetime-formatted-heap-dump-file-provider/index.html
@@ -785,7 +785,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">leakcanary</a>/<a href="./">DatetimeFormattedHeapDumpFileProvider</a></p>
<h1 id="datetimeformattedheapdumpfileprovider">DatetimeFormattedHeapDumpFileProvider<a class="headerlink" href="#datetimeformattedheapdumpfileprovider" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">DatetimeFormattedHeapDumpFileProvider</a>(heapDumpDirectoryProvider: <a href="../-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>, dateProvider: () -> <a href="https://developer.android.com/reference/kotlin/java/util/Date.html">Date</a> = { Date() }, prefixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }, suffixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }) : <a href="../-heap-dump-file-provider/">HeapDumpFileProvider</a></p>
+class <a href="./">DatetimeFormattedHeapDumpFileProvider</a>(heapDumpDirectoryProvider: <a href="../-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>, dateProvider: () -> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html">Date</a> = { Date() }, prefixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }, suffixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }) : <a href="../-heap-dump-file-provider/">HeapDumpFileProvider</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -797,7 +797,7 @@
<tbody>
<tr>
<td><a href="-datetime-formatted-heap-dump-file-provider/">DatetimeFormattedHeapDumpFileProvider</a></td>
-<td>[jvm]<br>constructor(heapDumpDirectoryProvider: <a href="../-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>, dateProvider: () -> <a href="https://developer.android.com/reference/kotlin/java/util/Date.html">Date</a> = { Date() }, prefixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }, suffixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" })</td>
+<td>[jvm]<br>constructor(heapDumpDirectoryProvider: <a href="../-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>, dateProvider: () -> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html">Date</a> = { Date() }, prefixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }, suffixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" })</td>
</tr>
</tbody>
</table>
@@ -827,7 +827,7 @@
<tbody>
<tr>
<td><a href="new-heap-dump-file/">newHeapDumpFile</a></td>
-<td>[jvm]<br>open override fun <a href="new-heap-dump-file/">newHeapDumpFile</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a><br>Returns a <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a> that can be passed to a <a href="../-heap-dumper/">HeapDumper</a> to dump the heap.</td>
+<td>[jvm]<br>open override fun <a href="new-heap-dump-file/">newHeapDumpFile</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a><br>Returns a <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a> that can be passed to a <a href="../-heap-dumper/">HeapDumper</a> to dump the heap.</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-datetime-formatted-heap-dump-file-provider/new-heap-dump-file/index.html b/api/leakcanary/-datetime-formatted-heap-dump-file-provider/new-heap-dump-file/index.html
index 90ec59c..fa9b6f0 100644
--- a/api/leakcanary/-datetime-formatted-heap-dump-file-provider/new-heap-dump-file/index.html
+++ b/api/leakcanary/-datetime-formatted-heap-dump-file-provider/new-heap-dump-file/index.html
@@ -756,8 +756,8 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">DatetimeFormattedHeapDumpFileProvider</a>/<a href="./">newHeapDumpFile</a></p>
<h1 id="newheapdumpfile">newHeapDumpFile<a class="headerlink" href="#newheapdumpfile" title="Permanent link">¶</a></h1>
<p>[jvm]\
-open override fun <a href="./">newHeapDumpFile</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
-<p>Returns a <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a> that can be passed to a <a href="../../-heap-dumper/">HeapDumper</a> to dump the heap.</p>
+open override fun <a href="./">newHeapDumpFile</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
+<p>Returns a <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a> that can be passed to a <a href="../../-heap-dumper/">HeapDumper</a> to dump the heap.</p>
</article>
diff --git a/api/leakcanary/-delayed-executor/execute-with-delay/index.html b/api/leakcanary/-delayed-executor/execute-with-delay/index.html
index ad1fce6..6faa2bc 100644
--- a/api/leakcanary/-delayed-executor/execute-with-delay/index.html
+++ b/api/leakcanary/-delayed-executor/execute-with-delay/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">DelayedExecutor</a>/<a href="./">executeWithDelay</a></p>
<h1 id="executewithdelay">executeWithDelay<a class="headerlink" href="#executewithdelay" title="Permanent link">¶</a></h1>
<p>[jvm]\
-abstract fun <a href="./">executeWithDelay</a>(delayUptime: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a>, runnable: <a href="https://developer.android.com/reference/kotlin/java/lang/Runnable.html">Runnable</a>)</p>
+abstract fun <a href="./">executeWithDelay</a>(delayUptime: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a>, runnable: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html">Runnable</a>)</p>
</article>
diff --git a/api/leakcanary/-delayed-executor/index.html b/api/leakcanary/-delayed-executor/index.html
index 1610863..d9be501 100644
--- a/api/leakcanary/-delayed-executor/index.html
+++ b/api/leakcanary/-delayed-executor/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="execute-with-delay/">executeWithDelay</a></td>
-<td>[jvm]<br>abstract fun <a href="execute-with-delay/">executeWithDelay</a>(delayUptime: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a>, runnable: <a href="https://developer.android.com/reference/kotlin/java/lang/Runnable.html">Runnable</a>)</td>
+<td>[jvm]<br>abstract fun <a href="execute-with-delay/">executeWithDelay</a>(delayUptime: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a>, runnable: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html">Runnable</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/-dumping-repeating-scenario-object-growth-detector/index.html b/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/-dumping-repeating-scenario-object-growth-detector/index.html
new file mode 100644
index 0000000..08ff76c
--- /dev/null
+++ b/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/-dumping-repeating-scenario-object-growth-detector/index.html
@@ -0,0 +1,852 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/-dumping-repeating-scenario-object-growth-detector/">
+
+
+
+ <link rel="icon" href="../../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>dumping repeating scenario object growth detector - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#dumpingrepeatingscenarioobjectgrowthdetector" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ dumping repeating scenario object growth detector
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-dumping-repeating-scenario-object-growth-detector/-dumping-repeating-scenario-object-growth-detector/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">DumpingRepeatingScenarioObjectGrowthDetector</a>/<a href="./">DumpingRepeatingScenarioObjectGrowthDetector</a></p>
+<h1 id="dumpingrepeatingscenarioobjectgrowthdetector">DumpingRepeatingScenarioObjectGrowthDetector<a class="headerlink" href="#dumpingrepeatingscenarioobjectgrowthdetector" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+constructor(objectGrowthDetector: <a href="../../../shark/-object-growth-detector/">ObjectGrowthDetector</a>, heapDumpFileProvider: <a href="../../-heap-dump-file-provider/">HeapDumpFileProvider</a>, heapDumper: <a href="../../-heap-dumper/">HeapDumper</a>, heapDumpStorageStrategy: <a href="../../-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a>)</p>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../../..", "features": ["tabs"], "search": "../../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/index.html b/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/index.html
new file mode 100644
index 0000000..2646f39
--- /dev/null
+++ b/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/index.html
@@ -0,0 +1,852 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/">
+
+
+
+ <link rel="icon" href="../../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>Find repeatedly growing objects - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#findrepeatedlygrowingobjects" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ Find repeatedly growing objects
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-dumping-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">DumpingRepeatingScenarioObjectGrowthDetector</a>/<a href="./">findRepeatedlyGrowingObjects</a></p>
+<h1 id="findrepeatedlygrowingobjects">findRepeatedlyGrowingObjects<a class="headerlink" href="#findrepeatedlygrowingobjects" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+open override fun <a href="./">findRepeatedlyGrowingObjects</a>(maxHeapDumps: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, scenarioLoopsPerDump: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, roundTripScenario: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>): <a href="../../../shark/-heap-diff/">HeapDiff</a></p>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../../..", "features": ["tabs"], "search": "../../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/index.html b/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/index.html
new file mode 100644
index 0000000..23b19d1
--- /dev/null
+++ b/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/index.html
@@ -0,0 +1,924 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-dumping-repeating-scenario-object-growth-detector/">
+
+
+
+ <link rel="icon" href="../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>Index - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#dumpingrepeatingscenarioobjectgrowthdetector" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ Index
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">
+ <span class="md-nav__icon md-icon"></span>
+ Table of contents
+ </label>
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#see-also" class="md-nav__link">
+ See also
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#constructors" class="md-nav__link">
+ Constructors
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#functions" class="md-nav__link">
+ Functions
+ </a>
+
+</li>
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-dumping-repeating-scenario-object-growth-detector/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../">leakcanary-repo</a>/<a href="../">leakcanary</a>/<a href="./">DumpingRepeatingScenarioObjectGrowthDetector</a></p>
+<h1 id="dumpingrepeatingscenarioobjectgrowthdetector">DumpingRepeatingScenarioObjectGrowthDetector<a class="headerlink" href="#dumpingrepeatingscenarioobjectgrowthdetector" title="Permanent link">¶</a></h1>
+<p>class <a href="./">DumpingRepeatingScenarioObjectGrowthDetector</a>(objectGrowthDetector: <a href="../../shark/-object-growth-detector/">ObjectGrowthDetector</a>, heapDumpFileProvider: <a href="../-heap-dump-file-provider/">HeapDumpFileProvider</a>, heapDumper: <a href="../-heap-dumper/">HeapDumper</a>, heapDumpStorageStrategy: <a href="../-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a>) : <a href="../../shark/-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a></p>
+<p>A <a href="../../shark/-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a> suitable for junit based automated tests that can dump the heap.</p>
+<h4 id="see-also">See also<a class="headerlink" href="#see-also" title="Permanent link">¶</a></h4>
+<table>
+<thead>
+<tr>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="../../shark/-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/">RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects</a></td>
+</tr>
+</tbody>
+</table>
+<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
+<table>
+<thead>
+<tr>
+<th></th>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="-dumping-repeating-scenario-object-growth-detector/">DumpingRepeatingScenarioObjectGrowthDetector</a></td>
+<td>[jvm]<br>constructor(objectGrowthDetector: <a href="../../shark/-object-growth-detector/">ObjectGrowthDetector</a>, heapDumpFileProvider: <a href="../-heap-dump-file-provider/">HeapDumpFileProvider</a>, heapDumper: <a href="../-heap-dumper/">HeapDumper</a>, heapDumpStorageStrategy: <a href="../-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a>)</td>
+</tr>
+</tbody>
+</table>
+<h2 id="functions">Functions<a class="headerlink" href="#functions" title="Permanent link">¶</a></h2>
+<table>
+<thead>
+<tr>
+<th>Name</th>
+<th>Summary</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="find-repeatedly-growing-objects/">findRepeatedlyGrowingObjects</a></td>
+<td>[jvm]<br>open override fun <a href="find-repeatedly-growing-objects/">findRepeatedlyGrowingObjects</a>(maxHeapDumps: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, scenarioLoopsPerDump: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, roundTripScenario: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>): <a href="../../shark/-heap-diff/">HeapDiff</a></td>
+</tr>
+</tbody>
+</table>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../..", "features": ["tabs"], "search": "../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-event-listener/-event/-heap-dump/-heap-dump/index.html b/api/leakcanary/-event-listener/-event/-heap-dump/-heap-dump/index.html
index f34eb41..94ae2ef 100644
--- a/api/leakcanary/-event-listener/-event/-heap-dump/-heap-dump/index.html
+++ b/api/leakcanary/-event-listener/-event/-heap-dump/-heap-dump/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../../">leakcanary-repo</a>/<a href="../../../../">leakcanary</a>/<a href="../../../">EventListener</a>/<a href="../../">Event</a>/<a href="../">HeapDump</a>/<a href="./">HeapDump</a></p>
<h1 id="heapdump">HeapDump<a class="headerlink" href="#heapdump" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-constructor(uniqueId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, durationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, reason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>)</p>
+constructor(uniqueId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, durationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, reason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>)</p>
</article>
diff --git a/api/leakcanary/-event-listener/-event/-heap-dump/file/index.html b/api/leakcanary/-event-listener/-event/-heap-dump/file/index.html
index a7a11a9..01baa17 100644
--- a/api/leakcanary/-event-listener/-event/-heap-dump/file/index.html
+++ b/api/leakcanary/-event-listener/-event/-heap-dump/file/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../../">leakcanary-repo</a>/<a href="../../../../">leakcanary</a>/<a href="../../../">EventListener</a>/<a href="../../">Event</a>/<a href="../">HeapDump</a>/<a href="./">file</a></p>
<h1 id="file">file<a class="headerlink" href="#file" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-val <a href="./">file</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+val <a href="./">file</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
</article>
diff --git a/api/leakcanary/-event-listener/-event/-heap-dump/index.html b/api/leakcanary/-event-listener/-event/-heap-dump/index.html
index 269c67b..7a899df 100644
--- a/api/leakcanary/-event-listener/-event/-heap-dump/index.html
+++ b/api/leakcanary/-event-listener/-event/-heap-dump/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">EventListener</a>/<a href="../">Event</a>/<a href="./">HeapDump</a></p>
<h1 id="heapdump">HeapDump<a class="headerlink" href="#heapdump" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-class <a href="./">HeapDump</a>(val uniqueId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, val durationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val reason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="../">EventListener.Event</a></p>
+class <a href="./">HeapDump</a>(val uniqueId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, val durationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val reason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="../">EventListener.Event</a></p>
<p>Sent from the "LeakCanary-Heap-Dump" HandlerThread.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
@@ -791,7 +791,7 @@
<tbody>
<tr>
<td><a href="-heap-dump/">HeapDump</a></td>
-<td>[androidJvm]<br>constructor(uniqueId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, durationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, reason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>)</td>
+<td>[androidJvm]<br>constructor(uniqueId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, durationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, reason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>)</td>
</tr>
</tbody>
</table>
@@ -810,7 +810,7 @@
</tr>
<tr>
<td><a href="file/">file</a></td>
-<td>[androidJvm]<br>val <a href="file/">file</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[androidJvm]<br>val <a href="file/">file</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="reason/">reason</a></td>
diff --git a/api/leakcanary/-event-listener/-event/index.html b/api/leakcanary/-event-listener/-event/index.html
index 6109f6e..b9ede08 100644
--- a/api/leakcanary/-event-listener/-event/index.html
+++ b/api/leakcanary/-event-listener/-event/index.html
@@ -784,8 +784,8 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">EventListener</a>/<a href="./">Event</a></p>
<h1 id="event">Event<a class="headerlink" href="#event" title="Permanent link">¶</a></h1>
-<p>sealed class <a href="./">Event</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></p>
-<p>Note: <a href="./">Event</a> is <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a> for convenience but we currently make no guarantee that the Serialization is backward / forward compatible across LeakCanary versions, so plan accordingly. This is convenient for passing events around processes, and shouldn’t be used to store them.</p>
+<p>sealed class <a href="./">Event</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></p>
+<p>Note: <a href="./">Event</a> is <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a> for convenience but we currently make no guarantee that the Serialization is backward / forward compatible across LeakCanary versions, so plan accordingly. This is convenient for passing events around processes, and shouldn’t be used to store them.</p>
<h4 id="inheritors">Inheritors<a class="headerlink" href="#inheritors" title="Permanent link">¶</a></h4>
<table>
<thead>
@@ -834,7 +834,7 @@
</tr>
<tr>
<td><a href="-heap-dump/">HeapDump</a></td>
-<td>[androidJvm]<br>class <a href="-heap-dump/">HeapDump</a>(val uniqueId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, val durationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val reason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="./">EventListener.Event</a><br>Sent from the "LeakCanary-Heap-Dump" HandlerThread.</td>
+<td>[androidJvm]<br>class <a href="-heap-dump/">HeapDump</a>(val uniqueId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, val durationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val reason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="./">EventListener.Event</a><br>Sent from the "LeakCanary-Heap-Dump" HandlerThread.</td>
</tr>
<tr>
<td><a href="-heap-dump-failed/">HeapDumpFailed</a></td>
diff --git a/api/leakcanary/-event-listener/index.html b/api/leakcanary/-event-listener/index.html
index f948239..701024e 100644
--- a/api/leakcanary/-event-listener/index.html
+++ b/api/leakcanary/-event-listener/index.html
@@ -830,7 +830,7 @@
<tbody>
<tr>
<td><a href="-event/">Event</a></td>
-<td>[androidJvm]<br>sealed class <a href="-event/">Event</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a><br>Note: <a href="-event/">Event</a> is <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a> for convenience but we currently make no guarantee that the Serialization is backward / forward compatible across LeakCanary versions, so plan accordingly. This is convenient for passing events around processes, and shouldn’t be used to store them.</td>
+<td>[androidJvm]<br>sealed class <a href="-event/">Event</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a><br>Note: <a href="-event/">Event</a> is <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a> for convenience but we currently make no guarantee that the Serialization is backward / forward compatible across LeakCanary versions, so plan accordingly. This is convenient for passing events around processes, and shouldn’t be used to store them.</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-heap-analysis-client/-heap-analysis-client/index.html b/api/leakcanary/-heap-analysis-client/-heap-analysis-client/index.html
index b93c31a..57e2fda 100644
--- a/api/leakcanary/-heap-analysis-client/-heap-analysis-client/index.html
+++ b/api/leakcanary/-heap-analysis-client/-heap-analysis-client/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HeapAnalysisClient</a>/<a href="./">HeapAnalysisClient</a></p>
<h1 id="heapanalysisclient">HeapAnalysisClient<a class="headerlink" href="#heapanalysisclient" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-constructor(heapDumpDirectoryProvider: () -> <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, config: <a href="../../-heap-analysis-config/">HeapAnalysisConfig</a>, interceptors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-heap-analysis-interceptor/">HeapAnalysisInterceptor</a>>)</p>
+constructor(heapDumpDirectoryProvider: () -> <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, config: <a href="../../-heap-analysis-config/">HeapAnalysisConfig</a>, interceptors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-heap-analysis-interceptor/">HeapAnalysisInterceptor</a>>)</p>
</article>
diff --git a/api/leakcanary/-heap-analysis-client/index.html b/api/leakcanary/-heap-analysis-client/index.html
index 8ceb61b..8804e37 100644
--- a/api/leakcanary/-heap-analysis-client/index.html
+++ b/api/leakcanary/-heap-analysis-client/index.html
@@ -785,7 +785,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">leakcanary</a>/<a href="./">HeapAnalysisClient</a></p>
<h1 id="heapanalysisclient">HeapAnalysisClient<a class="headerlink" href="#heapanalysisclient" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-class <a href="./">HeapAnalysisClient</a>(heapDumpDirectoryProvider: () -> <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, config: <a href="../-heap-analysis-config/">HeapAnalysisConfig</a>, interceptors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-heap-analysis-interceptor/">HeapAnalysisInterceptor</a>>)</p>
+class <a href="./">HeapAnalysisClient</a>(heapDumpDirectoryProvider: () -> <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, config: <a href="../-heap-analysis-config/">HeapAnalysisConfig</a>, interceptors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-heap-analysis-interceptor/">HeapAnalysisInterceptor</a>>)</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -797,7 +797,7 @@
<tbody>
<tr>
<td><a href="-heap-analysis-client/">HeapAnalysisClient</a></td>
-<td>[androidJvm]<br>constructor(heapDumpDirectoryProvider: () -> <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, config: <a href="../-heap-analysis-config/">HeapAnalysisConfig</a>, interceptors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-heap-analysis-interceptor/">HeapAnalysisInterceptor</a>>)</td>
+<td>[androidJvm]<br>constructor(heapDumpDirectoryProvider: () -> <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, config: <a href="../-heap-analysis-config/">HeapAnalysisConfig</a>, interceptors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-heap-analysis-interceptor/">HeapAnalysisInterceptor</a>>)</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-heap-dump-directory-provider/heap-dump-directory/index.html b/api/leakcanary/-heap-dump-directory-provider/heap-dump-directory/index.html
index 8bb5295..cc3aba0 100644
--- a/api/leakcanary/-heap-dump-directory-provider/heap-dump-directory/index.html
+++ b/api/leakcanary/-heap-dump-directory-provider/heap-dump-directory/index.html
@@ -756,8 +756,8 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HeapDumpDirectoryProvider</a>/<a href="./">heapDumpDirectory</a></p>
<h1 id="heapdumpdirectory">heapDumpDirectory<a class="headerlink" href="#heapdumpdirectory" title="Permanent link">¶</a></h1>
<p>[jvm]\
-abstract fun <a href="./">heapDumpDirectory</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
-<p>Expected to be only once per <a href="../../-heap-dump-file-provider/">HeapDumpFileProvider</a> implementation instance.</p>
+abstract fun <a href="./">heapDumpDirectory</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
+<p>Expected to be called only once per <a href="../../-heap-dump-file-provider/">HeapDumpFileProvider</a> implementation instance.</p>
</article>
diff --git a/api/leakcanary/-heap-dump-directory-provider/index.html b/api/leakcanary/-heap-dump-directory-provider/index.html
index b13bf95..71e0e0d 100644
--- a/api/leakcanary/-heap-dump-directory-provider/index.html
+++ b/api/leakcanary/-heap-dump-directory-provider/index.html
@@ -782,7 +782,7 @@
<tbody>
<tr>
<td><a href="heap-dump-directory/">heapDumpDirectory</a></td>
-<td>[jvm]<br>abstract fun <a href="heap-dump-directory/">heapDumpDirectory</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a><br>Expected to be only once per <a href="../-heap-dump-file-provider/">HeapDumpFileProvider</a> implementation instance.</td>
+<td>[jvm]<br>abstract fun <a href="heap-dump-directory/">heapDumpDirectory</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a><br>Expected to be called only once per <a href="../-heap-dump-file-provider/">HeapDumpFileProvider</a> implementation instance.</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-heap-dump-file-provider/index.html b/api/leakcanary/-heap-dump-file-provider/index.html
index 55dce56..b9cd679 100644
--- a/api/leakcanary/-heap-dump-file-provider/index.html
+++ b/api/leakcanary/-heap-dump-file-provider/index.html
@@ -802,7 +802,7 @@
<tbody>
<tr>
<td><a href="new-heap-dump-file/">newHeapDumpFile</a></td>
-<td>[jvm]<br>abstract fun <a href="new-heap-dump-file/">newHeapDumpFile</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a><br>Returns a <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a> that can be passed to a <a href="../-heap-dumper/">HeapDumper</a> to dump the heap.</td>
+<td>[jvm]<br>abstract fun <a href="new-heap-dump-file/">newHeapDumpFile</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a><br>Returns a <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a> that can be passed to a <a href="../-heap-dumper/">HeapDumper</a> to dump the heap.</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-heap-dump-file-provider/new-heap-dump-file/index.html b/api/leakcanary/-heap-dump-file-provider/new-heap-dump-file/index.html
index c24ec68..c225235 100644
--- a/api/leakcanary/-heap-dump-file-provider/new-heap-dump-file/index.html
+++ b/api/leakcanary/-heap-dump-file-provider/new-heap-dump-file/index.html
@@ -756,8 +756,8 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HeapDumpFileProvider</a>/<a href="./">newHeapDumpFile</a></p>
<h1 id="newheapdumpfile">newHeapDumpFile<a class="headerlink" href="#newheapdumpfile" title="Permanent link">¶</a></h1>
<p>[jvm]\
-abstract fun <a href="./">newHeapDumpFile</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
-<p>Returns a <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a> that can be passed to a <a href="../../-heap-dumper/">HeapDumper</a> to dump the heap.</p>
+abstract fun <a href="./">newHeapDumpFile</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
+<p>Returns a <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a> that can be passed to a <a href="../../-heap-dumper/">HeapDumper</a> to dump the heap.</p>
</article>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/-delete-on-heap-dump-close/index.html b/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/-delete-on-heap-dump-close/index.html
index ac41027..9c29867 100644
--- a/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/-delete-on-heap-dump-close/index.html
+++ b/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/-delete-on-heap-dump-close/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">HeapDumpStorageStrategy</a>/<a href="../">DeleteOnHeapDumpClose</a>/<a href="./">DeleteOnHeapDumpClose</a></p>
<h1 id="deleteonheapdumpclose">DeleteOnHeapDumpClose<a class="headerlink" href="#deleteonheapdumpclose" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</p>
+constructor(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</p>
</article>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/index.html b/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/index.html
index 8c26353..febecfc 100644
--- a/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/index.html
+++ b/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HeapDumpStorageStrategy</a>/<a href="./">DeleteOnHeapDumpClose</a></p>
<h1 id="deleteonheapdumpclose">DeleteOnHeapDumpClose<a class="headerlink" href="#deleteonheapdumpclose" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">DeleteOnHeapDumpClose</a>(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="../">HeapDumpStorageStrategy</a></p>
+class <a href="./">DeleteOnHeapDumpClose</a>(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="../">HeapDumpStorageStrategy</a></p>
<p>Deletes heap dumps as soon as we’re done traversing them. This is the most disk space efficient strategy.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
@@ -791,7 +791,7 @@
<tbody>
<tr>
<td><a href="-delete-on-heap-dump-close/">DeleteOnHeapDumpClose</a></td>
-<td>[jvm]<br>constructor(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</td>
+<td>[jvm]<br>constructor(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</td>
</tr>
</tbody>
</table>
@@ -805,12 +805,16 @@
</thead>
<tbody>
<tr>
-<td><a href="on-heap-dump-closed/">onHeapDumpClosed</a></td>
-<td>[jvm]<br>open override fun <a href="on-heap-dump-closed/">onHeapDumpClosed</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td><a href="../on-heap-diff-result/">onHeapDiffResult</a></td>
+<td>[jvm]<br>open fun <a href="../on-heap-diff-result/">onHeapDiffResult</a>(result: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-result/index.html">Result</a><<a href="../../../shark/-heap-diff/">HeapDiff</a>>)</td>
</tr>
<tr>
-<td><a href="../on-object-growth-detection-complete/">onObjectGrowthDetectionComplete</a></td>
-<td>[jvm]<br>open override fun <a href="../on-object-growth-detection-complete/">onObjectGrowthDetectionComplete</a>(result: <a href="../../../shark/-heap-diff/">HeapDiff</a>)</td>
+<td><a href="on-heap-dump-closed/">onHeapDumpClosed</a></td>
+<td>[jvm]<br>open override fun <a href="on-heap-dump-closed/">onHeapDumpClosed</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
+</tr>
+<tr>
+<td><a href="../on-heap-dumped/">onHeapDumped</a></td>
+<td>[jvm]<br>open fun <a href="../on-heap-dumped/">onHeapDumped</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/on-heap-dump-closed/index.html b/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/on-heap-dump-closed/index.html
index ffd2bfa..5b2c640 100644
--- a/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/on-heap-dump-closed/index.html
+++ b/api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/on-heap-dump-closed/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">HeapDumpStorageStrategy</a>/<a href="../">DeleteOnHeapDumpClose</a>/<a href="./">onHeapDumpClosed</a></p>
<h1 id="onheapdumpclosed">onHeapDumpClosed<a class="headerlink" href="#onheapdumpclosed" title="Permanent link">¶</a></h1>
<p>[jvm]\
-open override fun <a href="./">onHeapDumpClosed</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+open override fun <a href="./">onHeapDumpClosed</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
</article>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/-keep-heap-dumps-on-objects-growing/index.html b/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/-keep-heap-dumps-on-objects-growing/index.html
index 70f12f0..3d8ec0c 100644
--- a/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/-keep-heap-dumps-on-objects-growing/index.html
+++ b/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/-keep-heap-dumps-on-objects-growing/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">HeapDumpStorageStrategy</a>/<a href="../">KeepHeapDumpsOnObjectsGrowing</a>/<a href="./">KeepHeapDumpsOnObjectsGrowing</a></p>
<h1 id="keepheapdumpsonobjectsgrowing">KeepHeapDumpsOnObjectsGrowing<a class="headerlink" href="#keepheapdumpsonobjectsgrowing" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</p>
+constructor(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</p>
</article>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/index.html b/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/index.html
index eb7e77f..c1f88c9 100644
--- a/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/index.html
+++ b/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HeapDumpStorageStrategy</a>/<a href="./">KeepHeapDumpsOnObjectsGrowing</a></p>
<h1 id="keepheapdumpsonobjectsgrowing">KeepHeapDumpsOnObjectsGrowing<a class="headerlink" href="#keepheapdumpsonobjectsgrowing" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">KeepHeapDumpsOnObjectsGrowing</a>(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="../">HeapDumpStorageStrategy</a></p>
+class <a href="./">KeepHeapDumpsOnObjectsGrowing</a>(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="../">HeapDumpStorageStrategy</a></p>
<p>Keeps the heap dumps until we’re done diffing, then delete them only if there are no growing objects. This is useful if you intend to open up the heap dumps directly or re run the analysis on failure.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
@@ -791,7 +791,7 @@
<tbody>
<tr>
<td><a href="-keep-heap-dumps-on-objects-growing/">KeepHeapDumpsOnObjectsGrowing</a></td>
-<td>[jvm]<br>constructor(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</td>
+<td>[jvm]<br>constructor(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</td>
</tr>
</tbody>
</table>
@@ -805,12 +805,16 @@
</thead>
<tbody>
<tr>
-<td><a href="on-heap-dump-closed/">onHeapDumpClosed</a></td>
-<td>[jvm]<br>open override fun <a href="on-heap-dump-closed/">onHeapDumpClosed</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td><a href="on-heap-diff-result/">onHeapDiffResult</a></td>
+<td>[jvm]<br>open override fun <a href="on-heap-diff-result/">onHeapDiffResult</a>(result: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-result/index.html">Result</a><<a href="../../../shark/-heap-diff/">HeapDiff</a>>)</td>
</tr>
<tr>
-<td><a href="on-object-growth-detection-complete/">onObjectGrowthDetectionComplete</a></td>
-<td>[jvm]<br>open override fun <a href="on-object-growth-detection-complete/">onObjectGrowthDetectionComplete</a>(result: <a href="../../../shark/-heap-diff/">HeapDiff</a>)</td>
+<td><a href="../on-heap-dump-closed/">onHeapDumpClosed</a></td>
+<td>[jvm]<br>open fun <a href="../on-heap-dump-closed/">onHeapDumpClosed</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
+</tr>
+<tr>
+<td><a href="on-heap-dumped/">onHeapDumped</a></td>
+<td>[jvm]<br>open override fun <a href="on-heap-dumped/">onHeapDumped</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-diff-result/index.html b/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-diff-result/index.html
new file mode 100644
index 0000000..1b0222e
--- /dev/null
+++ b/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-diff-result/index.html
@@ -0,0 +1,852 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-diff-result/">
+
+
+
+ <link rel="icon" href="../../../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>On heap diff result - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#onheapdiffresult" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ On heap diff result
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-diff-result/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">HeapDumpStorageStrategy</a>/<a href="../">KeepHeapDumpsOnObjectsGrowing</a>/<a href="./">onHeapDiffResult</a></p>
+<h1 id="onheapdiffresult">onHeapDiffResult<a class="headerlink" href="#onheapdiffresult" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+open override fun <a href="./">onHeapDiffResult</a>(result: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-result/index.html">Result</a><<a href="../../../../shark/-heap-diff/">HeapDiff</a>>)</p>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../../../..", "features": ["tabs"], "search": "../../../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dumped/index.html b/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dumped/index.html
new file mode 100644
index 0000000..ff7c484
--- /dev/null
+++ b/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dumped/index.html
@@ -0,0 +1,852 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dumped/">
+
+
+
+ <link rel="icon" href="../../../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>On heap dumped - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#onheapdumped" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ On heap dumped
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dumped/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">HeapDumpStorageStrategy</a>/<a href="../">KeepHeapDumpsOnObjectsGrowing</a>/<a href="./">onHeapDumped</a></p>
+<h1 id="onheapdumped">onHeapDumped<a class="headerlink" href="#onheapdumped" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+open override fun <a href="./">onHeapDumped</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../../../..", "features": ["tabs"], "search": "../../../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/index.html b/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/index.html
index ffc51d4..bd22864 100644
--- a/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/index.html
+++ b/api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/index.html
@@ -783,12 +783,16 @@
</thead>
<tbody>
<tr>
-<td><a href="../on-heap-dump-closed/">onHeapDumpClosed</a></td>
-<td>[jvm]<br>open override fun <a href="../on-heap-dump-closed/">onHeapDumpClosed</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td><a href="../on-heap-diff-result/">onHeapDiffResult</a></td>
+<td>[jvm]<br>open fun <a href="../on-heap-diff-result/">onHeapDiffResult</a>(result: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-result/index.html">Result</a><<a href="../../../shark/-heap-diff/">HeapDiff</a>>)</td>
</tr>
<tr>
-<td><a href="../on-object-growth-detection-complete/">onObjectGrowthDetectionComplete</a></td>
-<td>[jvm]<br>open override fun <a href="../on-object-growth-detection-complete/">onObjectGrowthDetectionComplete</a>(result: <a href="../../../shark/-heap-diff/">HeapDiff</a>)</td>
+<td><a href="../on-heap-dump-closed/">onHeapDumpClosed</a></td>
+<td>[jvm]<br>open fun <a href="../on-heap-dump-closed/">onHeapDumpClosed</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
+</tr>
+<tr>
+<td><a href="../on-heap-dumped/">onHeapDumped</a></td>
+<td>[jvm]<br>open fun <a href="../on-heap-dumped/">onHeapDumped</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/-keep-zipped-heap-dumps-on-objects-growing/index.html b/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/-keep-zipped-heap-dumps-on-objects-growing/index.html
index b199fbb..6824a47 100644
--- a/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/-keep-zipped-heap-dumps-on-objects-growing/index.html
+++ b/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/-keep-zipped-heap-dumps-on-objects-growing/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">HeapDumpStorageStrategy</a>/<a href="../">KeepZippedHeapDumpsOnObjectsGrowing</a>/<a href="./">KeepZippedHeapDumpsOnObjectsGrowing</a></p>
<h1 id="keepzippedheapdumpsonobjectsgrowing">KeepZippedHeapDumpsOnObjectsGrowing<a class="headerlink" href="#keepzippedheapdumpsonobjectsgrowing" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</p>
+constructor(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</p>
</article>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/index.html b/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/index.html
index 76868a0..3013cb3 100644
--- a/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/index.html
+++ b/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HeapDumpStorageStrategy</a>/<a href="./">KeepZippedHeapDumpsOnObjectsGrowing</a></p>
<h1 id="keepzippedheapdumpsonobjectsgrowing">KeepZippedHeapDumpsOnObjectsGrowing<a class="headerlink" href="#keepzippedheapdumpsonobjectsgrowing" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">KeepZippedHeapDumpsOnObjectsGrowing</a>(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="../">HeapDumpStorageStrategy</a></p>
+class <a href="./">KeepZippedHeapDumpsOnObjectsGrowing</a>(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="../">HeapDumpStorageStrategy</a></p>
<p>Keeps the heap dumps until we’re done diffing, then on completion creates a zip for each heap dump if there are growing object, and delete all the source heap dumps. This is useful if you intend to upload the heap dumps on failure in CI and you want to keep disk space, network usage and cloud storage low. Zipped heap dumps are typically 4x smaller so this is worth it, although the trade off is that zipping can add a few seconds per heap dump to the runtime duration of a test.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
@@ -791,7 +791,7 @@
<tbody>
<tr>
<td><a href="-keep-zipped-heap-dumps-on-objects-growing/">KeepZippedHeapDumpsOnObjectsGrowing</a></td>
-<td>[jvm]<br>constructor(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</td>
+<td>[jvm]<br>constructor(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() })</td>
</tr>
</tbody>
</table>
@@ -805,12 +805,16 @@
</thead>
<tbody>
<tr>
-<td><a href="on-heap-dump-closed/">onHeapDumpClosed</a></td>
-<td>[jvm]<br>open override fun <a href="on-heap-dump-closed/">onHeapDumpClosed</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td><a href="on-heap-diff-result/">onHeapDiffResult</a></td>
+<td>[jvm]<br>open override fun <a href="on-heap-diff-result/">onHeapDiffResult</a>(result: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-result/index.html">Result</a><<a href="../../../shark/-heap-diff/">HeapDiff</a>>)</td>
</tr>
<tr>
-<td><a href="on-object-growth-detection-complete/">onObjectGrowthDetectionComplete</a></td>
-<td>[jvm]<br>open override fun <a href="on-object-growth-detection-complete/">onObjectGrowthDetectionComplete</a>(result: <a href="../../../shark/-heap-diff/">HeapDiff</a>)</td>
+<td><a href="../on-heap-dump-closed/">onHeapDumpClosed</a></td>
+<td>[jvm]<br>open fun <a href="../on-heap-dump-closed/">onHeapDumpClosed</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
+</tr>
+<tr>
+<td><a href="on-heap-dumped/">onHeapDumped</a></td>
+<td>[jvm]<br>open override fun <a href="on-heap-dumped/">onHeapDumped</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-diff-result/index.html b/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-diff-result/index.html
new file mode 100644
index 0000000..7d8c61d
--- /dev/null
+++ b/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-diff-result/index.html
@@ -0,0 +1,852 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-diff-result/">
+
+
+
+ <link rel="icon" href="../../../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>On heap diff result - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#onheapdiffresult" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ On heap diff result
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-diff-result/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">HeapDumpStorageStrategy</a>/<a href="../">KeepZippedHeapDumpsOnObjectsGrowing</a>/<a href="./">onHeapDiffResult</a></p>
+<h1 id="onheapdiffresult">onHeapDiffResult<a class="headerlink" href="#onheapdiffresult" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+open override fun <a href="./">onHeapDiffResult</a>(result: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-result/index.html">Result</a><<a href="../../../../shark/-heap-diff/">HeapDiff</a>>)</p>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../../../..", "features": ["tabs"], "search": "../../../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dumped/index.html b/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dumped/index.html
new file mode 100644
index 0000000..a18c6ad
--- /dev/null
+++ b/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dumped/index.html
@@ -0,0 +1,852 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dumped/">
+
+
+
+ <link rel="icon" href="../../../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>On heap dumped - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#onheapdumped" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ On heap dumped
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dumped/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">HeapDumpStorageStrategy</a>/<a href="../">KeepZippedHeapDumpsOnObjectsGrowing</a>/<a href="./">onHeapDumped</a></p>
+<h1 id="onheapdumped">onHeapDumped<a class="headerlink" href="#onheapdumped" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+open override fun <a href="./">onHeapDumped</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../../../..", "features": ["tabs"], "search": "../../../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-heap-dump-storage-strategy/index.html b/api/leakcanary/-heap-dump-storage-strategy/index.html
index bfa2e4f..a55fbc5 100644
--- a/api/leakcanary/-heap-dump-storage-strategy/index.html
+++ b/api/leakcanary/-heap-dump-storage-strategy/index.html
@@ -784,7 +784,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">leakcanary</a>/<a href="./">HeapDumpStorageStrategy</a></p>
<h1 id="heapdumpstoragestrategy">HeapDumpStorageStrategy<a class="headerlink" href="#heapdumpstoragestrategy" title="Permanent link">¶</a></h1>
-<p>interface <a href="./">HeapDumpStorageStrategy</a> : <a href="../-dumping-heap-graph-provider/-heap-dump-closed-listener/">DumpingHeapGraphProvider.HeapDumpClosedListener</a>, <a href="../../shark/-repeating-heap-graph-object-growth-detector/-completion-listener/">RepeatingHeapGraphObjectGrowthDetector.CompletionListener</a></p>
+<p>interface <a href="./">HeapDumpStorageStrategy</a></p>
<h4 id="inheritors">Inheritors<a class="headerlink" href="#inheritors" title="Permanent link">¶</a></h4>
<table>
<thead>
@@ -818,7 +818,7 @@
<tbody>
<tr>
<td><a href="-delete-on-heap-dump-close/">DeleteOnHeapDumpClose</a></td>
-<td>[jvm]<br>class <a href="-delete-on-heap-dump-close/">DeleteOnHeapDumpClose</a>(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="./">HeapDumpStorageStrategy</a><br>Deletes heap dumps as soon as we’re done traversing them. This is the most disk space efficient strategy.</td>
+<td>[jvm]<br>class <a href="-delete-on-heap-dump-close/">DeleteOnHeapDumpClose</a>(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="./">HeapDumpStorageStrategy</a><br>Deletes heap dumps as soon as we’re done traversing them. This is the most disk space efficient strategy.</td>
</tr>
<tr>
<td><a href="-keep-heap-dumps/">KeepHeapDumps</a></td>
@@ -826,11 +826,11 @@
</tr>
<tr>
<td><a href="-keep-heap-dumps-on-objects-growing/">KeepHeapDumpsOnObjectsGrowing</a></td>
-<td>[jvm]<br>class <a href="-keep-heap-dumps-on-objects-growing/">KeepHeapDumpsOnObjectsGrowing</a>(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="./">HeapDumpStorageStrategy</a><br>Keeps the heap dumps until we’re done diffing, then delete them only if there are no growing objects. This is useful if you intend to open up the heap dumps directly or re run the analysis on failure.</td>
+<td>[jvm]<br>class <a href="-keep-heap-dumps-on-objects-growing/">KeepHeapDumpsOnObjectsGrowing</a>(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="./">HeapDumpStorageStrategy</a><br>Keeps the heap dumps until we’re done diffing, then delete them only if there are no growing objects. This is useful if you intend to open up the heap dumps directly or re run the analysis on failure.</td>
</tr>
<tr>
<td><a href="-keep-zipped-heap-dumps-on-objects-growing/">KeepZippedHeapDumpsOnObjectsGrowing</a></td>
-<td>[jvm]<br>class <a href="-keep-zipped-heap-dumps-on-objects-growing/">KeepZippedHeapDumpsOnObjectsGrowing</a>(deleteFile: (<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="./">HeapDumpStorageStrategy</a><br>Keeps the heap dumps until we’re done diffing, then on completion creates a zip for each heap dump if there are growing object, and delete all the source heap dumps. This is useful if you intend to upload the heap dumps on failure in CI and you want to keep disk space, network usage and cloud storage low. Zipped heap dumps are typically 4x smaller so this is worth it, although the trade off is that zipping can add a few seconds per heap dump to the runtime duration of a test.</td>
+<td>[jvm]<br>class <a href="-keep-zipped-heap-dumps-on-objects-growing/">KeepZippedHeapDumpsOnObjectsGrowing</a>(deleteFile: (<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { it.delete() }) : <a href="./">HeapDumpStorageStrategy</a><br>Keeps the heap dumps until we’re done diffing, then on completion creates a zip for each heap dump if there are growing object, and delete all the source heap dumps. This is useful if you intend to upload the heap dumps on failure in CI and you want to keep disk space, network usage and cloud storage low. Zipped heap dumps are typically 4x smaller so this is worth it, although the trade off is that zipping can add a few seconds per heap dump to the runtime duration of a test.</td>
</tr>
</tbody>
</table>
@@ -844,12 +844,16 @@
</thead>
<tbody>
<tr>
-<td><a href="on-heap-dump-closed/">onHeapDumpClosed</a></td>
-<td>[jvm]<br>open override fun <a href="on-heap-dump-closed/">onHeapDumpClosed</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td><a href="on-heap-diff-result/">onHeapDiffResult</a></td>
+<td>[jvm]<br>open fun <a href="on-heap-diff-result/">onHeapDiffResult</a>(result: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-result/index.html">Result</a><<a href="../../shark/-heap-diff/">HeapDiff</a>>)</td>
</tr>
<tr>
-<td><a href="on-object-growth-detection-complete/">onObjectGrowthDetectionComplete</a></td>
-<td>[jvm]<br>open override fun <a href="on-object-growth-detection-complete/">onObjectGrowthDetectionComplete</a>(result: <a href="../../shark/-heap-diff/">HeapDiff</a>)</td>
+<td><a href="on-heap-dump-closed/">onHeapDumpClosed</a></td>
+<td>[jvm]<br>open fun <a href="on-heap-dump-closed/">onHeapDumpClosed</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
+</tr>
+<tr>
+<td><a href="on-heap-dumped/">onHeapDumped</a></td>
+<td>[jvm]<br>open fun <a href="on-heap-dumped/">onHeapDumped</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/on-heap-diff-result/index.html b/api/leakcanary/-heap-dump-storage-strategy/on-heap-diff-result/index.html
new file mode 100644
index 0000000..52609e3
--- /dev/null
+++ b/api/leakcanary/-heap-dump-storage-strategy/on-heap-diff-result/index.html
@@ -0,0 +1,852 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-heap-dump-storage-strategy/on-heap-diff-result/">
+
+
+
+ <link rel="icon" href="../../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>On heap diff result - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#onheapdiffresult" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ On heap diff result
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-heap-dump-storage-strategy/on-heap-diff-result/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HeapDumpStorageStrategy</a>/<a href="./">onHeapDiffResult</a></p>
+<h1 id="onheapdiffresult">onHeapDiffResult<a class="headerlink" href="#onheapdiffresult" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+open fun <a href="./">onHeapDiffResult</a>(result: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-result/index.html">Result</a><<a href="../../../shark/-heap-diff/">HeapDiff</a>>)</p>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../../..", "features": ["tabs"], "search": "../../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-heap-dump-storage-strategy/on-heap-dump-closed/index.html b/api/leakcanary/-heap-dump-storage-strategy/on-heap-dump-closed/index.html
index c727b94..f74e047 100644
--- a/api/leakcanary/-heap-dump-storage-strategy/on-heap-dump-closed/index.html
+++ b/api/leakcanary/-heap-dump-storage-strategy/on-heap-dump-closed/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HeapDumpStorageStrategy</a>/<a href="./">onHeapDumpClosed</a></p>
<h1 id="onheapdumpclosed">onHeapDumpClosed<a class="headerlink" href="#onheapdumpclosed" title="Permanent link">¶</a></h1>
<p>[jvm]\
-open override fun <a href="./">onHeapDumpClosed</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+open fun <a href="./">onHeapDumpClosed</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
</article>
diff --git a/api/leakcanary/-heap-dump-storage-strategy/on-heap-dumped/index.html b/api/leakcanary/-heap-dump-storage-strategy/on-heap-dumped/index.html
new file mode 100644
index 0000000..a63d369
--- /dev/null
+++ b/api/leakcanary/-heap-dump-storage-strategy/on-heap-dumped/index.html
@@ -0,0 +1,852 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-heap-dump-storage-strategy/on-heap-dumped/">
+
+
+
+ <link rel="icon" href="../../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>On heap dumped - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#onheapdumped" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ On heap dumped
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-heap-dump-storage-strategy/on-heap-dumped/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HeapDumpStorageStrategy</a>/<a href="./">onHeapDumped</a></p>
+<h1 id="onheapdumped">onHeapDumped<a class="headerlink" href="#onheapdumped" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+open fun <a href="./">onHeapDumped</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../../..", "features": ["tabs"], "search": "../../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-heap-dumper/dump-heap/index.html b/api/leakcanary/-heap-dumper/dump-heap/index.html
index cb30a8b..3670d3f 100644
--- a/api/leakcanary/-heap-dumper/dump-heap/index.html
+++ b/api/leakcanary/-heap-dumper/dump-heap/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HeapDumper</a>/<a href="./">dumpHeap</a></p>
<h1 id="dumpheap">dumpHeap<a class="headerlink" href="#dumpheap" title="Permanent link">¶</a></h1>
<p>[jvm]\
-abstract fun <a href="./">dumpHeap</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+abstract fun <a href="./">dumpHeap</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
<p>Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed.</p>
<p>Implementations can throw a runtime exception if heap dumping failed.</p>
diff --git a/api/leakcanary/-heap-dumper/index.html b/api/leakcanary/-heap-dumper/index.html
index e9cd174..70cb212 100644
--- a/api/leakcanary/-heap-dumper/index.html
+++ b/api/leakcanary/-heap-dumper/index.html
@@ -824,7 +824,7 @@
<tbody>
<tr>
<td><a href="dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>abstract fun <a href="dump-heap/">dumpHeap</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)<br>Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed.</td>
+<td>[jvm]<br>abstract fun <a href="dump-heap/">dumpHeap</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)<br>Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed.</td>
</tr>
<tr>
<td><a href="../with-detector-warmup/">withDetectorWarmup</a></td>
diff --git a/api/leakcanary/-hot-spot-heap-dumper/dump-heap/index.html b/api/leakcanary/-hot-spot-heap-dumper/dump-heap/index.html
index 0d964a9..2c4c118 100644
--- a/api/leakcanary/-hot-spot-heap-dumper/dump-heap/index.html
+++ b/api/leakcanary/-hot-spot-heap-dumper/dump-heap/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">HotSpotHeapDumper</a>/<a href="./">dumpHeap</a></p>
<h1 id="dumpheap">dumpHeap<a class="headerlink" href="#dumpheap" title="Permanent link">¶</a></h1>
<p>[jvm]\
-open override fun <a href="./">dumpHeap</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+open override fun <a href="./">dumpHeap</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
</article>
diff --git a/api/leakcanary/-hot-spot-heap-dumper/index.html b/api/leakcanary/-hot-spot-heap-dumper/index.html
index c17eddd..af9df32 100644
--- a/api/leakcanary/-hot-spot-heap-dumper/index.html
+++ b/api/leakcanary/-hot-spot-heap-dumper/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>open override fun <a href="dump-heap/">dumpHeap</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td>[jvm]<br>open override fun <a href="dump-heap/">dumpHeap</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
<tr>
<td><a href="../with-detector-warmup/">withDetectorWarmup</a></td>
diff --git a/api/leakcanary/-job-context/-job-context/index.html b/api/leakcanary/-job-context/-job-context/index.html
index fff55dd..8cdda61 100644
--- a/api/leakcanary/-job-context/-job-context/index.html
+++ b/api/leakcanary/-job-context/-job-context/index.html
@@ -757,7 +757,7 @@
<h1 id="jobcontext">JobContext<a class="headerlink" href="#jobcontext" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
constructor(starter: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html">KClass</a><*>)</p>
-<p>constructor(starter: <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html">Class</a><*>? = null)</p>
+<p>constructor(starter: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html">Class</a><*>? = null)</p>
</article>
diff --git a/api/leakcanary/-job-context/index.html b/api/leakcanary/-job-context/index.html
index 44808fa..062e119 100644
--- a/api/leakcanary/-job-context/index.html
+++ b/api/leakcanary/-job-context/index.html
@@ -785,7 +785,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">leakcanary</a>/<a href="./">JobContext</a></p>
<h1 id="jobcontext">JobContext<a class="headerlink" href="#jobcontext" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-class <a href="./">JobContext</a>(val starter: <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html">Class</a><*>? = null)</p>
+class <a href="./">JobContext</a>(val starter: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html">Class</a><*>? = null)</p>
<p>In memory store that can be used to store objects in a given <a href="../-heap-analysis-job/">HeapAnalysisJob</a> instance. This is a simple <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-map/index.html">MutableMap</a> of <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> to <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, but with unsafe generics access.</p>
<p>By convention, <a href="starter/">starter</a> should be the class that triggered the start of the job.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
@@ -799,7 +799,7 @@
<tbody>
<tr>
<td><a href="-job-context/">JobContext</a></td>
-<td>[androidJvm]<br>constructor(starter: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html">KClass</a><<em>>)constructor(starter: <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html">Class</a><</em>>? = null)</td>
+<td>[androidJvm]<br>constructor(starter: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html">KClass</a><<em>>)constructor(starter: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html">Class</a><</em>>? = null)</td>
</tr>
</tbody>
</table>
@@ -845,7 +845,7 @@
<tbody>
<tr>
<td><a href="starter/">starter</a></td>
-<td>[androidJvm]<br>val <a href="starter/">starter</a>: <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html">Class</a><*>? = null</td>
+<td>[androidJvm]<br>val <a href="starter/">starter</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html">Class</a><*>? = null</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-job-context/starter/index.html b/api/leakcanary/-job-context/starter/index.html
index 8a9e5a2..2476f6e 100644
--- a/api/leakcanary/-job-context/starter/index.html
+++ b/api/leakcanary/-job-context/starter/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">JobContext</a>/<a href="./">starter</a></p>
<h1 id="starter">starter<a class="headerlink" href="#starter" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-val <a href="./">starter</a>: <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html">Class</a><*>? = null</p>
+val <a href="./">starter</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html">Class</a><*>? = null</p>
</article>
diff --git a/api/leakcanary/-keyed-weak-reference/-keyed-weak-reference/index.html b/api/leakcanary/-keyed-weak-reference/-keyed-weak-reference/index.html
index 96adfdb..bd879bb 100644
--- a/api/leakcanary/-keyed-weak-reference/-keyed-weak-reference/index.html
+++ b/api/leakcanary/-keyed-weak-reference/-keyed-weak-reference/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">KeyedWeakReference</a>/<a href="./">KeyedWeakReference</a></p>
<h1 id="keyedweakreference">KeyedWeakReference<a class="headerlink" href="#keyedweakreference" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(referent: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, key: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, description: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, watchUptimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, referenceQueue: <a href="https://developer.android.com/reference/kotlin/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>>)</p>
+constructor(referent: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, key: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, description: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, watchUptimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, referenceQueue: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>>)</p>
</article>
diff --git a/api/leakcanary/-keyed-weak-reference/get-and-leak-referent/index.html b/api/leakcanary/-keyed-weak-reference/get-and-leak-referent/index.html
index d672ef2..fd23e24 100644
--- a/api/leakcanary/-keyed-weak-reference/get-and-leak-referent/index.html
+++ b/api/leakcanary/-keyed-weak-reference/get-and-leak-referent/index.html
@@ -757,7 +757,7 @@
<h1 id="getandleakreferent">getAndLeakReferent<a class="headerlink" href="#getandleakreferent" title="Permanent link">¶</a></h1>
<p>[jvm]\
fun <a href="./">getAndLeakReferent</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>?</p>
-<p>Same as <a href="https://developer.android.com/reference/kotlin/java/lang/ref/WeakReference.html#get">WeakReference.get</a> but does not trigger an intentional crash.</p>
+<p>Same as <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/WeakReference.html#get--">WeakReference.get</a> but does not trigger an intentional crash.</p>
<p>Calling this method will end up creating local references to the objects, preventing them from becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>
diff --git a/api/leakcanary/-keyed-weak-reference/index.html b/api/leakcanary/-keyed-weak-reference/index.html
index bc9a60a..b085d2a 100644
--- a/api/leakcanary/-keyed-weak-reference/index.html
+++ b/api/leakcanary/-keyed-weak-reference/index.html
@@ -792,8 +792,8 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">leakcanary</a>/<a href="./">KeyedWeakReference</a></p>
<h1 id="keyedweakreference">KeyedWeakReference<a class="headerlink" href="#keyedweakreference" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">KeyedWeakReference</a>(referent: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, val key: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val description: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val watchUptimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, referenceQueue: <a href="https://developer.android.com/reference/kotlin/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>>) : <a href="https://developer.android.com/reference/kotlin/java/lang/ref/WeakReference.html">WeakReference</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> </p>
-<p>A weak reference used by <a href="../-reference-queue-retained-object-tracker/">ReferenceQueueRetainedObjectTracker</a> to determine which objects become weakly reachable and which don’t. <a href="../-reference-queue-retained-object-tracker/">ReferenceQueueRetainedObjectTracker</a> uses <a href="key/">key</a> to keep track of <a href="./">KeyedWeakReference</a> instances that haven’t made it into the associated <a href="https://developer.android.com/reference/kotlin/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a> yet.</p>
+class <a href="./">KeyedWeakReference</a>(referent: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, val key: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val description: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val watchUptimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, referenceQueue: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/WeakReference.html">WeakReference</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> </p>
+<p>A weak reference used by <a href="../-reference-queue-retained-object-tracker/">ReferenceQueueRetainedObjectTracker</a> to determine which objects become weakly reachable and which don’t. <a href="../-reference-queue-retained-object-tracker/">ReferenceQueueRetainedObjectTracker</a> uses <a href="key/">key</a> to keep track of <a href="./">KeyedWeakReference</a> instances that haven’t made it into the associated <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a> yet.</p>
<p><a href="-companion/heap-dump-uptime-millis/">heapDumpUptimeMillis</a> should be set with the current time from <a href="../-uptime-clock/uptime/">UptimeClock.uptime</a> right before dumping the heap, so that we can later determine how long an object was retained.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
@@ -806,7 +806,7 @@
<tbody>
<tr>
<td><a href="-keyed-weak-reference/">KeyedWeakReference</a></td>
-<td>[jvm]<br>constructor(referent: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, key: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, description: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, watchUptimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, referenceQueue: <a href="https://developer.android.com/reference/kotlin/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>>)</td>
+<td>[jvm]<br>constructor(referent: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, key: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, description: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, watchUptimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, referenceQueue: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>>)</td>
</tr>
</tbody>
</table>
@@ -848,7 +848,7 @@
</tr>
<tr>
<td><a href="get-and-leak-referent/">getAndLeakReferent</a></td>
-<td>[jvm]<br>fun <a href="get-and-leak-referent/">getAndLeakReferent</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>?<br>Same as <a href="https://developer.android.com/reference/kotlin/java/lang/ref/WeakReference.html#get">WeakReference.get</a> but does not trigger an intentional crash.</td>
+<td>[jvm]<br>fun <a href="get-and-leak-referent/">getAndLeakReferent</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>?<br>Same as <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/WeakReference.html#get--">WeakReference.get</a> but does not trigger an intentional crash.</td>
</tr>
<tr>
<td><a href="./#326485468%2FFunctions%2F1504522321">refersTo</a></td>
diff --git a/api/leakcanary/-no-leak-assertion-failed-error/index.html b/api/leakcanary/-no-leak-assertion-failed-error/index.html
index 070cb52..00f6dbe 100644
--- a/api/leakcanary/-no-leak-assertion-failed-error/index.html
+++ b/api/leakcanary/-no-leak-assertion-failed-error/index.html
@@ -792,7 +792,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">leakcanary</a>/<a href="./">NoLeakAssertionFailedError</a></p>
<h1 id="noleakassertionfailederror">NoLeakAssertionFailedError<a class="headerlink" href="#noleakassertionfailederror" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-class <a href="./">NoLeakAssertionFailedError</a>(val heapAnalysis: <a href="../../shark/-heap-analysis-success/#955217568%2FMain%2F-467942417">HeapAnalysisSuccess</a>) : <a href="https://developer.android.com/reference/kotlin/java/lang/AssertionError.html">AssertionError</a></p>
+class <a href="./">NoLeakAssertionFailedError</a>(val heapAnalysis: <a href="../../shark/-heap-analysis-success/#955217568%2FMain%2F-467942417">HeapAnalysisSuccess</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AssertionError.html">AssertionError</a></p>
<p>Thrown when using the <a href="-companion/throw-on-application-leaks/">NoLeakAssertionFailedError.throwOnApplicationLeaks</a> HeapAnalysisReporter</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
@@ -847,7 +847,7 @@
</tr>
<tr>
<td><a href="./#2050903719%2FFunctions%2F-467942417">getStackTrace</a></td>
-<td>[androidJvm]<br>open fun <a href="./#2050903719%2FFunctions%2F-467942417">getStackTrace</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html">Array</a><<a href="https://developer.android.com/reference/kotlin/java/lang/StackTraceElement.html">StackTraceElement</a>></td>
+<td>[androidJvm]<br>open fun <a href="./#2050903719%2FFunctions%2F-467942417">getStackTrace</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html">Array</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StackTraceElement.html">StackTraceElement</a>></td>
</tr>
<tr>
<td><a href="./#672492560%2FFunctions%2F-467942417">getSuppressed</a></td>
@@ -859,11 +859,11 @@
</tr>
<tr>
<td><a href="./#-1769529168%2FFunctions%2F-467942417">printStackTrace</a></td>
-<td>[androidJvm]<br>open fun <a href="./#-1769529168%2FFunctions%2F-467942417">printStackTrace</a>()<br>open fun <a href="./#1841853697%2FFunctions%2F-467942417">printStackTrace</a>(p0: <a href="https://developer.android.com/reference/kotlin/java/io/PrintStream.html">PrintStream</a>)<br>open fun <a href="./#1175535278%2FFunctions%2F-467942417">printStackTrace</a>(p0: <a href="https://developer.android.com/reference/kotlin/java/io/PrintWriter.html">PrintWriter</a>)</td>
+<td>[androidJvm]<br>open fun <a href="./#-1769529168%2FFunctions%2F-467942417">printStackTrace</a>()<br>open fun <a href="./#1841853697%2FFunctions%2F-467942417">printStackTrace</a>(p0: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html">PrintStream</a>)<br>open fun <a href="./#1175535278%2FFunctions%2F-467942417">printStackTrace</a>(p0: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html">PrintWriter</a>)</td>
</tr>
<tr>
<td><a href="./#2135801318%2FFunctions%2F-467942417">setStackTrace</a></td>
-<td>[androidJvm]<br>open fun <a href="./#2135801318%2FFunctions%2F-467942417">setStackTrace</a>(p0: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html">Array</a><<a href="https://developer.android.com/reference/kotlin/java/lang/StackTraceElement.html">StackTraceElement</a>>)</td>
+<td>[androidJvm]<br>open fun <a href="./#2135801318%2FFunctions%2F-467942417">setStackTrace</a>(p0: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html">Array</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StackTraceElement.html">StackTraceElement</a>>)</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-object-growth-warmup-heap-dumper/dump-heap/index.html b/api/leakcanary/-object-growth-warmup-heap-dumper/dump-heap/index.html
index 0f47c4c..bb8b2e0 100644
--- a/api/leakcanary/-object-growth-warmup-heap-dumper/dump-heap/index.html
+++ b/api/leakcanary/-object-growth-warmup-heap-dumper/dump-heap/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">ObjectGrowthWarmupHeapDumper</a>/<a href="./">dumpHeap</a></p>
<h1 id="dumpheap">dumpHeap<a class="headerlink" href="#dumpheap" title="Permanent link">¶</a></h1>
<p>[jvm]\
-open override fun <a href="./">dumpHeap</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+open override fun <a href="./">dumpHeap</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
<p>Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed.</p>
<p>Implementations can throw a runtime exception if heap dumping failed.</p>
diff --git a/api/leakcanary/-object-growth-warmup-heap-dumper/index.html b/api/leakcanary/-object-growth-warmup-heap-dumper/index.html
index 0a8df15..f739626 100644
--- a/api/leakcanary/-object-growth-warmup-heap-dumper/index.html
+++ b/api/leakcanary/-object-growth-warmup-heap-dumper/index.html
@@ -827,7 +827,7 @@
<tbody>
<tr>
<td><a href="dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>open override fun <a href="dump-heap/">dumpHeap</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)<br>Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed.</td>
+<td>[jvm]<br>open override fun <a href="dump-heap/">dumpHeap</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)<br>Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed.</td>
</tr>
<tr>
<td><a href="../with-detector-warmup/">withDetectorWarmup</a></td>
diff --git a/api/leakcanary/-plumber-startup-initializer/dependencies/index.html b/api/leakcanary/-plumber-startup-initializer/dependencies/index.html
index 738d58a..528188d 100644
--- a/api/leakcanary/-plumber-startup-initializer/dependencies/index.html
+++ b/api/leakcanary/-plumber-startup-initializer/dependencies/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">PlumberStartupInitializer</a>/<a href="./">dependencies</a></p>
<h1 id="dependencies">dependencies<a class="headerlink" href="#dependencies" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-open override fun <a href="./">dependencies</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://developer.android.com/reference/kotlin/java/lang/Class.html">Class</a><out <a href="https://developer.android.com/reference/kotlin/androidx/startup/Initializer.html">Initializer</a><*>>></p>
+open override fun <a href="./">dependencies</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html">Class</a><out <a href="https://developer.android.com/reference/kotlin/androidx/startup/Initializer.html">Initializer</a><*>>></p>
</article>
diff --git a/api/leakcanary/-plumber-startup-initializer/index.html b/api/leakcanary/-plumber-startup-initializer/index.html
index 73a5512..534562c 100644
--- a/api/leakcanary/-plumber-startup-initializer/index.html
+++ b/api/leakcanary/-plumber-startup-initializer/index.html
@@ -809,7 +809,7 @@
</tr>
<tr>
<td><a href="dependencies/">dependencies</a></td>
-<td>[androidJvm]<br>open override fun <a href="dependencies/">dependencies</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://developer.android.com/reference/kotlin/java/lang/Class.html">Class</a><out <a href="https://developer.android.com/reference/kotlin/androidx/startup/Initializer.html">Initializer</a><*>>></td>
+<td>[androidJvm]<br>open override fun <a href="dependencies/">dependencies</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html">Class</a><out <a href="https://developer.android.com/reference/kotlin/androidx/startup/Initializer.html">Initializer</a><*>>></td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-process-info/-real/available-disk-space-bytes/index.html b/api/leakcanary/-process-info/-real/available-disk-space-bytes/index.html
index 0400cf9..13fbf94 100644
--- a/api/leakcanary/-process-info/-real/available-disk-space-bytes/index.html
+++ b/api/leakcanary/-process-info/-real/available-disk-space-bytes/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">ProcessInfo</a>/<a href="../">Real</a>/<a href="./">availableDiskSpaceBytes</a></p>
<h1 id="availablediskspacebytes">availableDiskSpaceBytes<a class="headerlink" href="#availablediskspacebytes" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-open override fun <a href="./">availableDiskSpaceBytes</a>(path: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></p>
+open override fun <a href="./">availableDiskSpaceBytes</a>(path: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></p>
</article>
diff --git a/api/leakcanary/-process-info/-real/index.html b/api/leakcanary/-process-info/-real/index.html
index 2e012dc..5a4a347 100644
--- a/api/leakcanary/-process-info/-real/index.html
+++ b/api/leakcanary/-process-info/-real/index.html
@@ -790,7 +790,7 @@
<tbody>
<tr>
<td><a href="available-disk-space-bytes/">availableDiskSpaceBytes</a></td>
-<td>[androidJvm]<br>open override fun <a href="available-disk-space-bytes/">availableDiskSpaceBytes</a>(path: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></td>
+<td>[androidJvm]<br>open override fun <a href="available-disk-space-bytes/">availableDiskSpaceBytes</a>(path: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></td>
</tr>
<tr>
<td><a href="available-ram/">availableRam</a></td>
diff --git a/api/leakcanary/-process-info/available-disk-space-bytes/index.html b/api/leakcanary/-process-info/available-disk-space-bytes/index.html
index 0e5de1c..0e30b44 100644
--- a/api/leakcanary/-process-info/available-disk-space-bytes/index.html
+++ b/api/leakcanary/-process-info/available-disk-space-bytes/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">ProcessInfo</a>/<a href="./">availableDiskSpaceBytes</a></p>
<h1 id="availablediskspacebytes">availableDiskSpaceBytes<a class="headerlink" href="#availablediskspacebytes" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-abstract fun <a href="./">availableDiskSpaceBytes</a>(path: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></p>
+abstract fun <a href="./">availableDiskSpaceBytes</a>(path: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></p>
</article>
diff --git a/api/leakcanary/-process-info/index.html b/api/leakcanary/-process-info/index.html
index 1182462..ba75e61 100644
--- a/api/leakcanary/-process-info/index.html
+++ b/api/leakcanary/-process-info/index.html
@@ -835,7 +835,7 @@
<tbody>
<tr>
<td><a href="available-disk-space-bytes/">availableDiskSpaceBytes</a></td>
-<td>[androidJvm]<br>abstract fun <a href="available-disk-space-bytes/">availableDiskSpaceBytes</a>(path: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></td>
+<td>[androidJvm]<br>abstract fun <a href="available-disk-space-bytes/">availableDiskSpaceBytes</a>(path: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></td>
</tr>
<tr>
<td><a href="available-ram/">availableRam</a></td>
diff --git a/api/leakcanary/-reference-queue-retained-object-tracker/retained-weak-references/index.html b/api/leakcanary/-reference-queue-retained-object-tracker/retained-weak-references/index.html
index cd24d6b..0596b42 100644
--- a/api/leakcanary/-reference-queue-retained-object-tracker/retained-weak-references/index.html
+++ b/api/leakcanary/-reference-queue-retained-object-tracker/retained-weak-references/index.html
@@ -758,7 +758,7 @@
<p>[jvm]\
val <a href="./">retainedWeakReferences</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-keyed-weak-reference/">KeyedWeakReference</a>></p>
<p>Subset of <a href="../tracked-weak-references/">trackedWeakReferences</a> that have been marked as retained.</p>
-<p>DO NOT CALL <a href="https://developer.android.com/reference/kotlin/java/lang/ref/Reference.html#get">java.lang.ref.Reference.get</a> on the returned references, otherwise you will end up creating local references to the objects, preventing them from becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>
+<p>DO NOT CALL <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/Reference.html#get--">java.lang.ref.Reference.get</a> on the returned references, otherwise you will end up creating local references to the objects, preventing them from becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>
</article>
diff --git a/api/leakcanary/-reference-queue-retained-object-tracker/tracked-weak-references/index.html b/api/leakcanary/-reference-queue-retained-object-tracker/tracked-weak-references/index.html
index 1121d51..c91ca21 100644
--- a/api/leakcanary/-reference-queue-retained-object-tracker/tracked-weak-references/index.html
+++ b/api/leakcanary/-reference-queue-retained-object-tracker/tracked-weak-references/index.html
@@ -758,7 +758,7 @@
<p>[jvm]\
val <a href="./">trackedWeakReferences</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-keyed-weak-reference/">KeyedWeakReference</a>></p>
<p>List of <a href="../../-keyed-weak-reference/">KeyedWeakReference</a> that have not been enqueued in the reference queue yet, which means their referent is most likely still strongly reachable.</p>
-<p>DO NOT CALL <a href="https://developer.android.com/reference/kotlin/java/lang/ref/Reference.html#get">java.lang.ref.Reference.get</a> on the returned references, otherwise you will end up creating local references to the objects, preventing them from be becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>
+<p>DO NOT CALL <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/Reference.html#get--">java.lang.ref.Reference.get</a> on the returned references, otherwise you will end up creating local references to the objects, preventing them from be becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>
</article>
diff --git a/api/leakcanary/-repository-root-heap-dump-directory-provider/heap-dump-directory/index.html b/api/leakcanary/-repository-root-heap-dump-directory-provider/heap-dump-directory/index.html
index dda3509..967b339 100644
--- a/api/leakcanary/-repository-root-heap-dump-directory-provider/heap-dump-directory/index.html
+++ b/api/leakcanary/-repository-root-heap-dump-directory-provider/heap-dump-directory/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">RepositoryRootHeapDumpDirectoryProvider</a>/<a href="./">heapDumpDirectory</a></p>
<h1 id="heapdumpdirectory">heapDumpDirectory<a class="headerlink" href="#heapdumpdirectory" title="Permanent link">¶</a></h1>
<p>[jvm]\
-open override fun <a href="./">heapDumpDirectory</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+open override fun <a href="./">heapDumpDirectory</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
</article>
diff --git a/api/leakcanary/-repository-root-heap-dump-directory-provider/index.html b/api/leakcanary/-repository-root-heap-dump-directory-provider/index.html
index b3b2b5f..461c371 100644
--- a/api/leakcanary/-repository-root-heap-dump-directory-provider/index.html
+++ b/api/leakcanary/-repository-root-heap-dump-directory-provider/index.html
@@ -805,7 +805,7 @@
<tbody>
<tr>
<td><a href="heap-dump-directory/">heapDumpDirectory</a></td>
-<td>[jvm]<br>open override fun <a href="heap-dump-directory/">heapDumpDirectory</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>open override fun <a href="heap-dump-directory/">heapDumpDirectory</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-screen-off-trigger/-screen-off-trigger/index.html b/api/leakcanary/-screen-off-trigger/-screen-off-trigger/index.html
index c05e33a..3455b66 100644
--- a/api/leakcanary/-screen-off-trigger/-screen-off-trigger/index.html
+++ b/api/leakcanary/-screen-off-trigger/-screen-off-trigger/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">ScreenOffTrigger</a>/<a href="./">ScreenOffTrigger</a></p>
<h1 id="screenofftrigger">ScreenOffTrigger<a class="headerlink" href="#screenofftrigger" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-constructor(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://developer.android.com/reference/kotlin/java/util/concurrent/Executor.html">Executor</a>, analysisCallback: (<a href="../../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result ->
+constructor(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a>, analysisCallback: (<a href="../../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result ->
SharkLog.d { "$result" }
})</p>
diff --git a/api/leakcanary/-screen-off-trigger/index.html b/api/leakcanary/-screen-off-trigger/index.html
index fb2bc9e..5f06e5a 100644
--- a/api/leakcanary/-screen-off-trigger/index.html
+++ b/api/leakcanary/-screen-off-trigger/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">leakcanary</a>/<a href="./">ScreenOffTrigger</a></p>
<h1 id="screenofftrigger">ScreenOffTrigger<a class="headerlink" href="#screenofftrigger" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-class <a href="./">ScreenOffTrigger</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://developer.android.com/reference/kotlin/java/util/concurrent/Executor.html">Executor</a>, analysisCallback: (<a href="../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result ->
+class <a href="./">ScreenOffTrigger</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a>, analysisCallback: (<a href="../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result ->
SharkLog.d { "$result" }
})</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
@@ -792,7 +792,7 @@
<tbody>
<tr>
<td><a href="-screen-off-trigger/">ScreenOffTrigger</a></td>
-<td>[androidJvm]<br>constructor(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://developer.android.com/reference/kotlin/java/util/concurrent/Executor.html">Executor</a>, analysisCallback: (<a href="../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result -> SharkLog.d { "$result" } })</td>
+<td>[androidJvm]<br>constructor(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="../-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a>, analysisCallback: (<a href="../-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result -> SharkLog.d { "$result" } })</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-service-watcher/index.html b/api/leakcanary/-service-watcher/index.html
index ffcca7d..331be32 100644
--- a/api/leakcanary/-service-watcher/index.html
+++ b/api/leakcanary/-service-watcher/index.html
@@ -786,7 +786,7 @@
<h1 id="servicewatcher">ServiceWatcher<a class="headerlink" href="#servicewatcher" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
class <a href="./">ServiceWatcher</a>(deletableObjectReporter: DeletableObjectReporter) : <a href="../-installable-watcher/">InstallableWatcher</a></p>
-<p>Expects services to become weakly reachable soon after they receive the <a href="https://developer.android.com/reference/kotlin/android/app/Service.html#ondestroy">Service.onDestroy</a> callback.</p>
+<p>Expects services to become weakly reachable soon after they receive the <a href="https://developer.android.com/reference/kotlin/android/app/Service.html#onDestroy--">Service.onDestroy</a> callback.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
diff --git a/api/leakcanary/-target-context-heap-dump-directory-provider/heap-dump-directory/index.html b/api/leakcanary/-target-context-heap-dump-directory-provider/heap-dump-directory/index.html
index c9e773a..8bcccd1 100644
--- a/api/leakcanary/-target-context-heap-dump-directory-provider/heap-dump-directory/index.html
+++ b/api/leakcanary/-target-context-heap-dump-directory-provider/heap-dump-directory/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">TargetContextHeapDumpDirectoryProvider</a>/<a href="./">heapDumpDirectory</a></p>
<h1 id="heapdumpdirectory">heapDumpDirectory<a class="headerlink" href="#heapdumpdirectory" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-open override fun <a href="./">heapDumpDirectory</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+open override fun <a href="./">heapDumpDirectory</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
</article>
diff --git a/api/leakcanary/-target-context-heap-dump-directory-provider/index.html b/api/leakcanary/-target-context-heap-dump-directory-provider/index.html
index dddda51..d0c289d 100644
--- a/api/leakcanary/-target-context-heap-dump-directory-provider/index.html
+++ b/api/leakcanary/-target-context-heap-dump-directory-provider/index.html
@@ -805,7 +805,7 @@
<tbody>
<tr>
<td><a href="heap-dump-directory/">heapDumpDirectory</a></td>
-<td>[androidJvm]<br>open override fun <a href="heap-dump-directory/">heapDumpDirectory</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[androidJvm]<br>open override fun <a href="heap-dump-directory/">heapDumpDirectory</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-test-heap-dump-file-provider/-test-heap-dump-file-provider/index.html b/api/leakcanary/-test-heap-dump-file-provider/-test-heap-dump-file-provider/index.html
new file mode 100644
index 0000000..31ce420
--- /dev/null
+++ b/api/leakcanary/-test-heap-dump-file-provider/-test-heap-dump-file-provider/index.html
@@ -0,0 +1,852 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-test-heap-dump-file-provider/-test-heap-dump-file-provider/">
+
+
+
+ <link rel="icon" href="../../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>test heap dump file provider - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#testheapdumpfileprovider" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ test heap dump file provider
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-test-heap-dump-file-provider/-test-heap-dump-file-provider/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">TestHeapDumpFileProvider</a>/<a href="./">TestHeapDumpFileProvider</a></p>
+<h1 id="testheapdumpfileprovider">TestHeapDumpFileProvider<a class="headerlink" href="#testheapdumpfileprovider" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+constructor(heapDumpDirectoryProvider: <a href="../../-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>)</p>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../../..", "features": ["tabs"], "search": "../../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-test-heap-dump-file-provider/index.html b/api/leakcanary/-test-heap-dump-file-provider/index.html
new file mode 100644
index 0000000..b631f4d
--- /dev/null
+++ b/api/leakcanary/-test-heap-dump-file-provider/index.html
@@ -0,0 +1,904 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-test-heap-dump-file-provider/">
+
+
+
+ <link rel="icon" href="../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>Index - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#testheapdumpfileprovider" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ Index
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+ <label class="md-nav__title" for="__toc">
+ <span class="md-nav__icon md-icon"></span>
+ Table of contents
+ </label>
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
+
+ <li class="md-nav__item">
+ <a href="#constructors" class="md-nav__link">
+ Constructors
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#functions" class="md-nav__link">
+ Functions
+ </a>
+
+</li>
+
+ </ul>
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-test-heap-dump-file-provider/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../">leakcanary-repo</a>/<a href="../">leakcanary</a>/<a href="./">TestHeapDumpFileProvider</a></p>
+<h1 id="testheapdumpfileprovider">TestHeapDumpFileProvider<a class="headerlink" href="#testheapdumpfileprovider" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+class <a href="./">TestHeapDumpFileProvider</a>(heapDumpDirectoryProvider: <a href="../-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>) : <a href="../-heap-dump-file-provider/">HeapDumpFileProvider</a></p>
+<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
+<table>
+<thead>
+<tr>
+<th></th>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="-test-heap-dump-file-provider/">TestHeapDumpFileProvider</a></td>
+<td>[jvm]<br>constructor(heapDumpDirectoryProvider: <a href="../-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>)</td>
+</tr>
+</tbody>
+</table>
+<h2 id="functions">Functions<a class="headerlink" href="#functions" title="Permanent link">¶</a></h2>
+<table>
+<thead>
+<tr>
+<th>Name</th>
+<th>Summary</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="new-heap-dump-file/">newHeapDumpFile</a></td>
+<td>[jvm]<br>open override fun <a href="new-heap-dump-file/">newHeapDumpFile</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
+</tr>
+</tbody>
+</table>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../..", "features": ["tabs"], "search": "../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-test-heap-dump-file-provider/new-heap-dump-file/index.html b/api/leakcanary/-test-heap-dump-file-provider/new-heap-dump-file/index.html
new file mode 100644
index 0000000..7e2f39a
--- /dev/null
+++ b/api/leakcanary/-test-heap-dump-file-provider/new-heap-dump-file/index.html
@@ -0,0 +1,852 @@
+
+<!doctype html>
+<html lang="en" class="no-js">
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+
+ <meta name="description" content="A memory leak detection library for Android">
+
+
+ <meta name="author" content="Square, Inc.">
+
+
+ <link rel="canonical" href="https://square.github.io/leakcanary/api/leakcanary/-test-heap-dump-file-provider/new-heap-dump-file/">
+
+
+
+ <link rel="icon" href="../../../../images/logo.png">
+ <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.3">
+
+
+
+ <title>New heap dump file - LeakCanary</title>
+
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/main.c4a75a56.min.css">
+
+
+ <link rel="stylesheet" href="../../../../assets/stylesheets/palette.a0c5b2b5.min.css">
+
+
+
+
+
+
+
+
+
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
+
+
+
+ <script>__md_scope=new URL("../../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
+
+
+
+
+
+
+ </head>
+
+
+
+
+
+
+
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="deep-purple">
+
+
+
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
+ <label class="md-overlay" for="__drawer"></label>
+ <div data-md-component="skip">
+
+
+ <a href="#newheapdumpfile" class="md-skip">
+ Skip to content
+ </a>
+
+ </div>
+ <div data-md-component="announce">
+
+ <aside class="md-banner">
+ <div class="md-banner__inner md-grid md-typeset">
+
+
+ Upgrade to <a href="../../../../changelog/">LeakCanary <strong>2.14</strong></a> 🐤 Want to help? <a href="../../../../how_to_help/">Here's how you can contribute<a> 🙏
+
+ </div>
+
+ </aside>
+
+ </div>
+
+
+
+
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
+ <nav class="md-header__inner md-grid" aria-label="Header">
+ <a href="../../../.." title="LeakCanary" class="md-header__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ <label class="md-header__button md-icon" for="__drawer">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
+ </label>
+ <div class="md-header__title" data-md-component="header-title">
+ <div class="md-header__ellipsis">
+ <div class="md-header__topic">
+ <span class="md-ellipsis">
+ LeakCanary
+ </span>
+ </div>
+ <div class="md-header__topic" data-md-component="header-topic">
+ <span class="md-ellipsis">
+
+ New heap dump file
+
+ </span>
+ </div>
+ </div>
+ </div>
+
+
+
+ <label class="md-header__button md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ </label>
+ <div class="md-search" data-md-component="search" role="dialog">
+ <label class="md-search__overlay" for="__search"></label>
+ <div class="md-search__inner" role="search">
+ <form class="md-search__form" name="search">
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
+ <label class="md-search__icon md-icon" for="__search">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
+ </label>
+ <nav class="md-search__options" aria-label="Search">
+
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
+ </button>
+ </nav>
+
+ </form>
+ <div class="md-search__output">
+ <div class="md-search__scrollwrap" data-md-scrollfix>
+ <div class="md-search-result" data-md-component="search-result">
+ <div class="md-search-result__meta">
+ Initializing search
+ </div>
+ <ol class="md-search-result__list" role="presentation"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
+ <div class="md-header__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ </nav>
+
+</header>
+
+ <div class="md-container" data-md-component="container">
+
+
+
+
+
+
+ <main class="md-main" data-md-component="main">
+ <div class="md-main__inner md-grid">
+
+
+
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+
+<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
+ <label class="md-nav__title" for="__drawer">
+ <a href="../../../.." title="LeakCanary" class="md-nav__button md-logo" aria-label="LeakCanary" data-md-component="logo">
+
+ <img src="../../../../images/logo.png" alt="logo">
+
+ </a>
+ LeakCanary
+ </label>
+
+ <div class="md-nav__source">
+ <a href="https://github.com/square/leakcanary" title="Go to repository" class="md-source" data-md-component="source">
+ <div class="md-source__icon md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
+ </div>
+ <div class="md-source__repository">
+ LeakCanary
+ </div>
+</a>
+ </div>
+
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../.." class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../getting_started/" class="md-nav__link">
+ Getting Started
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
+
+
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ Fundamentals
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
+ <span class="md-nav__icon md-icon"></span>
+ Fundamentals
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals/" class="md-nav__link">
+ Introduction
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-how-leakcanary-works/" class="md-nav__link">
+ How LeakCanary works
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../fundamentals-fixing-a-memory-leak/" class="md-nav__link">
+ Fixing a memory leak
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
+ LeakCanary at scale
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
+ <span class="md-nav__icon md-icon"></span>
+ LeakCanary at scale
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../ui-tests/" class="md-nav__link">
+ Leak detection in UI tests
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../uploading/" class="md-nav__link">
+ Uploading analysis results
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../leakcanary-for-releases/" class="md-nav__link">
+ LeakCanary for releases
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
+
+
+
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
+ Help & Community
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5">
+ <span class="md-nav__icon md-icon"></span>
+ Help & Community
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recipes/" class="md-nav__link">
+ Code recipes
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../faq/" class="md-nav__link">
+ FAQ
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../support/" class="md-nav__link">
+ Support
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../upgrading-to-leakcanary-2.0/" class="md-nav__link">
+ Upgrading to LeakCanary 2
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../recorded-presentations/" class="md-nav__link">
+ Recorded Presentations
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../blog-articles/" class="md-nav__link">
+ Blog Articles
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" class="md-nav__link">
+ Stack Overflow ⏏
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
+
+
+
+ <label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
+ Contributing
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_5_8">
+ <span class="md-nav__icon md-icon"></span>
+ Contributing
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../code_of_conduct/" class="md-nav__link">
+ Code of Conduct
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../dev-env/" class="md-nav__link">
+ Dev Environment
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../releasing/" class="md-nav__link">
+ Releasing
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../how_to_help/" class="md-nav__link">
+ How to help
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
+
+
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
+ Shark
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_6">
+ <span class="md-nav__icon md-icon"></span>
+ Shark
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../shark/" class="md-nav__link">
+ Overview
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../shark/" class="md-nav__link">
+ Shark API
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../" class="md-nav__link">
+ LeakCanary API
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../../../changelog/" class="md-nav__link">
+ Change Log
+ </a>
+ </li>
+
+
+
+ </ul>
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
+ <div class="md-sidebar__scrollwrap">
+ <div class="md-sidebar__inner">
+
+
+<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+
+
+
+
+
+
+</nav>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
+
+
+
+ <span style="float: right">🤔 Documentation issue? <a href="https://github.com/square/leakcanary/issues/new?assignees=&labels=type%3A+documentation&template=4-doc.md&title=Doc%20issue%20with%20api/leakcanary/-test-heap-dump-file-provider/new-heap-dump-file/%20page">Report it</a></span>
+
+
+
+
+
+
+ <p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">TestHeapDumpFileProvider</a>/<a href="./">newHeapDumpFile</a></p>
+<h1 id="newheapdumpfile">newHeapDumpFile<a class="headerlink" href="#newheapdumpfile" title="Permanent link">¶</a></h1>
+<p>[jvm]\
+open override fun <a href="./">newHeapDumpFile</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
+
+
+ </article>
+ </div>
+
+
+ </div>
+
+ </main>
+
+ <footer class="md-footer">
+
+ <div class="md-footer-meta md-typeset">
+ <div class="md-footer-meta__inner md-grid">
+ <div class="md-copyright">
+
+ <div class="md-copyright__highlight">
+ Copyright © 2015 Square, Inc.
+ </div>
+
+
+ Made with
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
+ Material for MkDocs
+ </a>
+
+</div>
+
+ <div class="md-social">
+
+
+
+
+
+
+
+
+ <a href="https://square.github.io/" target="_blank" rel="noopener" title="square.github.io" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://twitter.com/Piwai" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://stackoverflow.com/questions/tagged/leakcanary?sort=active" target="_blank" rel="noopener" title="stackoverflow.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M290.7 311 95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
+ </a>
+
+
+
+
+
+
+
+
+ <a href="https://www.linkedin.com/company/joinsquare/" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link">
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
+ </a>
+
+</div>
+
+ </div>
+ </div>
+</footer>
+
+ </div>
+ <div class="md-dialog" data-md-component="dialog">
+ <div class="md-dialog__inner md-typeset"></div>
+ </div>
+
+ <script id="__config" type="application/json">{"base": "../../../..", "features": ["tabs"], "search": "../../../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
+
+
+ <script src="../../../../assets/javascripts/bundle.efa0ade1.min.js"></script>
+
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/api/leakcanary/-test-name/-from-stack-trace-element/-from-stack-trace-element/index.html b/api/leakcanary/-test-name/-from-stack-trace-element/-from-stack-trace-element/index.html
index aba955b..3f9a0a5 100644
--- a/api/leakcanary/-test-name/-from-stack-trace-element/-from-stack-trace-element/index.html
+++ b/api/leakcanary/-test-name/-from-stack-trace-element/-from-stack-trace-element/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">leakcanary</a>/<a href="../../">TestName</a>/<a href="../">FromStackTraceElement</a>/<a href="./">FromStackTraceElement</a></p>
<h1 id="fromstacktraceelement">FromStackTraceElement<a class="headerlink" href="#fromstacktraceelement" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(testStackElement: <a href="https://developer.android.com/reference/kotlin/java/lang/StackTraceElement.html">StackTraceElement</a>)</p>
+constructor(testStackElement: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StackTraceElement.html">StackTraceElement</a>)</p>
</article>
diff --git a/api/leakcanary/-test-name/-from-stack-trace-element/index.html b/api/leakcanary/-test-name/-from-stack-trace-element/index.html
index 82b5460..fe51c4f 100644
--- a/api/leakcanary/-test-name/-from-stack-trace-element/index.html
+++ b/api/leakcanary/-test-name/-from-stack-trace-element/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">TestName</a>/<a href="./">FromStackTraceElement</a></p>
<h1 id="fromstacktraceelement">FromStackTraceElement<a class="headerlink" href="#fromstacktraceelement" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">FromStackTraceElement</a>(testStackElement: <a href="https://developer.android.com/reference/kotlin/java/lang/StackTraceElement.html">StackTraceElement</a>) : <a href="../">TestName</a></p>
+class <a href="./">FromStackTraceElement</a>(testStackElement: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StackTraceElement.html">StackTraceElement</a>) : <a href="../">TestName</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -790,7 +790,7 @@
<tbody>
<tr>
<td><a href="-from-stack-trace-element/">FromStackTraceElement</a></td>
-<td>[jvm]<br>constructor(testStackElement: <a href="https://developer.android.com/reference/kotlin/java/lang/StackTraceElement.html">StackTraceElement</a>)</td>
+<td>[jvm]<br>constructor(testStackElement: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StackTraceElement.html">StackTraceElement</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-test-name/index.html b/api/leakcanary/-test-name/index.html
index 70b9be0..6b417b8 100644
--- a/api/leakcanary/-test-name/index.html
+++ b/api/leakcanary/-test-name/index.html
@@ -812,7 +812,7 @@
<tbody>
<tr>
<td><a href="-from-stack-trace-element/">FromStackTraceElement</a></td>
-<td>[jvm]<br>class <a href="-from-stack-trace-element/">FromStackTraceElement</a>(testStackElement: <a href="https://developer.android.com/reference/kotlin/java/lang/StackTraceElement.html">StackTraceElement</a>) : <a href="./">TestName</a></td>
+<td>[jvm]<br>class <a href="-from-stack-trace-element/">FromStackTraceElement</a>(testStackElement: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StackTraceElement.html">StackTraceElement</a>) : <a href="./">TestName</a></td>
</tr>
<tr>
<td><a href="-from-test-description/">FromTestDescription</a></td>
diff --git a/api/leakcanary/-ui-automator-shell-file-deleter/delete-file-using-shell/index.html b/api/leakcanary/-ui-automator-shell-file-deleter/delete-file-using-shell/index.html
index ed8188c..ba22a3d 100644
--- a/api/leakcanary/-ui-automator-shell-file-deleter/delete-file-using-shell/index.html
+++ b/api/leakcanary/-ui-automator-shell-file-deleter/delete-file-using-shell/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">UiAutomatorShellFileDeleter</a>/<a href="./">deleteFileUsingShell</a></p>
<h1 id="deletefileusingshell">deleteFileUsingShell<a class="headerlink" href="#deletefileusingshell" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-fun <a href="./">deleteFileUsingShell</a>(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+fun <a href="./">deleteFileUsingShell</a>(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
</article>
diff --git a/api/leakcanary/-ui-automator-shell-file-deleter/index.html b/api/leakcanary/-ui-automator-shell-file-deleter/index.html
index ab6667d..b3b7e1b 100644
--- a/api/leakcanary/-ui-automator-shell-file-deleter/index.html
+++ b/api/leakcanary/-ui-automator-shell-file-deleter/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="delete-file-using-shell/">deleteFileUsingShell</a></td>
-<td>[androidJvm]<br>fun <a href="delete-file-using-shell/">deleteFileUsingShell</a>(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td>[androidJvm]<br>fun <a href="delete-file-using-shell/">deleteFileUsingShell</a>(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-ui-automator-shell-heap-dumper/dump-heap/index.html b/api/leakcanary/-ui-automator-shell-heap-dumper/dump-heap/index.html
index fe9a50d..c11cc48 100644
--- a/api/leakcanary/-ui-automator-shell-heap-dumper/dump-heap/index.html
+++ b/api/leakcanary/-ui-automator-shell-heap-dumper/dump-heap/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">leakcanary</a>/<a href="../">UiAutomatorShellHeapDumper</a>/<a href="./">dumpHeap</a></p>
<h1 id="dumpheap">dumpHeap<a class="headerlink" href="#dumpheap" title="Permanent link">¶</a></h1>
<p>[androidJvm]\
-open override fun <a href="./">dumpHeap</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+open override fun <a href="./">dumpHeap</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
</article>
diff --git a/api/leakcanary/-ui-automator-shell-heap-dumper/index.html b/api/leakcanary/-ui-automator-shell-heap-dumper/index.html
index 0d0ba2c..2f957da 100644
--- a/api/leakcanary/-ui-automator-shell-heap-dumper/index.html
+++ b/api/leakcanary/-ui-automator-shell-heap-dumper/index.html
@@ -805,7 +805,7 @@
<tbody>
<tr>
<td><a href="dump-heap/">dumpHeap</a></td>
-<td>[androidJvm]<br>open override fun <a href="dump-heap/">dumpHeap</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td>[androidJvm]<br>open override fun <a href="dump-heap/">dumpHeap</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
<tr>
<td><a href="../with-detector-warmup/">withDetectorWarmup</a></td>
diff --git a/api/leakcanary/-uptime-clock/index.html b/api/leakcanary/-uptime-clock/index.html
index ce3dd48..39d64ff 100644
--- a/api/leakcanary/-uptime-clock/index.html
+++ b/api/leakcanary/-uptime-clock/index.html
@@ -784,7 +784,7 @@
<tbody>
<tr>
<td><a href="uptime/">uptime</a></td>
-<td>[jvm]<br>abstract fun <a href="uptime/">uptime</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a><br>On JVMs this should return <a href="https://developer.android.com/reference/kotlin/java/lang/System.html#nanotime">System.nanoTime</a> as a <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a>.</td>
+<td>[jvm]<br>abstract fun <a href="uptime/">uptime</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a><br>On JVMs this should return <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#nanoTime--">System.nanoTime</a> as a <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a>.</td>
</tr>
</tbody>
</table>
diff --git a/api/leakcanary/-uptime-clock/uptime/index.html b/api/leakcanary/-uptime-clock/uptime/index.html
index acf24ac..afae4e6 100644
--- a/api/leakcanary/-uptime-clock/uptime/index.html
+++ b/api/leakcanary/-uptime-clock/uptime/index.html
@@ -757,8 +757,8 @@
<h1 id="uptime">uptime<a class="headerlink" href="#uptime" title="Permanent link">¶</a></h1>
<p>[jvm]\
abstract fun <a href="./">uptime</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a></p>
-<p>On JVMs this should return <a href="https://developer.android.com/reference/kotlin/java/lang/System.html#nanotime">System.nanoTime</a> as a <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a>.</p>
-<p>On Android VMs, this should return either <a href="https://developer.android.com/reference/kotlin/java/lang/System.html#nanotime">System.nanoTime</a> on Android 11 (when the method was annotated with @CriticalNative) or android.os.SystemClock.uptimeMillis() before Android 11.</p>
+<p>On JVMs this should return <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#nanoTime--">System.nanoTime</a> as a <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.time/-duration/index.html">Duration</a>.</p>
+<p>On Android VMs, this should return either <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#nanoTime--">System.nanoTime</a> on Android 11 (when the method was annotated with @CriticalNative) or android.os.SystemClock.uptimeMillis() before Android 11.</p>
</article>
diff --git a/api/leakcanary/index.html b/api/leakcanary/index.html
index a9b50d5..4293d5e 100644
--- a/api/leakcanary/index.html
+++ b/api/leakcanary/index.html
@@ -840,11 +840,11 @@
<tbody>
<tr>
<td><a href="-activity-watcher/">ActivityWatcher</a></td>
-<td>[androidJvm]<br>class <a href="-activity-watcher/">ActivityWatcher</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, deletableObjectReporter: DeletableObjectReporter) : <a href="-installable-watcher/">InstallableWatcher</a><br>Expects activities to become weakly reachable soon after they receive the <a href="https://developer.android.com/reference/kotlin/android/app/Activity.html#ondestroy">Activity.onDestroy</a> callback.</td>
+<td>[androidJvm]<br>class <a href="-activity-watcher/">ActivityWatcher</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, deletableObjectReporter: DeletableObjectReporter) : <a href="-installable-watcher/">InstallableWatcher</a><br>Expects activities to become weakly reachable soon after they receive the <a href="https://developer.android.com/reference/kotlin/android/app/Activity.html#onDestroy--">Activity.onDestroy</a> callback.</td>
</tr>
<tr>
<td><a href="-android-debug-heap-dumper/">AndroidDebugHeapDumper</a></td>
-<td>[androidJvm]<br>object <a href="-android-debug-heap-dumper/">AndroidDebugHeapDumper</a> : HeapDumper<br>Dumps the Android heap using <a href="https://developer.android.com/reference/kotlin/android/os/Debug.html#dumphprofdata">Debug.dumpHprofData</a>.</td>
+<td>[androidJvm]<br>object <a href="-android-debug-heap-dumper/">AndroidDebugHeapDumper</a> : HeapDumper<br>Dumps the Android heap using <a href="https://developer.android.com/reference/kotlin/android/os/Debug.html#dumpHprofData-kotlin.String-">Debug.dumpHprofData</a>.</td>
</tr>
<tr>
<td><a href="-android-detect-leaks-assert/">AndroidDetectLeaksAssert</a></td>
@@ -876,7 +876,7 @@
</tr>
<tr>
<td><a href="-background-trigger/">BackgroundTrigger</a></td>
-<td>[androidJvm]<br>class <a href="-background-trigger/">BackgroundTrigger</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://developer.android.com/reference/kotlin/java/util/concurrent/Executor.html">Executor</a>, processInfo: <a href="-process-info/">ProcessInfo</a> = ProcessInfo.Real, analysisCallback: (<a href="-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result -> SharkLog.d { "$result" } })</td>
+<td>[androidJvm]<br>class <a href="-background-trigger/">BackgroundTrigger</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a>, processInfo: <a href="-process-info/">ProcessInfo</a> = ProcessInfo.Real, analysisCallback: (<a href="-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result -> SharkLog.d { "$result" } })</td>
</tr>
<tr>
<td><a href="-conditional-interceptor/">ConditionalInterceptor</a></td>
@@ -884,7 +884,7 @@
</tr>
<tr>
<td><a href="-datetime-formatted-heap-dump-file-provider/">DatetimeFormattedHeapDumpFileProvider</a></td>
-<td>[jvm]<br>class <a href="-datetime-formatted-heap-dump-file-provider/">DatetimeFormattedHeapDumpFileProvider</a>(heapDumpDirectoryProvider: <a href="-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>, dateProvider: () -> <a href="https://developer.android.com/reference/kotlin/java/util/Date.html">Date</a> = { Date() }, prefixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }, suffixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }) : <a href="-heap-dump-file-provider/">HeapDumpFileProvider</a></td>
+<td>[jvm]<br>class <a href="-datetime-formatted-heap-dump-file-provider/">DatetimeFormattedHeapDumpFileProvider</a>(heapDumpDirectoryProvider: <a href="-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>, dateProvider: () -> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Date.html">Date</a> = { Date() }, prefixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }, suffixProvider: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> = { "" }) : <a href="-heap-dump-file-provider/">HeapDumpFileProvider</a></td>
</tr>
<tr>
<td><a href="-default-delay-deletable-object-reporter/">DefaultDelayDeletableObjectReporter</a></td>
@@ -915,8 +915,8 @@
<td>[androidJvm]<br>fun interface <a href="-detect-leaks-interceptor/">DetectLeaksInterceptor</a><br>Decides whether to dump & analyze the heap to look for leaks in instrumentation tests. The implementation might block for a while to allow temporary leaks to be flushed out, as those aren’t that interesting to report and heap analysis increases test duration significantly.</td>
</tr>
<tr>
-<td><a href="-dumping-heap-graph-provider/">DumpingHeapGraphProvider</a></td>
-<td>[jvm]<br>class <a href="-dumping-heap-graph-provider/">DumpingHeapGraphProvider</a>(heapDumpFileProvider: <a href="-heap-dump-file-provider/">HeapDumpFileProvider</a>, heapDumper: <a href="-heap-dumper/">HeapDumper</a>, heapDumpClosedListener: <a href="-dumping-heap-graph-provider/-heap-dump-closed-listener/">DumpingHeapGraphProvider.HeapDumpClosedListener</a> = HeapDumpClosedListener {}) : <a href="../shark/-heap-graph-provider/">HeapGraphProvider</a></td>
+<td><a href="-dumping-repeating-scenario-object-growth-detector/">DumpingRepeatingScenarioObjectGrowthDetector</a></td>
+<td>[jvm]<br>class <a href="-dumping-repeating-scenario-object-growth-detector/">DumpingRepeatingScenarioObjectGrowthDetector</a>(objectGrowthDetector: <a href="../shark/-object-growth-detector/">ObjectGrowthDetector</a>, heapDumpFileProvider: <a href="-heap-dump-file-provider/">HeapDumpFileProvider</a>, heapDumper: <a href="-heap-dumper/">HeapDumper</a>, heapDumpStorageStrategy: <a href="-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a>) : <a href="../shark/-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a><br>A <a href="../shark/-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a> suitable for junit based automated tests that can dump the heap.</td>
</tr>
<tr>
<td><a href="-event-listener/">EventListener</a></td>
@@ -940,7 +940,7 @@
</tr>
<tr>
<td><a href="-heap-analysis-client/">HeapAnalysisClient</a></td>
-<td>[androidJvm]<br>class <a href="-heap-analysis-client/">HeapAnalysisClient</a>(heapDumpDirectoryProvider: () -> <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, config: <a href="-heap-analysis-config/">HeapAnalysisConfig</a>, interceptors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="-heap-analysis-interceptor/">HeapAnalysisInterceptor</a>>)</td>
+<td>[androidJvm]<br>class <a href="-heap-analysis-client/">HeapAnalysisClient</a>(heapDumpDirectoryProvider: () -> <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, config: <a href="-heap-analysis-config/">HeapAnalysisConfig</a>, interceptors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="-heap-analysis-interceptor/">HeapAnalysisInterceptor</a>>)</td>
</tr>
<tr>
<td><a href="-heap-analysis-config/">HeapAnalysisConfig</a></td>
@@ -976,7 +976,7 @@
</tr>
<tr>
<td><a href="-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a></td>
-<td>[jvm]<br>interface <a href="-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a> : <a href="-dumping-heap-graph-provider/-heap-dump-closed-listener/">DumpingHeapGraphProvider.HeapDumpClosedListener</a>, <a href="../shark/-repeating-heap-graph-object-growth-detector/-completion-listener/">RepeatingHeapGraphObjectGrowthDetector.CompletionListener</a></td>
+<td>[jvm]<br>interface <a href="-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a></td>
</tr>
<tr>
<td><a href="-hot-spot-heap-dumper/">HotSpotHeapDumper</a></td>
@@ -988,11 +988,11 @@
</tr>
<tr>
<td><a href="-job-context/">JobContext</a></td>
-<td>[androidJvm]<br>class <a href="-job-context/">JobContext</a>(val starter: <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html">Class</a><*>? = null)<br>In memory store that can be used to store objects in a given <a href="-heap-analysis-job/">HeapAnalysisJob</a> instance. This is a simple <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-map/index.html">MutableMap</a> of <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> to <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, but with unsafe generics access.</td>
+<td>[androidJvm]<br>class <a href="-job-context/">JobContext</a>(val starter: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html">Class</a><*>? = null)<br>In memory store that can be used to store objects in a given <a href="-heap-analysis-job/">HeapAnalysisJob</a> instance. This is a simple <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-map/index.html">MutableMap</a> of <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a> to <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, but with unsafe generics access.</td>
</tr>
<tr>
<td><a href="-keyed-weak-reference/">KeyedWeakReference</a></td>
-<td>[jvm]<br>class <a href="-keyed-weak-reference/">KeyedWeakReference</a>(referent: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, val key: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val description: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val watchUptimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, referenceQueue: <a href="https://developer.android.com/reference/kotlin/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>>) : <a href="https://developer.android.com/reference/kotlin/java/lang/ref/WeakReference.html">WeakReference</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> <br>A weak reference used by <a href="-reference-queue-retained-object-tracker/">ReferenceQueueRetainedObjectTracker</a> to determine which objects become weakly reachable and which don’t. <a href="-reference-queue-retained-object-tracker/">ReferenceQueueRetainedObjectTracker</a> uses <a href="-keyed-weak-reference/key/">key</a> to keep track of <a href="-keyed-weak-reference/">KeyedWeakReference</a> instances that haven’t made it into the associated <a href="https://developer.android.com/reference/kotlin/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a> yet.</td>
+<td>[jvm]<br>class <a href="-keyed-weak-reference/">KeyedWeakReference</a>(referent: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>, val key: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val description: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val watchUptimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, referenceQueue: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/WeakReference.html">WeakReference</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>> <br>A weak reference used by <a href="-reference-queue-retained-object-tracker/">ReferenceQueueRetainedObjectTracker</a> to determine which objects become weakly reachable and which don’t. <a href="-reference-queue-retained-object-tracker/">ReferenceQueueRetainedObjectTracker</a> uses <a href="-keyed-weak-reference/key/">key</a> to keep track of <a href="-keyed-weak-reference/">KeyedWeakReference</a> instances that haven’t made it into the associated <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a> yet.</td>
</tr>
<tr>
<td><a href="-lazy-forwarding-event-listener/">LazyForwardingEventListener</a></td>
@@ -1032,7 +1032,7 @@
</tr>
<tr>
<td><a href="-no-leak-assertion-failed-error/">NoLeakAssertionFailedError</a></td>
-<td>[androidJvm]<br>class <a href="-no-leak-assertion-failed-error/">NoLeakAssertionFailedError</a>(val heapAnalysis: <a href="../shark/-heap-analysis-success/#955217568%2FMain%2F-467942417">HeapAnalysisSuccess</a>) : <a href="https://developer.android.com/reference/kotlin/java/lang/AssertionError.html">AssertionError</a><br>Thrown when using the <a href="-no-leak-assertion-failed-error/-companion/throw-on-application-leaks/">NoLeakAssertionFailedError.throwOnApplicationLeaks</a> HeapAnalysisReporter</td>
+<td>[androidJvm]<br>class <a href="-no-leak-assertion-failed-error/">NoLeakAssertionFailedError</a>(val heapAnalysis: <a href="../shark/-heap-analysis-success/#955217568%2FMain%2F-467942417">HeapAnalysisSuccess</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AssertionError.html">AssertionError</a><br>Thrown when using the <a href="-no-leak-assertion-failed-error/-companion/throw-on-application-leaks/">NoLeakAssertionFailedError.throwOnApplicationLeaks</a> HeapAnalysisReporter</td>
</tr>
<tr>
<td><a href="-notification-event-listener/">NotificationEventListener</a></td>
@@ -1084,11 +1084,11 @@
</tr>
<tr>
<td><a href="-screen-off-trigger/">ScreenOffTrigger</a></td>
-<td>[androidJvm]<br>class <a href="-screen-off-trigger/">ScreenOffTrigger</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://developer.android.com/reference/kotlin/java/util/concurrent/Executor.html">Executor</a>, analysisCallback: (<a href="-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result -> SharkLog.d { "$result" } })</td>
+<td>[androidJvm]<br>class <a href="-screen-off-trigger/">ScreenOffTrigger</a>(application: <a href="https://developer.android.com/reference/kotlin/android/app/Application.html">Application</a>, analysisClient: <a href="-heap-analysis-client/">HeapAnalysisClient</a>, analysisExecutor: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a>, analysisCallback: (<a href="-heap-analysis-job/-result/">HeapAnalysisJob.Result</a>) -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a> = { result -> SharkLog.d { "$result" } })</td>
</tr>
<tr>
<td><a href="-service-watcher/">ServiceWatcher</a></td>
-<td>[androidJvm]<br>class <a href="-service-watcher/">ServiceWatcher</a>(deletableObjectReporter: DeletableObjectReporter) : <a href="-installable-watcher/">InstallableWatcher</a><br>Expects services to become weakly reachable soon after they receive the <a href="https://developer.android.com/reference/kotlin/android/app/Service.html#ondestroy">Service.onDestroy</a> callback.</td>
+<td>[androidJvm]<br>class <a href="-service-watcher/">ServiceWatcher</a>(deletableObjectReporter: DeletableObjectReporter) : <a href="-installable-watcher/">InstallableWatcher</a><br>Expects services to become weakly reachable soon after they receive the <a href="https://developer.android.com/reference/kotlin/android/app/Service.html#onDestroy--">Service.onDestroy</a> callback.</td>
</tr>
<tr>
<td><a href="-skip-leak-detection/">SkipLeakDetection</a></td>
@@ -1103,6 +1103,10 @@
<td>[jvm]<br>object <a href="-test-description-holder/">TestDescriptionHolder</a> : TestRule<br>A TestRule that holds onto the test Description in a thread local while evaluating, making it possible to retrieve that test Description from the test thread via <a href="-test-description-holder/test-description/">testDescription</a>.</td>
</tr>
<tr>
+<td><a href="-test-heap-dump-file-provider/">TestHeapDumpFileProvider</a></td>
+<td>[jvm]<br>class <a href="-test-heap-dump-file-provider/">TestHeapDumpFileProvider</a>(heapDumpDirectoryProvider: <a href="-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>) : <a href="-heap-dump-file-provider/">HeapDumpFileProvider</a></td>
+</tr>
+<tr>
<td><a href="-test-name/">TestName</a></td>
<td>[jvm]<br>interface <a href="-test-name/">TestName</a></td>
</tr>
@@ -1182,10 +1186,6 @@
<td>[androidJvm]<br>fun <a href="../shark/-heap-diff/-companion/#-693027720%2FMain%2F-467942417">HeapDiff.Companion</a>.<a href="repeating-android-in-process-scenario/">repeatingAndroidInProcessScenario</a>(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = TargetContextHeapDumpDirectoryProvider( heapDumpDirectoryName = "heap_dumps_object_growth" ), heapDumper: HeapDumper = HeapDumper.forAndroidInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = true), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetector<br>Creates a RepeatingScenarioObjectGrowthDetector suitable for Android in process tests, such as Espresso tests.</td>
</tr>
<tr>
-<td><a href="repeating-dumping-test-scenario/">repeatingDumpingTestScenario</a></td>
-<td>[jvm]<br>fun <a href="../shark/-heap-diff/-companion/">HeapDiff.Companion</a>.<a href="repeating-dumping-test-scenario/">repeatingDumpingTestScenario</a>(objectGrowthDetector: <a href="../shark/-object-growth-detector/">ObjectGrowthDetector</a>, heapDumpDirectoryProvider: <a href="-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>, heapDumper: <a href="-heap-dumper/">HeapDumper</a>, heapDumpStorageStrategy: <a href="-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a>): <a href="../shark/-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a><br>Creates a <a href="../shark/-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a> suitable for junit based automated tests that can dump the heap.</td>
-</tr>
-<tr>
<td><a href="repeating-jvm-in-process-scenario/">repeatingJvmInProcessScenario</a></td>
<td>[jvm]<br>fun <a href="../shark/-heap-diff/-companion/">HeapDiff.Companion</a>.<a href="repeating-jvm-in-process-scenario/">repeatingJvmInProcessScenario</a>(objectGrowthDetector: <a href="../shark/-object-growth-detector/">ObjectGrowthDetector</a> = ObjectGrowthDetector.forJvmHeap(), heapDumpDirectoryProvider: <a href="-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a> = RepositoryRootHeapDumpDirectoryProvider( "heap_dumps_object_growth" ), heapDumper: <a href="-heap-dumper/">HeapDumper</a> = HeapDumper.forJvmInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = false), heapDumpStorageStrategy: <a href="-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a> = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): <a href="../shark/-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a><br>Creates a <a href="../shark/-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a> suitable for JVM in process tests.</td>
</tr>
diff --git a/api/package-list b/api/package-list
index 4edc427..5cb7037 100644
--- a/api/package-list
+++ b/api/package-list
@@ -7,7 +7,6 @@
$dokka.location:leakcanary//forUiAutomatorAsShell/leakcanary.HeapDumper.Companion#kotlin.Boolean#kotlin.String/PointingToDeclaration/leakcanary-repo/leakcanary/for-ui-automator-as-shell.md
$dokka.location:leakcanary//inProcess/leakcanary.GcTrigger.Companion#/PointingToDeclaration/leakcanary-repo/leakcanary/in-process.md
$dokka.location:leakcanary//repeatingAndroidInProcessScenario/shark.HeapDiff.Companion#shark.ObjectGrowthDetector#leakcanary.HeapDumpDirectoryProvider#leakcanary.HeapDumper#leakcanary.HeapDumpStorageStrategy/PointingToDeclaration/leakcanary-repo/leakcanary/repeating-android-in-process-scenario.md
-$dokka.location:leakcanary//repeatingDumpingTestScenario/shark.HeapDiff.Companion#shark.ObjectGrowthDetector#leakcanary.HeapDumpDirectoryProvider#leakcanary.HeapDumper#leakcanary.HeapDumpStorageStrategy/PointingToDeclaration/leakcanary-repo/leakcanary/repeating-dumping-test-scenario.md
$dokka.location:leakcanary//repeatingJvmInProcessScenario/shark.HeapDiff.Companion#shark.ObjectGrowthDetector#leakcanary.HeapDumpDirectoryProvider#leakcanary.HeapDumper#leakcanary.HeapDumpStorageStrategy/PointingToDeclaration/leakcanary-repo/leakcanary/repeating-jvm-in-process-scenario.md
$dokka.location:leakcanary//repeatingUiAutomatorScenario/shark.HeapDiff.Companion#shark.ObjectGrowthDetector#kotlin.String#leakcanary.HeapDumpDirectoryProvider#leakcanary.HeapDumper#leakcanary.HeapDumpStorageStrategy/PointingToDeclaration/leakcanary-repo/leakcanary/repeating-ui-automator-scenario.md
$dokka.location:leakcanary//withDetectorWarmup/leakcanary.HeapDumper#shark.ObjectGrowthDetector#kotlin.Boolean/PointingToDeclaration/leakcanary-repo/leakcanary/with-detector-warmup.md
@@ -97,11 +96,9 @@
$dokka.location:leakcanary/DetectLeaksAssert/assertNoLeaks/#kotlin.String/PointingToDeclaration/leakcanary-repo/leakcanary/-detect-leaks-assert/assert-no-leaks.md
$dokka.location:leakcanary/DetectLeaksInterceptor///PointingToDeclaration/leakcanary-repo/leakcanary/-detect-leaks-interceptor/index.md
$dokka.location:leakcanary/DetectLeaksInterceptor/waitUntilReadyForHeapAnalysis/#/PointingToDeclaration/leakcanary-repo/leakcanary/-detect-leaks-interceptor/wait-until-ready-for-heap-analysis.md
-$dokka.location:leakcanary/DumpingHeapGraphProvider.HeapDumpClosedListener///PointingToDeclaration/leakcanary-repo/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/index.md
-$dokka.location:leakcanary/DumpingHeapGraphProvider.HeapDumpClosedListener/onHeapDumpClosed/#java.io.File/PointingToDeclaration/leakcanary-repo/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/on-heap-dump-closed.md
-$dokka.location:leakcanary/DumpingHeapGraphProvider///PointingToDeclaration/leakcanary-repo/leakcanary/-dumping-heap-graph-provider/index.md
-$dokka.location:leakcanary/DumpingHeapGraphProvider/DumpingHeapGraphProvider/#leakcanary.HeapDumpFileProvider#leakcanary.HeapDumper#leakcanary.DumpingHeapGraphProvider.HeapDumpClosedListener/PointingToDeclaration/leakcanary-repo/leakcanary/-dumping-heap-graph-provider/-dumping-heap-graph-provider.md
-$dokka.location:leakcanary/DumpingHeapGraphProvider/openHeapGraph/#/PointingToDeclaration/leakcanary-repo/leakcanary/-dumping-heap-graph-provider/open-heap-graph.md
+$dokka.location:leakcanary/DumpingRepeatingScenarioObjectGrowthDetector///PointingToDeclaration/leakcanary-repo/leakcanary/-dumping-repeating-scenario-object-growth-detector/index.md
+$dokka.location:leakcanary/DumpingRepeatingScenarioObjectGrowthDetector/DumpingRepeatingScenarioObjectGrowthDetector/#shark.ObjectGrowthDetector#leakcanary.HeapDumpFileProvider#leakcanary.HeapDumper#leakcanary.HeapDumpStorageStrategy/PointingToDeclaration/leakcanary-repo/leakcanary/-dumping-repeating-scenario-object-growth-detector/-dumping-repeating-scenario-object-growth-detector.md
+$dokka.location:leakcanary/DumpingRepeatingScenarioObjectGrowthDetector/findRepeatedlyGrowingObjects/#kotlin.Int#kotlin.Int#kotlin.Function0[kotlin.Unit]/PointingToDeclaration/leakcanary-repo/leakcanary/-dumping-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects.md
$dokka.location:leakcanary/EventListener.Event.DumpingHeap///PointingToDeclaration/leakcanary-repo/leakcanary/-event-listener/-event/-dumping-heap/index.md
$dokka.location:leakcanary/EventListener.Event.DumpingHeap/DumpingHeap/#kotlin.String/PointingToDeclaration/leakcanary-repo/leakcanary/-event-listener/-event/-dumping-heap/-dumping-heap.md
$dokka.location:leakcanary/EventListener.Event.HeapAnalysisDone.HeapAnalysisFailed///PointingToDeclaration/leakcanary-repo/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/index.md
@@ -193,15 +190,16 @@
$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepHeapDumps///PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/index.md
$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepHeapDumpsOnObjectsGrowing///PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/index.md
$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepHeapDumpsOnObjectsGrowing/KeepHeapDumpsOnObjectsGrowing/#kotlin.Function1[java.io.File,kotlin.Unit]/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/-keep-heap-dumps-on-objects-growing.md
-$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepHeapDumpsOnObjectsGrowing/onHeapDumpClosed/#java.io.File/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dump-closed.md
-$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepHeapDumpsOnObjectsGrowing/onObjectGrowthDetectionComplete/#shark.HeapDiff/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-object-growth-detection-complete.md
+$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepHeapDumpsOnObjectsGrowing/onHeapDiffResult/#kotlin.Result[shark.HeapDiff]/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-diff-result.md
+$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepHeapDumpsOnObjectsGrowing/onHeapDumped/#java.io.File/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dumped.md
$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepZippedHeapDumpsOnObjectsGrowing///PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/index.md
$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepZippedHeapDumpsOnObjectsGrowing/KeepZippedHeapDumpsOnObjectsGrowing/#kotlin.Function1[java.io.File,kotlin.Unit]/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/-keep-zipped-heap-dumps-on-objects-growing.md
-$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepZippedHeapDumpsOnObjectsGrowing/onHeapDumpClosed/#java.io.File/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dump-closed.md
-$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepZippedHeapDumpsOnObjectsGrowing/onObjectGrowthDetectionComplete/#shark.HeapDiff/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-object-growth-detection-complete.md
+$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepZippedHeapDumpsOnObjectsGrowing/onHeapDiffResult/#kotlin.Result[shark.HeapDiff]/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-diff-result.md
+$dokka.location:leakcanary/HeapDumpStorageStrategy.KeepZippedHeapDumpsOnObjectsGrowing/onHeapDumped/#java.io.File/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dumped.md
$dokka.location:leakcanary/HeapDumpStorageStrategy///PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/index.md
+$dokka.location:leakcanary/HeapDumpStorageStrategy/onHeapDiffResult/#kotlin.Result[shark.HeapDiff]/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/on-heap-diff-result.md
$dokka.location:leakcanary/HeapDumpStorageStrategy/onHeapDumpClosed/#java.io.File/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/on-heap-dump-closed.md
-$dokka.location:leakcanary/HeapDumpStorageStrategy/onObjectGrowthDetectionComplete/#shark.HeapDiff/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/on-object-growth-detection-complete.md
+$dokka.location:leakcanary/HeapDumpStorageStrategy/onHeapDumped/#java.io.File/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dump-storage-strategy/on-heap-dumped.md
$dokka.location:leakcanary/HeapDumper.Companion///PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dumper/-companion/index.md
$dokka.location:leakcanary/HeapDumper///PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dumper/index.md
$dokka.location:leakcanary/HeapDumper/dumpHeap/#java.io.File/PointingToDeclaration/leakcanary-repo/leakcanary/-heap-dumper/dump-heap.md
@@ -390,6 +388,9 @@
$dokka.location:leakcanary/TestDescriptionHolder/isEvaluating/#/PointingToDeclaration/leakcanary-repo/leakcanary/-test-description-holder/is-evaluating.md
$dokka.location:leakcanary/TestDescriptionHolder/testDescription/#/PointingToDeclaration/leakcanary-repo/leakcanary/-test-description-holder/test-description.md
$dokka.location:leakcanary/TestDescriptionHolder/wrap/#org.junit.runners.model.Statement#org.junit.runner.Description/PointingToDeclaration/leakcanary-repo/leakcanary/-test-description-holder/wrap.md
+$dokka.location:leakcanary/TestHeapDumpFileProvider///PointingToDeclaration/leakcanary-repo/leakcanary/-test-heap-dump-file-provider/index.md
+$dokka.location:leakcanary/TestHeapDumpFileProvider/TestHeapDumpFileProvider/#leakcanary.HeapDumpDirectoryProvider/PointingToDeclaration/leakcanary-repo/leakcanary/-test-heap-dump-file-provider/-test-heap-dump-file-provider.md
+$dokka.location:leakcanary/TestHeapDumpFileProvider/newHeapDumpFile/#/PointingToDeclaration/leakcanary-repo/leakcanary/-test-heap-dump-file-provider/new-heap-dump-file.md
$dokka.location:leakcanary/TestName.FromStackTraceElement///PointingToDeclaration/leakcanary-repo/leakcanary/-test-name/-from-stack-trace-element/index.md
$dokka.location:leakcanary/TestName.FromStackTraceElement/FromStackTraceElement/#java.lang.StackTraceElement/PointingToDeclaration/leakcanary-repo/leakcanary/-test-name/-from-stack-trace-element/-from-stack-trace-element.md
$dokka.location:leakcanary/TestName.FromStackTraceElement/className/#/PointingToDeclaration/leakcanary-repo/leakcanary/-test-name/-from-stack-trace-element/class-name.md
@@ -1064,9 +1065,6 @@
$dokka.location:shark/HeapGraph/objects/#/PointingToDeclaration/leakcanary-repo/shark/-heap-graph/objects.md
$dokka.location:shark/HeapGraph/primitiveArrayCount/#/PointingToDeclaration/leakcanary-repo/shark/-heap-graph/primitive-array-count.md
$dokka.location:shark/HeapGraph/primitiveArrays/#/PointingToDeclaration/leakcanary-repo/shark/-heap-graph/primitive-arrays.md
-$dokka.location:shark/HeapGraphProvider.Companion///PointingToDeclaration/leakcanary-repo/shark/-heap-graph-provider/-companion/index.md
-$dokka.location:shark/HeapGraphProvider///PointingToDeclaration/leakcanary-repo/shark/-heap-graph-provider/index.md
-$dokka.location:shark/HeapGraphProvider/openHeapGraph/#/PointingToDeclaration/leakcanary-repo/shark/-heap-graph-provider/open-heap-graph.md
$dokka.location:shark/HeapGrowthCommand///PointingToDeclaration/leakcanary-repo/shark/-heap-growth-command/index.md
$dokka.location:shark/HeapGrowthCommand/HeapGrowthCommand/#/PointingToDeclaration/leakcanary-repo/shark/-heap-growth-command/-heap-growth-command.md
$dokka.location:shark/HeapGrowthCommand/run/#/PointingToDeclaration/leakcanary-repo/shark/-heap-growth-command/run.md
@@ -1712,7 +1710,7 @@
$dokka.location:shark/ObjectGrowthDetector.Companion///PointingToDeclaration/leakcanary-repo/shark/-object-growth-detector/-companion/index.md
$dokka.location:shark/ObjectGrowthDetector///PointingToDeclaration/leakcanary-repo/shark/-object-growth-detector/index.md
$dokka.location:shark/ObjectGrowthDetector/ObjectGrowthDetector/#shark.GcRootProvider#shark.ReferenceReader.Factory[shark.HeapObject]/PointingToDeclaration/leakcanary-repo/shark/-object-growth-detector/-object-growth-detector.md
-$dokka.location:shark/ObjectGrowthDetector/findGrowingObjects/#shark.CloseableHeapGraph#shark.HeapTraversalInput/PointingToDeclaration/leakcanary-repo/shark/-object-growth-detector/find-growing-objects.md
+$dokka.location:shark/ObjectGrowthDetector/findGrowingObjects/#shark.HeapGraph#shark.HeapTraversalInput/PointingToDeclaration/leakcanary-repo/shark/-object-growth-detector/find-growing-objects.md
$dokka.location:shark/ObjectInspector///PointingToDeclaration/leakcanary-repo/shark/-object-inspector/index.md
$dokka.location:shark/ObjectInspector/inspect/#shark.ObjectReporter/PointingToDeclaration/leakcanary-repo/shark/-object-inspector/inspect.md
$dokka.location:shark/ObjectInspectors.ANONYMOUS_CLASS///PointingToDeclaration/{"org.jetbrains.dokka.links.EnumEntryDRIExtra":{"key":"org.jetbrains.dokka.links.EnumEntryDRIExtra"}}leakcanary-repo/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/index.md
@@ -1912,16 +1910,10 @@
$dokka.location:shark/ReferenceReader.Factory/createFor/#shark.HeapGraph/PointingToDeclaration/leakcanary-repo/shark/-reference-reader/-factory/create-for.md
$dokka.location:shark/ReferenceReader///PointingToDeclaration/leakcanary-repo/shark/-reference-reader/index.md
$dokka.location:shark/ReferenceReader/read/#TypeParam(bounds=[shark.HeapObject])/PointingToDeclaration/leakcanary-repo/shark/-reference-reader/read.md
-$dokka.location:shark/RepeatingHeapGraphObjectGrowthDetector.CompletionListener///PointingToDeclaration/leakcanary-repo/shark/-repeating-heap-graph-object-growth-detector/-completion-listener/index.md
-$dokka.location:shark/RepeatingHeapGraphObjectGrowthDetector.CompletionListener/onObjectGrowthDetectionComplete/#shark.HeapDiff/PointingToDeclaration/leakcanary-repo/shark/-repeating-heap-graph-object-growth-detector/-completion-listener/on-object-growth-detection-complete.md
-$dokka.location:shark/RepeatingHeapGraphObjectGrowthDetector///PointingToDeclaration/leakcanary-repo/shark/-repeating-heap-graph-object-growth-detector/index.md
-$dokka.location:shark/RepeatingHeapGraphObjectGrowthDetector/RepeatingHeapGraphObjectGrowthDetector/#shark.ObjectGrowthDetector#shark.RepeatingHeapGraphObjectGrowthDetector.CompletionListener/PointingToDeclaration/leakcanary-repo/shark/-repeating-heap-graph-object-growth-detector/-repeating-heap-graph-object-growth-detector.md
-$dokka.location:shark/RepeatingHeapGraphObjectGrowthDetector/findRepeatedlyGrowingObjects/#kotlin.Int#kotlin.sequences.Sequence[shark.CloseableHeapGraph]/PointingToDeclaration/leakcanary-repo/shark/-repeating-heap-graph-object-growth-detector/find-repeatedly-growing-objects.md
$dokka.location:shark/RepeatingScenarioObjectGrowthDetector.Companion///PointingToDeclaration/leakcanary-repo/shark/-repeating-scenario-object-growth-detector/-companion/index.md
$dokka.location:shark/RepeatingScenarioObjectGrowthDetector.Companion/DEFAULT_MAX_HEAP_DUMPS/#/PointingToDeclaration/leakcanary-repo/shark/-repeating-scenario-object-growth-detector/-companion/-d-e-f-a-u-l-t_-m-a-x_-h-e-a-p_-d-u-m-p-s.md
$dokka.location:shark/RepeatingScenarioObjectGrowthDetector.Companion/DEFAULT_SCENARIO_LOOPS_PER_DUMP/#/PointingToDeclaration/leakcanary-repo/shark/-repeating-scenario-object-growth-detector/-companion/-d-e-f-a-u-l-t_-s-c-e-n-a-r-i-o_-l-o-o-p-s_-p-e-r_-d-u-m-p.md
$dokka.location:shark/RepeatingScenarioObjectGrowthDetector///PointingToDeclaration/leakcanary-repo/shark/-repeating-scenario-object-growth-detector/index.md
-$dokka.location:shark/RepeatingScenarioObjectGrowthDetector/RepeatingScenarioObjectGrowthDetector/#shark.HeapGraphProvider#shark.RepeatingHeapGraphObjectGrowthDetector/PointingToDeclaration/leakcanary-repo/shark/-repeating-scenario-object-growth-detector/-repeating-scenario-object-growth-detector.md
$dokka.location:shark/RepeatingScenarioObjectGrowthDetector/findRepeatedlyGrowingObjects/#kotlin.Int#kotlin.Int#kotlin.Function0[kotlin.Unit]/PointingToDeclaration/leakcanary-repo/shark/-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects.md
$dokka.location:shark/Retained///PointingToDeclaration/leakcanary-repo/shark/-retained/index.md
$dokka.location:shark/Retained/heapSize/#/PointingToDeclaration/leakcanary-repo/shark/-retained/heap-size.md
diff --git a/api/shark/-analyze-command/-companion/analyze/index.html b/api/shark/-analyze-command/-companion/analyze/index.html
index a6ba7e2..33f3628 100644
--- a/api/shark/-analyze-command/-companion/analyze/index.html
+++ b/api/shark/-analyze-command/-companion/analyze/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">AnalyzeCommand</a>/<a href="../">Companion</a>/<a href="./">analyze</a></p>
<h1 id="analyze">analyze<a class="headerlink" href="#analyze" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun CliktCommand.<a href="./">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</p>
+fun CliktCommand.<a href="./">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</p>
</article>
diff --git a/api/shark/-analyze-command/-companion/index.html b/api/shark/-analyze-command/-companion/index.html
index a64df47..d2ade71 100644
--- a/api/shark/-analyze-command/-companion/index.html
+++ b/api/shark/-analyze-command/-companion/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="analyze/">analyze</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="analyze/">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="analyze/">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-analyze-command/index.html b/api/shark/-analyze-command/index.html
index 482939a..aa11087 100644
--- a/api/shark/-analyze-command/index.html
+++ b/api/shark/-analyze-command/index.html
@@ -838,15 +838,15 @@
</tr>
<tr>
<td><a href="-companion/analyze/">analyze</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-neo4-j-command/-companion/dump/">dump</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, dbParentFolder: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, dbParentFolder: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/echo/">echo</a></td>
@@ -894,7 +894,7 @@
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="run/">run</a></td>
diff --git a/api/shark/-android-reference-matchers/index.html b/api/shark/-android-reference-matchers/index.html
index 02ac3ce..c1678f6 100644
--- a/api/shark/-android-reference-matchers/index.html
+++ b/api/shark/-android-reference-matchers/index.html
@@ -797,7 +797,7 @@
<p><a href="./">AndroidReferenceMatchers</a> is used to build the list of known references that cannot ever create leaks (via <a href="../-ignored-reference-matcher/">IgnoredReferenceMatcher</a>) as well as the list of known leaks in the Android Framework and in manufacturer specific Android implementations.</p>
<p>This class is a work in progress. You can help by reporting leak traces that seem to be caused by the Android SDK, here: <a href="https://github.com/square/leakcanary/issues/new">https://github.com/square/leakcanary/issues/new</a></p>
<p>We filter on SDK versions and Manufacturers because many of those leaks are specific to a given manufacturer implementation, they usually share their builds across multiple models, and the leaks eventually get fixed in newer versions.</p>
-<p>Most app developers should use <a href="-companion/app-defaults/">appDefaults</a>. However, you can also use a subset of <a href="./">AndroidReferenceMatchers</a> by creating an <a href="https://developer.android.com/reference/kotlin/java/util/EnumSet.html">EnumSet</a> that matches your needs and calling buildKnownReferences.</p>
+<p>Most app developers should use <a href="-companion/app-defaults/">appDefaults</a>. However, you can also use a subset of <a href="./">AndroidReferenceMatchers</a> by creating an <a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html">EnumSet</a> that matches your needs and calling buildKnownReferences.</p>
<h2 id="entries">Entries<a class="headerlink" href="#entries" title="Permanent link">¶</a></h2>
<table>
<thead>
diff --git a/api/shark/-closeable-heap-graph/index.html b/api/shark/-closeable-heap-graph/index.html
index 86edc03..8a0169f 100644
--- a/api/shark/-closeable-heap-graph/index.html
+++ b/api/shark/-closeable-heap-graph/index.html
@@ -784,7 +784,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">CloseableHeapGraph</a></p>
<h1 id="closeableheapgraph">CloseableHeapGraph<a class="headerlink" href="#closeableheapgraph" title="Permanent link">¶</a></h1>
-<p>interface <a href="./">CloseableHeapGraph</a> : <a href="../-heap-graph/">HeapGraph</a>, <a href="https://developer.android.com/reference/kotlin/java/io/Closeable.html">Closeable</a></p>
+<p>interface <a href="./">CloseableHeapGraph</a> : <a href="../-heap-graph/">HeapGraph</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html">Closeable</a></p>
<p>A <a href="../-heap-graph/">HeapGraph</a> that should be closed after being used.</p>
<h4 id="inheritors">Inheritors<a class="headerlink" href="#inheritors" title="Permanent link">¶</a></h4>
<table>
diff --git a/api/shark/-decorated-path/index.html b/api/shark/-decorated-path/index.html
index fc746c2..859cc4b 100644
--- a/api/shark/-decorated-path/index.html
+++ b/api/shark/-decorated-path/index.html
@@ -809,7 +809,7 @@
</tr>
<tr>
<td><a href="./#-536605126%2FFunctions%2F1504522321">forEach</a></td>
-<td>[jvm]<br>open fun <a href="./#-536605126%2FFunctions%2F1504522321">forEach</a>(p0: <a href="https://developer.android.com/reference/kotlin/java/util/function/Consumer.html">Consumer</a><in Entity>)</td>
+<td>[jvm]<br>open fun <a href="./#-536605126%2FFunctions%2F1504522321">forEach</a>(p0: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html">Consumer</a><in Entity>)</td>
</tr>
<tr>
<td><a href="iterator/">iterator</a></td>
@@ -841,7 +841,7 @@
</tr>
<tr>
<td><a href="./#-1387152138%2FFunctions%2F1504522321">spliterator</a></td>
-<td>[jvm]<br>open fun <a href="./#-1387152138%2FFunctions%2F1504522321">spliterator</a>(): <a href="https://developer.android.com/reference/kotlin/java/util/Spliterator.html">Spliterator</a><Entity></td>
+<td>[jvm]<br>open fun <a href="./#-1387152138%2FFunctions%2F1504522321">spliterator</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html">Spliterator</a><Entity></td>
</tr>
<tr>
<td><a href="./#-95485738%2FFunctions%2F1504522321">startNode</a></td>
diff --git a/api/shark/-deobfuscate-hprof-command/index.html b/api/shark/-deobfuscate-hprof-command/index.html
index ebe481a..17058bf 100644
--- a/api/shark/-deobfuscate-hprof-command/index.html
+++ b/api/shark/-deobfuscate-hprof-command/index.html
@@ -816,15 +816,15 @@
</tr>
<tr>
<td><a href="../-analyze-command/-companion/analyze/">analyze</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-neo4-j-command/-companion/dump/">dump</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, dbParentFolder: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, dbParentFolder: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/echo/">echo</a></td>
@@ -872,7 +872,7 @@
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="run/">run</a></td>
diff --git a/api/shark/-dominators/index.html b/api/shark/-dominators/index.html
index 6947352..9f2e49e 100644
--- a/api/shark/-dominators/index.html
+++ b/api/shark/-dominators/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">Dominators</a></p>
<h1 id="dominators">Dominators<a class="headerlink" href="#dominators" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">Dominators</a>(val dominatorNodes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, <a href="../-object-dominators/-dominator-node/">ObjectDominators.DominatorNode</a>>) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></p>
+class <a href="./">Dominators</a>(val dominatorNodes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, <a href="../-object-dominators/-dominator-node/">ObjectDominators.DominatorNode</a>>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
diff --git a/api/shark/-dump-process-command/-companion/dump-heap/index.html b/api/shark/-dump-process-command/-companion/dump-heap/index.html
index 59076ec..e40f345 100644
--- a/api/shark/-dump-process-command/-companion/dump-heap/index.html
+++ b/api/shark/-dump-process-command/-companion/dump-heap/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">DumpProcessCommand</a>/<a href="../">Companion</a>/<a href="./">dumpHeap</a></p>
<h1 id="dumpheap">dumpHeap<a class="headerlink" href="#dumpheap" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun CliktCommand.<a href="./">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+fun CliktCommand.<a href="./">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
</article>
diff --git a/api/shark/-dump-process-command/-companion/index.html b/api/shark/-dump-process-command/-companion/index.html
index 53e0bfb..9cac5c6 100644
--- a/api/shark/-dump-process-command/-companion/index.html
+++ b/api/shark/-dump-process-command/-companion/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-dump-process-command/index.html b/api/shark/-dump-process-command/index.html
index 9de6037..f3f4b52 100644
--- a/api/shark/-dump-process-command/index.html
+++ b/api/shark/-dump-process-command/index.html
@@ -838,15 +838,15 @@
</tr>
<tr>
<td><a href="../-analyze-command/-companion/analyze/">analyze</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-neo4-j-command/-companion/dump/">dump</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, dbParentFolder: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, dbParentFolder: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="-companion/dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/echo/">echo</a></td>
@@ -894,7 +894,7 @@
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="run/">run</a></td>
diff --git a/api/shark/-file-source-provider/-file-source-provider/index.html b/api/shark/-file-source-provider/-file-source-provider/index.html
index 4af9c75..c0d3ab3 100644
--- a/api/shark/-file-source-provider/-file-source-provider/index.html
+++ b/api/shark/-file-source-provider/-file-source-provider/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">FileSourceProvider</a>/<a href="./">FileSourceProvider</a></p>
<h1 id="filesourceprovider">FileSourceProvider<a class="headerlink" href="#filesourceprovider" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+constructor(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
</article>
diff --git a/api/shark/-file-source-provider/index.html b/api/shark/-file-source-provider/index.html
index f9016c3..395c1e4 100644
--- a/api/shark/-file-source-provider/index.html
+++ b/api/shark/-file-source-provider/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">FileSourceProvider</a></p>
<h1 id="filesourceprovider">FileSourceProvider<a class="headerlink" href="#filesourceprovider" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">FileSourceProvider</a>(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) : <a href="../-dual-source-provider/">DualSourceProvider</a></p>
+class <a href="./">FileSourceProvider</a>(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) : <a href="../-dual-source-provider/">DualSourceProvider</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -790,7 +790,7 @@
<tbody>
<tr>
<td><a href="-file-source-provider/">FileSourceProvider</a></td>
-<td>[jvm]<br>constructor(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td>[jvm]<br>constructor(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-gc-root/-interned-string/index.html b/api/shark/-gc-root/-interned-string/index.html
index c9a0bf5..2c15594 100644
--- a/api/shark/-gc-root/-interned-string/index.html
+++ b/api/shark/-gc-root/-interned-string/index.html
@@ -779,7 +779,7 @@
<h1 id="internedstring">InternedString<a class="headerlink" href="#internedstring" title="Permanent link">¶</a></h1>
<p>[jvm]\
class <a href="./">InternedString</a>(val id: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>) : <a href="../">GcRoot</a></p>
-<p>An interned string, see <a href="https://developer.android.com/reference/kotlin/java/lang/String.html#intern">java.lang.String.intern</a>.</p>
+<p>An interned string, see <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#intern--">java.lang.String.intern</a>.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
diff --git a/api/shark/-gc-root/index.html b/api/shark/-gc-root/index.html
index 6b96eca..9cb5272 100644
--- a/api/shark/-gc-root/index.html
+++ b/api/shark/-gc-root/index.html
@@ -863,7 +863,7 @@
</tr>
<tr>
<td><a href="-interned-string/">InternedString</a></td>
-<td>[jvm]<br>class <a href="-interned-string/">InternedString</a>(val id: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>) : <a href="./">GcRoot</a><br>An interned string, see <a href="https://developer.android.com/reference/kotlin/java/lang/String.html#intern">java.lang.String.intern</a>.</td>
+<td>[jvm]<br>class <a href="-interned-string/">InternedString</a>(val id: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>) : <a href="./">GcRoot</a><br>An interned string, see <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#intern--">java.lang.String.intern</a>.</td>
</tr>
<tr>
<td><a href="-java-frame/">JavaFrame</a></td>
diff --git a/api/shark/-heap-analysis-exception/index.html b/api/shark/-heap-analysis-exception/index.html
index 3ce029d..967f071 100644
--- a/api/shark/-heap-analysis-exception/index.html
+++ b/api/shark/-heap-analysis-exception/index.html
@@ -792,7 +792,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">HeapAnalysisException</a></p>
<h1 id="heapanalysisexception">HeapAnalysisException<a class="headerlink" href="#heapanalysisexception" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">HeapAnalysisException</a>(cause: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html">Throwable</a>) : <a href="https://developer.android.com/reference/kotlin/java/lang/RuntimeException.html">RuntimeException</a></p>
+class <a href="./">HeapAnalysisException</a>(cause: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html">Throwable</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html">RuntimeException</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -846,7 +846,7 @@
</tr>
<tr>
<td><a href="./#2050903719%2FFunctions%2F1504522321">getStackTrace</a></td>
-<td>[jvm]<br>open fun <a href="./#2050903719%2FFunctions%2F1504522321">getStackTrace</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html">Array</a><<a href="https://developer.android.com/reference/kotlin/java/lang/StackTraceElement.html">StackTraceElement</a>></td>
+<td>[jvm]<br>open fun <a href="./#2050903719%2FFunctions%2F1504522321">getStackTrace</a>(): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html">Array</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StackTraceElement.html">StackTraceElement</a>></td>
</tr>
<tr>
<td><a href="./#672492560%2FFunctions%2F1504522321">getSuppressed</a></td>
@@ -858,11 +858,11 @@
</tr>
<tr>
<td><a href="./#-1769529168%2FFunctions%2F1504522321">printStackTrace</a></td>
-<td>[jvm]<br>open fun <a href="./#-1769529168%2FFunctions%2F1504522321">printStackTrace</a>()<br>open fun <a href="./#1841853697%2FFunctions%2F1504522321">printStackTrace</a>(p0: <a href="https://developer.android.com/reference/kotlin/java/io/PrintStream.html">PrintStream</a>)<br>open fun <a href="./#1175535278%2FFunctions%2F1504522321">printStackTrace</a>(p0: <a href="https://developer.android.com/reference/kotlin/java/io/PrintWriter.html">PrintWriter</a>)</td>
+<td>[jvm]<br>open fun <a href="./#-1769529168%2FFunctions%2F1504522321">printStackTrace</a>()<br>open fun <a href="./#1841853697%2FFunctions%2F1504522321">printStackTrace</a>(p0: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html">PrintStream</a>)<br>open fun <a href="./#1175535278%2FFunctions%2F1504522321">printStackTrace</a>(p0: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html">PrintWriter</a>)</td>
</tr>
<tr>
<td><a href="./#2135801318%2FFunctions%2F1504522321">setStackTrace</a></td>
-<td>[jvm]<br>open fun <a href="./#2135801318%2FFunctions%2F1504522321">setStackTrace</a>(p0: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html">Array</a><<a href="https://developer.android.com/reference/kotlin/java/lang/StackTraceElement.html">StackTraceElement</a>>)</td>
+<td>[jvm]<br>open fun <a href="./#2135801318%2FFunctions%2F1504522321">setStackTrace</a>(p0: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html">Array</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StackTraceElement.html">StackTraceElement</a>>)</td>
</tr>
<tr>
<td><a href="to-string/">toString</a></td>
diff --git a/api/shark/-heap-analysis-failure/-heap-analysis-failure/index.html b/api/shark/-heap-analysis-failure/-heap-analysis-failure/index.html
index e6184f0..aec9417 100644
--- a/api/shark/-heap-analysis-failure/-heap-analysis-failure/index.html
+++ b/api/shark/-heap-analysis-failure/-heap-analysis-failure/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">HeapAnalysisFailure</a>/<a href="./">HeapAnalysisFailure</a></p>
<h1 id="heapanalysisfailure">HeapAnalysisFailure<a class="headerlink" href="#heapanalysisfailure" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, exception: <a href="../../-heap-analysis-exception/">HeapAnalysisException</a>)</p>
+constructor(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, exception: <a href="../../-heap-analysis-exception/">HeapAnalysisException</a>)</p>
</article>
diff --git a/api/shark/-heap-analysis-failure/created-at-time-millis/index.html b/api/shark/-heap-analysis-failure/created-at-time-millis/index.html
index 0f59b8c..23ff6a7 100644
--- a/api/shark/-heap-analysis-failure/created-at-time-millis/index.html
+++ b/api/shark/-heap-analysis-failure/created-at-time-millis/index.html
@@ -757,7 +757,7 @@
<h1 id="createdattimemillis">createdAtTimeMillis<a class="headerlink" href="#createdattimemillis" title="Permanent link">¶</a></h1>
<p>[jvm]\
open override val <a href="./">createdAtTimeMillis</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></p>
-<p>The <a href="https://developer.android.com/reference/kotlin/java/lang/System.html#currenttimemillis">System.currentTimeMillis</a> when this <a href="../../-heap-analysis/">HeapAnalysis</a> instance was created.</p>
+<p>The <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--">System.currentTimeMillis</a> when this <a href="../../-heap-analysis/">HeapAnalysis</a> instance was created.</p>
</article>
diff --git a/api/shark/-heap-analysis-failure/heap-dump-file/index.html b/api/shark/-heap-analysis-failure/heap-dump-file/index.html
index ee16ff3..aa2a50d 100644
--- a/api/shark/-heap-analysis-failure/heap-dump-file/index.html
+++ b/api/shark/-heap-analysis-failure/heap-dump-file/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">HeapAnalysisFailure</a>/<a href="./">heapDumpFile</a></p>
<h1 id="heapdumpfile">heapDumpFile<a class="headerlink" href="#heapdumpfile" title="Permanent link">¶</a></h1>
<p>[jvm]\
-open override val <a href="./">heapDumpFile</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+open override val <a href="./">heapDumpFile</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
<p>The hprof file that was analyzed.</p>
diff --git a/api/shark/-heap-analysis-failure/index.html b/api/shark/-heap-analysis-failure/index.html
index 3cd01fa..51697df 100644
--- a/api/shark/-heap-analysis-failure/index.html
+++ b/api/shark/-heap-analysis-failure/index.html
@@ -792,7 +792,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">HeapAnalysisFailure</a></p>
<h1 id="heapanalysisfailure">HeapAnalysisFailure<a class="headerlink" href="#heapanalysisfailure" title="Permanent link">¶</a></h1>
<p>[jvm]\
-data class <a href="./">HeapAnalysisFailure</a>(val heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, val createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val exception: <a href="../-heap-analysis-exception/">HeapAnalysisException</a>) : <a href="../-heap-analysis/">HeapAnalysis</a></p>
+data class <a href="./">HeapAnalysisFailure</a>(val heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, val createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val exception: <a href="../-heap-analysis-exception/">HeapAnalysisException</a>) : <a href="../-heap-analysis/">HeapAnalysis</a></p>
<p>The analysis performed by <a href="../-heap-analyzer/">HeapAnalyzer</a> did not complete successfully.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
@@ -805,7 +805,7 @@
<tbody>
<tr>
<td><a href="-heap-analysis-failure/">HeapAnalysisFailure</a></td>
-<td>[jvm]<br>constructor(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, exception: <a href="../-heap-analysis-exception/">HeapAnalysisException</a>)</td>
+<td>[jvm]<br>constructor(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, exception: <a href="../-heap-analysis-exception/">HeapAnalysisException</a>)</td>
</tr>
</tbody>
</table>
@@ -854,7 +854,7 @@
</tr>
<tr>
<td><a href="created-at-time-millis/">createdAtTimeMillis</a></td>
-<td>[jvm]<br>open override val <a href="created-at-time-millis/">createdAtTimeMillis</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a><br>The <a href="https://developer.android.com/reference/kotlin/java/lang/System.html#currenttimemillis">System.currentTimeMillis</a> when this <a href="../-heap-analysis/">HeapAnalysis</a> instance was created.</td>
+<td>[jvm]<br>open override val <a href="created-at-time-millis/">createdAtTimeMillis</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a><br>The <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--">System.currentTimeMillis</a> when this <a href="../-heap-analysis/">HeapAnalysis</a> instance was created.</td>
</tr>
<tr>
<td><a href="dump-duration-millis/">dumpDurationMillis</a></td>
@@ -866,7 +866,7 @@
</tr>
<tr>
<td><a href="heap-dump-file/">heapDumpFile</a></td>
-<td>[jvm]<br>open override val <a href="heap-dump-file/">heapDumpFile</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a><br>The hprof file that was analyzed.</td>
+<td>[jvm]<br>open override val <a href="heap-dump-file/">heapDumpFile</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a><br>The hprof file that was analyzed.</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-heap-analysis-success/-heap-analysis-success/index.html b/api/shark/-heap-analysis-success/-heap-analysis-success/index.html
index c8d2fe1..80d9a9c 100644
--- a/api/shark/-heap-analysis-success/-heap-analysis-success/index.html
+++ b/api/shark/-heap-analysis-success/-heap-analysis-success/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">HeapAnalysisSuccess</a>/<a href="./">HeapAnalysisSuccess</a></p>
<h1 id="heapanalysissuccess">HeapAnalysisSuccess<a class="headerlink" href="#heapanalysissuccess" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, metadata: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, applicationLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-application-leak/">ApplicationLeak</a>>, libraryLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-library-leak/">LibraryLeak</a>>, unreachableObjects: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-leak-trace-object/">LeakTraceObject</a>>)</p>
+constructor(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, metadata: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, applicationLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-application-leak/">ApplicationLeak</a>>, libraryLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-library-leak/">LibraryLeak</a>>, unreachableObjects: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-leak-trace-object/">LeakTraceObject</a>>)</p>
</article>
diff --git a/api/shark/-heap-analysis-success/created-at-time-millis/index.html b/api/shark/-heap-analysis-success/created-at-time-millis/index.html
index 7168dfb..02d69c8 100644
--- a/api/shark/-heap-analysis-success/created-at-time-millis/index.html
+++ b/api/shark/-heap-analysis-success/created-at-time-millis/index.html
@@ -757,7 +757,7 @@
<h1 id="createdattimemillis">createdAtTimeMillis<a class="headerlink" href="#createdattimemillis" title="Permanent link">¶</a></h1>
<p>[jvm]\
open override val <a href="./">createdAtTimeMillis</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></p>
-<p>The <a href="https://developer.android.com/reference/kotlin/java/lang/System.html#currenttimemillis">System.currentTimeMillis</a> when this <a href="../../-heap-analysis/">HeapAnalysis</a> instance was created.</p>
+<p>The <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--">System.currentTimeMillis</a> when this <a href="../../-heap-analysis/">HeapAnalysis</a> instance was created.</p>
</article>
diff --git a/api/shark/-heap-analysis-success/heap-dump-file/index.html b/api/shark/-heap-analysis-success/heap-dump-file/index.html
index 69c0554..077bac0 100644
--- a/api/shark/-heap-analysis-success/heap-dump-file/index.html
+++ b/api/shark/-heap-analysis-success/heap-dump-file/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">HeapAnalysisSuccess</a>/<a href="./">heapDumpFile</a></p>
<h1 id="heapdumpfile">heapDumpFile<a class="headerlink" href="#heapdumpfile" title="Permanent link">¶</a></h1>
<p>[jvm]\
-open override val <a href="./">heapDumpFile</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+open override val <a href="./">heapDumpFile</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
<p>The hprof file that was analyzed.</p>
diff --git a/api/shark/-heap-analysis-success/index.html b/api/shark/-heap-analysis-success/index.html
index 79efd13..bb3848a 100644
--- a/api/shark/-heap-analysis-success/index.html
+++ b/api/shark/-heap-analysis-success/index.html
@@ -792,7 +792,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">HeapAnalysisSuccess</a></p>
<h1 id="heapanalysissuccess">HeapAnalysisSuccess<a class="headerlink" href="#heapanalysissuccess" title="Permanent link">¶</a></h1>
<p>[jvm]\
-data class <a href="./">HeapAnalysisSuccess</a>(val heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, val createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val metadata: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, val applicationLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-application-leak/">ApplicationLeak</a>>, val libraryLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-library-leak/">LibraryLeak</a>>, val unreachableObjects: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-leak-trace-object/">LeakTraceObject</a>>) : <a href="../-heap-analysis/">HeapAnalysis</a></p>
+data class <a href="./">HeapAnalysisSuccess</a>(val heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, val createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val metadata: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, val applicationLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-application-leak/">ApplicationLeak</a>>, val libraryLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-library-leak/">LibraryLeak</a>>, val unreachableObjects: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-leak-trace-object/">LeakTraceObject</a>>) : <a href="../-heap-analysis/">HeapAnalysis</a></p>
<p>The result of a successful heap analysis performed by <a href="../-heap-analyzer/">HeapAnalyzer</a>.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
@@ -805,7 +805,7 @@
<tbody>
<tr>
<td><a href="-heap-analysis-success/">HeapAnalysisSuccess</a></td>
-<td>[jvm]<br>constructor(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, metadata: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, applicationLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-application-leak/">ApplicationLeak</a>>, libraryLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-library-leak/">LibraryLeak</a>>, unreachableObjects: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-leak-trace-object/">LeakTraceObject</a>>)</td>
+<td>[jvm]<br>constructor(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, metadata: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, applicationLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-application-leak/">ApplicationLeak</a>>, libraryLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-library-leak/">LibraryLeak</a>>, unreachableObjects: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-leak-trace-object/">LeakTraceObject</a>>)</td>
</tr>
</tbody>
</table>
@@ -866,7 +866,7 @@
</tr>
<tr>
<td><a href="created-at-time-millis/">createdAtTimeMillis</a></td>
-<td>[jvm]<br>open override val <a href="created-at-time-millis/">createdAtTimeMillis</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a><br>The <a href="https://developer.android.com/reference/kotlin/java/lang/System.html#currenttimemillis">System.currentTimeMillis</a> when this <a href="../-heap-analysis/">HeapAnalysis</a> instance was created.</td>
+<td>[jvm]<br>open override val <a href="created-at-time-millis/">createdAtTimeMillis</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a><br>The <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--">System.currentTimeMillis</a> when this <a href="../-heap-analysis/">HeapAnalysis</a> instance was created.</td>
</tr>
<tr>
<td><a href="dump-duration-millis/">dumpDurationMillis</a></td>
@@ -874,7 +874,7 @@
</tr>
<tr>
<td><a href="heap-dump-file/">heapDumpFile</a></td>
-<td>[jvm]<br>open override val <a href="heap-dump-file/">heapDumpFile</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a><br>The hprof file that was analyzed.</td>
+<td>[jvm]<br>open override val <a href="heap-dump-file/">heapDumpFile</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a><br>The hprof file that was analyzed.</td>
</tr>
<tr>
<td><a href="library-leaks/">libraryLeaks</a></td>
diff --git a/api/shark/-heap-analysis/created-at-time-millis/index.html b/api/shark/-heap-analysis/created-at-time-millis/index.html
index 0f05c41..8ee7e14 100644
--- a/api/shark/-heap-analysis/created-at-time-millis/index.html
+++ b/api/shark/-heap-analysis/created-at-time-millis/index.html
@@ -757,7 +757,7 @@
<h1 id="createdattimemillis">createdAtTimeMillis<a class="headerlink" href="#createdattimemillis" title="Permanent link">¶</a></h1>
<p>[jvm]\
abstract val <a href="./">createdAtTimeMillis</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a></p>
-<p>The <a href="https://developer.android.com/reference/kotlin/java/lang/System.html#currenttimemillis">System.currentTimeMillis</a> when this <a href="../">HeapAnalysis</a> instance was created.</p>
+<p>The <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--">System.currentTimeMillis</a> when this <a href="../">HeapAnalysis</a> instance was created.</p>
</article>
diff --git a/api/shark/-heap-analysis/heap-dump-file/index.html b/api/shark/-heap-analysis/heap-dump-file/index.html
index 6ae6017..bc59893 100644
--- a/api/shark/-heap-analysis/heap-dump-file/index.html
+++ b/api/shark/-heap-analysis/heap-dump-file/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">HeapAnalysis</a>/<a href="./">heapDumpFile</a></p>
<h1 id="heapdumpfile">heapDumpFile<a class="headerlink" href="#heapdumpfile" title="Permanent link">¶</a></h1>
<p>[jvm]\
-abstract val <a href="./">heapDumpFile</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+abstract val <a href="./">heapDumpFile</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
<p>The hprof file that was analyzed.</p>
diff --git a/api/shark/-heap-analysis/index.html b/api/shark/-heap-analysis/index.html
index ba39e14..9d4cb91 100644
--- a/api/shark/-heap-analysis/index.html
+++ b/api/shark/-heap-analysis/index.html
@@ -784,7 +784,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">HeapAnalysis</a></p>
<h1 id="heapanalysis">HeapAnalysis<a class="headerlink" href="#heapanalysis" title="Permanent link">¶</a></h1>
-<p>sealed class <a href="./">HeapAnalysis</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></p>
+<p>sealed class <a href="./">HeapAnalysis</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></p>
<p>The result of an analysis performed by <a href="../-heap-analyzer/">HeapAnalyzer</a>, either a <a href="../-heap-analysis-success/">HeapAnalysisSuccess</a> or a <a href="../-heap-analysis-failure/">HeapAnalysisFailure</a>. This class is serializable however there are no guarantees of forward compatibility.</p>
<h4 id="inheritors">Inheritors<a class="headerlink" href="#inheritors" title="Permanent link">¶</a></h4>
<table>
@@ -832,7 +832,7 @@
</tr>
<tr>
<td><a href="created-at-time-millis/">createdAtTimeMillis</a></td>
-<td>[jvm]<br>abstract val <a href="created-at-time-millis/">createdAtTimeMillis</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a><br>The <a href="https://developer.android.com/reference/kotlin/java/lang/System.html#currenttimemillis">System.currentTimeMillis</a> when this <a href="./">HeapAnalysis</a> instance was created.</td>
+<td>[jvm]<br>abstract val <a href="created-at-time-millis/">createdAtTimeMillis</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a><br>The <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--">System.currentTimeMillis</a> when this <a href="./">HeapAnalysis</a> instance was created.</td>
</tr>
<tr>
<td><a href="dump-duration-millis/">dumpDurationMillis</a></td>
@@ -840,7 +840,7 @@
</tr>
<tr>
<td><a href="heap-dump-file/">heapDumpFile</a></td>
-<td>[jvm]<br>abstract val <a href="heap-dump-file/">heapDumpFile</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a><br>The hprof file that was analyzed.</td>
+<td>[jvm]<br>abstract val <a href="heap-dump-file/">heapDumpFile</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a><br>The hprof file that was analyzed.</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-heap-analyzer/analyze/index.html b/api/shark/-heap-analyzer/analyze/index.html
index d77289e..205b1ea 100644
--- a/api/shark/-heap-analyzer/analyze/index.html
+++ b/api/shark/-heap-analyzer/analyze/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">HeapAnalyzer</a>/<a href="./">analyze</a></p>
<h1 id="analyze">analyze<a class="headerlink" href="#analyze" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, graph: <a href="../../-heap-graph/">HeapGraph</a>, leakingObjectFinder: <a href="../../-leaking-object-finder/">LeakingObjectFinder</a>, referenceMatchers: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-reference-matcher/">ReferenceMatcher</a>> = emptyList(), computeRetainedHeapSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a> = false, objectInspectors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-object-inspector/">ObjectInspector</a>> = emptyList(), metadataExtractor: <a href="../../-metadata-extractor/">MetadataExtractor</a> = MetadataExtractor.NO_OP): <a href="../../-heap-analysis/">HeapAnalysis</a></p>
+fun <a href="./">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, graph: <a href="../../-heap-graph/">HeapGraph</a>, leakingObjectFinder: <a href="../../-leaking-object-finder/">LeakingObjectFinder</a>, referenceMatchers: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-reference-matcher/">ReferenceMatcher</a>> = emptyList(), computeRetainedHeapSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a> = false, objectInspectors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../../-object-inspector/">ObjectInspector</a>> = emptyList(), metadataExtractor: <a href="../../-metadata-extractor/">MetadataExtractor</a> = MetadataExtractor.NO_OP): <a href="../../-heap-analysis/">HeapAnalysis</a></p>
<p>Searches the heap dump for leaking instances and then computes the shortest strong reference path from those instances to the GC roots.</p>
diff --git a/api/shark/-heap-analyzer/index.html b/api/shark/-heap-analyzer/index.html
index d1a97b0..e00d621 100644
--- a/api/shark/-heap-analyzer/index.html
+++ b/api/shark/-heap-analyzer/index.html
@@ -806,7 +806,7 @@
<tbody>
<tr>
<td><a href="analyze/">analyze</a></td>
-<td>[jvm]<br>fun <a href="analyze/">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, graph: <a href="../-heap-graph/">HeapGraph</a>, leakingObjectFinder: <a href="../-leaking-object-finder/">LeakingObjectFinder</a>, referenceMatchers: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-reference-matcher/">ReferenceMatcher</a>> = emptyList(), computeRetainedHeapSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a> = false, objectInspectors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-object-inspector/">ObjectInspector</a>> = emptyList(), metadataExtractor: <a href="../-metadata-extractor/">MetadataExtractor</a> = MetadataExtractor.NO_OP): <a href="../-heap-analysis/">HeapAnalysis</a><br>Searches the heap dump for leaking instances and then computes the shortest strong reference path from those instances to the GC roots.</td>
+<td>[jvm]<br>fun <a href="analyze/">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, graph: <a href="../-heap-graph/">HeapGraph</a>, leakingObjectFinder: <a href="../-leaking-object-finder/">LeakingObjectFinder</a>, referenceMatchers: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-reference-matcher/">ReferenceMatcher</a>> = emptyList(), computeRetainedHeapSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a> = false, objectInspectors: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-object-inspector/">ObjectInspector</a>> = emptyList(), metadataExtractor: <a href="../-metadata-extractor/">MetadataExtractor</a> = MetadataExtractor.NO_OP): <a href="../-heap-analysis/">HeapAnalysis</a><br>Searches the heap dump for leaking instances and then computes the shortest strong reference path from those instances to the GC roots.</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-heap-diff/-companion/index.html b/api/shark/-heap-diff/-companion/index.html
index f1603d0..6a9d565 100644
--- a/api/shark/-heap-diff/-companion/index.html
+++ b/api/shark/-heap-diff/-companion/index.html
@@ -786,10 +786,6 @@
<td>[androidJvm]<br>fun <a href="./#-693027720%2FMain%2F-467942417">HeapDiff.Companion</a>.<a href="../../../leakcanary/repeating-android-in-process-scenario/">repeatingAndroidInProcessScenario</a>(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = TargetContextHeapDumpDirectoryProvider( heapDumpDirectoryName = "heap_dumps_object_growth" ), heapDumper: HeapDumper = HeapDumper.forAndroidInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = true), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetector<br>Creates a RepeatingScenarioObjectGrowthDetector suitable for Android in process tests, such as Espresso tests.</td>
</tr>
<tr>
-<td><a href="../../../leakcanary/repeating-dumping-test-scenario/">repeatingDumpingTestScenario</a></td>
-<td>[jvm]<br>fun <a href="./">HeapDiff.Companion</a>.<a href="../../../leakcanary/repeating-dumping-test-scenario/">repeatingDumpingTestScenario</a>(objectGrowthDetector: <a href="../../-object-growth-detector/">ObjectGrowthDetector</a>, heapDumpDirectoryProvider: <a href="../../../leakcanary/-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a>, heapDumper: <a href="../../../leakcanary/-heap-dumper/">HeapDumper</a>, heapDumpStorageStrategy: <a href="../../../leakcanary/-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a>): <a href="../../-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a><br>Creates a <a href="../../-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a> suitable for junit based automated tests that can dump the heap.</td>
-</tr>
-<tr>
<td><a href="../../../leakcanary/repeating-jvm-in-process-scenario/">repeatingJvmInProcessScenario</a></td>
<td>[jvm]<br>fun <a href="./">HeapDiff.Companion</a>.<a href="../../../leakcanary/repeating-jvm-in-process-scenario/">repeatingJvmInProcessScenario</a>(objectGrowthDetector: <a href="../../-object-growth-detector/">ObjectGrowthDetector</a> = ObjectGrowthDetector.forJvmHeap(), heapDumpDirectoryProvider: <a href="../../../leakcanary/-heap-dump-directory-provider/">HeapDumpDirectoryProvider</a> = RepositoryRootHeapDumpDirectoryProvider( "heap_dumps_object_growth" ), heapDumper: <a href="../../../leakcanary/-heap-dumper/">HeapDumper</a> = HeapDumper.forJvmInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = false), heapDumpStorageStrategy: <a href="../../../leakcanary/-heap-dump-storage-strategy/">HeapDumpStorageStrategy</a> = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): <a href="../../-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a><br>Creates a <a href="../../-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a> suitable for JVM in process tests.</td>
</tr>
diff --git a/api/shark/-heap-dump-rule/dump-heap/index.html b/api/shark/-heap-dump-rule/dump-heap/index.html
index 7c8f114..85e8b0e 100644
--- a/api/shark/-heap-dump-rule/dump-heap/index.html
+++ b/api/shark/-heap-dump-rule/dump-heap/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">HeapDumpRule</a>/<a href="./">dumpHeap</a></p>
<h1 id="dumpheap">dumpHeap<a class="headerlink" href="#dumpheap" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">dumpHeap</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+fun <a href="./">dumpHeap</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
</article>
diff --git a/api/shark/-heap-dump-rule/index.html b/api/shark/-heap-dump-rule/index.html
index 94a3cc7..286e4ad 100644
--- a/api/shark/-heap-dump-rule/index.html
+++ b/api/shark/-heap-dump-rule/index.html
@@ -809,7 +809,7 @@
</tr>
<tr>
<td><a href="dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>fun <a href="dump-heap/">dumpHeap</a>(): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun <a href="dump-heap/">dumpHeap</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-heap-growth-command/index.html b/api/shark/-heap-growth-command/index.html
index 9bbf7e8..87390b4 100644
--- a/api/shark/-heap-growth-command/index.html
+++ b/api/shark/-heap-growth-command/index.html
@@ -816,15 +816,15 @@
</tr>
<tr>
<td><a href="../-analyze-command/-companion/analyze/">analyze</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-neo4-j-command/-companion/dump/">dump</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, dbParentFolder: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, dbParentFolder: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/echo/">echo</a></td>
@@ -872,7 +872,7 @@
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="run/">run</a></td>
diff --git a/api/shark/-heap-object/-heap-class/class-hierarchy/index.html b/api/shark/-heap-object/-heap-class/class-hierarchy/index.html
index e8cf32b..fd77b96 100644
--- a/api/shark/-heap-object/-heap-class/class-hierarchy/index.html
+++ b/api/shark/-heap-object/-heap-class/class-hierarchy/index.html
@@ -757,7 +757,7 @@
<h1 id="classhierarchy">classHierarchy<a class="headerlink" href="#classhierarchy" title="Permanent link">¶</a></h1>
<p>[jvm]\
val <a href="./">classHierarchy</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/-sequence/index.html">Sequence</a><<a href="../">HeapObject.HeapClass</a>></p>
-<p>The class hierarchy starting at this class (included) and ending at the <a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a> class (included).</p>
+<p>The class hierarchy starting at this class (included) and ending at the <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html">Object</a> class (included).</p>
</article>
diff --git a/api/shark/-heap-object/-heap-class/index.html b/api/shark/-heap-object/-heap-class/index.html
index 0c9dd46..3aeeb6b 100644
--- a/api/shark/-heap-object/-heap-class/index.html
+++ b/api/shark/-heap-object/-heap-class/index.html
@@ -862,7 +862,7 @@
</tr>
<tr>
<td><a href="class-hierarchy/">classHierarchy</a></td>
-<td>[jvm]<br>val <a href="class-hierarchy/">classHierarchy</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/-sequence/index.html">Sequence</a><<a href="./">HeapObject.HeapClass</a>><br>The class hierarchy starting at this class (included) and ending at the <a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a> class (included).</td>
+<td>[jvm]<br>val <a href="class-hierarchy/">classHierarchy</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/-sequence/index.html">Sequence</a><<a href="./">HeapObject.HeapClass</a>><br>The class hierarchy starting at this class (included) and ending at the <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html">Object</a> class (included).</td>
</tr>
<tr>
<td><a href="direct-instances/">directInstances</a></td>
@@ -902,7 +902,7 @@
</tr>
<tr>
<td><a href="name/">name</a></td>
-<td>[jvm]<br>val <a href="name/">name</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><br>The name of this class, identical to <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html#getname">Class.getName</a>. If this class is an array class, the name has a suffix of brackets for each dimension of the array, e.g. <code>com.Foo[][]</code> is a class for 2 dimensional arrays of <code>com.Foo</code>.</td>
+<td>[jvm]<br>val <a href="name/">name</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><br>The name of this class, identical to <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--">Class.getName</a>. If this class is an array class, the name has a suffix of brackets for each dimension of the array, e.g. <code>com.Foo[][]</code> is a class for 2 dimensional arrays of <code>com.Foo</code>.</td>
</tr>
<tr>
<td><a href="object-array-instances/">objectArrayInstances</a></td>
@@ -938,7 +938,7 @@
</tr>
<tr>
<td><a href="superclass/">superclass</a></td>
-<td>[jvm]<br>val <a href="superclass/">superclass</a>: <a href="./">HeapObject.HeapClass</a>?<br>The <a href="./">HeapClass</a> representing the superclass of this <a href="./">HeapClass</a>. If this <a href="./">HeapClass</a> represents either the <a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a> class or a primitive type, then null is returned. If this <a href="./">HeapClass</a> represents an array class then the <a href="./">HeapClass</a> object representing the <a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a> class is returned.</td>
+<td>[jvm]<br>val <a href="superclass/">superclass</a>: <a href="./">HeapObject.HeapClass</a>?<br>The <a href="./">HeapClass</a> representing the superclass of this <a href="./">HeapClass</a>. If this <a href="./">HeapClass</a> represents either the <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html">Object</a> class or a primitive type, then null is returned. If this <a href="./">HeapClass</a> represents an array class then the <a href="./">HeapClass</a> object representing the <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html">Object</a> class is returned.</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-heap-object/-heap-class/name/index.html b/api/shark/-heap-object/-heap-class/name/index.html
index 3edb23b..2de1b43 100644
--- a/api/shark/-heap-object/-heap-class/name/index.html
+++ b/api/shark/-heap-object/-heap-class/name/index.html
@@ -757,7 +757,7 @@
<h1 id="name">name<a class="headerlink" href="#name" title="Permanent link">¶</a></h1>
<p>[jvm]\
val <a href="./">name</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></p>
-<p>The name of this class, identical to <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html#getname">Class.getName</a>. If this class is an array class, the name has a suffix of brackets for each dimension of the array, e.g. <code>com.Foo[][]</code> is a class for 2 dimensional arrays of <code>com.Foo</code>.</p>
+<p>The name of this class, identical to <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--">Class.getName</a>. If this class is an array class, the name has a suffix of brackets for each dimension of the array, e.g. <code>com.Foo[][]</code> is a class for 2 dimensional arrays of <code>com.Foo</code>.</p>
<p>The behavior for primitive types changes depending on the VM that dumped the heap. JVM heap dumps don’t have any <a href="../">HeapClass</a> object for primitive types, instead the <code>java.land.Class</code> class has 9 instances (the 8 primitive types and <code>void</code>). Android heap dumps have an <a href="../">HeapClass</a> object for primitive type and the <code>java.land.Class</code> class has no instance.</p>
<p>If this is an array class, you can find the component type by removing the brackets at the end, e.g. <code>name.substringBefore('[')</code>. Be careful when doing this for JVM heap dumps though, as if the component type is a primitive type there will not be a <a href="../">HeapClass</a> object for it. This is especially tricky with N dimension primitive type arrays, which are instances of <a href="../../-heap-object-array/">HeapObjectArray</a> (vs single dimension primitive type arrays which are instances of <a href="../../-heap-primitive-array/">HeapPrimitiveArray</a>).</p>
diff --git a/api/shark/-heap-object/-heap-class/superclass/index.html b/api/shark/-heap-object/-heap-class/superclass/index.html
index d383035..3f30d10 100644
--- a/api/shark/-heap-object/-heap-class/superclass/index.html
+++ b/api/shark/-heap-object/-heap-class/superclass/index.html
@@ -757,7 +757,7 @@
<h1 id="superclass">superclass<a class="headerlink" href="#superclass" title="Permanent link">¶</a></h1>
<p>[jvm]\
val <a href="./">superclass</a>: <a href="../">HeapObject.HeapClass</a>?</p>
-<p>The <a href="../">HeapClass</a> representing the superclass of this <a href="../">HeapClass</a>. If this <a href="../">HeapClass</a> represents either the <a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a> class or a primitive type, then null is returned. If this <a href="../">HeapClass</a> represents an array class then the <a href="../">HeapClass</a> object representing the <a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a> class is returned.</p>
+<p>The <a href="../">HeapClass</a> representing the superclass of this <a href="../">HeapClass</a>. If this <a href="../">HeapClass</a> represents either the <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html">Object</a> class or a primitive type, then null is returned. If this <a href="../">HeapClass</a> represents an array class then the <a href="../">HeapClass</a> object representing the <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html">Object</a> class is returned.</p>
</article>
diff --git a/api/shark/-heap-object/-heap-instance/index.html b/api/shark/-heap-object/-heap-instance/index.html
index 5637759..01d56eb 100644
--- a/api/shark/-heap-object/-heap-instance/index.html
+++ b/api/shark/-heap-object/-heap-instance/index.html
@@ -870,7 +870,7 @@
</tr>
<tr>
<td><a href="instance-class-name/">instanceClassName</a></td>
-<td>[jvm]<br>val <a href="instance-class-name/">instanceClassName</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><br>The name of the class of this instance, identical to <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html#getname">Class.getName</a>.</td>
+<td>[jvm]<br>val <a href="instance-class-name/">instanceClassName</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><br>The name of the class of this instance, identical to <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--">Class.getName</a>.</td>
</tr>
<tr>
<td><a href="instance-class-simple-name/">instanceClassSimpleName</a></td>
diff --git a/api/shark/-heap-object/-heap-instance/instance-class-name/index.html b/api/shark/-heap-object/-heap-instance/instance-class-name/index.html
index 6552b38..a066f53 100644
--- a/api/shark/-heap-object/-heap-instance/instance-class-name/index.html
+++ b/api/shark/-heap-object/-heap-instance/instance-class-name/index.html
@@ -757,7 +757,7 @@
<h1 id="instanceclassname">instanceClassName<a class="headerlink" href="#instanceclassname" title="Permanent link">¶</a></h1>
<p>[jvm]\
val <a href="./">instanceClassName</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></p>
-<p>The name of the class of this instance, identical to <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html#getname">Class.getName</a>.</p>
+<p>The name of the class of this instance, identical to <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--">Class.getName</a>.</p>
</article>
diff --git a/api/shark/-heap-object/-heap-object-array/array-class-name/index.html b/api/shark/-heap-object/-heap-object-array/array-class-name/index.html
index 2cabe6b..b86c857 100644
--- a/api/shark/-heap-object/-heap-object-array/array-class-name/index.html
+++ b/api/shark/-heap-object/-heap-object-array/array-class-name/index.html
@@ -757,7 +757,7 @@
<h1 id="arrayclassname">arrayClassName<a class="headerlink" href="#arrayclassname" title="Permanent link">¶</a></h1>
<p>[jvm]\
val <a href="./">arrayClassName</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></p>
-<p>The name of the class of this array, identical to <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html#getname">Class.getName</a>.</p>
+<p>The name of the class of this array, identical to <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--">Class.getName</a>.</p>
</article>
diff --git a/api/shark/-heap-object/-heap-object-array/index.html b/api/shark/-heap-object/-heap-object-array/index.html
index 5b06399..98c3e80 100644
--- a/api/shark/-heap-object/-heap-object-array/index.html
+++ b/api/shark/-heap-object/-heap-object-array/index.html
@@ -822,7 +822,7 @@
</tr>
<tr>
<td><a href="array-class-name/">arrayClassName</a></td>
-<td>[jvm]<br>val <a href="array-class-name/">arrayClassName</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><br>The name of the class of this array, identical to <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html#getname">Class.getName</a>.</td>
+<td>[jvm]<br>val <a href="array-class-name/">arrayClassName</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><br>The name of the class of this array, identical to <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--">Class.getName</a>.</td>
</tr>
<tr>
<td><a href="array-class-simple-name/">arrayClassSimpleName</a></td>
diff --git a/api/shark/-heap-object/-heap-primitive-array/array-class-name/index.html b/api/shark/-heap-object/-heap-primitive-array/array-class-name/index.html
index c993e27..0975668 100644
--- a/api/shark/-heap-object/-heap-primitive-array/array-class-name/index.html
+++ b/api/shark/-heap-object/-heap-primitive-array/array-class-name/index.html
@@ -757,7 +757,7 @@
<h1 id="arrayclassname">arrayClassName<a class="headerlink" href="#arrayclassname" title="Permanent link">¶</a></h1>
<p>[jvm]\
val <a href="./">arrayClassName</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></p>
-<p>The name of the class of this array, identical to <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html#getname">Class.getName</a>.</p>
+<p>The name of the class of this array, identical to <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--">Class.getName</a>.</p>
</article>
diff --git a/api/shark/-heap-object/-heap-primitive-array/index.html b/api/shark/-heap-object/-heap-primitive-array/index.html
index cefd8b4..4006c6a 100644
--- a/api/shark/-heap-object/-heap-primitive-array/index.html
+++ b/api/shark/-heap-object/-heap-primitive-array/index.html
@@ -814,7 +814,7 @@
</tr>
<tr>
<td><a href="array-class-name/">arrayClassName</a></td>
-<td>[jvm]<br>val <a href="array-class-name/">arrayClassName</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><br>The name of the class of this array, identical to <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html#getname">Class.getName</a>.</td>
+<td>[jvm]<br>val <a href="array-class-name/">arrayClassName</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><br>The name of the class of this array, identical to <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--">Class.getName</a>.</td>
</tr>
<tr>
<td><a href="../as-class/">asClass</a></td>
diff --git a/api/shark/-hprof-deobfuscator/deobfuscate/index.html b/api/shark/-hprof-deobfuscator/deobfuscate/index.html
index a56f9ba..84a3bb4 100644
--- a/api/shark/-hprof-deobfuscator/deobfuscate/index.html
+++ b/api/shark/-hprof-deobfuscator/deobfuscate/index.html
@@ -771,10 +771,10 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">HprofDeobfuscator</a>/<a href="./">deobfuscate</a></p>
<h1 id="deobfuscate">deobfuscate<a class="headerlink" href="#deobfuscate" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">deobfuscate</a>(proguardMapping: <a href="../../-proguard-mapping/">ProguardMapping</a>, inputHprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, outputHprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a> = File(
+fun <a href="./">deobfuscate</a>(proguardMapping: <a href="../../-proguard-mapping/">ProguardMapping</a>, inputHprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, outputHprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a> = File(
inputHprofFile.parent, inputHprofFile.name.replace(
".hprof", "-deobfuscated.hprof"
- ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + "-deobfuscated" })): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+ ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + "-deobfuscated" })): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
<h4 id="see-also">See also<a class="headerlink" href="#see-also" title="Permanent link">¶</a></h4>
<table>
<thead>
diff --git a/api/shark/-hprof-deobfuscator/index.html b/api/shark/-hprof-deobfuscator/index.html
index bae833e..cc8704a 100644
--- a/api/shark/-hprof-deobfuscator/index.html
+++ b/api/shark/-hprof-deobfuscator/index.html
@@ -806,7 +806,7 @@
<tbody>
<tr>
<td><a href="deobfuscate/">deobfuscate</a></td>
-<td>[jvm]<br>fun <a href="deobfuscate/">deobfuscate</a>(proguardMapping: <a href="../-proguard-mapping/">ProguardMapping</a>, inputHprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, outputHprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a> = File( inputHprofFile.parent, inputHprofFile.name.replace( ".hprof", "-deobfuscated.hprof" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + "-deobfuscated" })): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun <a href="deobfuscate/">deobfuscate</a>(proguardMapping: <a href="../-proguard-mapping/">ProguardMapping</a>, inputHprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, outputHprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a> = File( inputHprofFile.parent, inputHprofFile.name.replace( ".hprof", "-deobfuscated.hprof" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + "-deobfuscated" })): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-hprof-header/-companion/index.html b/api/shark/-hprof-header/-companion/index.html
index 0ec9185..1a83c56 100644
--- a/api/shark/-hprof-header/-companion/index.html
+++ b/api/shark/-hprof-header/-companion/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="parse-header-of/">parseHeaderOf</a></td>
-<td>[jvm]<br>fun <a href="parse-header-of/">parseHeaderOf</a>(hprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>): <a href="../">HprofHeader</a><br>Reads the header of the provided <a href="parse-header-of/">hprofFile</a> and returns it as a <a href="../">HprofHeader</a><br>[jvm]<br>fun <a href="parse-header-of/">parseHeaderOf</a>(source: <a href="https://square.github.io/okio/2.x/okio/okio/-buffered-source/index.html">BufferedSource</a>): <a href="../">HprofHeader</a><br>Reads the header of the provided <a href="parse-header-of/">source</a> and returns it as a <a href="../">HprofHeader</a>. This does not close the <a href="parse-header-of/">source</a>.</td>
+<td>[jvm]<br>fun <a href="parse-header-of/">parseHeaderOf</a>(hprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>): <a href="../">HprofHeader</a><br>Reads the header of the provided <a href="parse-header-of/">hprofFile</a> and returns it as a <a href="../">HprofHeader</a><br>[jvm]<br>fun <a href="parse-header-of/">parseHeaderOf</a>(source: <a href="https://square.github.io/okio/2.x/okio/okio/-buffered-source/index.html">BufferedSource</a>): <a href="../">HprofHeader</a><br>Reads the header of the provided <a href="parse-header-of/">source</a> and returns it as a <a href="../">HprofHeader</a>. This does not close the <a href="parse-header-of/">source</a>.</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-hprof-header/-companion/parse-header-of/index.html b/api/shark/-hprof-header/-companion/parse-header-of/index.html
index 662934d..a1fd86a 100644
--- a/api/shark/-hprof-header/-companion/parse-header-of/index.html
+++ b/api/shark/-hprof-header/-companion/parse-header-of/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">HprofHeader</a>/<a href="../">Companion</a>/<a href="./">parseHeaderOf</a></p>
<h1 id="parseheaderof">parseHeaderOf<a class="headerlink" href="#parseheaderof" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">parseHeaderOf</a>(hprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>): <a href="../../">HprofHeader</a></p>
+fun <a href="./">parseHeaderOf</a>(hprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>): <a href="../../">HprofHeader</a></p>
<p>Reads the header of the provided <a href="./">hprofFile</a> and returns it as a <a href="../../">HprofHeader</a></p>
<p>[jvm]\
fun <a href="./">parseHeaderOf</a>(source: <a href="https://square.github.io/okio/2.x/okio/okio/-buffered-source/index.html">BufferedSource</a>): <a href="../../">HprofHeader</a></p>
diff --git a/api/shark/-hprof-heap-graph/-companion/index.html b/api/shark/-hprof-heap-graph/-companion/index.html
index 49b33d2..3119735 100644
--- a/api/shark/-hprof-heap-graph/-companion/index.html
+++ b/api/shark/-hprof-heap-graph/-companion/index.html
@@ -790,7 +790,7 @@
<tbody>
<tr>
<td><a href="open-heap-graph/">openHeapGraph</a></td>
-<td>[jvm]<br>fun <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>.<a href="open-heap-graph/">openHeapGraph</a>(proguardMapping: <a href="../../-proguard-mapping/">ProguardMapping</a>? = null, indexedGcRootTypes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="../../-hprof-record-tag/">HprofRecordTag</a>> = HprofIndex.defaultIndexedGcRootTags()): <a href="../../-closeable-heap-graph/">CloseableHeapGraph</a><br>A facility for opening a <a href="../../-closeable-heap-graph/">CloseableHeapGraph</a> from a <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>. This first parses the file headers with <a href="../../-hprof-header/-companion/parse-header-of/">HprofHeader.parseHeaderOf</a>, then indexes the file content with <a href="../../-hprof-index/-companion/index-records-of/">HprofIndex.indexRecordsOf</a> and then opens a <a href="../../-closeable-heap-graph/">CloseableHeapGraph</a> from the index, which you are responsible for closing after using.<br>[jvm]<br>fun <a href="../../-dual-source-provider/">DualSourceProvider</a>.<a href="open-heap-graph/">openHeapGraph</a>(proguardMapping: <a href="../../-proguard-mapping/">ProguardMapping</a>? = null, indexedGcRootTypes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="../../-hprof-record-tag/">HprofRecordTag</a>> = HprofIndex.defaultIndexedGcRootTags()): <a href="../../-closeable-heap-graph/">CloseableHeapGraph</a></td>
+<td>[jvm]<br>fun <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>.<a href="open-heap-graph/">openHeapGraph</a>(proguardMapping: <a href="../../-proguard-mapping/">ProguardMapping</a>? = null, indexedGcRootTypes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="../../-hprof-record-tag/">HprofRecordTag</a>> = HprofIndex.defaultIndexedGcRootTags()): <a href="../../-closeable-heap-graph/">CloseableHeapGraph</a><br>A facility for opening a <a href="../../-closeable-heap-graph/">CloseableHeapGraph</a> from a <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>. This first parses the file headers with <a href="../../-hprof-header/-companion/parse-header-of/">HprofHeader.parseHeaderOf</a>, then indexes the file content with <a href="../../-hprof-index/-companion/index-records-of/">HprofIndex.indexRecordsOf</a> and then opens a <a href="../../-closeable-heap-graph/">CloseableHeapGraph</a> from the index, which you are responsible for closing after using.<br>[jvm]<br>fun <a href="../../-dual-source-provider/">DualSourceProvider</a>.<a href="open-heap-graph/">openHeapGraph</a>(proguardMapping: <a href="../../-proguard-mapping/">ProguardMapping</a>? = null, indexedGcRootTypes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="../../-hprof-record-tag/">HprofRecordTag</a>> = HprofIndex.defaultIndexedGcRootTags()): <a href="../../-closeable-heap-graph/">CloseableHeapGraph</a></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-hprof-heap-graph/-companion/open-heap-graph/index.html b/api/shark/-hprof-heap-graph/-companion/open-heap-graph/index.html
index e3e1572..d4f0475 100644
--- a/api/shark/-hprof-heap-graph/-companion/open-heap-graph/index.html
+++ b/api/shark/-hprof-heap-graph/-companion/open-heap-graph/index.html
@@ -756,8 +756,8 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">HprofHeapGraph</a>/<a href="../">Companion</a>/<a href="./">openHeapGraph</a></p>
<h1 id="openheapgraph">openHeapGraph<a class="headerlink" href="#openheapgraph" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>.<a href="./">openHeapGraph</a>(proguardMapping: <a href="../../../-proguard-mapping/">ProguardMapping</a>? = null, indexedGcRootTypes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="../../../-hprof-record-tag/">HprofRecordTag</a>> = HprofIndex.defaultIndexedGcRootTags()): <a href="../../../-closeable-heap-graph/">CloseableHeapGraph</a></p>
-<p>A facility for opening a <a href="../../../-closeable-heap-graph/">CloseableHeapGraph</a> from a <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>. This first parses the file headers with <a href="../../../-hprof-header/-companion/parse-header-of/">HprofHeader.parseHeaderOf</a>, then indexes the file content with <a href="../../../-hprof-index/-companion/index-records-of/">HprofIndex.indexRecordsOf</a> and then opens a <a href="../../../-closeable-heap-graph/">CloseableHeapGraph</a> from the index, which you are responsible for closing after using.</p>
+fun <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>.<a href="./">openHeapGraph</a>(proguardMapping: <a href="../../../-proguard-mapping/">ProguardMapping</a>? = null, indexedGcRootTypes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="../../../-hprof-record-tag/">HprofRecordTag</a>> = HprofIndex.defaultIndexedGcRootTags()): <a href="../../../-closeable-heap-graph/">CloseableHeapGraph</a></p>
+<p>A facility for opening a <a href="../../../-closeable-heap-graph/">CloseableHeapGraph</a> from a <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>. This first parses the file headers with <a href="../../../-hprof-header/-companion/parse-header-of/">HprofHeader.parseHeaderOf</a>, then indexes the file content with <a href="../../../-hprof-index/-companion/index-records-of/">HprofIndex.indexRecordsOf</a> and then opens a <a href="../../../-closeable-heap-graph/">CloseableHeapGraph</a> from the index, which you are responsible for closing after using.</p>
<p>[jvm]\
fun <a href="../../../-dual-source-provider/">DualSourceProvider</a>.<a href="./">openHeapGraph</a>(proguardMapping: <a href="../../../-proguard-mapping/">ProguardMapping</a>? = null, indexedGcRootTypes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="../../../-hprof-record-tag/">HprofRecordTag</a>> = HprofIndex.defaultIndexedGcRootTags()): <a href="../../../-closeable-heap-graph/">CloseableHeapGraph</a></p>
diff --git a/api/shark/-hprof-index/-companion/default-indexed-gc-root-tags/index.html b/api/shark/-hprof-index/-companion/default-indexed-gc-root-tags/index.html
index a0ad891..ee16a36 100644
--- a/api/shark/-hprof-index/-companion/default-indexed-gc-root-tags/index.html
+++ b/api/shark/-hprof-index/-companion/default-indexed-gc-root-tags/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">HprofIndex</a>/<a href="../">Companion</a>/<a href="./">defaultIndexedGcRootTags</a></p>
<h1 id="defaultindexedgcroottags">defaultIndexedGcRootTags<a class="headerlink" href="#defaultindexedgcroottags" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">defaultIndexedGcRootTags</a>(): <a href="https://developer.android.com/reference/kotlin/java/util/EnumSet.html">EnumSet</a><<a href="../../../-hprof-record-tag/">HprofRecordTag</a>></p>
+fun <a href="./">defaultIndexedGcRootTags</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html">EnumSet</a><<a href="../../../-hprof-record-tag/">HprofRecordTag</a>></p>
</article>
diff --git a/api/shark/-hprof-index/-companion/index.html b/api/shark/-hprof-index/-companion/index.html
index 86aee35..0ff5c8f 100644
--- a/api/shark/-hprof-index/-companion/index.html
+++ b/api/shark/-hprof-index/-companion/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="default-indexed-gc-root-tags/">defaultIndexedGcRootTags</a></td>
-<td>[jvm]<br>fun <a href="default-indexed-gc-root-tags/">defaultIndexedGcRootTags</a>(): <a href="https://developer.android.com/reference/kotlin/java/util/EnumSet.html">EnumSet</a><<a href="../../-hprof-record-tag/">HprofRecordTag</a>></td>
+<td>[jvm]<br>fun <a href="default-indexed-gc-root-tags/">defaultIndexedGcRootTags</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html">EnumSet</a><<a href="../../-hprof-record-tag/">HprofRecordTag</a>></td>
</tr>
<tr>
<td><a href="index-records-of/">indexRecordsOf</a></td>
diff --git a/api/shark/-hprof-primitive-array-stripper/index.html b/api/shark/-hprof-primitive-array-stripper/index.html
index b483067..421f275 100644
--- a/api/shark/-hprof-primitive-array-stripper/index.html
+++ b/api/shark/-hprof-primitive-array-stripper/index.html
@@ -806,7 +806,7 @@
<tbody>
<tr>
<td><a href="strip-primitive-arrays/">stripPrimitiveArrays</a></td>
-<td>[jvm]<br>fun <a href="strip-primitive-arrays/">stripPrimitiveArrays</a>(inputHprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, outputHprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a> = File( inputHprofFile.parent, inputHprofFile.name.replace( ".hprof", "-stripped.hprof" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + "-stripped" })): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a><br>fun <a href="strip-primitive-arrays/">stripPrimitiveArrays</a>(hprofSourceProvider: <a href="../-streaming-source-provider/">StreamingSourceProvider</a>, hprofSink: <a href="https://square.github.io/okio/2.x/okio/okio/-buffered-sink/index.html">BufferedSink</a>)</td>
+<td>[jvm]<br>fun <a href="strip-primitive-arrays/">stripPrimitiveArrays</a>(inputHprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, outputHprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a> = File( inputHprofFile.parent, inputHprofFile.name.replace( ".hprof", "-stripped.hprof" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + "-stripped" })): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a><br>fun <a href="strip-primitive-arrays/">stripPrimitiveArrays</a>(hprofSourceProvider: <a href="../-streaming-source-provider/">StreamingSourceProvider</a>, hprofSink: <a href="https://square.github.io/okio/2.x/okio/okio/-buffered-sink/index.html">BufferedSink</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-hprof-primitive-array-stripper/strip-primitive-arrays/index.html b/api/shark/-hprof-primitive-array-stripper/strip-primitive-arrays/index.html
index a6287d1..236da3a 100644
--- a/api/shark/-hprof-primitive-array-stripper/strip-primitive-arrays/index.html
+++ b/api/shark/-hprof-primitive-array-stripper/strip-primitive-arrays/index.html
@@ -771,10 +771,10 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">HprofPrimitiveArrayStripper</a>/<a href="./">stripPrimitiveArrays</a></p>
<h1 id="stripprimitivearrays">stripPrimitiveArrays<a class="headerlink" href="#stripprimitivearrays" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">stripPrimitiveArrays</a>(inputHprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, outputHprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a> = File(
+fun <a href="./">stripPrimitiveArrays</a>(inputHprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, outputHprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a> = File(
inputHprofFile.parent, inputHprofFile.name.replace(
".hprof", "-stripped.hprof"
- ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + "-stripped" })): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+ ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + "-stripped" })): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
<p>fun <a href="./">stripPrimitiveArrays</a>(hprofSourceProvider: <a href="../../-streaming-source-provider/">StreamingSourceProvider</a>, hprofSink: <a href="https://square.github.io/okio/2.x/okio/okio/-buffered-sink/index.html">BufferedSink</a>)</p>
<h4 id="see-also">See also<a class="headerlink" href="#see-also" title="Permanent link">¶</a></h4>
<table>
diff --git a/api/shark/-hprof-record-reader/index.html b/api/shark/-hprof-record-reader/index.html
index 10c1bc4..96ce430 100644
--- a/api/shark/-hprof-record-reader/index.html
+++ b/api/shark/-hprof-record-reader/index.html
@@ -964,7 +964,7 @@
</tr>
<tr>
<td><a href="read-string/">readString</a></td>
-<td>[jvm]<br>fun <a href="read-string/">readString</a>(byteCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, charset: <a href="https://developer.android.com/reference/kotlin/java/nio/charset/Charset.html">Charset</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></td>
+<td>[jvm]<br>fun <a href="read-string/">readString</a>(byteCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, charset: <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html">Charset</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></td>
</tr>
<tr>
<td><a href="read-string-record/">readStringRecord</a></td>
diff --git a/api/shark/-hprof-record-reader/read-string/index.html b/api/shark/-hprof-record-reader/read-string/index.html
index 8918aac..e2034bf 100644
--- a/api/shark/-hprof-record-reader/read-string/index.html
+++ b/api/shark/-hprof-record-reader/read-string/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">HprofRecordReader</a>/<a href="./">readString</a></p>
<h1 id="readstring">readString<a class="headerlink" href="#readstring" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">readString</a>(byteCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, charset: <a href="https://developer.android.com/reference/kotlin/java/nio/charset/Charset.html">Charset</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></p>
+fun <a href="./">readString</a>(byteCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, charset: <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html">Charset</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></p>
</article>
diff --git a/api/shark/-hprof-record-tag/-companion/index.html b/api/shark/-hprof-record-tag/-companion/index.html
index ead79ac..6ebd348 100644
--- a/api/shark/-hprof-record-tag/-companion/index.html
+++ b/api/shark/-hprof-record-tag/-companion/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="root-tags/">rootTags</a></td>
-<td>[jvm]<br>val <a href="root-tags/">rootTags</a>: <a href="https://developer.android.com/reference/kotlin/java/util/EnumSet.html">EnumSet</a><<a href="../">HprofRecordTag</a>></td>
+<td>[jvm]<br>val <a href="root-tags/">rootTags</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html">EnumSet</a><<a href="../">HprofRecordTag</a>></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-hprof-record-tag/-companion/root-tags/index.html b/api/shark/-hprof-record-tag/-companion/root-tags/index.html
index 67bb78d..7110496 100644
--- a/api/shark/-hprof-record-tag/-companion/root-tags/index.html
+++ b/api/shark/-hprof-record-tag/-companion/root-tags/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">HprofRecordTag</a>/<a href="../">Companion</a>/<a href="./">rootTags</a></p>
<h1 id="roottags">rootTags<a class="headerlink" href="#roottags" title="Permanent link">¶</a></h1>
<p>[jvm]\
-val <a href="./">rootTags</a>: <a href="https://developer.android.com/reference/kotlin/java/util/EnumSet.html">EnumSet</a><<a href="../../">HprofRecordTag</a>></p>
+val <a href="./">rootTags</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html">EnumSet</a><<a href="../../">HprofRecordTag</a>></p>
</article>
diff --git a/api/shark/-hprof-writer-helper/-class-definition/index.html b/api/shark/-hprof-writer-helper/-class-definition/index.html
index 3c1028a..fa4096f 100644
--- a/api/shark/-hprof-writer-helper/-class-definition/index.html
+++ b/api/shark/-hprof-writer-helper/-class-definition/index.html
@@ -805,7 +805,7 @@
<tbody>
<tr>
<td><a href="static-field/">staticField</a></td>
-<td>[jvm]<br>val <a href="static-field/">staticField</a>: <a href="https://developer.android.com/reference/kotlin/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../-value-holder/">ValueHolder</a>></td>
+<td>[jvm]<br>val <a href="static-field/">staticField</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../-value-holder/">ValueHolder</a>></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-hprof-writer-helper/-class-definition/static-field/index.html b/api/shark/-hprof-writer-helper/-class-definition/static-field/index.html
index b2fc9c1..bfc630c 100644
--- a/api/shark/-hprof-writer-helper/-class-definition/static-field/index.html
+++ b/api/shark/-hprof-writer-helper/-class-definition/static-field/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">HprofWriterHelper</a>/<a href="../">ClassDefinition</a>/<a href="./">staticField</a></p>
<h1 id="staticfield">staticField<a class="headerlink" href="#staticfield" title="Permanent link">¶</a></h1>
<p>[jvm]\
-val <a href="./">staticField</a>: <a href="https://developer.android.com/reference/kotlin/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../../-value-holder/">ValueHolder</a>></p>
+val <a href="./">staticField</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../../-value-holder/">ValueHolder</a>></p>
</article>
diff --git a/api/shark/-hprof-writer-helper/-instance-and-class-definition/field/index.html b/api/shark/-hprof-writer-helper/-instance-and-class-definition/field/index.html
index 89b2bcd..0ea854e 100644
--- a/api/shark/-hprof-writer-helper/-instance-and-class-definition/field/index.html
+++ b/api/shark/-hprof-writer-helper/-instance-and-class-definition/field/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">HprofWriterHelper</a>/<a href="../">InstanceAndClassDefinition</a>/<a href="./">field</a></p>
<h1 id="field">field<a class="headerlink" href="#field" title="Permanent link">¶</a></h1>
<p>[jvm]\
-val <a href="./">field</a>: <a href="https://developer.android.com/reference/kotlin/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../../-value-holder/">ValueHolder</a>></p>
+val <a href="./">field</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../../-value-holder/">ValueHolder</a>></p>
</article>
diff --git a/api/shark/-hprof-writer-helper/-instance-and-class-definition/index.html b/api/shark/-hprof-writer-helper/-instance-and-class-definition/index.html
index bd55667..08b7a36 100644
--- a/api/shark/-hprof-writer-helper/-instance-and-class-definition/index.html
+++ b/api/shark/-hprof-writer-helper/-instance-and-class-definition/index.html
@@ -805,11 +805,11 @@
<tbody>
<tr>
<td><a href="field/">field</a></td>
-<td>[jvm]<br>val <a href="field/">field</a>: <a href="https://developer.android.com/reference/kotlin/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../-value-holder/">ValueHolder</a>></td>
+<td>[jvm]<br>val <a href="field/">field</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../-value-holder/">ValueHolder</a>></td>
</tr>
<tr>
<td><a href="static-field/">staticField</a></td>
-<td>[jvm]<br>val <a href="static-field/">staticField</a>: <a href="https://developer.android.com/reference/kotlin/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../-value-holder/">ValueHolder</a>></td>
+<td>[jvm]<br>val <a href="static-field/">staticField</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../-value-holder/">ValueHolder</a>></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-hprof-writer-helper/-instance-and-class-definition/static-field/index.html b/api/shark/-hprof-writer-helper/-instance-and-class-definition/static-field/index.html
index 2db86a9..316ade9 100644
--- a/api/shark/-hprof-writer-helper/-instance-and-class-definition/static-field/index.html
+++ b/api/shark/-hprof-writer-helper/-instance-and-class-definition/static-field/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">HprofWriterHelper</a>/<a href="../">InstanceAndClassDefinition</a>/<a href="./">staticField</a></p>
<h1 id="staticfield">staticField<a class="headerlink" href="#staticfield" title="Permanent link">¶</a></h1>
<p>[jvm]\
-val <a href="./">staticField</a>: <a href="https://developer.android.com/reference/kotlin/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../../-value-holder/">ValueHolder</a>></p>
+val <a href="./">staticField</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html">LinkedHashMap</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="../../../-value-holder/">ValueHolder</a>></p>
</article>
diff --git a/api/shark/-hprof-writer-helper/index.html b/api/shark/-hprof-writer-helper/index.html
index be67961..57f1308 100644
--- a/api/shark/-hprof-writer-helper/index.html
+++ b/api/shark/-hprof-writer-helper/index.html
@@ -792,7 +792,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">HprofWriterHelper</a></p>
<h1 id="hprofwriterhelper">HprofWriterHelper<a class="headerlink" href="#hprofwriterhelper" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">HprofWriterHelper</a>(writer: <a href="../-hprof-writer/">HprofWriter</a>) : <a href="https://developer.android.com/reference/kotlin/java/io/Closeable.html">Closeable</a></p>
+class <a href="./">HprofWriterHelper</a>(writer: <a href="../-hprof-writer/">HprofWriter</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html">Closeable</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
diff --git a/api/shark/-hprof-writer/-companion/index.html b/api/shark/-hprof-writer/-companion/index.html
index c21e1ea..1e5d32a 100644
--- a/api/shark/-hprof-writer/-companion/index.html
+++ b/api/shark/-hprof-writer/-companion/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="open-writer-for/">openWriterFor</a></td>
-<td>[jvm]<br>fun <a href="open-writer-for/">openWriterFor</a>(hprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = HprofHeader()): <a href="../">HprofWriter</a><br>fun <a href="open-writer-for/">openWriterFor</a>(hprofSink: <a href="https://square.github.io/okio/2.x/okio/okio/-buffered-sink/index.html">BufferedSink</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = HprofHeader()): <a href="../">HprofWriter</a></td>
+<td>[jvm]<br>fun <a href="open-writer-for/">openWriterFor</a>(hprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = HprofHeader()): <a href="../">HprofWriter</a><br>fun <a href="open-writer-for/">openWriterFor</a>(hprofSink: <a href="https://square.github.io/okio/2.x/okio/okio/-buffered-sink/index.html">BufferedSink</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = HprofHeader()): <a href="../">HprofWriter</a></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-hprof-writer/-companion/open-writer-for/index.html b/api/shark/-hprof-writer/-companion/open-writer-for/index.html
index 9dca0df..f896970 100644
--- a/api/shark/-hprof-writer/-companion/open-writer-for/index.html
+++ b/api/shark/-hprof-writer/-companion/open-writer-for/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">HprofWriter</a>/<a href="../">Companion</a>/<a href="./">openWriterFor</a></p>
<h1 id="openwriterfor">openWriterFor<a class="headerlink" href="#openwriterfor" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">openWriterFor</a>(hprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, hprofHeader: <a href="../../../-hprof-header/">HprofHeader</a> = HprofHeader()): <a href="../../">HprofWriter</a></p>
+fun <a href="./">openWriterFor</a>(hprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, hprofHeader: <a href="../../../-hprof-header/">HprofHeader</a> = HprofHeader()): <a href="../../">HprofWriter</a></p>
<p>fun <a href="./">openWriterFor</a>(hprofSink: <a href="https://square.github.io/okio/2.x/okio/okio/-buffered-sink/index.html">BufferedSink</a>, hprofHeader: <a href="../../../-hprof-header/">HprofHeader</a> = HprofHeader()): <a href="../../">HprofWriter</a></p>
diff --git a/api/shark/-hprof-writer/index.html b/api/shark/-hprof-writer/index.html
index dc08cab..33c94e3 100644
--- a/api/shark/-hprof-writer/index.html
+++ b/api/shark/-hprof-writer/index.html
@@ -785,7 +785,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">HprofWriter</a></p>
<h1 id="hprofwriter">HprofWriter<a class="headerlink" href="#hprofwriter" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">HprofWriter</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Closeable.html">Closeable</a></p>
+class <a href="./">HprofWriter</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html">Closeable</a></p>
<p>Generates Hprof files.</p>
<p>Call <a href="-companion/open-writer-for/">openWriterFor</a> to obtain a new instance.</p>
<p>Call <a href="write/">write</a> to add records and <a href="close/">close</a> when you’re done.</p>
diff --git a/api/shark/-interactive-command/index.html b/api/shark/-interactive-command/index.html
index 79b2003..61daf36 100644
--- a/api/shark/-interactive-command/index.html
+++ b/api/shark/-interactive-command/index.html
@@ -838,15 +838,15 @@
</tr>
<tr>
<td><a href="../-analyze-command/-companion/analyze/">analyze</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-neo4-j-command/-companion/dump/">dump</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, dbParentFolder: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, dbParentFolder: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/echo/">echo</a></td>
@@ -894,7 +894,7 @@
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="run/">run</a></td>
diff --git a/api/shark/-leak-trace-object/class-name/index.html b/api/shark/-leak-trace-object/class-name/index.html
index 51abb67..c614b56 100644
--- a/api/shark/-leak-trace-object/class-name/index.html
+++ b/api/shark/-leak-trace-object/class-name/index.html
@@ -757,7 +757,7 @@
<h1 id="classname">className<a class="headerlink" href="#classname" title="Permanent link">¶</a></h1>
<p>[jvm]\
val <a href="./">className</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></p>
-<p>Class name of the object. The class name format is the same as what would be returned by <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html#getname">Class.getName</a>.</p>
+<p>Class name of the object. The class name format is the same as what would be returned by <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--">Class.getName</a>.</p>
</article>
diff --git a/api/shark/-leak-trace-object/index.html b/api/shark/-leak-trace-object/index.html
index 9af9295..65be42d 100644
--- a/api/shark/-leak-trace-object/index.html
+++ b/api/shark/-leak-trace-object/index.html
@@ -792,7 +792,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">LeakTraceObject</a></p>
<h1 id="leaktraceobject">LeakTraceObject<a class="headerlink" href="#leaktraceobject" title="Permanent link">¶</a></h1>
<p>[jvm]\
-data class <a href="./">LeakTraceObject</a>(val type: <a href="-object-type/">LeakTraceObject.ObjectType</a>, val className: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val labels: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, val leakingStatus: <a href="-leaking-status/">LeakTraceObject.LeakingStatus</a>, val leakingStatusReason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val retainedHeapByteSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>?, val retainedObjectCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>?) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></p>
+data class <a href="./">LeakTraceObject</a>(val type: <a href="-object-type/">LeakTraceObject.ObjectType</a>, val className: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val labels: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, val leakingStatus: <a href="-leaking-status/">LeakTraceObject.LeakingStatus</a>, val leakingStatusReason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val retainedHeapByteSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>?, val retainedObjectCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>?) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -857,7 +857,7 @@
<tbody>
<tr>
<td><a href="class-name/">className</a></td>
-<td>[jvm]<br>val <a href="class-name/">className</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><br>Class name of the object. The class name format is the same as what would be returned by <a href="https://developer.android.com/reference/kotlin/java/lang/Class.html#getname">Class.getName</a>.</td>
+<td>[jvm]<br>val <a href="class-name/">className</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a><br>Class name of the object. The class name format is the same as what would be returned by <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--">Class.getName</a>.</td>
</tr>
<tr>
<td><a href="class-simple-name/">classSimpleName</a></td>
diff --git a/api/shark/-leak-trace-reference/index.html b/api/shark/-leak-trace-reference/index.html
index 0142c16..6f02a9b 100644
--- a/api/shark/-leak-trace-reference/index.html
+++ b/api/shark/-leak-trace-reference/index.html
@@ -785,7 +785,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">LeakTraceReference</a></p>
<h1 id="leaktracereference">LeakTraceReference<a class="headerlink" href="#leaktracereference" title="Permanent link">¶</a></h1>
<p>[jvm]\
-data class <a href="./">LeakTraceReference</a>(val originObject: <a href="../-leak-trace-object/">LeakTraceObject</a>, val referenceType: <a href="-reference-type/">LeakTraceReference.ReferenceType</a>, val owningClassName: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val referenceName: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></p>
+data class <a href="./">LeakTraceReference</a>(val originObject: <a href="../-leak-trace-object/">LeakTraceObject</a>, val referenceType: <a href="-reference-type/">LeakTraceReference.ReferenceType</a>, val owningClassName: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val referenceName: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></p>
<p>A <a href="./">LeakTraceReference</a> represents an origin <a href="../-leak-trace-object/">LeakTraceObject</a> and either a reference from that object to the <a href="../-leak-trace-object/">LeakTraceObject</a> in the next <a href="./">LeakTraceReference</a> in <a href="../-leak-trace/reference-path/">LeakTrace.referencePath</a>, or to <a href="../-leak-trace/leaking-object/">LeakTrace.leakingObject</a> if this is the last <a href="./">LeakTraceReference</a> in <a href="../-leak-trace/reference-path/">LeakTrace.referencePath</a>.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
diff --git a/api/shark/-leak-trace/index.html b/api/shark/-leak-trace/index.html
index bb90002..2e63536 100644
--- a/api/shark/-leak-trace/index.html
+++ b/api/shark/-leak-trace/index.html
@@ -792,7 +792,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">LeakTrace</a></p>
<h1 id="leaktrace">LeakTrace<a class="headerlink" href="#leaktrace" title="Permanent link">¶</a></h1>
<p>[jvm]\
-data class <a href="./">LeakTrace</a>(val gcRootType: <a href="-gc-root-type/">LeakTrace.GcRootType</a>, val referencePath: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-leak-trace-reference/">LeakTraceReference</a>>, val leakingObject: <a href="../-leak-trace-object/">LeakTraceObject</a>) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></p>
+data class <a href="./">LeakTrace</a>(val gcRootType: <a href="-gc-root-type/">LeakTrace.GcRootType</a>, val referencePath: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="../-leak-trace-reference/">LeakTraceReference</a>>, val leakingObject: <a href="../-leak-trace-object/">LeakTraceObject</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></p>
<p>The best strong reference path from a GC root to the leaking object. "Best" here means the shortest prioritized path. A large number of distinct paths can generally be found leading to a leaking object. Shark prioritizes paths that don’t go through known <a href="../-library-leak-reference-matcher/">LibraryLeakReferenceMatcher</a> (because those are known to create leaks so it’s more interesting to find other paths causing leaks), then it prioritize paths that don’t go through java local gc roots (because those are harder to reason about). Taking those priorities into account, finding the shortest path means there are less <a href="../-leak-trace-reference/">LeakTraceReference</a> that can be suspected to cause the leak.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
diff --git a/api/shark/-leak/index.html b/api/shark/-leak/index.html
index cc15647..a0e5cf8 100644
--- a/api/shark/-leak/index.html
+++ b/api/shark/-leak/index.html
@@ -791,7 +791,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">Leak</a></p>
<h1 id="leak">Leak<a class="headerlink" href="#leak" title="Permanent link">¶</a></h1>
-<p>sealed class <a href="./">Leak</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></p>
+<p>sealed class <a href="./">Leak</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></p>
<p>A leak found by <a href="../-heap-analyzer/">HeapAnalyzer</a>, either an <a href="../-application-leak/">ApplicationLeak</a> or a <a href="../-library-leak/">LibraryLeak</a>.</p>
<h4 id="inheritors">Inheritors<a class="headerlink" href="#inheritors" title="Permanent link">¶</a></h4>
<table>
diff --git a/api/shark/-neo4-j-command/-companion/dump/index.html b/api/shark/-neo4-j-command/-companion/dump/index.html
index e551fb5..2014900 100644
--- a/api/shark/-neo4-j-command/-companion/dump/index.html
+++ b/api/shark/-neo4-j-command/-companion/dump/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">Neo4JCommand</a>/<a href="../">Companion</a>/<a href="./">dump</a></p>
<h1 id="dump">dump<a class="headerlink" href="#dump" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun CliktCommand.<a href="./">dump</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, dbParentFolder: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</p>
+fun CliktCommand.<a href="./">dump</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, dbParentFolder: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</p>
</article>
diff --git a/api/shark/-neo4-j-command/-companion/index.html b/api/shark/-neo4-j-command/-companion/index.html
index 40c3dd7..c2d642e 100644
--- a/api/shark/-neo4-j-command/-companion/index.html
+++ b/api/shark/-neo4-j-command/-companion/index.html
@@ -790,7 +790,7 @@
<tbody>
<tr>
<td><a href="dump/">dump</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="dump/">dump</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, dbParentFolder: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="dump/">dump</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, dbParentFolder: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="heap-value-as-string/">heapValueAsString</a></td>
diff --git a/api/shark/-neo4-j-command/index.html b/api/shark/-neo4-j-command/index.html
index f8fa533..17ce702 100644
--- a/api/shark/-neo4-j-command/index.html
+++ b/api/shark/-neo4-j-command/index.html
@@ -843,15 +843,15 @@
</tr>
<tr>
<td><a href="../-analyze-command/-companion/analyze/">analyze</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="-companion/dump/">dump</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="-companion/dump/">dump</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, dbParentFolder: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="-companion/dump/">dump</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, dbParentFolder: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/echo/">echo</a></td>
@@ -899,7 +899,7 @@
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="run/">run</a></td>
diff --git a/api/shark/-object-dominators/-dominator-node/index.html b/api/shark/-object-dominators/-dominator-node/index.html
index 3bc1d35..157bc1b 100644
--- a/api/shark/-object-dominators/-dominator-node/index.html
+++ b/api/shark/-object-dominators/-dominator-node/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">ObjectDominators</a>/<a href="./">DominatorNode</a></p>
<h1 id="dominatornode">DominatorNode<a class="headerlink" href="#dominatornode" title="Permanent link">¶</a></h1>
<p>[jvm]\
-data class <a href="./">DominatorNode</a>(val shallowSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val retainedSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val retainedCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val dominatedObjectIds: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>>) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></p>
+data class <a href="./">DominatorNode</a>(val shallowSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val retainedSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val retainedCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val dominatedObjectIds: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
diff --git a/api/shark/-object-dominators/-offline-dominator-node/index.html b/api/shark/-object-dominators/-offline-dominator-node/index.html
index 40a4919..78d7019 100644
--- a/api/shark/-object-dominators/-offline-dominator-node/index.html
+++ b/api/shark/-object-dominators/-offline-dominator-node/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">ObjectDominators</a>/<a href="./">OfflineDominatorNode</a></p>
<h1 id="offlinedominatornode">OfflineDominatorNode<a class="headerlink" href="#offlinedominatornode" title="Permanent link">¶</a></h1>
<p>[jvm]\
-data class <a href="./">OfflineDominatorNode</a>(val node: <a href="../-dominator-node/">ObjectDominators.DominatorNode</a>, val name: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></p>
+data class <a href="./">OfflineDominatorNode</a>(val node: <a href="../-dominator-node/">ObjectDominators.DominatorNode</a>, val name: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
diff --git a/api/shark/-object-dominators/index.html b/api/shark/-object-dominators/index.html
index 251e835..dce077b 100644
--- a/api/shark/-object-dominators/index.html
+++ b/api/shark/-object-dominators/index.html
@@ -815,11 +815,11 @@
<tbody>
<tr>
<td><a href="-dominator-node/">DominatorNode</a></td>
-<td>[jvm]<br>data class <a href="-dominator-node/">DominatorNode</a>(val shallowSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val retainedSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val retainedCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val dominatedObjectIds: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>>) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></td>
+<td>[jvm]<br>data class <a href="-dominator-node/">DominatorNode</a>(val shallowSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val retainedSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val retainedCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>, val dominatedObjectIds: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></td>
</tr>
<tr>
<td><a href="-offline-dominator-node/">OfflineDominatorNode</a></td>
-<td>[jvm]<br>data class <a href="-offline-dominator-node/">OfflineDominatorNode</a>(val node: <a href="-dominator-node/">ObjectDominators.DominatorNode</a>, val name: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></td>
+<td>[jvm]<br>data class <a href="-offline-dominator-node/">OfflineDominatorNode</a>(val node: <a href="-dominator-node/">ObjectDominators.DominatorNode</a>, val name: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-object-growth-detector/find-growing-objects/index.html b/api/shark/-object-growth-detector/find-growing-objects/index.html
index 2d76854..19cbc8f 100644
--- a/api/shark/-object-growth-detector/find-growing-objects/index.html
+++ b/api/shark/-object-growth-detector/find-growing-objects/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">ObjectGrowthDetector</a>/<a href="./">findGrowingObjects</a></p>
<h1 id="findgrowingobjects">findGrowingObjects<a class="headerlink" href="#findgrowingobjects" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">findGrowingObjects</a>(heapGraph: <a href="../../-closeable-heap-graph/">CloseableHeapGraph</a>, previousTraversal: <a href="../../-heap-traversal-input/">HeapTraversalInput</a> = InitialState()): <a href="../../-heap-traversal-output/">HeapTraversalOutput</a></p>
+fun <a href="./">findGrowingObjects</a>(heapGraph: <a href="../../-heap-graph/">HeapGraph</a>, previousTraversal: <a href="../../-heap-traversal-input/">HeapTraversalInput</a> = InitialState()): <a href="../../-heap-traversal-output/">HeapTraversalOutput</a></p>
</article>
diff --git a/api/shark/-object-growth-detector/index.html b/api/shark/-object-growth-detector/index.html
index 2f2484f..d72eac2 100644
--- a/api/shark/-object-growth-detector/index.html
+++ b/api/shark/-object-growth-detector/index.html
@@ -828,7 +828,7 @@
<tbody>
<tr>
<td><a href="find-growing-objects/">findGrowingObjects</a></td>
-<td>[jvm]<br>fun <a href="find-growing-objects/">findGrowingObjects</a>(heapGraph: <a href="../-closeable-heap-graph/">CloseableHeapGraph</a>, previousTraversal: <a href="../-heap-traversal-input/">HeapTraversalInput</a> = InitialState()): <a href="../-heap-traversal-output/">HeapTraversalOutput</a></td>
+<td>[jvm]<br>fun <a href="find-growing-objects/">findGrowingObjects</a>(heapGraph: <a href="../-heap-graph/">HeapGraph</a>, previousTraversal: <a href="../-heap-traversal-input/">HeapTraversalInput</a> = InitialState()): <a href="../-heap-traversal-output/">HeapTraversalOutput</a></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-object-reporter/index.html b/api/shark/-object-reporter/index.html
index dc3c158..bce3a9c 100644
--- a/api/shark/-object-reporter/index.html
+++ b/api/shark/-object-reporter/index.html
@@ -833,7 +833,7 @@
</tr>
<tr>
<td><a href="labels/">labels</a></td>
-<td>[jvm]<br>val <a href="labels/">labels</a>: <a href="https://developer.android.com/reference/kotlin/java/util/LinkedHashSet.html">LinkedHashSet</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>><br>Labels that will be visible on the corresponding <a href="heap-object/">heapObject</a> in the leak trace.</td>
+<td>[jvm]<br>val <a href="labels/">labels</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashSet.html">LinkedHashSet</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>><br>Labels that will be visible on the corresponding <a href="heap-object/">heapObject</a> in the leak trace.</td>
</tr>
<tr>
<td><a href="leaking-reasons/">leakingReasons</a></td>
diff --git a/api/shark/-object-reporter/labels/index.html b/api/shark/-object-reporter/labels/index.html
index e17f93c..137d7d9 100644
--- a/api/shark/-object-reporter/labels/index.html
+++ b/api/shark/-object-reporter/labels/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">ObjectReporter</a>/<a href="./">labels</a></p>
<h1 id="labels">labels<a class="headerlink" href="#labels" title="Permanent link">¶</a></h1>
<p>[jvm]\
-val <a href="./">labels</a>: <a href="https://developer.android.com/reference/kotlin/java/util/LinkedHashSet.html">LinkedHashSet</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>></p>
+val <a href="./">labels</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashSet.html">LinkedHashSet</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>></p>
<p>Labels that will be visible on the corresponding <a href="../heap-object/">heapObject</a> in the leak trace.</p>
diff --git a/api/shark/-proguard-mapping-reader/-proguard-mapping-reader/index.html b/api/shark/-proguard-mapping-reader/-proguard-mapping-reader/index.html
index 185da7e..fc06fb9 100644
--- a/api/shark/-proguard-mapping-reader/-proguard-mapping-reader/index.html
+++ b/api/shark/-proguard-mapping-reader/-proguard-mapping-reader/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">ProguardMappingReader</a>/<a href="./">ProguardMappingReader</a></p>
<h1 id="proguardmappingreader">ProguardMappingReader<a class="headerlink" href="#proguardmappingreader" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(proguardMappingInputStream: <a href="https://developer.android.com/reference/kotlin/java/io/InputStream.html">InputStream</a>)</p>
+constructor(proguardMappingInputStream: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html">InputStream</a>)</p>
</article>
diff --git a/api/shark/-proguard-mapping-reader/index.html b/api/shark/-proguard-mapping-reader/index.html
index d683a37..25468b9 100644
--- a/api/shark/-proguard-mapping-reader/index.html
+++ b/api/shark/-proguard-mapping-reader/index.html
@@ -785,7 +785,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">ProguardMappingReader</a></p>
<h1 id="proguardmappingreader">ProguardMappingReader<a class="headerlink" href="#proguardmappingreader" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">ProguardMappingReader</a>(proguardMappingInputStream: <a href="https://developer.android.com/reference/kotlin/java/io/InputStream.html">InputStream</a>)</p>
+class <a href="./">ProguardMappingReader</a>(proguardMappingInputStream: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html">InputStream</a>)</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -797,7 +797,7 @@
<tbody>
<tr>
<td><a href="-proguard-mapping-reader/">ProguardMappingReader</a></td>
-<td>[jvm]<br>constructor(proguardMappingInputStream: <a href="https://developer.android.com/reference/kotlin/java/io/InputStream.html">InputStream</a>)</td>
+<td>[jvm]<br>constructor(proguardMappingInputStream: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html">InputStream</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-random-access-hprof-reader/-companion/index.html b/api/shark/-random-access-hprof-reader/-companion/index.html
index d73bf7f..d8a23ee 100644
--- a/api/shark/-random-access-hprof-reader/-companion/index.html
+++ b/api/shark/-random-access-hprof-reader/-companion/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="open-reader-for/">openReaderFor</a></td>
-<td>[jvm]<br>fun <a href="open-reader-for/">openReaderFor</a>(hprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = HprofHeader.parseHeaderOf(hprofFile)): <a href="../">RandomAccessHprofReader</a><br>fun <a href="open-reader-for/">openReaderFor</a>(hprofSourceProvider: <a href="../../-random-access-source-provider/">RandomAccessSourceProvider</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = hprofSourceProvider.openRandomAccessSource() .use { HprofHeader.parseHeaderOf(it.asStreamingSource()) }): <a href="../">RandomAccessHprofReader</a></td>
+<td>[jvm]<br>fun <a href="open-reader-for/">openReaderFor</a>(hprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = HprofHeader.parseHeaderOf(hprofFile)): <a href="../">RandomAccessHprofReader</a><br>fun <a href="open-reader-for/">openReaderFor</a>(hprofSourceProvider: <a href="../../-random-access-source-provider/">RandomAccessSourceProvider</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = hprofSourceProvider.openRandomAccessSource() .use { HprofHeader.parseHeaderOf(it.asStreamingSource()) }): <a href="../">RandomAccessHprofReader</a></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-random-access-hprof-reader/-companion/open-reader-for/index.html b/api/shark/-random-access-hprof-reader/-companion/open-reader-for/index.html
index f37ab3d..a9ffa4e 100644
--- a/api/shark/-random-access-hprof-reader/-companion/open-reader-for/index.html
+++ b/api/shark/-random-access-hprof-reader/-companion/open-reader-for/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">RandomAccessHprofReader</a>/<a href="../">Companion</a>/<a href="./">openReaderFor</a></p>
<h1 id="openreaderfor">openReaderFor<a class="headerlink" href="#openreaderfor" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">openReaderFor</a>(hprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, hprofHeader: <a href="../../../-hprof-header/">HprofHeader</a> = HprofHeader.parseHeaderOf(hprofFile)): <a href="../../">RandomAccessHprofReader</a></p>
+fun <a href="./">openReaderFor</a>(hprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, hprofHeader: <a href="../../../-hprof-header/">HprofHeader</a> = HprofHeader.parseHeaderOf(hprofFile)): <a href="../../">RandomAccessHprofReader</a></p>
<p>fun <a href="./">openReaderFor</a>(hprofSourceProvider: <a href="../../../-random-access-source-provider/">RandomAccessSourceProvider</a>, hprofHeader: <a href="../../../-hprof-header/">HprofHeader</a> = hprofSourceProvider.openRandomAccessSource()
.use { HprofHeader.parseHeaderOf(it.asStreamingSource()) }): <a href="../../">RandomAccessHprofReader</a></p>
diff --git a/api/shark/-random-access-hprof-reader/index.html b/api/shark/-random-access-hprof-reader/index.html
index 9d9ef6c..a4d4f3f 100644
--- a/api/shark/-random-access-hprof-reader/index.html
+++ b/api/shark/-random-access-hprof-reader/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">RandomAccessHprofReader</a></p>
<h1 id="randomaccesshprofreader">RandomAccessHprofReader<a class="headerlink" href="#randomaccesshprofreader" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">RandomAccessHprofReader</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Closeable.html">Closeable</a></p>
+class <a href="./">RandomAccessHprofReader</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html">Closeable</a></p>
<p>Reads records in a Hprof source, one at a time with a specific position and size. Call <a href="-companion/open-reader-for/">openReaderFor</a> to obtain a new instance.</p>
<h2 id="types">Types<a class="headerlink" href="#types" title="Permanent link">¶</a></h2>
<table>
diff --git a/api/shark/-random-access-source/index.html b/api/shark/-random-access-source/index.html
index 2891d8b..68901d3 100644
--- a/api/shark/-random-access-source/index.html
+++ b/api/shark/-random-access-source/index.html
@@ -771,7 +771,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">RandomAccessSource</a></p>
<h1 id="randomaccesssource">RandomAccessSource<a class="headerlink" href="#randomaccesssource" title="Permanent link">¶</a></h1>
<p>[jvm]\
-interface <a href="./">RandomAccessSource</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Closeable.html">Closeable</a></p>
+interface <a href="./">RandomAccessSource</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html">Closeable</a></p>
<h2 id="functions">Functions<a class="headerlink" href="#functions" title="Permanent link">¶</a></h2>
<table>
<thead>
diff --git a/api/shark/-reference-pattern/index.html b/api/shark/-reference-pattern/index.html
index dc538d0..0a746e7 100644
--- a/api/shark/-reference-pattern/index.html
+++ b/api/shark/-reference-pattern/index.html
@@ -784,7 +784,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">ReferencePattern</a></p>
<h1 id="referencepattern">ReferencePattern<a class="headerlink" href="#referencepattern" title="Permanent link">¶</a></h1>
-<p>sealed class <a href="./">ReferencePattern</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></p>
+<p>sealed class <a href="./">ReferencePattern</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></p>
<p>A pattern that will match references for a given <a href="../-reference-matcher/">ReferenceMatcher</a>.</p>
<h4 id="inheritors">Inheritors<a class="headerlink" href="#inheritors" title="Permanent link">¶</a></h4>
<table>
diff --git a/api/shark/-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/index.html b/api/shark/-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/index.html
index f6a79fb..eee5a4f 100644
--- a/api/shark/-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/index.html
+++ b/api/shark/-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/index.html
@@ -771,8 +771,8 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">RepeatingScenarioObjectGrowthDetector</a>/<a href="./">findRepeatedlyGrowingObjects</a></p>
<h1 id="findrepeatedlygrowingobjects">findRepeatedlyGrowingObjects<a class="headerlink" href="#findrepeatedlygrowingobjects" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">findRepeatedlyGrowingObjects</a>(maxHeapDumps: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a> = DEFAULT_MAX_HEAP_DUMPS, scenarioLoopsPerDump: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a> = DEFAULT_SCENARIO_LOOPS_PER_DUMP, roundTripScenario: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>): <a href="../../-heap-diff/">HeapDiff</a></p>
-<p>Detects object growth by iterating through <a href="./">roundTripScenario</a> repeatedly and dumping the heap every <code>scenarioLoopsPerDump</code> until no object growth is detected or we reach <code>maxHeapDumps</code>. Returns the <a href="../../-heap-diff/">HeapDiff</a> for the last iteration. You can check <a href="../../-heap-diff/is-growing/">HeapDiff.isGrowing</a> and <a href="../../-heap-diff/growing-objects/">HeapDiff.growingObjects</a> to report object growth.</p>
+abstract fun <a href="./">findRepeatedlyGrowingObjects</a>(maxHeapDumps: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a> = DEFAULT_MAX_HEAP_DUMPS, scenarioLoopsPerDump: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a> = DEFAULT_SCENARIO_LOOPS_PER_DUMP, roundTripScenario: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>): <a href="../../-heap-diff/">HeapDiff</a></p>
+<p>Detects object growth by iterating through <a href="./">roundTripScenario</a> repeatedly and dumping the heap every <a href="./">scenarioLoopsPerDump</a> until no object growth is detected or we reach <a href="./">maxHeapDumps</a>. Returns the <a href="../../-heap-diff/">HeapDiff</a> for the last iteration. You can check <a href="../../-heap-diff/is-growing/">HeapDiff.isGrowing</a> and <a href="../../-heap-diff/growing-objects/">HeapDiff.growingObjects</a> to report object growth.</p>
<h4 id="parameters">Parameters<a class="headerlink" href="#parameters" title="Permanent link">¶</a></h4>
<p>jvm</p>
<table>
diff --git a/api/shark/-repeating-scenario-object-growth-detector/index.html b/api/shark/-repeating-scenario-object-growth-detector/index.html
index 6cecfdc..f9d4bfe 100644
--- a/api/shark/-repeating-scenario-object-growth-detector/index.html
+++ b/api/shark/-repeating-scenario-object-growth-detector/index.html
@@ -748,13 +748,6 @@
</li>
<li class="md-nav__item">
- <a href="#constructors" class="md-nav__link">
- Constructors
- </a>
-
-</li>
-
- <li class="md-nav__item">
<a href="#types" class="md-nav__link">
Types
</a>
@@ -791,7 +784,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">RepeatingScenarioObjectGrowthDetector</a></p>
<h1 id="repeatingscenarioobjectgrowthdetector">RepeatingScenarioObjectGrowthDetector<a class="headerlink" href="#repeatingscenarioobjectgrowthdetector" title="Permanent link">¶</a></h1>
-<p>class <a href="./">RepeatingScenarioObjectGrowthDetector</a>(heapGraphProvider: <a href="../-heap-graph-provider/">HeapGraphProvider</a>, repeatingHeapGraphDetector: <a href="../-repeating-heap-graph-object-growth-detector/">RepeatingHeapGraphObjectGrowthDetector</a>)</p>
+<p>interface <a href="./">RepeatingScenarioObjectGrowthDetector</a></p>
<h4 id="see-also">See also<a class="headerlink" href="#see-also" title="Permanent link">¶</a></h4>
<table>
<thead>
@@ -805,21 +798,6 @@
</tr>
</tbody>
</table>
-<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
-<table>
-<thead>
-<tr>
-<th></th>
-<th></th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td><a href="-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a></td>
-<td>[jvm]<br>constructor(heapGraphProvider: <a href="../-heap-graph-provider/">HeapGraphProvider</a>, repeatingHeapGraphDetector: <a href="../-repeating-heap-graph-object-growth-detector/">RepeatingHeapGraphObjectGrowthDetector</a>)</td>
-</tr>
-</tbody>
-</table>
<h2 id="types">Types<a class="headerlink" href="#types" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -846,7 +824,7 @@
<tbody>
<tr>
<td><a href="find-repeatedly-growing-objects/">findRepeatedlyGrowingObjects</a></td>
-<td>[jvm]<br>fun <a href="find-repeatedly-growing-objects/">findRepeatedlyGrowingObjects</a>(maxHeapDumps: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a> = DEFAULT_MAX_HEAP_DUMPS, scenarioLoopsPerDump: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a> = DEFAULT_SCENARIO_LOOPS_PER_DUMP, roundTripScenario: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>): <a href="../-heap-diff/">HeapDiff</a><br>Detects object growth by iterating through <a href="find-repeatedly-growing-objects/">roundTripScenario</a> repeatedly and dumping the heap every <code>scenarioLoopsPerDump</code> until no object growth is detected or we reach <code>maxHeapDumps</code>. Returns the <a href="../-heap-diff/">HeapDiff</a> for the last iteration. You can check <a href="../-heap-diff/is-growing/">HeapDiff.isGrowing</a> and <a href="../-heap-diff/growing-objects/">HeapDiff.growingObjects</a> to report object growth.</td>
+<td>[jvm]<br>abstract fun <a href="find-repeatedly-growing-objects/">findRepeatedlyGrowingObjects</a>(maxHeapDumps: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a> = DEFAULT_MAX_HEAP_DUMPS, scenarioLoopsPerDump: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a> = DEFAULT_SCENARIO_LOOPS_PER_DUMP, roundTripScenario: () -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>): <a href="../-heap-diff/">HeapDiff</a><br>Detects object growth by iterating through <a href="find-repeatedly-growing-objects/">roundTripScenario</a> repeatedly and dumping the heap every <a href="find-repeatedly-growing-objects/">scenarioLoopsPerDump</a> until no object growth is detected or we reach <a href="find-repeatedly-growing-objects/">maxHeapDumps</a>. Returns the <a href="../-heap-diff/">HeapDiff</a> for the last iteration. You can check <a href="../-heap-diff/is-growing/">HeapDiff.isGrowing</a> and <a href="../-heap-diff/growing-objects/">HeapDiff.growingObjects</a> to report object growth.</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-shark-cli-command/-command-params/-command-params/index.html b/api/shark/-shark-cli-command/-command-params/-command-params/index.html
index 239b745..a5eafc8 100644
--- a/api/shark/-shark-cli-command/-command-params/-command-params/index.html
+++ b/api/shark/-shark-cli-command/-command-params/-command-params/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">SharkCliCommand</a>/<a href="../">CommandParams</a>/<a href="./">CommandParams</a></p>
<h1 id="commandparams">CommandParams<a class="headerlink" href="#commandparams" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(source: <a href="../../-heap-dump-source/">SharkCliCommand.HeapDumpSource</a>, obfuscationMappingPath: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</p>
+constructor(source: <a href="../../-heap-dump-source/">SharkCliCommand.HeapDumpSource</a>, obfuscationMappingPath: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</p>
</article>
diff --git a/api/shark/-shark-cli-command/-command-params/index.html b/api/shark/-shark-cli-command/-command-params/index.html
index f77d56e..0e7b07c 100644
--- a/api/shark/-shark-cli-command/-command-params/index.html
+++ b/api/shark/-shark-cli-command/-command-params/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">SharkCliCommand</a>/<a href="./">CommandParams</a></p>
<h1 id="commandparams">CommandParams<a class="headerlink" href="#commandparams" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">CommandParams</a>(val source: <a href="../-heap-dump-source/">SharkCliCommand.HeapDumpSource</a>, val obfuscationMappingPath: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</p>
+class <a href="./">CommandParams</a>(val source: <a href="../-heap-dump-source/">SharkCliCommand.HeapDumpSource</a>, val obfuscationMappingPath: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -790,7 +790,7 @@
<tbody>
<tr>
<td><a href="-command-params/">CommandParams</a></td>
-<td>[jvm]<br>constructor(source: <a href="../-heap-dump-source/">SharkCliCommand.HeapDumpSource</a>, obfuscationMappingPath: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>constructor(source: <a href="../-heap-dump-source/">SharkCliCommand.HeapDumpSource</a>, obfuscationMappingPath: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
</tbody>
</table>
@@ -805,7 +805,7 @@
<tbody>
<tr>
<td><a href="obfuscation-mapping-path/">obfuscationMappingPath</a></td>
-<td>[jvm]<br>val <a href="obfuscation-mapping-path/">obfuscationMappingPath</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?</td>
+<td>[jvm]<br>val <a href="obfuscation-mapping-path/">obfuscationMappingPath</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?</td>
</tr>
<tr>
<td><a href="source/">source</a></td>
diff --git a/api/shark/-shark-cli-command/-command-params/obfuscation-mapping-path/index.html b/api/shark/-shark-cli-command/-command-params/obfuscation-mapping-path/index.html
index fb5be73..f3f24ab 100644
--- a/api/shark/-shark-cli-command/-command-params/obfuscation-mapping-path/index.html
+++ b/api/shark/-shark-cli-command/-command-params/obfuscation-mapping-path/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">SharkCliCommand</a>/<a href="../">CommandParams</a>/<a href="./">obfuscationMappingPath</a></p>
<h1 id="obfuscationmappingpath">obfuscationMappingPath<a class="headerlink" href="#obfuscationmappingpath" title="Permanent link">¶</a></h1>
<p>[jvm]\
-val <a href="./">obfuscationMappingPath</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?</p>
+val <a href="./">obfuscationMappingPath</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?</p>
</article>
diff --git a/api/shark/-shark-cli-command/-companion/index.html b/api/shark/-shark-cli-command/-companion/index.html
index 2e9bf0c..4b0ba22 100644
--- a/api/shark/-shark-cli-command/-companion/index.html
+++ b/api/shark/-shark-cli-command/-companion/index.html
@@ -798,11 +798,11 @@
</tr>
<tr>
<td><a href="retrieve-heap-dump-file/">retrieveHeapDumpFile</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="run-command/">runCommand</a></td>
-<td>[jvm]<br>fun <a href="run-command/">runCommand</a>(directory: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, vararg arguments: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></td>
+<td>[jvm]<br>fun <a href="run-command/">runCommand</a>(directory: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, vararg arguments: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-shark-cli-command/-companion/retrieve-heap-dump-file/index.html b/api/shark/-shark-cli-command/-companion/retrieve-heap-dump-file/index.html
index c7957c7..3619ced 100644
--- a/api/shark/-shark-cli-command/-companion/retrieve-heap-dump-file/index.html
+++ b/api/shark/-shark-cli-command/-companion/retrieve-heap-dump-file/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">SharkCliCommand</a>/<a href="../">Companion</a>/<a href="./">retrieveHeapDumpFile</a></p>
<h1 id="retrieveheapdumpfile">retrieveHeapDumpFile<a class="headerlink" href="#retrieveheapdumpfile" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun CliktCommand.<a href="./">retrieveHeapDumpFile</a>(params: <a href="../../-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+fun CliktCommand.<a href="./">retrieveHeapDumpFile</a>(params: <a href="../../-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
</article>
diff --git a/api/shark/-shark-cli-command/-companion/run-command/index.html b/api/shark/-shark-cli-command/-companion/run-command/index.html
index cfccedf..76372a0 100644
--- a/api/shark/-shark-cli-command/-companion/run-command/index.html
+++ b/api/shark/-shark-cli-command/-companion/run-command/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">SharkCliCommand</a>/<a href="../">Companion</a>/<a href="./">runCommand</a></p>
<h1 id="runcommand">runCommand<a class="headerlink" href="#runcommand" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">runCommand</a>(directory: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, vararg arguments: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></p>
+fun <a href="./">runCommand</a>(directory: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, vararg arguments: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>): <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></p>
</article>
diff --git a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/-hprof-directory-source/index.html b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/-hprof-directory-source/index.html
index 59793e8..fb7d128 100644
--- a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/-hprof-directory-source/index.html
+++ b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/-hprof-directory-source/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../../">leakcanary-repo</a>/<a href="../../../../">shark</a>/<a href="../../../">SharkCliCommand</a>/<a href="../../">HeapDumpSource</a>/<a href="../">HprofDirectorySource</a>/<a href="./">HprofDirectorySource</a></p>
<h1 id="hprofdirectorysource">HprofDirectorySource<a class="headerlink" href="#hprofdirectorysource" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(directory: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+constructor(directory: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
</article>
diff --git a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/directory/index.html b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/directory/index.html
index f0c4c16..f199f3e 100644
--- a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/directory/index.html
+++ b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/directory/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../../">leakcanary-repo</a>/<a href="../../../../">shark</a>/<a href="../../../">SharkCliCommand</a>/<a href="../../">HeapDumpSource</a>/<a href="../">HprofDirectorySource</a>/<a href="./">directory</a></p>
<h1 id="directory">directory<a class="headerlink" href="#directory" title="Permanent link">¶</a></h1>
<p>[jvm]\
-val <a href="./">directory</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+val <a href="./">directory</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
</article>
diff --git a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/hprof-files/index.html b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/hprof-files/index.html
index 2373d32..c85a1ed 100644
--- a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/hprof-files/index.html
+++ b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/hprof-files/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../../">leakcanary-repo</a>/<a href="../../../../">shark</a>/<a href="../../../">SharkCliCommand</a>/<a href="../../">HeapDumpSource</a>/<a href="../">HprofDirectorySource</a>/<a href="./">hprofFiles</a></p>
<h1 id="hproffiles">hprofFiles<a class="headerlink" href="#hproffiles" title="Permanent link">¶</a></h1>
<p>[jvm]\
-val <a href="./">hprofFiles</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>></p>
+val <a href="./">hprofFiles</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>></p>
</article>
diff --git a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/index.html b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/index.html
index bc65a43..6d9c2a5 100644
--- a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/index.html
+++ b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">SharkCliCommand</a>/<a href="../">HeapDumpSource</a>/<a href="./">HprofDirectorySource</a></p>
<h1 id="hprofdirectorysource">HprofDirectorySource<a class="headerlink" href="#hprofdirectorysource" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">HprofDirectorySource</a>(val directory: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) : <a href="../">SharkCliCommand.HeapDumpSource</a></p>
+class <a href="./">HprofDirectorySource</a>(val directory: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) : <a href="../">SharkCliCommand.HeapDumpSource</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -790,7 +790,7 @@
<tbody>
<tr>
<td><a href="-hprof-directory-source/">HprofDirectorySource</a></td>
-<td>[jvm]<br>constructor(directory: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td>[jvm]<br>constructor(directory: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
</tbody>
</table>
@@ -805,11 +805,11 @@
<tbody>
<tr>
<td><a href="directory/">directory</a></td>
-<td>[jvm]<br>val <a href="directory/">directory</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>val <a href="directory/">directory</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="hprof-files/">hprofFiles</a></td>
-<td>[jvm]<br>val <a href="hprof-files/">hprofFiles</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>></td>
+<td>[jvm]<br>val <a href="hprof-files/">hprofFiles</a>: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/-hprof-file-source/index.html b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/-hprof-file-source/index.html
index 892ef39..31e936b 100644
--- a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/-hprof-file-source/index.html
+++ b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/-hprof-file-source/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../../">leakcanary-repo</a>/<a href="../../../../">shark</a>/<a href="../../../">SharkCliCommand</a>/<a href="../../">HeapDumpSource</a>/<a href="../">HprofFileSource</a>/<a href="./">HprofFileSource</a></p>
<h1 id="hproffilesource">HprofFileSource<a class="headerlink" href="#hproffilesource" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</p>
+constructor(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</p>
</article>
diff --git a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/file/index.html b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/file/index.html
index 563bebc..ae37f28 100644
--- a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/file/index.html
+++ b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/file/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../../">leakcanary-repo</a>/<a href="../../../../">shark</a>/<a href="../../../">SharkCliCommand</a>/<a href="../../">HeapDumpSource</a>/<a href="../">HprofFileSource</a>/<a href="./">file</a></p>
<h1 id="file">file<a class="headerlink" href="#file" title="Permanent link">¶</a></h1>
<p>[jvm]\
-val <a href="./">file</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></p>
+val <a href="./">file</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></p>
</article>
diff --git a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/index.html b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/index.html
index 5782b85..336c16b 100644
--- a/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/index.html
+++ b/api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">SharkCliCommand</a>/<a href="../">HeapDumpSource</a>/<a href="./">HprofFileSource</a></p>
<h1 id="hproffilesource">HprofFileSource<a class="headerlink" href="#hproffilesource" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">HprofFileSource</a>(val file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) : <a href="../">SharkCliCommand.HeapDumpSource</a></p>
+class <a href="./">HprofFileSource</a>(val file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) : <a href="../">SharkCliCommand.HeapDumpSource</a></p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
<thead>
@@ -790,7 +790,7 @@
<tbody>
<tr>
<td><a href="-hprof-file-source/">HprofFileSource</a></td>
-<td>[jvm]<br>constructor(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>)</td>
+<td>[jvm]<br>constructor(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>)</td>
</tr>
</tbody>
</table>
@@ -805,7 +805,7 @@
<tbody>
<tr>
<td><a href="file/">file</a></td>
-<td>[jvm]<br>val <a href="file/">file</a>: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>val <a href="file/">file</a>: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-shark-cli-command/-heap-dump-source/index.html b/api/shark/-shark-cli-command/-heap-dump-source/index.html
index c269ac1..5b017d8 100644
--- a/api/shark/-shark-cli-command/-heap-dump-source/index.html
+++ b/api/shark/-shark-cli-command/-heap-dump-source/index.html
@@ -808,11 +808,11 @@
<tbody>
<tr>
<td><a href="-hprof-directory-source/">HprofDirectorySource</a></td>
-<td>[jvm]<br>class <a href="-hprof-directory-source/">HprofDirectorySource</a>(val directory: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) : <a href="./">SharkCliCommand.HeapDumpSource</a></td>
+<td>[jvm]<br>class <a href="-hprof-directory-source/">HprofDirectorySource</a>(val directory: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) : <a href="./">SharkCliCommand.HeapDumpSource</a></td>
</tr>
<tr>
<td><a href="-hprof-file-source/">HprofFileSource</a></td>
-<td>[jvm]<br>class <a href="-hprof-file-source/">HprofFileSource</a>(val file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) : <a href="./">SharkCliCommand.HeapDumpSource</a></td>
+<td>[jvm]<br>class <a href="-hprof-file-source/">HprofFileSource</a>(val file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) : <a href="./">SharkCliCommand.HeapDumpSource</a></td>
</tr>
<tr>
<td><a href="-process-source/">ProcessSource</a></td>
diff --git a/api/shark/-shark-cli-command/index.html b/api/shark/-shark-cli-command/index.html
index 7c2c019..1f9cb78 100644
--- a/api/shark/-shark-cli-command/index.html
+++ b/api/shark/-shark-cli-command/index.html
@@ -819,7 +819,7 @@
<tbody>
<tr>
<td><a href="-command-params/">CommandParams</a></td>
-<td>[jvm]<br>class <a href="-command-params/">CommandParams</a>(val source: <a href="-heap-dump-source/">SharkCliCommand.HeapDumpSource</a>, val obfuscationMappingPath: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>class <a href="-command-params/">CommandParams</a>(val source: <a href="-heap-dump-source/">SharkCliCommand.HeapDumpSource</a>, val obfuscationMappingPath: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="-companion/">Companion</a></td>
@@ -846,15 +846,15 @@
</tr>
<tr>
<td><a href="../-analyze-command/-companion/analyze/">analyze</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-neo4-j-command/-companion/dump/">dump</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, dbParentFolder: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, dbParentFolder: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="-companion/echo/">echo</a></td>
@@ -902,7 +902,7 @@
</tr>
<tr>
<td><a href="-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="run/">run</a></td>
diff --git a/api/shark/-streaming-hprof-reader/-companion/index.html b/api/shark/-streaming-hprof-reader/-companion/index.html
index 06d20f8..50c7346 100644
--- a/api/shark/-streaming-hprof-reader/-companion/index.html
+++ b/api/shark/-streaming-hprof-reader/-companion/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="reader-for/">readerFor</a></td>
-<td>[jvm]<br>fun <a href="reader-for/">readerFor</a>(hprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = HprofHeader.parseHeaderOf(hprofFile)): <a href="../">StreamingHprofReader</a><br>Creates a <a href="../">StreamingHprofReader</a> for the provided <a href="reader-for/">hprofFile</a>. <a href="reader-for/">hprofHeader</a> will be read from <a href="reader-for/">hprofFile</a> unless you provide it.<br>[jvm]<br>fun <a href="reader-for/">readerFor</a>(hprofSourceProvider: <a href="../../-streaming-source-provider/">StreamingSourceProvider</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = hprofSourceProvider.openStreamingSource() .use { HprofHeader.parseHeaderOf(it) }): <a href="../">StreamingHprofReader</a><br>Creates a <a href="../">StreamingHprofReader</a> that will call <a href="../../-streaming-source-provider/open-streaming-source/">StreamingSourceProvider.openStreamingSource</a> on every <a href="../read-records/">readRecords</a> to obtain a <a href="https://square.github.io/okio/2.x/okio/okio/-source/index.html">Source</a> to read the hprof data from. Before reading the hprof records, <a href="../">StreamingHprofReader</a> will skip <a href="../../-hprof-header/records-position/">HprofHeader.recordsPosition</a> bytes.</td>
+<td>[jvm]<br>fun <a href="reader-for/">readerFor</a>(hprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = HprofHeader.parseHeaderOf(hprofFile)): <a href="../">StreamingHprofReader</a><br>Creates a <a href="../">StreamingHprofReader</a> for the provided <a href="reader-for/">hprofFile</a>. <a href="reader-for/">hprofHeader</a> will be read from <a href="reader-for/">hprofFile</a> unless you provide it.<br>[jvm]<br>fun <a href="reader-for/">readerFor</a>(hprofSourceProvider: <a href="../../-streaming-source-provider/">StreamingSourceProvider</a>, hprofHeader: <a href="../../-hprof-header/">HprofHeader</a> = hprofSourceProvider.openStreamingSource() .use { HprofHeader.parseHeaderOf(it) }): <a href="../">StreamingHprofReader</a><br>Creates a <a href="../">StreamingHprofReader</a> that will call <a href="../../-streaming-source-provider/open-streaming-source/">StreamingSourceProvider.openStreamingSource</a> on every <a href="../read-records/">readRecords</a> to obtain a <a href="https://square.github.io/okio/2.x/okio/okio/-source/index.html">Source</a> to read the hprof data from. Before reading the hprof records, <a href="../">StreamingHprofReader</a> will skip <a href="../../-hprof-header/records-position/">HprofHeader.recordsPosition</a> bytes.</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/-streaming-hprof-reader/-companion/reader-for/index.html b/api/shark/-streaming-hprof-reader/-companion/reader-for/index.html
index d4f49c5..2707433 100644
--- a/api/shark/-streaming-hprof-reader/-companion/reader-for/index.html
+++ b/api/shark/-streaming-hprof-reader/-companion/reader-for/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">StreamingHprofReader</a>/<a href="../">Companion</a>/<a href="./">readerFor</a></p>
<h1 id="readerfor">readerFor<a class="headerlink" href="#readerfor" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="./">readerFor</a>(hprofFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, hprofHeader: <a href="../../../-hprof-header/">HprofHeader</a> = HprofHeader.parseHeaderOf(hprofFile)): <a href="../../">StreamingHprofReader</a></p>
+fun <a href="./">readerFor</a>(hprofFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, hprofHeader: <a href="../../../-hprof-header/">HprofHeader</a> = HprofHeader.parseHeaderOf(hprofFile)): <a href="../../">StreamingHprofReader</a></p>
<p>Creates a <a href="../../">StreamingHprofReader</a> for the provided <a href="./">hprofFile</a>. <a href="./">hprofHeader</a> will be read from <a href="./">hprofFile</a> unless you provide it.</p>
<p>[jvm]\
fun <a href="./">readerFor</a>(hprofSourceProvider: <a href="../../../-streaming-source-provider/">StreamingSourceProvider</a>, hprofHeader: <a href="../../../-hprof-header/">HprofHeader</a> = hprofSourceProvider.openStreamingSource()
diff --git a/api/shark/-streaming-record-reader-adapter/-companion/as-hprof-tags/index.html b/api/shark/-streaming-record-reader-adapter/-companion/as-hprof-tags/index.html
index 8be9cf9..87828ee 100644
--- a/api/shark/-streaming-record-reader-adapter/-companion/as-hprof-tags/index.html
+++ b/api/shark/-streaming-record-reader-adapter/-companion/as-hprof-tags/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../../">leakcanary-repo</a>/<a href="../../../">shark</a>/<a href="../../">StreamingRecordReaderAdapter</a>/<a href="../">Companion</a>/<a href="./">asHprofTags</a></p>
<h1 id="ashproftags">asHprofTags<a class="headerlink" href="#ashproftags" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html">KClass</a><out <a href="../../../-hprof-record/">HprofRecord</a>>>.<a href="./">asHprofTags</a>(): <a href="https://developer.android.com/reference/kotlin/java/util/EnumSet.html">EnumSet</a><<a href="../../../-hprof-record-tag/">HprofRecordTag</a>></p>
+fun <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html">KClass</a><out <a href="../../../-hprof-record/">HprofRecord</a>>>.<a href="./">asHprofTags</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html">EnumSet</a><<a href="../../../-hprof-record-tag/">HprofRecordTag</a>></p>
</article>
diff --git a/api/shark/-streaming-record-reader-adapter/-companion/index.html b/api/shark/-streaming-record-reader-adapter/-companion/index.html
index 9816881..66684cb 100644
--- a/api/shark/-streaming-record-reader-adapter/-companion/index.html
+++ b/api/shark/-streaming-record-reader-adapter/-companion/index.html
@@ -783,7 +783,7 @@
<tbody>
<tr>
<td><a href="as-hprof-tags/">asHprofTags</a></td>
-<td>[jvm]<br>fun <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html">KClass</a><out <a href="../../-hprof-record/">HprofRecord</a>>>.<a href="as-hprof-tags/">asHprofTags</a>(): <a href="https://developer.android.com/reference/kotlin/java/util/EnumSet.html">EnumSet</a><<a href="../../-hprof-record-tag/">HprofRecordTag</a>></td>
+<td>[jvm]<br>fun <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html">KClass</a><out <a href="../../-hprof-record/">HprofRecord</a>>>.<a href="as-hprof-tags/">asHprofTags</a>(): <a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html">EnumSet</a><<a href="../../-hprof-record-tag/">HprofRecordTag</a>></td>
</tr>
<tr>
<td><a href="as-streaming-record-reader/">asStreamingRecordReader</a></td>
diff --git a/api/shark/-strip-hprof-command/index.html b/api/shark/-strip-hprof-command/index.html
index 2f69b68..ae5531d 100644
--- a/api/shark/-strip-hprof-command/index.html
+++ b/api/shark/-strip-hprof-command/index.html
@@ -816,15 +816,15 @@
</tr>
<tr>
<td><a href="../-analyze-command/-companion/analyze/">analyze</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-analyze-command/-companion/analyze/">analyze</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-neo4-j-command/-companion/dump/">dump</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, dbParentFolder: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, proguardMappingFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>?)</td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-neo4-j-command/-companion/dump/">dump</a>(heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, dbParentFolder: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, proguardMappingFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>?)</td>
</tr>
<tr>
<td><a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-dump-process-command/-companion/dump-heap/">dumpHeap</a>(processNameParam: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, maybeDeviceId: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/echo/">echo</a></td>
@@ -872,7 +872,7 @@
</tr>
<tr>
<td><a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a></td>
-<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a></td>
+<td>[jvm]<br>fun CliktCommand.<a href="../-shark-cli-command/-companion/retrieve-heap-dump-file/">retrieveHeapDumpFile</a>(params: <a href="../-shark-cli-command/-command-params/">SharkCliCommand.CommandParams</a>): <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a></td>
</tr>
<tr>
<td><a href="run/">run</a></td>
diff --git a/api/shark/-throwing-cancelable-file-source-provider/-throwing-cancelable-file-source-provider/index.html b/api/shark/-throwing-cancelable-file-source-provider/-throwing-cancelable-file-source-provider/index.html
index c5ed37a..8bb6db4 100644
--- a/api/shark/-throwing-cancelable-file-source-provider/-throwing-cancelable-file-source-provider/index.html
+++ b/api/shark/-throwing-cancelable-file-source-provider/-throwing-cancelable-file-source-provider/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../../">leakcanary-repo</a>/<a href="../../">shark</a>/<a href="../">ThrowingCancelableFileSourceProvider</a>/<a href="./">ThrowingCancelableFileSourceProvider</a></p>
<h1 id="throwingcancelablefilesourceprovider">ThrowingCancelableFileSourceProvider<a class="headerlink" href="#throwingcancelablefilesourceprovider" title="Permanent link">¶</a></h1>
<p>[jvm]\
-constructor(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, throwIfCanceled: <a href="https://developer.android.com/reference/kotlin/java/lang/Runnable.html">Runnable</a>)</p>
+constructor(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, throwIfCanceled: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html">Runnable</a>)</p>
</article>
diff --git a/api/shark/-throwing-cancelable-file-source-provider/index.html b/api/shark/-throwing-cancelable-file-source-provider/index.html
index fe4a528..fc7ea1e 100644
--- a/api/shark/-throwing-cancelable-file-source-provider/index.html
+++ b/api/shark/-throwing-cancelable-file-source-provider/index.html
@@ -778,7 +778,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">ThrowingCancelableFileSourceProvider</a></p>
<h1 id="throwingcancelablefilesourceprovider">ThrowingCancelableFileSourceProvider<a class="headerlink" href="#throwingcancelablefilesourceprovider" title="Permanent link">¶</a></h1>
<p>[jvm]\
-class <a href="./">ThrowingCancelableFileSourceProvider</a>(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, throwIfCanceled: <a href="https://developer.android.com/reference/kotlin/java/lang/Runnable.html">Runnable</a>) : <a href="../-dual-source-provider/">DualSourceProvider</a></p>
+class <a href="./">ThrowingCancelableFileSourceProvider</a>(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, throwIfCanceled: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html">Runnable</a>) : <a href="../-dual-source-provider/">DualSourceProvider</a></p>
<p>A <a href="../-dual-source-provider/">DualSourceProvider</a> that invokes throwIfCanceled before every read, allowing cancellation of IO based work built on top by throwing an exception.</p>
<h2 id="constructors">Constructors<a class="headerlink" href="#constructors" title="Permanent link">¶</a></h2>
<table>
@@ -791,7 +791,7 @@
<tbody>
<tr>
<td><a href="-throwing-cancelable-file-source-provider/">ThrowingCancelableFileSourceProvider</a></td>
-<td>[jvm]<br>constructor(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, throwIfCanceled: <a href="https://developer.android.com/reference/kotlin/java/lang/Runnable.html">Runnable</a>)</td>
+<td>[jvm]<br>constructor(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, throwIfCanceled: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html">Runnable</a>)</td>
</tr>
</tbody>
</table>
diff --git a/api/shark/dump/index.html b/api/shark/dump/index.html
index 1ac33f3..c6ea312 100644
--- a/api/shark/dump/index.html
+++ b/api/shark/dump/index.html
@@ -756,7 +756,7 @@
<p>//<a href="../../../">leakcanary-repo</a>/<a href="../">shark</a>/<a href="./">dump</a></p>
<h1 id="dump">dump<a class="headerlink" href="#dump" title="Permanent link">¶</a></h1>
<p>[jvm]\
-fun <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>.<a href="./">dump</a>(block: <a href="../-hprof-writer-helper/">HprofWriterHelper</a>.() -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>)</p>
+fun <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>.<a href="./">dump</a>(block: <a href="../-hprof-writer-helper/">HprofWriterHelper</a>.() -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>)</p>
<p>fun <a href="./">dump</a>(hprofHeader: <a href="../-hprof-header/">HprofHeader</a> = HprofHeader(), block: <a href="../-hprof-writer-helper/">HprofWriterHelper</a>.() -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>): <a href="../-dual-source-provider/">DualSourceProvider</a></p>
diff --git a/api/shark/index.html b/api/shark/index.html
index 36c8242..ff3cac7 100644
--- a/api/shark/index.html
+++ b/api/shark/index.html
@@ -936,7 +936,7 @@
</tr>
<tr>
<td><a href="-closeable-heap-graph/">CloseableHeapGraph</a></td>
-<td>[jvm]<br>interface <a href="-closeable-heap-graph/">CloseableHeapGraph</a> : <a href="-heap-graph/">HeapGraph</a>, <a href="https://developer.android.com/reference/kotlin/java/io/Closeable.html">Closeable</a><br>A <a href="-heap-graph/">HeapGraph</a> that should be closed after being used.</td>
+<td>[jvm]<br>interface <a href="-closeable-heap-graph/">CloseableHeapGraph</a> : <a href="-heap-graph/">HeapGraph</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html">Closeable</a><br>A <a href="-heap-graph/">HeapGraph</a> that should be closed after being used.</td>
</tr>
<tr>
<td><a href="-constant-memory-metrics-dual-source-provider/">ConstantMemoryMetricsDualSourceProvider</a></td>
@@ -952,7 +952,7 @@
</tr>
<tr>
<td><a href="-dominators/">Dominators</a></td>
-<td>[jvm]<br>class <a href="-dominators/">Dominators</a>(val dominatorNodes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, <a href="-object-dominators/-dominator-node/">ObjectDominators.DominatorNode</a>>) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></td>
+<td>[jvm]<br>class <a href="-dominators/">Dominators</a>(val dominatorNodes: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, <a href="-object-dominators/-dominator-node/">ObjectDominators.DominatorNode</a>>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></td>
</tr>
<tr>
<td><a href="-dominator-tree/">DominatorTree</a></td>
@@ -972,7 +972,7 @@
</tr>
<tr>
<td><a href="-file-source-provider/">FileSourceProvider</a></td>
-<td>[jvm]<br>class <a href="-file-source-provider/">FileSourceProvider</a>(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>) : <a href="-dual-source-provider/">DualSourceProvider</a></td>
+<td>[jvm]<br>class <a href="-file-source-provider/">FileSourceProvider</a>(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>) : <a href="-dual-source-provider/">DualSourceProvider</a></td>
</tr>
<tr>
<td><a href="-filtering-leaking-object-finder/">FilteringLeakingObjectFinder</a></td>
@@ -1012,19 +1012,19 @@
</tr>
<tr>
<td><a href="-heap-analysis/">HeapAnalysis</a></td>
-<td>[jvm]<br>sealed class <a href="-heap-analysis/">HeapAnalysis</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a><br>The result of an analysis performed by <a href="-heap-analyzer/">HeapAnalyzer</a>, either a <a href="-heap-analysis-success/">HeapAnalysisSuccess</a> or a <a href="-heap-analysis-failure/">HeapAnalysisFailure</a>. This class is serializable however there are no guarantees of forward compatibility.</td>
+<td>[jvm]<br>sealed class <a href="-heap-analysis/">HeapAnalysis</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a><br>The result of an analysis performed by <a href="-heap-analyzer/">HeapAnalyzer</a>, either a <a href="-heap-analysis-success/">HeapAnalysisSuccess</a> or a <a href="-heap-analysis-failure/">HeapAnalysisFailure</a>. This class is serializable however there are no guarantees of forward compatibility.</td>
</tr>
<tr>
<td><a href="-heap-analysis-exception/">HeapAnalysisException</a></td>
-<td>[jvm]<br>class <a href="-heap-analysis-exception/">HeapAnalysisException</a>(cause: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html">Throwable</a>) : <a href="https://developer.android.com/reference/kotlin/java/lang/RuntimeException.html">RuntimeException</a></td>
+<td>[jvm]<br>class <a href="-heap-analysis-exception/">HeapAnalysisException</a>(cause: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html">Throwable</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html">RuntimeException</a></td>
</tr>
<tr>
<td><a href="-heap-analysis-failure/">HeapAnalysisFailure</a></td>
-<td>[jvm]<br>data class <a href="-heap-analysis-failure/">HeapAnalysisFailure</a>(val heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, val createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val exception: <a href="-heap-analysis-exception/">HeapAnalysisException</a>) : <a href="-heap-analysis/">HeapAnalysis</a><br>The analysis performed by <a href="-heap-analyzer/">HeapAnalyzer</a> did not complete successfully.</td>
+<td>[jvm]<br>data class <a href="-heap-analysis-failure/">HeapAnalysisFailure</a>(val heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, val createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val exception: <a href="-heap-analysis-exception/">HeapAnalysisException</a>) : <a href="-heap-analysis/">HeapAnalysis</a><br>The analysis performed by <a href="-heap-analyzer/">HeapAnalyzer</a> did not complete successfully.</td>
</tr>
<tr>
<td><a href="-heap-analysis-success/">HeapAnalysisSuccess</a></td>
-<td>[jvm]<br>data class <a href="-heap-analysis-success/">HeapAnalysisSuccess</a>(val heapDumpFile: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, val createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val metadata: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, val applicationLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="-application-leak/">ApplicationLeak</a>>, val libraryLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="-library-leak/">LibraryLeak</a>>, val unreachableObjects: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="-leak-trace-object/">LeakTraceObject</a>>) : <a href="-heap-analysis/">HeapAnalysis</a><br>The result of a successful heap analysis performed by <a href="-heap-analyzer/">HeapAnalyzer</a>.</td>
+<td>[jvm]<br>data class <a href="-heap-analysis-success/">HeapAnalysisSuccess</a>(val heapDumpFile: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, val createdAtTimeMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val dumpDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a> = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html">Long</a>, val metadata: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, val applicationLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="-application-leak/">ApplicationLeak</a>>, val libraryLeaks: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="-library-leak/">LibraryLeak</a>>, val unreachableObjects: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="-leak-trace-object/">LeakTraceObject</a>>) : <a href="-heap-analysis/">HeapAnalysis</a><br>The result of a successful heap analysis performed by <a href="-heap-analyzer/">HeapAnalyzer</a>.</td>
</tr>
<tr>
<td><a href="-heap-analyzer/">HeapAnalyzer</a></td>
@@ -1047,10 +1047,6 @@
<td>[jvm]<br>interface <a href="-heap-graph/">HeapGraph</a><br>Enables navigation through the heap graph of objects.</td>
</tr>
<tr>
-<td><a href="-heap-graph-provider/">HeapGraphProvider</a></td>
-<td>[jvm]<br>fun interface <a href="-heap-graph-provider/">HeapGraphProvider</a></td>
-</tr>
-<tr>
<td><a href="-heap-growth-command/">HeapGrowthCommand</a></td>
<td>[jvm]<br>class <a href="-heap-growth-command/">HeapGrowthCommand</a> : CliktCommand</td>
</tr>
@@ -1108,11 +1104,11 @@
</tr>
<tr>
<td><a href="-hprof-writer/">HprofWriter</a></td>
-<td>[jvm]<br>class <a href="-hprof-writer/">HprofWriter</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Closeable.html">Closeable</a><br>Generates Hprof files.</td>
+<td>[jvm]<br>class <a href="-hprof-writer/">HprofWriter</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html">Closeable</a><br>Generates Hprof files.</td>
</tr>
<tr>
<td><a href="-hprof-writer-helper/">HprofWriterHelper</a></td>
-<td>[jvm]<br>class <a href="-hprof-writer-helper/">HprofWriterHelper</a>(writer: <a href="-hprof-writer/">HprofWriter</a>) : <a href="https://developer.android.com/reference/kotlin/java/io/Closeable.html">Closeable</a></td>
+<td>[jvm]<br>class <a href="-hprof-writer-helper/">HprofWriterHelper</a>(writer: <a href="-hprof-writer/">HprofWriter</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html">Closeable</a></td>
</tr>
<tr>
<td><a href="-ignored-reference-matcher/">IgnoredReferenceMatcher</a></td>
@@ -1148,7 +1144,7 @@
</tr>
<tr>
<td><a href="-leak/">Leak</a></td>
-<td>[jvm]<br>sealed class <a href="-leak/">Leak</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a><br>A leak found by <a href="-heap-analyzer/">HeapAnalyzer</a>, either an <a href="-application-leak/">ApplicationLeak</a> or a <a href="-library-leak/">LibraryLeak</a>.</td>
+<td>[jvm]<br>sealed class <a href="-leak/">Leak</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a><br>A leak found by <a href="-heap-analyzer/">HeapAnalyzer</a>, either an <a href="-application-leak/">ApplicationLeak</a> or a <a href="-library-leak/">LibraryLeak</a>.</td>
</tr>
<tr>
<td><a href="-leaking-object-finder/">LeakingObjectFinder</a></td>
@@ -1160,11 +1156,11 @@
</tr>
<tr>
<td><a href="-leak-trace/">LeakTrace</a></td>
-<td>[jvm]<br>data class <a href="-leak-trace/">LeakTrace</a>(val gcRootType: <a href="-leak-trace/-gc-root-type/">LeakTrace.GcRootType</a>, val referencePath: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="-leak-trace-reference/">LeakTraceReference</a>>, val leakingObject: <a href="-leak-trace-object/">LeakTraceObject</a>) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a><br>The best strong reference path from a GC root to the leaking object. "Best" here means the shortest prioritized path. A large number of distinct paths can generally be found leading to a leaking object. Shark prioritizes paths that don’t go through known <a href="-library-leak-reference-matcher/">LibraryLeakReferenceMatcher</a> (because those are known to create leaks so it’s more interesting to find other paths causing leaks), then it prioritize paths that don’t go through java local gc roots (because those are harder to reason about). Taking those priorities into account, finding the shortest path means there are less <a href="-leak-trace-reference/">LeakTraceReference</a> that can be suspected to cause the leak.</td>
+<td>[jvm]<br>data class <a href="-leak-trace/">LeakTrace</a>(val gcRootType: <a href="-leak-trace/-gc-root-type/">LeakTrace.GcRootType</a>, val referencePath: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a><<a href="-leak-trace-reference/">LeakTraceReference</a>>, val leakingObject: <a href="-leak-trace-object/">LeakTraceObject</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a><br>The best strong reference path from a GC root to the leaking object. "Best" here means the shortest prioritized path. A large number of distinct paths can generally be found leading to a leaking object. Shark prioritizes paths that don’t go through known <a href="-library-leak-reference-matcher/">LibraryLeakReferenceMatcher</a> (because those are known to create leaks so it’s more interesting to find other paths causing leaks), then it prioritize paths that don’t go through java local gc roots (because those are harder to reason about). Taking those priorities into account, finding the shortest path means there are less <a href="-leak-trace-reference/">LeakTraceReference</a> that can be suspected to cause the leak.</td>
</tr>
<tr>
<td><a href="-leak-trace-object/">LeakTraceObject</a></td>
-<td>[jvm]<br>data class <a href="-leak-trace-object/">LeakTraceObject</a>(val type: <a href="-leak-trace-object/-object-type/">LeakTraceObject.ObjectType</a>, val className: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val labels: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, val leakingStatus: <a href="-leak-trace-object/-leaking-status/">LeakTraceObject.LeakingStatus</a>, val leakingStatusReason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val retainedHeapByteSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>?, val retainedObjectCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>?) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a></td>
+<td>[jvm]<br>data class <a href="-leak-trace-object/">LeakTraceObject</a>(val type: <a href="-leak-trace-object/-object-type/">LeakTraceObject.ObjectType</a>, val className: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val labels: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-set/index.html">Set</a><<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>>, val leakingStatus: <a href="-leak-trace-object/-leaking-status/">LeakTraceObject.LeakingStatus</a>, val leakingStatusReason: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val retainedHeapByteSize: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>?, val retainedObjectCount: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a>?) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a></td>
</tr>
<tr>
<td><a href="-leak-tracer/">LeakTracer</a></td>
@@ -1172,7 +1168,7 @@
</tr>
<tr>
<td><a href="-leak-trace-reference/">LeakTraceReference</a></td>
-<td>[jvm]<br>data class <a href="-leak-trace-reference/">LeakTraceReference</a>(val originObject: <a href="-leak-trace-object/">LeakTraceObject</a>, val referenceType: <a href="-leak-trace-reference/-reference-type/">LeakTraceReference.ReferenceType</a>, val owningClassName: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val referenceName: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a><br>A <a href="-leak-trace-reference/">LeakTraceReference</a> represents an origin <a href="-leak-trace-object/">LeakTraceObject</a> and either a reference from that object to the <a href="-leak-trace-object/">LeakTraceObject</a> in the next <a href="-leak-trace-reference/">LeakTraceReference</a> in <a href="-leak-trace/reference-path/">LeakTrace.referencePath</a>, or to <a href="-leak-trace/leaking-object/">LeakTrace.leakingObject</a> if this is the last <a href="-leak-trace-reference/">LeakTraceReference</a> in <a href="-leak-trace/reference-path/">LeakTrace.referencePath</a>.</td>
+<td>[jvm]<br>data class <a href="-leak-trace-reference/">LeakTraceReference</a>(val originObject: <a href="-leak-trace-object/">LeakTraceObject</a>, val referenceType: <a href="-leak-trace-reference/-reference-type/">LeakTraceReference.ReferenceType</a>, val owningClassName: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>, val referenceName: <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>) : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a><br>A <a href="-leak-trace-reference/">LeakTraceReference</a> represents an origin <a href="-leak-trace-object/">LeakTraceObject</a> and either a reference from that object to the <a href="-leak-trace-object/">LeakTraceObject</a> in the next <a href="-leak-trace-reference/">LeakTraceReference</a> in <a href="-leak-trace/reference-path/">LeakTrace.referencePath</a>, or to <a href="-leak-trace/leaking-object/">LeakTrace.leakingObject</a> if this is the last <a href="-leak-trace-reference/">LeakTraceReference</a> in <a href="-leak-trace/reference-path/">LeakTrace.referencePath</a>.</td>
</tr>
<tr>
<td><a href="-library-leak/">LibraryLeak</a></td>
@@ -1260,15 +1256,15 @@
</tr>
<tr>
<td><a href="-proguard-mapping-reader/">ProguardMappingReader</a></td>
-<td>[jvm]<br>class <a href="-proguard-mapping-reader/">ProguardMappingReader</a>(proguardMappingInputStream: <a href="https://developer.android.com/reference/kotlin/java/io/InputStream.html">InputStream</a>)</td>
+<td>[jvm]<br>class <a href="-proguard-mapping-reader/">ProguardMappingReader</a>(proguardMappingInputStream: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html">InputStream</a>)</td>
</tr>
<tr>
<td><a href="-random-access-hprof-reader/">RandomAccessHprofReader</a></td>
-<td>[jvm]<br>class <a href="-random-access-hprof-reader/">RandomAccessHprofReader</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Closeable.html">Closeable</a><br>Reads records in a Hprof source, one at a time with a specific position and size. Call <a href="-random-access-hprof-reader/-companion/open-reader-for/">openReaderFor</a> to obtain a new instance.</td>
+<td>[jvm]<br>class <a href="-random-access-hprof-reader/">RandomAccessHprofReader</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html">Closeable</a><br>Reads records in a Hprof source, one at a time with a specific position and size. Call <a href="-random-access-hprof-reader/-companion/open-reader-for/">openReaderFor</a> to obtain a new instance.</td>
</tr>
<tr>
<td><a href="-random-access-source/">RandomAccessSource</a></td>
-<td>[jvm]<br>interface <a href="-random-access-source/">RandomAccessSource</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Closeable.html">Closeable</a></td>
+<td>[jvm]<br>interface <a href="-random-access-source/">RandomAccessSource</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html">Closeable</a></td>
</tr>
<tr>
<td><a href="-random-access-source-provider/">RandomAccessSourceProvider</a></td>
@@ -1292,19 +1288,15 @@
</tr>
<tr>
<td><a href="-reference-pattern/">ReferencePattern</a></td>
-<td>[jvm]<br>sealed class <a href="-reference-pattern/">ReferencePattern</a> : <a href="https://developer.android.com/reference/kotlin/java/io/Serializable.html">Serializable</a><br>A pattern that will match references for a given <a href="-reference-matcher/">ReferenceMatcher</a>.</td>
+<td>[jvm]<br>sealed class <a href="-reference-pattern/">ReferencePattern</a> : <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">Serializable</a><br>A pattern that will match references for a given <a href="-reference-matcher/">ReferenceMatcher</a>.</td>
</tr>
<tr>
<td><a href="-reference-reader/">ReferenceReader</a></td>
<td>[jvm]<br>fun interface <a href="-reference-reader/">ReferenceReader</a><<a href="-reference-reader/">T</a> : <a href="-heap-object/">HeapObject</a>></td>
</tr>
<tr>
-<td><a href="-repeating-heap-graph-object-growth-detector/">RepeatingHeapGraphObjectGrowthDetector</a></td>
-<td>[jvm]<br>class <a href="-repeating-heap-graph-object-growth-detector/">RepeatingHeapGraphObjectGrowthDetector</a>(objectGrowthDetector: <a href="-object-growth-detector/">ObjectGrowthDetector</a>, completionListener: <a href="-repeating-heap-graph-object-growth-detector/-completion-listener/">RepeatingHeapGraphObjectGrowthDetector.CompletionListener</a> = CompletionListener { })</td>
-</tr>
-<tr>
<td><a href="-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a></td>
-<td>[jvm]<br>class <a href="-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a>(heapGraphProvider: <a href="-heap-graph-provider/">HeapGraphProvider</a>, repeatingHeapGraphDetector: <a href="-repeating-heap-graph-object-growth-detector/">RepeatingHeapGraphObjectGrowthDetector</a>)</td>
+<td>[jvm]<br>interface <a href="-repeating-scenario-object-growth-detector/">RepeatingScenarioObjectGrowthDetector</a></td>
</tr>
<tr>
<td><a href="-retained/">Retained</a></td>
@@ -1344,7 +1336,7 @@
</tr>
<tr>
<td><a href="-throwing-cancelable-file-source-provider/">ThrowingCancelableFileSourceProvider</a></td>
-<td>[jvm]<br>class <a href="-throwing-cancelable-file-source-provider/">ThrowingCancelableFileSourceProvider</a>(file: <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>, throwIfCanceled: <a href="https://developer.android.com/reference/kotlin/java/lang/Runnable.html">Runnable</a>) : <a href="-dual-source-provider/">DualSourceProvider</a><br>A <a href="-dual-source-provider/">DualSourceProvider</a> that invokes throwIfCanceled before every read, allowing cancellation of IO based work built on top by throwing an exception.</td>
+<td>[jvm]<br>class <a href="-throwing-cancelable-file-source-provider/">ThrowingCancelableFileSourceProvider</a>(file: <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>, throwIfCanceled: <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html">Runnable</a>) : <a href="-dual-source-provider/">DualSourceProvider</a><br>A <a href="-dual-source-provider/">DualSourceProvider</a> that invokes throwIfCanceled before every read, allowing cancellation of IO based work built on top by throwing an exception.</td>
</tr>
<tr>
<td><a href="-value-holder/">ValueHolder</a></td>
@@ -1379,7 +1371,7 @@
</tr>
<tr>
<td><a href="dump/">dump</a></td>
-<td>[jvm]<br>fun <a href="https://developer.android.com/reference/kotlin/java/io/File.html">File</a>.<a href="dump/">dump</a>(block: <a href="-hprof-writer-helper/">HprofWriterHelper</a>.() -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>)</td>
+<td>[jvm]<br>fun <a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html">File</a>.<a href="dump/">dump</a>(block: <a href="-hprof-writer-helper/">HprofWriterHelper</a>.() -> <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html">Unit</a>)</td>
</tr>
<tr>
<td><a href="dump-to-bytes/">dumpToBytes</a></td>
diff --git a/changelog/index.html b/changelog/index.html
index 3b8f5d1..3b05649 100644
--- a/changelog/index.html
+++ b/changelog/index.html
@@ -743,6 +743,13 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
+ <a href="#version-30-alpha-8-2024-06-04" class="md-nav__link">
+ Version 3.0 Alpha 8 (2024-06-04)
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
<a href="#version-30-alpha-7-2024-05-30" class="md-nav__link">
Version 3.0 Alpha 7 (2024-05-30)
</a>
@@ -1707,6 +1714,13 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
+ <a href="#version-30-alpha-8-2024-06-04" class="md-nav__link">
+ Version 3.0 Alpha 8 (2024-06-04)
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
<a href="#version-30-alpha-7-2024-05-30" class="md-nav__link">
Version 3.0 Alpha 7 (2024-05-30)
</a>
@@ -2659,6 +2673,11 @@
<h1 id="change-log">Change Log<a class="headerlink" href="#change-log" title="Permanent link">¶</a></h1>
<p>Please thank our <a href="https://github.com/square/leakcanary/graphs/contributors">contributors</a> 🙏 🙏 🙏.</p>
+<h2 id="version-30-alpha-8-2024-06-04">Version 3.0 Alpha 8 (2024-06-04)<a class="headerlink" href="#version-30-alpha-8-2024-06-04" title="Permanent link">¶</a></h2>
+<ul>
+<li>Added support for proper hprof handling on heap growth detection failures. Also inlined some public collaborators to achieve that. We now have a single class that’s a bit larger but also a lot more obvious.</li>
+<li><code>findGrowingObjects</code> does not take a <code>CloseableHeapGraph</code> anymore (just a <code>HeapGraph</code>) and does not close that graph.</li>
+</ul>
<h2 id="version-30-alpha-7-2024-05-30">Version 3.0 Alpha 7 (2024-05-30)<a class="headerlink" href="#version-30-alpha-7-2024-05-30" title="Permanent link">¶</a></h2>
<p>Revisited a number of API choices for heap growth, to simplify but also support more advanced
behavior such as keep heap dumps on test failure, or zipping heap dumps for CI upload.</p>
diff --git a/dev-env/index.html b/dev-env/index.html
index d339efd..c2b891a 100644
--- a/dev-env/index.html
+++ b/dev-env/index.html
@@ -882,7 +882,7 @@
</code></pre></div>
<p>Then add the SNAPSHOT dependency and <code>mavenLocal()</code> repository to your project:</p>
<div class="highlight"><pre><span></span><code>dependencies {
- debugImplementation 'com.squareup.leakcanary:leakcanary-android:3.0-alpha-8-SNAPSHOT'
+ debugImplementation 'com.squareup.leakcanary:leakcanary-android:3.0-alpha-9-SNAPSHOT'
}
repositories {
diff --git a/faq/index.html b/faq/index.html
index ab42d8b..8ef391d 100644
--- a/faq/index.html
+++ b/faq/index.html
@@ -990,7 +990,7 @@
<h2 id="how-do-i-use-the-snapshot-version">How do I use the SNAPSHOT version?<a class="headerlink" href="#how-do-i-use-the-snapshot-version" title="Permanent link">¶</a></h2>
<p>Update your dependencies to the latest SNAPSHOT (see <a href="https://github.com/square/leakcanary/blob/main/build.gradle">build.gradle</a>):</p>
<div class="highlight"><pre><span></span><code>dependencies {
- debugImplementation 'com.squareup.leakcanary:leakcanary-android:3.0-alpha-8-SNAPSHOT'
+ debugImplementation 'com.squareup.leakcanary:leakcanary-android:3.0-alpha-9-SNAPSHOT'
}
</code></pre></div>
<p>Add Sonatype’s <code>snapshots</code> repository:</p>
diff --git a/releasing/index.html b/releasing/index.html
index 98e954d..81516c4 100644
--- a/releasing/index.html
+++ b/releasing/index.html
@@ -1003,27 +1003,27 @@
<p>Create a local release branch from <code>main</code>
<div class="highlight"><pre><span></span><code>git<span class="w"> </span>checkout<span class="w"> </span>main<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
git<span class="w"> </span>pull<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
-git<span class="w"> </span>checkout<span class="w"> </span>-b<span class="w"> </span>release_3.0-alpha-8
+git<span class="w"> </span>checkout<span class="w"> </span>-b<span class="w"> </span>release_3.0-alpha-9
</code></pre></div></p>
</li>
<li>
<p>Update <code>VERSION_NAME</code> in <code>gradle.properties</code> (remove <code>-SNAPSHOT</code>)
-<div class="highlight"><pre><span></span><code>sed -i '' 's/VERSION_NAME=3.0-alpha-8-SNAPSHOT/VERSION_NAME=3.0-alpha-8/' gradle.properties
+<div class="highlight"><pre><span></span><code>sed -i '' 's/VERSION_NAME=3.0-alpha-9-SNAPSHOT/VERSION_NAME=3.0-alpha-9/' gradle.properties
</code></pre></div></p>
</li>
<li>
<p>Update the current version and next version in <code>mkdocs.yml</code>
-<div class="highlight"><pre><span></span><code>sed<span class="w"> </span>-i<span class="w"> </span><span class="s1">''</span><span class="w"> </span><span class="s1">'s/3.0-alpha-8/NEXT/'</span><span class="w"> </span>mkdocs.yml
-sed<span class="w"> </span>-i<span class="w"> </span><span class="s1">''</span><span class="w"> </span><span class="s1">'s/2.14/3.0-alpha-8/'</span><span class="w"> </span>mkdocs.yml
+<div class="highlight"><pre><span></span><code>sed<span class="w"> </span>-i<span class="w"> </span><span class="s1">''</span><span class="w"> </span><span class="s1">'s/3.0-alpha-9/NEXT/'</span><span class="w"> </span>mkdocs.yml
+sed<span class="w"> </span>-i<span class="w"> </span><span class="s1">''</span><span class="w"> </span><span class="s1">'s/2.14/3.0-alpha-9/'</span><span class="w"> </span>mkdocs.yml
</code></pre></div></p>
</li>
<li>
<p>Create the release
-<div class="highlight"><pre><span></span><code>git<span class="w"> </span>commit<span class="w"> </span>-am<span class="w"> </span><span class="s2">"Prepare 3.0-alpha-8 release"</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
+<div class="highlight"><pre><span></span><code>git<span class="w"> </span>commit<span class="w"> </span>-am<span class="w"> </span><span class="s2">"Prepare 3.0-alpha-9 release"</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
./gradlew<span class="w"> </span>clean<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
./gradlew<span class="w"> </span>build<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
-git<span class="w"> </span>tag<span class="w"> </span>v3.0-alpha-8<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
-git<span class="w"> </span>push<span class="w"> </span>origin<span class="w"> </span>v3.0-alpha-8<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
+git<span class="w"> </span>tag<span class="w"> </span>v3.0-alpha-9<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
+git<span class="w"> </span>push<span class="w"> </span>origin<span class="w"> </span>v3.0-alpha-9<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
./gradlew<span class="w"> </span>publish<span class="w"> </span>--no-daemon<span class="w"> </span>--no-parallel<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
./gradlew<span class="w"> </span>closeAndReleaseRepository<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
./gradlew<span class="w"> </span>shark:shark-cli:distZip
@@ -1035,11 +1035,11 @@
<li>Merge back to main
<div class="highlight"><pre><span></span><code>git<span class="w"> </span>checkout<span class="w"> </span>main<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
git<span class="w"> </span>pull<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
-git<span class="w"> </span>merge<span class="w"> </span>--no-ff<span class="w"> </span>release_3.0-alpha-8
+git<span class="w"> </span>merge<span class="w"> </span>--no-ff<span class="w"> </span>release_3.0-alpha-9
</code></pre></div></li>
<li>
<p>Update <code>VERSION_NAME</code> in <code>gradle.properties</code> (increase version and add <code>-SNAPSHOT</code>)
-<div class="highlight"><pre><span></span><code>sed -i '' 's/VERSION_NAME=3.0-alpha-8/VERSION_NAME=NEXT-SNAPSHOT/' gradle.properties
+<div class="highlight"><pre><span></span><code>sed -i '' 's/VERSION_NAME=3.0-alpha-9/VERSION_NAME=NEXT-SNAPSHOT/' gradle.properties
</code></pre></div></p>
</li>
<li>
@@ -1066,7 +1066,7 @@
git<span class="w"> </span>push<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
<span class="nb">source</span><span class="w"> </span>venv/bin/activate<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
mkdocs<span class="w"> </span>gh-deploy<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
-gh<span class="w"> </span>release<span class="w"> </span>create<span class="w"> </span>v3.0-alpha-8<span class="w"> </span>./shark/shark-cli/build/distributions/shark-cli-3.0-alpha-8.zip<span class="w"> </span>--title<span class="w"> </span>v3.0-alpha-8<span class="w"> </span>--notes<span class="w"> </span><span class="s1">'See [Change Log](https://square.github.io/leakcanary/changelog)'</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
+gh<span class="w"> </span>release<span class="w"> </span>create<span class="w"> </span>v3.0-alpha-9<span class="w"> </span>./shark/shark-cli/build/distributions/shark-cli-3.0-alpha-9.zip<span class="w"> </span>--title<span class="w"> </span>v3.0-alpha-9<span class="w"> </span>--notes<span class="w"> </span><span class="s1">'See [Change Log](https://square.github.io/leakcanary/changelog)'</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
gh<span class="w"> </span>listOpenMilestones<span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span><span class="s1">'.data.repository.milestones.nodes[0].number'</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>xargs<span class="w"> </span>gh<span class="w"> </span>closeMilestone<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="se">\</span>
<span class="nb">echo</span><span class="w"> </span><span class="s1">'{</span>
<span class="s1"> "title": "REPLACE_WITH_NEXT_VERSION_NUMBER",</span>
@@ -1076,11 +1076,11 @@
</code></pre></div>
<ul>
<li>
-<p>Open the <a href="https://github.com/square/leakcanary/releases/tag/v3.0-alpha-8">v3.0-alpha-8 release</a> to confirm everything looks good.</p>
+<p>Open the <a href="https://github.com/square/leakcanary/releases/tag/v3.0-alpha-9">v3.0-alpha-9 release</a> to confirm everything looks good.</p>
</li>
<li>
<p>Upload shark-cli to <a href="https://brew.sh/">brew</a>:
-<div class="highlight"><pre><span></span><code>brew<span class="w"> </span>bump-formula-pr<span class="w"> </span>--url<span class="w"> </span>https://github.com/square/leakcanary/releases/download/v3.0-alpha-8/shark-cli-3.0-alpha-8.zip<span class="w"> </span>leakcanary-shark
+<div class="highlight"><pre><span></span><code>brew<span class="w"> </span>bump-formula-pr<span class="w"> </span>--url<span class="w"> </span>https://github.com/square/leakcanary/releases/download/v3.0-alpha-9/shark-cli-3.0-alpha-9.zip<span class="w"> </span>leakcanary-shark
</code></pre></div></p>
</li>
<li>
diff --git a/search/search_index.json b/search/search_index.json
index 2996f5a..1329631 100644
--- a/search/search_index.json
+++ b/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"LeakCanary \ud83d\udc24","text":"<p>LeakCanary is a memory leak detection library for Android.</p> <p> </p> <p>LeakCanary\u2019s knowledge of the internals of the Android Framework gives it a unique ability to narrow down the cause of each leak, helping developers dramatically reduce jank, <code>Application Not Responding</code> freezes and <code>OutOfMemoryError</code> crashes.</p> <p>Get started!</p> <p>Quote</p> <p>\u201cA small leak will sink a great ship.\u201d - Benjamin Franklin</p>"},{"location":"blog-articles/","title":"Blog Articles","text":"<ul> <li>Memory Leaks in Android</li> <li>Detect memory leaks in your instrumentation tests using LeakCanary</li> <li>9 ways to avoid memory leaks in Android</li> <li>LeakCanary - Deobfuscation Feature Explained</li> <li>LeakCanary - An in-depth example of Android memory-leaks in MVP architecture</li> <li>Detecting memory leaks in Android applications</li> </ul> <p>Your article should be here, please update this list! Any technical level welcome.</p>"},{"location":"changelog/","title":"Change Log","text":"<p>Please thank our contributors \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p>"},{"location":"changelog/#version-30-alpha-7-2024-05-30","title":"Version 3.0 Alpha 7 (2024-05-30)","text":"<p>Revisited a number of API choices for heap growth, to simplify but also support more advanced behavior such as keep heap dumps on test failure, or zipping heap dumps for CI upload.</p> <ul> <li><code>HeapGrowthTraversal</code> is now <code>HeapDiff</code></li> <li><code>ObjectGrowthDetector.forAndroidHeap().repeatingAndroidInProcessScenario()</code> is now HeapDiff.repeatingAndroidInProcessScenario()<code>which is now really just a wrapper for HeapDiff.repeatingDumpingTestScenario()</code> with Android UI test specific configuration.</li> <li><code>maxHeapDumps</code> and <code>scenarioLoopsPerDump</code> have moved from being factory parameters to being per scenario parameters.</li> <li>\ud83d\udca5 #2683 Fix crash when java.lang.Object has multiple class load records in JVM heap dumps</li> <li>\ud83d\udd28 #2682 Add support for unload class tags and records</li> </ul>"},{"location":"changelog/#heap-growth-espresso-test-example","title":"Heap Growth: Espresso test example","text":"<pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-android-test:3.0-alpha-7'\n}\n</code></pre> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest\nxmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n<!-- Performing the heap growth analysis in process requires more heap. -->\n<application\nandroid:largeHeap=\"true\"/>\n</manifest>\n</code></pre> <pre><code>class MyEspressoTest {\nval detector = HeapDiff.repeatingAndroidInProcessScenario()\n\n@Test\nfun greeter_says_hello_does_not_grow_heap() {\n// Runs repeatedly until the heap stops growing or we reach max heap dumps.\nval heapDiff = detector.findRepeatedlyGrowingObjects {\nonView(withId(R.id.name_field)).perform(typeText(\"Steve\"))\nonView(withId(R.id.greet_button)).perform(click())\nonView(withText(\"Hello Steve!\")).check(matches(isDisplayed()))\n}\n\nassertThat(heapDiff.growingObjects).isEmpty()\n}\n}\n</code></pre>"},{"location":"changelog/#heap-growth-jvm-junit-test-example","title":"Heap Growth: JVM Junit test example.","text":"<pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-jvm-test:3.0-alpha-7'\n}\n</code></pre> <pre><code>class MyUnitTest {\nval detector = HeapDiff.repeatingJvmInProcessScenario()\n\nval growingList = mutableListOf<String>()\n\n@Test\nfun failing_test() {\n// Runs repeatedly until the heap stops growing or we reach max heap dumps.\nval heapDiff = detector.findRepeatedlyGrowingObjects {\ngrowingList += \"Hi at ${System.currentTimeMillis()}\"\n}\n\n// This should fail.\nassertThat(heapDiff.growingObjects).isEmpty()\n}\n}\n</code></pre>"},{"location":"changelog/#heap-growth-ui-automator-test-example","title":"Heap Growth: UI Automator test example.","text":"<pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-android-uiautomator:3.0-alpha-7'\n}\n</code></pre> <pre><code>class MyUiAutomatorTest {\nval detector = HeapDiff.repeatingUiAutomatorScenario()\n\n@Test\nfun clicking_welcome_does_not_grow_heap() {\nval device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())\n// Runs repeatedly until the heap stops growing or we reach max heap dumps.\nval heapDiff = detector.findRepeatedlyGrowingObjects {\ndevice.findObject(By.text(\"Welcome!\")).click()\n}\n\nassertThat(heapDiff.growingObjects).isEmpty()\n}\n}\n</code></pre>"},{"location":"changelog/#heap-growth-shark-cli","title":"Heap Growth: Shark CLI","text":"<p>Download the Shark CLI Zip (alphas cannot be released to brew) and unzip it.</p> <p>Run the <code>heap-growth</code> command:</p> <pre><code>$ ~/Downloads/shark-cli-3.0-alpha-7/bin/shark-cli -p com.example.app.debug heap-growth\n</code></pre> <p>See the full diff.</p>"},{"location":"changelog/#version-30-alpha-6-2024-05-21","title":"Version 3.0 Alpha 6 (2024-05-21)","text":"<ul> <li>\ud83d\udc1b #2670 Use <code>RequestPermissionActivity</code> context for <code>Toast.makeText</code>.</li> </ul>"},{"location":"changelog/#heap-growth","title":"Heap Growth","text":"<ul> <li>Add warmup to reduce changes of classloading tied to analysis being picked up as false positive heap growth signal.</li> <li>Add dependency on AndroidX Collections to use in place of JDK data structures (lower memory footprint) and HHPC copied data structures (hard to maintain).</li> <li>Improvements to memory footprint by flattening a number of objects</li> <li>Fix retained size not being computed when analysis stops at the second heap dump.</li> <li>Removed <code>InitialState.heapGraphCount</code></li> <li>Ignore static <code><resolved_references></code> in all classes on JVM</li> </ul> <p>See the full diff.</p>"},{"location":"changelog/#version-30-alpha-4-2024-05-10","title":"Version 3.0 Alpha 4 (2024-05-10)","text":"<ul> <li>Deleted the <code>shark-heap-growth</code> artifact, the code has been merged into the <code>shark*</code> and <code>leakcanary*</code> modules.</li> <li>New <code>leakcanary-android-test</code> and <code>leakcanary-android-uiautomator</code> artifacts.</li> <li>Undo of breaking API changes that were introduced in alpha 1. The goal is to make the upgrade seamless. Please file an issue if you find an API breaking change from a 2.x release.</li> <li>Optimization: for known data structures that don\u2019t reference the rest of the graph beyond the references we know about, we explore them locally at once and stop enqueuing their internals, which reduces the memory footprint and the IO reads.</li> <li>Revamped the heap growth detection APIs, added support for UI Automator and Shark CLI.</li> </ul> <p>(note: I skipped from alpha 1 to alpha 4 because I messed up a few releases. Sorry!)</p>"},{"location":"changelog/#heap-growth-espresso-test-example_1","title":"Heap Growth: Espresso test example","text":"<p>Add the dependency:</p> <pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-android-test:3.0-alpha-2'\n}\n</code></pre> <p>Ensure your UI tests have enough heap by updating <code>src/androidTest/AndroidManifest.xml</code>:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest\nxmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n<!-- Performing the heap growth analysis in process requires more heap. -->\n<application\nandroid:largeHeap=\"true\"/>\n</manifest>\n</code></pre> <pre><code>class MyEspressoTest {\nval detector = ObjectGrowthDetector\n.forAndroidHeap()\n.repeatingAndroidInProcessScenario()\n\n@Test\nfun greeter_says_hello_does_not_leak() {\n// Runs repeatedly until the heap stops growing or we reach max heap dumps.\nval heapGrowth = detector.findRepeatedlyGrowingObjects {\nonView(withId(R.id.name_field)).perform(typeText(\"Steve\"))\nonView(withId(R.id.greet_button)).perform(click())\nonView(withText(\"Hello Steve!\")).check(matches(isDisplayed()))\n}\n\nassertThat(heapGrowth.growingObjects).isEmpty()\n}\n}\n</code></pre>"},{"location":"changelog/#heap-growth-ui-automator-test-example_1","title":"Heap Growth: UI Automator test example.","text":"<p>Add the dependency:</p> <pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-android-uiautomator:3.0-alpha-4'\n}\n</code></pre> <pre><code>class MyUiAutomatorTest {\nval detector = ObjectGrowthDetector\n.forAndroidHeap()\n.repeatingUiAutomatorScenario()\n\n@Test\nfun clicking_welcome_does_not_leak() {\nval device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())\n// Runs repeatedly until the heap stops growing or we reach max heap dumps.\nval heapGrowth = detector.findRepeatedlyGrowingObjects {\ndevice.findObject(By.text(\"Welcome!\")).click()\n}\n\nassertThat(heapGrowth.growingObjects).isEmpty()\n}\n}\n</code></pre>"},{"location":"changelog/#heap-growth-shark-cli_1","title":"Heap Growth: Shark CLI","text":"<p>Download the Shark CLI Zip (alphas cannot be released to brew) and unzip it.</p> <p>Run the <code>heap-growth</code> command:</p> <pre><code>$ ~/Downloads/shark-cli-3.0-alpha-2/bin/shark-cli -p com.example.app.debug heap-growth\n</code></pre>"},{"location":"changelog/#version-214-2024-04-17","title":"Version 2.14 (2024-04-17)","text":"<ul> <li>\ud83d\udc1b #2650 Removed accidental usage of <code>SettableFuture</code>, a <code>WorkManager</code> internal class, which will be removed in a future release of WorkManager. After updating WorkManager to that future release, all versions of LeakCanary from 2.8 to 2.13 will crash on leak analysis. To avoid a nasty surprise in the near future, update to LeakCanary 2.14.</li> <li>\ud83d\udd28 #2660 Add proguard mapping support for LeakCanary release.</li> <li>\ud83d\udc1b #2531 Heap dump & leak lists not preserving list position when navigating.</li> <li>\ud83d\udc24 #2615 Automatic fix of AOSP PermissionControllerManager leak (issuetracker.google.com/issues/318415056).</li> <li>\ud83d\udc24 #2559 Ignore <code>UiModeManager</code> AOSP leak.</li> <li>\ud83d\udca5 #2643 Fixed rare crash on RenderHeapDumpScreen.</li> </ul>"},{"location":"changelog/#version-30-alpha-1-2024-01-09","title":"Version 3.0 Alpha 1 (2024-01-09)","text":"<p>This alpha release marks the start of the work on LeakCanary 3. It\u2019s not stable! While I intend to rework some APIs, I also want to minimize migration work. The best way to ensure migrations will go smoothly is to try upgrading to a 3.0 alpha and to let me know if you get any compile or runtime error.</p>"},{"location":"changelog/#heap-growth_1","title":"Heap Growth","text":"<p>New APIs, not stable yet: the <code>shark-heap-growth</code> artifact contains APIs for writing test scenarios that detect repeated heap growth.</p> <p>Here\u2019s how it\u2019s used with an Espresso test:</p> <pre><code>class MyEspressoTest {\n\n@Test\nfun greeter_says_hello_does_not_leak() {\n// Runs in a loop until the heap stops growing or we reach max heap dumps.\nval heapTraversal = HeapGrowthDetector.detectRepeatedHeapGrowth {\n// Runs repeatedly until the heap stops growing or we reach maxHeapDumps.\nonView(withId(R.id.name_field)).perform(typeText(\"Steve\"))\nonView(withId(R.id.greet_button)).perform(click())\nonView(withText(\"Hello Steve!\")).check(matches(isDisplayed()))\n}\n\nassertThat(heapTraversal.growingNodes).isEmpty()\n}\n}\n</code></pre> <p>Here\u2019s an example set up, this is all very manual for now.</p> <p>Add the new dependency:</p> <pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:shark-heap-growth:3.0-alpha-1'\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-android-core:3.0-alpha-1'\n}\n</code></pre> <p>Create an implementation setup for Espresso in process UI tests:</p> <pre><code>import leakcanary.AndroidDebugHeapDumper\nimport shark.AndroidReferenceMatchers\nimport shark.AndroidReferenceReaderFactory\nimport shark.CloseableHeapGraph\nimport shark.DiffingHeapGrowthDetector\nimport shark.HeapGraphProvider\nimport shark.HeapTraversal\nimport shark.HprofHeapGraph.Companion.openHeapGraph\nimport shark.IgnoredReferenceMatcher\nimport shark.LiveHeapGrowthDetector\nimport shark.LoopingHeapGrowthDetector\nimport shark.MatchingGcRootProvider\nimport shark.ReferencePattern.InstanceFieldPattern\nimport java.io.File\nimport java.text.SimpleDateFormat\nimport java.util.Date\nimport java.util.Locale\n\n/**\n * Heap growth detector for in process Espresso UI tests.\n *\n * Call [LiveHeapGrowthDetector.detectRepeatedHeapGrowth] with a scenario to repeat,\n * then assert that the resulting [shark.HeapTraversalWithDiff.growingNodes] is empty.\n */\nval HeapGrowthDetector by lazy {\nval referenceMatchers = AndroidReferenceMatchers.appDefaults +\nHeapTraversal.ignoredReferences +\n// https://cs.android.com/android/_/android/platform/frameworks/base/+/6985fb39f07294fb979b14ba0ebabfd2fea06d34\nIgnoredReferenceMatcher(InstanceFieldPattern(\"android.os.StrictMode\", \"sLastVmViolationTime\"))\n\nval dateFormat = SimpleDateFormat(\"yyyy-MM-dd_HH-mm-ss_SSS'-heap-growth.hprof'\", Locale.US)\nval uploadedTracesDirectory = File(\"/sdcard/traces/\")\nuploadedTracesDirectory.mkdirs()\ncheck(uploadedTracesDirectory.exists()) {\n\"Expected heap dump folder to exist: ${uploadedTracesDirectory.absolutePath}\"\n}\n\nval heapGraphProvider = HeapGraphProvider {\nval fileName = dateFormat.format(Date())\nval heapDumpFile = File(uploadedTracesDirectory, fileName)\nAndroidDebugHeapDumper.dumpHeap(heapDumpFile)\ncheck(heapDumpFile.exists()) {\n\"Expected file to exist after heap dump: ${heapDumpFile.absolutePath}\"\n}\nval realGraph = heapDumpFile.openHeapGraph()\nobject : CloseableHeapGraph by realGraph {\noverride fun close() {\nrealGraph.close()\nheapDumpFile.delete()\n}\n}\n}\n\nLiveHeapGrowthDetector(\nmaxHeapDumps = 5,\nheapGraphProvider = heapGraphProvider,\nscenarioLoopsPerDump = 5,\ndetector = LoopingHeapGrowthDetector(\nDiffingHeapGrowthDetector(\nreferenceReaderFactory = AndroidReferenceReaderFactory(referenceMatchers),\ngcRootProvider = MatchingGcRootProvider(referenceMatchers)\n)\n)\n)\n}\n</code></pre> <p>Ensure your UI tests have enough heap by updating <code>src/androidTest/AndroidManifest.xml</code>:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest\nxmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n<!-- Performing the heap growth analysis in process requires more heap. -->\n<application\nandroid:largeHeap=\"true\"/>\n</manifest>\n</code></pre>"},{"location":"changelog/#reference-readers","title":"Reference readers","text":"<p>New APIs, not stable yet: <code>ReferenceReader</code> implementations aka expanders, are now public APIs. The names might change. These class define how LeakCanary traverses the graph, and allow for the creating of virtual references, as introduced here. These new APIs make it possible to add support for more custom data structures, and they\u2019re also useful when working directly with the <code>shark</code> APIs (for example, these APIs were necessary to build the heap growth detection tooling mentioned above).</p>"},{"location":"changelog/#objectwatcher-apis-refactor","title":"ObjectWatcher APIs refactor","text":"<p>#2612 is a first attempt at refactoring the reachability APIs. I already found backward compatibility issues (#2617), will fix in the next alpha, and probably still change the API shape.</p> <p>The general purpose of this refactor is to move away from the static singletons and high coupling of the current implementation, making the reachability APIs more useful in a variaty of contexts.</p>"},{"location":"changelog/#other-bug-fixes-and-improvements","title":"Other bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>Bumped Kotlin to 1.8.21</li> <li>Dropped support for detecting support fragment leaks: apps should all have migrated to Android X by now, and if not they can easily add their own implementation back.</li> </ul> <p>This list reflects only a subset of all changes. For more details, the full diff.</p>"},{"location":"changelog/#version-213-2024-01-03","title":"Version 2.13 (2024-01-03)","text":"<ul> <li>\ud83d\udc1b #2565 Fix AndroidX Fragments incorrectly marked as leaking if detached but not destroyed.</li> <li>\ud83d\udca5 #2568 Fixed missing <code>RECEIVER_EXPORTED</code> flag when calling <code>registerReceiver()</code> on API 34+.</li> <li>\ud83d\udd28 #2555 Binder stubs are now called out in leak traces.</li> <li>\ud83d\udc24 #2601 Added several known manufacturer & framework leaks.</li> </ul>"},{"location":"changelog/#version-212-2023-06-29","title":"Version 2.12 (2023-06-29)","text":"<ul> <li>\ud83d\udca5 #2527 <code>LifecycleRegistry</code> in <code>androidx.lifecycle:lifecycle-runtime</code> was migrated to kotlin and its <code>mState</code> field name changed to <code>state</code> which broke LeakCanary expectations.</li> <li>\ud83d\udc24 #2545 Added several known manufacturer & framework leaks.</li> </ul>"},{"location":"changelog/#version-211-2023-05-17","title":"Version 2.11 (2023-05-17)","text":"<ul> <li>\ud83d\udc1b #1764 Ignore phantom classes that were unloaded than reloaded (long time LeakCanary bug).</li> <li>\ud83d\udc1b #2471 Fix LeakCanary introducing a weird leak in Google\u2019s CI infra.</li> <li>\ud83d\udc1b #2496 Fix broken ViewModel leak detection</li> </ul>"},{"location":"changelog/#version-210-2022-11-10","title":"Version 2.10 (2022-11-10)","text":""},{"location":"changelog/#experimental-neo4j-heap-dump-exploration","title":"Experimental Neo4j heap dump exploration","text":"<p><code>shark-cli</code> has a new experiment <code>neo4j</code> command that will convert a heap dump into an embedded Neo4j database and then open Neo4j Browser to explore the heap dump.</p> <pre><code>brew install leakcanary-shark\n\nshark-cli --process com.example.app.debug neo4j\n</code></pre> <p></p>"},{"location":"changelog/#other-bug-fixes-and-improvements_1","title":"Other bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>\ud83d\udc24 #2440 Add Android 13 <code>POST_NOTICICATIONS</code> permission as well as a new <code>LeakCanary.Config.showNotifications</code> config to disable notifications entirely.</li> <li>\ud83d\udc24 #2416 Add Android 13 monochrome icon.</li> <li>\ud83d\udca5 #2371 Fix db crash when navigating heap dump screen.</li> <li>\ud83d\udc1b #2393 Allow LeakCanary to be defined as an AndroidX Startup dependency.</li> <li>\ud83d\udca5 #2430 Fix ShortcutManager crash on Android TV.</li> <li>\ud83d\udca5 #2382 Fix heap dump close crash.</li> </ul> <p>This list reflects only a subset of all changes. For more details, see the 2.10 Milestone and the full diff.</p>"},{"location":"changelog/#version-291-2022-04-20","title":"Version 2.9.1 (2022-04-20)","text":""},{"location":"changelog/#preface","title":"Preface","text":"<p>What are some things you\u2019d like to see in a future LeakCanary 3 version? Tell me on Twitter!</p> <p>Some ideas I\u2019m playing with:</p> <ul> <li>Moving heap analysis leak visualisation to a separate single app (written with Compose!) available on the PlayStore.</li> <li>Bumping Okio to 3.0</li> <li>Multiplatform heap analysis? Analyze a JVM heap dump in your browser?!</li> <li>Visualize the heap dominators / retained size as a treemap.</li> <li>A backend for LeakCanary?</li> </ul> <p>Anyway, that\u2019s still very much the future, let\u2019s talk about what\u2019s in <code>2.9.1</code> now!</p>"},{"location":"changelog/#new-metrics-in-heap-analysis-metadata","title":"New metrics in heap analysis metadata","text":"<p>I built LeakCanary to help fix leaks, but in doing so I accidentally wrote a fairly flexible heap dump parser. Since we\u2019re parsing the heap to find leaks anyway, we might as well report additional interesting metrics. Here\u2019s what you\u2019ll now see in the heap dump metadata:</p> <ul> <li>Class count: count of loaded classes</li> <li>Instance count</li> <li>Primitive array count</li> <li>Object array count</li> <li>Thread count</li> <li>Heap total bytes</li> <li>Bitmap count</li> <li>Bitmap total bytes</li> <li>Large bitmap count (bitmaps with more pixels than 1.1x the pixels on screen)</li> <li>Large bitmap total bytes</li> <li>SQLiteDatabase in memory (open or closed, as well as their file path)</li> </ul> <p>This is just a first pass, feedback and ideas welcome!</p>"},{"location":"changelog/#performance-improvements","title":"Performance improvements","text":"<p>The heap analysis now traverses the heap dump using <code>RandomAccessFile</code> instead of <code>FileChannel.transferTo()</code> 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.</p>"},{"location":"changelog/#breaking-change-failtestonleakrunlistener-deleted","title":"Breaking change: FailTestOnLeakRunListener deleted","text":"<p><code>FailTestOnLeakRunListener</code>, <code>FailTestOnLeak</code> and <code>FailAnnotatedTestOnLeakRunListener</code> were deprecated in LeakCanary 2.8 as they rely on hacking the Android Test library internals which have since changed, and have been replaced by <code>LeakAssertions.assertNoLeak()</code> and the <code>DetectLeaksAfterTestSuccess</code> 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\u2019re gone: #2282. If you can\u2019t use the test rules just yet, you\u2019re welcome to copy paste the listener implementations in your own codebase.</p>"},{"location":"changelog/#other-bug-fixes-and-improvements_2","title":"Other bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>\ud83d\udca5 #2367 Fixed <code>AndroidLeakFixes.FLUSH_HANDLER_THREADS</code> (<code>HandlerThread</code> can have a null <code>Looper</code>).</li> <li>\ud83d\udca5 #2286 Update Curtains to include Proguard rules and prevent <code>WindowCallbackWrapper</code> crashes.</li> <li>\ud83d\udca5 #2294 Fixed <code>WindowDelegateCallback.onMenuOpened()</code> crash.</li> <li>\ud83d\udc24 #2328 Fixed ToastEventListener leak. Sorry \ud83d\ude2c!</li> <li>\ud83d\udca5 #2310 Fixed crash when using WorkManager < 2.1.0.</li> <li>\ud83d\udca5 #2342 Fixed crash when <code>HashSet.map</code> is null (which isn\u2019t supposed to happen, oh well, Android \ud83e\udd37\u200d\u2642\ufe0f).</li> <li>\ud83d\udc1b #2117 Fixed StrictMode disk read violations.</li> <li>\ud83d\udca5 #2351 Fixed a race causing a startup crash.</li> <li>\ud83d\udca5 #2315 Fixed crash when using Okio 1.14.</li> <li>\ud83d\udc1b #2182 Fixed multi rescheduling of <code>BackgroundListener$checkAppInBackground</code>.</li> <li>\ud83d\udca5 #2360 Fixed SQLiteOpenHelper concurrent creation crash.</li> </ul> <p>This list reflects only a subset of all changes. For more details, see the 2.9 Milestone and the full diff.</p>"},{"location":"changelog/#version-281-2022-01-06","title":"Version 2.8.1 (2022-01-06)","text":"<p>This is a bugfix release, a quick follow up to <code>2.8</code> which had a few major issues \ud83d\ude05. If you haven\u2019t yet, you should definitely read the <code>2.8</code> changelog.</p>"},{"location":"changelog/#thanks","title":"Thanks","text":"<p>Please thank @dicosta, @Goooler, @plnice, @preetha1326 for their contributions, bug reports and feature requests \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p>"},{"location":"changelog/#crash-fixes","title":"Crash fixes \ud83d\udca5\ud83d\udca5\ud83d\udca5","text":"<p>This patch release fixes not 1, not 2, but 3 crashes!</p> <ul> <li>\ud83d\udca5 #2268 WorkManager expedited request crashes before API 31.</li> <li>\ud83d\udca5 #2270 Updating <code>LeakCanary.config</code> crashes when <code>AppWatcher</code> is not installed.</li> <li>\ud83d\udca5 #2271 Analysis failure on API 25 because <code>HashMap$Entry</code> became <code>HashMap$HashMapEntry</code> (on API 25) before it finally changed to <code>HashMap$Node</code>.</li> </ul> <p>For more details, see the 2.8.1 Milestone and the full diff.</p>"},{"location":"changelog/#version-28-2022-01-04","title":"Version 2.8 (2022-01-04)","text":"<p>Note: please update to <code>2.8.1</code> instead.</p>"},{"location":"changelog/#preface_1","title":"Preface","text":"<p>The last release was 9 months ago. What happened?! Well, soon after releasing LeakCanary 2.7, I had my 2nd baby, a wonderful daughter \ud83d\ude0d. Having 2 young kids leaves a lot less time available for Open Source work\u2026 but it\u2019s worth it!</p> <p>\u2015 P.Y.</p>"},{"location":"changelog/#thanks_1","title":"Thanks","text":"<p>Please thank @aaronweihe, @alhah, @Andre-max, @AoraMD, @BraisGabin, @breezenan, @Goooler, @iliaskomp @Jeff11, @jmnwong, @IdioticMadman, @keyur1sst, @lchen8, @leinardi, @Maragues, @mars885, @mateuszkwiecinski, @matiash, @maxxx, @preetha1326, @SimonMarquis, @slavonnet, @Sonphil, @summerlyr, @SUPERCILEX, @utwyko, @ZacSweers, @ziranshang, @zoltish for their contributions, bug reports and feature requests \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p>"},{"location":"changelog/#improved-support-for-data-structure-internals","title":"Improved support for data structure internals","text":"<p>\ud83e\udd13 Inspired by Android Studio, LeakCanary\u2019s node discovery during heap graph traversal is now abstracted away. This allows overlaying logical structure over common data structure internals.</p> <p>\ud83d\ude05 WHAT?!</p> <p>\ud83d\udc49 This means we can make known data structures look more like their APIs than their internals. For example, developers tend to think of setting a <code>HashMap</code> entry as <code>map[\"key\"] = value</code> rather than <code>map.table[hash(\"key\")].next.next.next = Node(value)</code>, which is what LeakCanary would previously show in its leak traces.</p> <p>Let\u2019s look at a <code>HashMap</code> example:</p> <pre><code>class CheckoutController {\n\nval tabs = HashMap<String, Tab>()\n\nfun addItemsTab(tab: Tab) {\ntabs[\"ItemsTab\"] = tab\n}\n}\n</code></pre> <p>If the <code>Tab</code> instance holds on to a view, we might see a leak trace that would look like this:</p> <pre><code>\u2502 ...\n\u251c\u2500 com.example.CheckoutController instance\n\u2502 \u2193 CheckoutController.tabs\n\u251c\u2500 java.util.HashMap instance\n\u2502 \u2193 HashMap.table\n\u251c\u2500 java.util.HashMap$Node[] array\n\u2502 \u2193 HashMap$Node[42]\n\u251c\u2500 java.util.HashMap$Node instance\n\u2502 \u2193 HashMap$Node.next\n\u251c\u2500 java.util.HashMap$Node instance\n\u2502 \u2193 HashMap$Node.value\n\u251c\u2500 com.example.Tab instance\n\u2502 ...\n</code></pre> <p>With the improved data structure support, the leak trace is much clearer (also note how the <code>ItemsTab</code> string key is now surfaced):</p> <pre><code>\u2502 ...\n\u251c\u2500 com.example.CheckoutController instance\n\u2502 \u2193 CheckoutController.tabs\n\u251c\u2500 java.util.HashMap instance\n\u2502 \u2193 HashMap[ItemsTab]\n\u251c\u2500 com.example.Tab instance\n\u2502 ...\n</code></pre> <p>Another benefit of this change is that leak signatures become less dependent of the runtime, and therefore are more consistent. This is especially true for any data structure that relies on a linked list (<code>HashMap</code>, <code>LinkedList</code>, <code>MessageQueue</code>, \u2026). Currently LeakCanary supports a limited set of common data structures from Apache Harmony, Open JDK, and the Android SDK. Let me know what else you need!</p>"},{"location":"changelog/#objectanimator-leaks","title":"ObjectAnimator leaks","text":"<p>LeakCanary will now detect leaks that trigger when forgetting to cancel <code>ObjectAnimator</code>. This new feature is enabled by the node discovery changes described above!</p> <p>Let\u2019s say you accidentally start an infinite <code>ObjectAnimator</code> and never cancel it, like so:</p> <pre><code>class ExampleActivity : Activity() {\n\noverride fun onCreate(savedInstanceState: Bundle?) {\nsuper.onCreate(savedInstanceState)\nsetContentView(R.layout.main_activity)\nfindViewById<Button>(R.id.button).setOnClickListener { view ->\nObjectAnimator.ofFloat(view, View.ALPHA, 0.1f, 0.2f).apply {\nduration = 100\nrepeatMode = ValueAnimator.REVERSE\nrepeatCount = ValueAnimator.INFINITE\nstart()\n}\n}\n}\n}\n</code></pre> <p>In previous releases, LeakCanary would detect that the animated view is leaking but it wouldn\u2019t be able to find the leak and instead would report it as an unreachable object: An unreachable object is still in memory but LeakCanary could not find a strong reference path from GC roots.</p> <p>LeakCanary now reports the leak and adds animator state information, helping detect and fix any infinite <code>ObjectAnimator</code>.</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: Thread object\n\u2502\n\u251c\u2500 java.lang.Thread instance\n\u2502 Leaking: NO (the main thread always runs)\n\u2502 Thread name: 'main'\n\u2502 \u2193 Thread.threadLocals\n\u2502 ~~~~~~~~~~~~\n...\n\u251c\u2500 android.animation.ObjectAnimator instance\n\u2502 Leaking: UNKNOWN\n\u2502 mListeners = null\n\u2502 mPropertyName = null\n\u2502 mProperty.mName = alpha\n\u2502 mProperty.mType = java.lang.Float\n\u2502 mInitialized = true\n\u2502 mStarted = true\n\u2502 mRunning = true\n\u2502 mAnimationEndRequested = false\n\u2502 mDuration = 100\n\u2502 mStartDelay = 0\n\u2502 mRepeatCount = INFINITE (-1)\n\u2502 mRepeatMode = REVERSE (2)\n\u2502 \u2193 ObjectAnimator.mTarget\n\u2502 ~~~~~~~\n\u2570\u2192 android.widget.Button instance\n Leaking: YES (View.mContext references a destroyed activity)\n</code></pre> <p>To learn more, see this AOSP issue: ObjectAnimator.mTarget weak ref creates memory leaks on infinite animators.</p>"},{"location":"changelog/#leak-detection-in-tests","title":"Leak detection in tests","text":"<p>Previous releases of <code>leakcanary-android-instrumentation</code> introduced a <code>FailTestOnLeakRunListener</code> which could run leak detection after each UI tests. Unfortunately <code>FailTestOnLeakRunListener</code> relied on a hack around <code>androidx.test</code> internals to report failures. The internals keep changing with every <code>androidx.test</code> release and breaking <code>FailTestOnLeakRunListener</code> \ud83d\ude2d.</p> <p><code>FailTestOnLeakRunListener</code> is now deprecated (\ud83d\udc4b) and replaced by the <code>DetectLeaksAfterTestSuccess</code> test rule, which you can add to your test like any normal test rule.</p> <p>Additionally, you can call <code>LeakAssertions.assertNoLeak()</code> from anywhere in your instrumentation tests. You can also annotate tests with <code>@SkipLeakDetection</code> (for that to work you\u2019ll also need to set up the <code>TestDescriptionHolder</code> test rule).</p> <pre><code>class CartTest {\n@get:Rule\nval rules = RuleChain.outerRule(TestDescriptionHolder)\n.around(DetectLeaksAfterTestSuccess())\n.around(ActivityScenarioRule(CartActivity::class.java))\n\n@Test\nfun addItemToCart() {\n// ...\n}\n\n@SkipLeakDetection(\"See #1234\")\n@Test\nfun removeItemFromCart() {\n// ...\n}\n}\n</code></pre>"},{"location":"changelog/#android-12","title":"Android 12","text":"<p>Hopefully this time we fixed everything that Android 12 broke: missing <code>exported:true</code> tags, missing pending intent flags, and <code>ForegroundServiceStartNotAllowedException</code> crashes. If not, let us know! Can\u2019t wait for Android 13 to break everything again \ud83e\udd2c.</p>"},{"location":"changelog/#workmanager","title":"WorkManager","text":"<p>Running an Android Service without crashing (<code>ForegroundServiceStartNotAllowedException</code>\u2026) is becoming harder with every release of Android, so I got rid of the LeakCanary heap analyzer service! Instead, LeakCanary leverages WorkManager if you already have it as a dependency. If you don\u2019t use WorkManager, then LeakCanary will fall back to using a simple thread.</p> <p>Note: I recommend using at least WorkManager 2.7.0 as it adds the <code>WorkRequest.Builder.setExpedited()</code> API which LeakCanary leverages if available.</p>"},{"location":"changelog/#multi-process","title":"Multi process","text":"<p>Switching to WorkManager also impacts the LeakCanary multi process approach, which now leverages WorkManager remote jobs. Blog on how I got this working: WorkManager multi-process for libraries.</p> <p>Multi process is harder to get right so you should only use this if LeakCanary frequently runs out of memory while performing the heap analysis. Here are the updated set up steps:</p> <p>1) Add the <code>leakcanary-android-process</code> dependency and keep the <code>leakcanary-android</code> dependency.</p> <pre><code>dependencies {\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8'\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android-process:2.8'\n}\n</code></pre> <p>2) Skip the initialization code in the <code>Application</code> class</p> <pre><code>class ExampleApplication : Application() {\n\noverride fun onCreate() {\nif (LeakCanaryProcess.isInAnalyzerProcess(this)) {\nreturn\n}\nsuper.onCreate()\n// normal init goes here, skipped in :leakcanary process.\n}\n}\n</code></pre> <p>That\u2019s it! Note that event listeners (see below) related to the analysis will fire in the remote process.</p>"},{"location":"changelog/#androidx-app-startup","title":"AndroidX App Startup","text":"<p>LeakCanary now optionally supports the AndroidX App Startup library. All you need to do is replace the <code>leakcanary-android</code> dependency with <code>leakcanary-android-startup</code>:</p> <pre><code>dependencies {\n// Remove the normal leakcanary-android dependency\n// debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8'\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android-startup:2.8'\n}\n</code></pre> <p>Note 1: <code>leakcanary-android</code> adds the code for automatic installl to <code>leakcanary-android-core</code>. If you\u2019re calling <code>AppWatcher.manualInstall()</code>, you can depend directly on <code>leakcanary-android-core</code> instead of <code>leakcanary-android</code>, and you won\u2019t need the disable any automatic install.</p> <p>Note 2: the same principle applies to <code>leakcanary-object-watcher-android</code>: it depends on <code>leakcanary-object-watcher-android-core</code> and adds automatic install, while <code>leakcanary-object-watcher-android-startup</code> leverages the App Startup library. Same for <code>plumber-android</code>, <code>plumber-android-core</code> and <code>plumber-android-startup</code>.</p>"},{"location":"changelog/#event-listeners","title":"Event listeners","text":"<p><code>LeakCanary.Config</code> has a new <code>eventListeners</code> field allowing you to react to LeakCanary\u2019s lifecycle. If you want to customize this, you most likely should be keeping the default list of listeners and add or remove from it.</p> <p>For example, if you want to disable the LeakCanary toast:</p> <pre><code>LeakCanary.config = LeakCanary.config.run {\ncopy(\neventListeners = eventListeners.filter {\nit !is ToastEventListener\n}\n)\n}\n</code></pre> <p>If you want to upload heap analysis results:</p> <pre><code>LeakCanary.config = LeakCanary.config.run {\ncopy(\neventListeners = eventListeners + EventListener { event ->\nif (event is HeapAnalysisSucceeded) {\n// Upload event.heapAnalysis\n}\n}\n)\n}\n</code></pre> <p>Note: <code>Leakcanary.Config.onHeapAnalyzedListener</code> still works but is now deprecated.</p> <p>Feedback welcome on this new API!</p>"},{"location":"changelog/#other-bug-fixes-and-improvements_3","title":"Other bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>#2096 Opening / sharing heap dump files now supports LeakCanary as an option.</li> <li>#2210 First Compose dedicated object inspectors!</li> <li>#2121 Support for customizing the heap dumper.</li> </ul> <p>This list reflects only a subset of all changes. For more details, see the 2.8 Milestone and the full diff.</p>"},{"location":"changelog/#version-27-2021-03-26","title":"Version 2.7 (2021-03-26)","text":"<p>Please thank @chao2zhang, @ihrupin, @jzbrooks, @msfjarvis, @reneargento, @Unpublished for their contributions, bug reports and feature requests \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p>"},{"location":"changelog/#finer-grained-root-view-watching","title":"Finer grained root view watching","text":"<p>In version 2.6, LeakCanary added detection of root views retained after <code>View.onDetachedFromWindow()</code>. This helps find more leaks, but unfortunately some Android widgets keep a detached root view around to reattach it later (e.g. spinner). App developers also sometimes do the same with dialogs, keeping a single instance around and calling <code>show()</code> and <code>hide()</code> as needed. As a result, LeakCanary would report leaks that were actually not leaks.</p> <p>In version 2.7, the default behavior changed: LeakCanary will continue to detect leaks of toasts, but will ignore root views created by a PopupWindow (which is what Android widgets use). It will also ignore root views created by a dialog by default, and you can turn this back on by setting the <code>leak_canary_watcher_watch_dismissed_dialogs</code> resource boolean to true:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<bool name=\"leak_canary_watcher_watch_dismissed_dialogs\">true</bool>\n</resources>\n</code></pre> <p>This is implemented using a new Square library: Curtains.</p>"},{"location":"changelog/#targeting-android-12","title":"Targeting Android 12","text":"<p>We fixed two issues for apps that want to target Android 12:</p> <ul> <li>#2074 Activities that use intent filters must declare the <code>android:exported</code> attribute.</li> <li>#2079 PendingIntent requires the <code>FLAG_IMMUTABLE</code> flag.</li> </ul>"},{"location":"changelog/#bug-fixes-and-improvements","title":"Bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>#2075 Fixed crash when sharing heap dumps.</li> <li>#2067 Fixed crash when opening leaks from older versions (before 2.6) of LeakCanary.</li> <li>#2049 Fixed Plumber crash due to R8 shaking AndroidLeakFixes.</li> <li>#2084 Fixed Shark crash when used from multiple threads.</li> <li>#2054 \ud83d\ude48\ud83d\ude49\ud83d\ude4a Blocked Monkeys from deleting leaks.</li> <li>#2069 Added X button to the root leak activity (for custom devices with no back button)</li> <li>#2091 Added receiver details if LoadedApk shows up in the leaktrace.</li> <li>#2083 Added service status details (created or not) to leaktrace.</li> <li>#2099 Retry button if analysis fails.</li> <li>#2066 When heap analysis in UI tests is skipped and NoAnalysis is returned, NoAnalysis now includes a reason to help debug why it didn\u2019t run.</li> <li>#2000 The LeakCanary CI now leverages GitHub actions instead of Travis.</li> </ul> <p>For more details, see the 2.7 Milestone and the full diff.</p>"},{"location":"changelog/#version-26-christmas-release-2020-12-24","title":"Version 2.6 - Christmas Release \ud83c\udf84 (2020-12-24)","text":"<p>Please thank @chao2zhang, @ChaosLeung, @LitterSun, @mickverm, @opatry, @Thomas-Vos, @tricknology, @rahul-a, @samoylenkodmitry, @sing0055, @ubiratansoares for their contributions, bug reports and feature requests \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p> <p>This Christmas Release includes several external contributions and a bunch of cool new features! \ud83c\udf81\ud83c\udf81</p>"},{"location":"changelog/#detecting-root-views-retained-after-viewondetachedfromwindow","title":"Detecting root views retained after <code>View.onDetachedFromWindow()</code>","text":"<p>On Android, every displayed view hierarchy is attached to a window, whether it be the view hierarchy of an activity, a dialog, a toast or a chat head. After a view hierarchy is detached from its window, it should be garbage collected.</p> <p>LeakCanary already detects leaks of activity view hierarchies because retained detached views reference their activity context and LeakCanary detects activities retained after <code>Activity.onDestroy()</code>. In this new release, LeakCanary will now detect the leak of a dialog view hierarchy as soon as that dialog is dismissed, or any other view that is passed to WindowManager.removeView().</p>"},{"location":"changelog/#detecting-services-retained-after-serviceondestroy","title":"Detecting services retained after <code>Service.onDestroy()</code>","text":"<p>After an Android service is destroyed, it should be garbage collected. Unfortunately, the Android SDK does not provide any generic API to observe the service lifecycle. We worked around that using reflection on greylist APIs (details in #2014). Let\u2019s hope this motivates the Android team to build the APIs developers need.</p>"},{"location":"changelog/#configuring-retained-object-detection","title":"Configuring retained object detection","text":"<p>With the detection of 2 new types of retained objects, we\u2019re also adding APIs to configure which watchers should be installed as well as adding filtering capabilities.</p> <p>First, disable the automatic install:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<bool name=\"leak_canary_watcher_auto_install\">false</bool>\n</resources>\n</code></pre> <p>Then you can install LeakCanary manually. LeakCanary 2.6 comes with 4 watchers installed by default: <code>ActivityWatcher</code>, <code>FragmentAndViewModelWatcher</code>, <code>RootViewWatcher</code>, <code>ServiceWatcher</code>. Here\u2019s an example to get all the default watchers except <code>ServiceWatcher</code>:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\n\nval watchersToInstall = AppWatcher.appDefaultWatchers(application)\n.filter { it !is ServiceWatcher }\n\nAppWatcher.manualInstall(\napplication = application,\nwatchersToInstall = watchersToInstall\n)\n}\n}\n</code></pre> <p>LeakCanary introduces a new functional (SAM) interface implemented by <code>ObjectWatcher</code>: <code>ReachabilityWatcher</code>, with a <code>ReachabilityWatcher.expectWeaklyReachable()</code> method that replaces the now deprecated <code>ObjectWatcher.watch()</code> method. You can create the default watcher instances with a custom <code>ReachabilityWatcher</code> that delegates to <code>AppWatcher.objectWatcher</code> but filters out specific instances (e.g. <code>BadSdkLeakingFragment</code>):</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\n\nval delegate = ReachabilityWatcher { watchedObject, description ->\nif (watchedObject !is BadSdkLeakingFragment) {\nAppWatcher.objectWatcher.expectWeaklyReachable(watchedObject, description)\n}\n}\n\nval watchersToInstall = AppWatcher.appDefaultWatchers(application, delegate)\n\nAppWatcher.manualInstall(\napplication = application,\nwatchersToInstall = watchersToInstall\n)\n}\n}\n</code></pre> <p>With these new configuration options, <code>AppWatcher.config</code> is now deprecated and a no-op.</p>"},{"location":"changelog/#dumping-the-heap-on-screen-off","title":"Dumping the heap on screen off","text":"<p>The default threshold to dump the heap is 5 retained objects when the app is visible, and 1 retained object when the app is not visible. Up until now, visible meant \u201cthe app has at least one activity in started state\u201d. In LeakCanary 2.6, the app will now be considered not visible if the device screen is off, lowering the threshold to trigger heap dumps when you turn off the device screen.</p>"},{"location":"changelog/#leakcanary-for-releases","title":"LeakCanary for releases","text":"<p>LeakCanary 2.6 introduces a new artifact: <code>leakcanary-android-release</code>. This artifact exposes APIs to run a heap analysis in release builds, in production.</p> <p>Danger</p> <p>Everything about this is experimental. Running a heap analysis in production is not a very common thing to do, and we\u2019re still learning and experimenting with this. Also, both the artifact name and the APIs may change.</p> <pre><code>dependencies {\n// debugImplementation because LeakCanary should only run in debug builds.\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.6'\n\n// NEW: LeakCanary for releases!\nreleaseImplementation 'com.squareup.leakcanary:leakcanary-android-release:2.6'\n// Optional: detect retained objects. This helps but is not required.\nreleaseImplementation 'com.squareup.leakcanary:leakcanary-object-watcher-android:2.6'\n}\n</code></pre> <p>Here\u2019s a code example that runs a heap analysis when the screen is turned off or the app enters background, checking first if a Firebase Remote Config flag is turned on, and uploading the result to Bugsnag:</p> <pre><code>class ReleaseExampleApplication : ExampleApplication() {\n\n// Cancels heap analysis if \"heap_analysis_flag\" is false.\nprivate val flagInterceptor by lazy {\nobject : HeapAnalysisInterceptor {\n\nval remoteConfig: FirebaseRemoteConfig = TODO()\n\noverride fun intercept(chain: Chain): HeapAnalysisJob.Result {\nif (remoteConfig.getBoolean(\"heap_analysis_flag\")) {\nchain.job.cancel(\"heap_analysis_flag false\")\n}\nreturn chain.proceed()\n}\n}\n}\n\nprivate val analysisClient by lazy {\nHeapAnalysisClient(\n// Use private app storage. cacheDir is never backed up which is important.\nheapDumpDirectoryProvider = { cacheDir },\n// stripHeapDump: remove all user data from hprof before analysis.\nconfig = HeapAnalysisConfig(stripHeapDump = true),\n// Default interceptors may cancel analysis for several other reasons.\ninterceptors = listOf(flagInterceptor) + HeapAnalysisClient.defaultInterceptors(this)\n)\n}\n\nprivate val analysisExecutor by lazy {\nExecutors.newSingleThreadExecutor {\nthread(start = false, name = \"Heap analysis executor\") {\nandroid.os.Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND)\nit.run()\n}\n}\n}\n\nprivate val analysisCallback: (Result) -> Unit by lazy {\nval uploader = BugsnagHeapAnalysisUploader(this@ReleaseExampleApplication)\n{ result ->\nif (result is Done) {\nuploader.upload(result.analysis)\n}\n}\n}\n\noverride fun onCreate() {\nsuper.onCreate()\n\n// Delete any remaining heap dump (if we crashed)\nanalysisExecutor.execute {\nanalysisClient.deleteHeapDumpFiles()\n}\n\n// Starts heap analysis on background importance\nBackgroundTrigger(\napplication = this,\nanalysisClient = analysisClient,\nanalysisExecutor = analysisExecutor,\nanalysisCallback = analysisCallback\n).start()\n\n// Starts heap analysis when screen off\nScreenOffTrigger(\napplication = this,\nanalysisClient = analysisClient,\nanalysisExecutor = analysisExecutor,\nanalysisCallback = analysisCallback\n).start()\n}\n\n/**\n * Call this to trigger heap analysis manually, e.g. from\n * a help button.\n *\n * This method returns a `HeapAnalysisJob` on which you can\n * call `HeapAnalysisJob.cancel()` at any time.\n */\nfun triggerHeapAnalysisNow(): HeapAnalysisJob {\nval job = analysisClient.newJob()\nanalysisExecutor.execute {\nval result = job.execute()\nanalysisCallback(result)\n}\nreturn job\n}\n}\n</code></pre> <p>The Bugsnag uploader:</p> <pre><code>class BugsnagHeapAnalysisUploader(applicationContext: Application) {\n\nprivate val bugsnagClient: Client\n\ninit {\nbugsnagClient = Client(\napplicationContext,\nBUGSNAG_API_KEY,\nDO_NOT_ENABLE_EXCEPTION_HANDLER\n)\nbugsnagClient.setSendThreads(false)\n}\n\nfun upload(heapAnalysis: HeapAnalysis) {\nwhen (heapAnalysis) {\nis HeapAnalysisSuccess -> {\nval exception = HeapAnalysisReport()\nbugsnagClient.notify(exception) { report ->\nval metaData = report.error.metaData\nmetaData.addToTab(\"Heap Analysis\", \"result\", heapAnalysis.toString())\n}\n}\nis HeapAnalysisFailure -> {\n// Please file any reported failure to\n// https://github.com/square/leakcanary/issues\nbugsnagClient.notify(heapAnalysis.exception)\n}\n}\n}\n\n// Exception with fake unique stacktrace to send all reports to the same error entry.\nclass HeapAnalysisReport : Exception(\"Check the HEAP ANALYSIS tab\") {\noverride fun fillInStackTrace(): Throwable {\nstackTrace = arrayOf(\nStackTraceElement(\n\"HeapAnalysisReport\",\n\"analyzeHeap\",\n\"HeapAnalysisReport.kt\",\n1\n)\n)\nreturn this\n}\n}\n\ncompanion object {\nprivate const val BUGSNAG_API_KEY = YOUR_BUGSNAG_API_KEY\nprivate const val DO_NOT_ENABLE_EXCEPTION_HANDLER = false\n}\n}\n</code></pre>"},{"location":"changelog/#more-leak-fixes-in-plumber","title":"More leak fixes in Plumber","text":"<p>We added 3 new automatic fixes for known AOSP leaks in <code>plumber-android</code> (details: #1993). As a reminder, <code>plumber-android</code> is automatically included when you add <code>leakcanary-android</code>, and you can add it manually for build types that don\u2019t include LeakCanary:</p> <pre><code>dependencies {\n // leakcanary-android adds plumber-android to debug builds\n debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.6'\n\n // This adds plumber-android to all build types\n implementation 'com.squareup.leakcanary:plumber-android:2.6'\n}\n</code></pre>"},{"location":"changelog/#bug-fixes-and-improvements_1","title":"Bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>#1948 Leakcanary is now compiled against Kotlin 1.4 (while staying 1.3 compatible) to support Functional (SAM) interfaces.</li> <li>#1956 The retained object size is displayed as a human readable output (KB, MB, \u2026).</li> <li>#1976 Improved default object inspectors and leak finders for <code>View</code> and <code>Context</code>.</li> <li>#1972 Fields are printed with the parent class name that holds the field in leak traces.</li> <li>#1981 Fixed StrictMode policy violation (main thread read from disk).</li> <li>#1977 Report objects that are not strongly reachable.</li> <li>#2018 & #2019 Fixed crashes in LeakCanary UI (discovered by Monkey tests).</li> <li>#2015 Fixed crash on Android < 16.</li> <li>#2023 Fixed crash in plugin projects.</li> </ul> <p>For more details, see the 2.6 Milestone and the full diff.</p>"},{"location":"changelog/#version-25-2020-10-01","title":"Version 2.5 (2020-10-01)","text":"<p>Please thank @Amokrane, @Armaxis, @askont, @chao2zhang, @daniil-shevtsov, @eygraber, @msfjarvis, @mzgreen, @lchen8, @rpattabi, @sahil2441, @SylvainGirod, @vhow for their contributions, bug reports and feature requests \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p>"},{"location":"changelog/#heap-analysis-is-twice-as-fast","title":"Heap analysis is twice as fast \ud83d\udc24\ud83d\udca8","text":"<p>No one asked, so we delivered! We rewrote several core components in Shark (LeakCanary\u2019s heap analyzer) to dramatically reduce IO reads and allocations while keeping memory constant. More details on Twitter: thread by @ArtemChubaryan and thread by @Piwai.</p>"},{"location":"changelog/#compute-retained-size-within-the-leak-trace","title":"Compute retained size within the leak trace","text":"<p>Previously, LeakCanary computed the retained size for the leaking object (the last object in the leak trace). However, the bad reference causing objects to leak is often higher up in the leak trace and everything that it holds onto is actually leaking. So LeakCanary now computes the retained size for all the objects in the leaktrace that have a LEAKING or UNKNOWN status:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 com.example.MySingleton class\n\u2502 Leaking: NO (a class is never leaking)\n\u2502 \u2193 static MySingleton.leakedView\n\u2502 ~~~~~~~~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 Leaking: YES (View.mContext references a destroyed activity)\n\u2502 Retaining 46326 bytes in 942 objects\n\u2502 \u2193 TextView.mContext\n\u2570\u2192 com.example.MainActivity instance\n\u200b Leaking: YES (Activity#mDestroyed is true)\n\u200b Retaining 1432 bytes in 36 objects\n</code></pre>"},{"location":"changelog/#disable-leakcanary-from-the-ui","title":"Disable LeakCanary from the UI","text":"<p>New toggle to disable heap dumping, which can be useful for QA, or when doing a product demo. LeakCanary will still show a notification when an object is retained.</p> <p></p>"},{"location":"changelog/#deobfuscating-hprof-files","title":"Deobfuscating hprof files","text":"<p>The Shark CLI can now deobfuscate heap dumps:</p> <pre><code>brew install leakcanary-shark\n\nshark-cli --hprof heapdump.hprof -m mapping.txt deobfuscate-hprof\n</code></pre>"},{"location":"changelog/#bug-fixes-and-improvements_2","title":"Bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>Heap analysis text results now wrap to a max width when sharing them from the LeakCanary activity or printing to logcat. This will make it harder to miss details that are lost at the end of long lines of text.</li> <li>The <code>leak_canary_watcher_auto_install</code>, <code>leak_canary_allow_in_non_debuggable_build</code> and <code>leak_canary_plumber_auto_install</code> resource booleans were meant to be public.</li> <li>We sprinkled a few <code>@JvmStatic</code> to help Java consummers.</li> <li>Fixed crash when no browser installed.</li> <li>Use distinct group for LeakCanary notifications.</li> <li>The heap analysis result now includes the heap dump duration because it looks like Android 11 heap dumps are sometimes super slow. We also added more perf related metrics.</li> <li>Disable logging when AppWatcher runs in release builds.</li> <li>Highlight library leak patterns directly within the leak traces.</li> <li>Improved inspections for Context, View and ContextImpl.</li> </ul> <p>For more details, see the 2.5 Milestone and the full diff.</p>"},{"location":"changelog/#version-24-2020-06-10","title":"Version 2.4 (2020-06-10)","text":"<p>Please thank @0x109, @andersu, @antoniomerlin, @bishiboosh, @ckesc, @jrodbx, @LouisCAD, @marcardar, @OlivierGenez, @pyricau, @runningcode, @seljad, @worldsnas for their contributions, bug reports and feature requests.</p>"},{"location":"changelog/#plumber-android-is-a-new-artifact-that-fixes-known-android-leaks","title":"<code>plumber-android</code> is a new artifact that fixes known Android leaks \ud83d\udebd\ud83d\udd27","text":"<p>LeakCanary reports all leaks, including leaks caused by a known bug in 3rd party code that you do not have control over (reported as Library leaks). That can be annoying! LeakCanary now ships with a new dependency, <code>plumber-android</code>, which performs hacks at runtime to fix some of these known leaks. This releases has fixes for 11 known leaks, but this is just the beginning. Contributions welcome! \ud83d\ude4f</p> <p>Note that since the <code>leakcanary-android</code> dependency is usually added as a <code>debugImplementation</code> dependency, the <code>plumber-android</code> is transitively added only in debug builds, so it will not fix leaks in your release builds. You can add the dependency directly as <code>implementation</code> to get these fixes in release builds as well:</p> <pre><code>dependencies {\nimplementation 'com.squareup.leakcanary:plumber-android:2.4'\n}\n</code></pre> <p>Warning</p> <p>While several of these fixes already ship in release builds of Square apps, this is the first official release of <code>plumber-android</code>, so you should consider it experimental.</p>"},{"location":"changelog/#analyzing-leaks-from-the-cli-is-easier-than-ever","title":"Analyzing leaks from the CLI is easier than ever \ud83c\udf7a","text":"<p>The Shark CLI can now be installed via Homebrew</p> <pre><code>brew install leakcanary-shark\n</code></pre> <p>You can then look for leaks in apps on any connected device, for example:</p> <pre><code>$ shark-cli --device emulator-5554 --process com.example.app.debug analyze\n</code></pre>"},{"location":"changelog/#support-for-android-test-orchestrator","title":"Support for Android Test Orchestrator \ud83c\udfbc","text":"<p>If you set up LeakCanary to report test failures when detecting leaks in instrumentation tests, it now works with Android Test Orchestrator as well. No change required, LeakCanary will automatically detect thatAndroid Test Orchestrator is running and hook into it.</p>"},{"location":"changelog/#no-more-master-branch","title":"No more <code>master</code> branch","text":"<p>The branch name <code>master</code> comes from the master / slave terminology. We renamed the default branch to <code>main</code>, a small step towards making the LeakCanary community a safer space. Here\u2019s a good thread on this topic.</p>"},{"location":"changelog/#bug-fixes-and-improvements_3","title":"Bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>URLs in Library Leak descriptions are now clickable</li> <li>Fixed ordering issues causing improper config with manual setup. A related change is that <code>AppWatcher.Config.enabled</code> is now deprecated.</li> <li>Fixed possible OutOfMemoryError failure when computing retained size: we were loading to memory large arrays from the heap dump just to get their size.</li> </ul> <p>For more details, see the 2.4 Milestone and the full diff.</p>"},{"location":"changelog/#version-23-2020-04-08","title":"Version 2.3 (2020-04-08)","text":"<p>This is a minor release on the feature front, but a large release on the documentation front!</p> <p>Many thanks to @adamfit, @Amokrane, @Armaxis, @artnc, @burakeregar, @ClaasJG, @clementcontet, @ckesc, @cketti, @fbenbassat, @Guneetgstar, @Igorxp5, @JLLeitschuh, @KidAndroid, @ligi, @mzgreen, @pyricau, @sprintuu, @tevjef, @thrlr123 for the contributions, bug reports and feature requests.</p> <p>We asked for help and immediately started seeing more contributions. Thanks all! Check out the How to help page.</p>"},{"location":"changelog/#leakcanary-will-now-crash-in-release-builds","title":"LeakCanary will now crash in release builds","text":"<p>Despite the documentation insisting on using <code>debugImplementation</code>, we\u2019ve seen apps ship LeakCanary in release builds. Mistakes happen, so we\u2019ve made that mistake harder to miss by making LeakCanary crash when included in release builds.</p> <p>Learn More: LeakCanary in release builds.</p>"},{"location":"changelog/#doc-site","title":"Doc site \ud83d\udec0\ud83d\udca5","text":"<p>The doc site content has changed quite a bit! We applied advice from Google\u2019s tech writing guide. If you\u2019ve been confused by Library Leaks before, check out see the new Categorizing leaks section. Take a look around, let us know what you think.</p>"},{"location":"changelog/#bug-fixes-and-improvements_4","title":"Bug fixes and improvements \ud83d\ude09","text":"<ul> <li>The new deobfuscation Gradle plugin wasn\u2019t working with Gradle 3.6, this is now fixed. Also removed the requirement for the plugin to be applied after AGP.</li> <li>Fixed 2 crashes (#1768 & #1769) in the LeakCanary UI found by a sneaky monkey runner \ud83d\ude48.</li> <li>The LeakCanary UI updates immediately when a heap analysis is added or deleted.</li> <li>Fixed a crash when updating from LeakCanary 2.0.</li> <li>The About section of the LeakCanary now surfaces whether heap dumping is currently enabled.</li> <li>Fixed process not exiting in SharkCLI on Windows.</li> <li>Improved error message when obfuscation mappings appear to be missing.</li> </ul> <p>For more details, see the 2.3 Milestone and the full diff.</p>"},{"location":"changelog/#version-22-2020-02-05","title":"Version 2.2 (2020-02-05)","text":"<p>We\u2019ve got some good stuff for the first release of the decade!</p> <p>Many thanks to @AndroidInternal, @Armaxis, @lic2050, @mzgreen, @orenktaboola, @personshelldon, @Plastix, @pyricau for the contributions, bug reports and feature requests.</p>"},{"location":"changelog/#viewmodel-leak-detection","title":"ViewModel leak detection","text":"<p>Android ViewModels are really cool! Their lifecycle is much nicer than fragments or activities, but sometimes mistakes happen. LeakCanary will now automatically detect ViewModel leaks and report any ViewModel instance retained after its <code>onCleared()</code> method was called.</p>"},{"location":"changelog/#android-tv","title":"Android TV","text":"<p>LeakCanary is finally coming to big screens near you! Best part - no additional setup is required, just enable it like you would for a mobile device. Now whenever there\u2019s a leak - you will see a helpful Toast appear with all the details. Make sure to check out our new Android TV section and chill!</p>"},{"location":"changelog/#java-friendly-config-builders","title":"Java-friendly Config builders","text":"<p>It was brought to our attention that configuring <code>LeakCanary</code> and <code>AppWatcher</code> was a miserable experience from Java code. Well, not anymore!</p> <p>Now you can use <code>LeakCanary.Config.Builder</code> and <code>AppWatcher.Config.Builder</code> to have idiomatic Java when updating the configurations. For example:</p> <pre><code>LeakCanary.Config config = LeakCanary.getConfig().newBuilder()\n .retainedVisibleThreshold(3)\n .computeRetainedHeapSize(false)\n .build();\nLeakCanary.setConfig(config);\n</code></pre> <p>If you notice any other problems when using LeakCanary from Java, please file an issue! We take Java-interop seriously and will be happy to improve LeakCanary\u2019s API!</p> <p>For more details, see the 2.2 Milestone and the full diff.</p>"},{"location":"changelog/#version-21-2019-12-31","title":"Version 2.1 (2019-12-31)","text":"<p>A special New Year\u2019s Eve release \ud83e\udd73, the next release will be in another decade \ud83d\ude0e!</p> <p>Many thanks to @adamfit, @alexander-smityuk, @Armaxis, @BraisGabin, @devism, @ditclear, @jrodbx, @jstefanowski, @Maragues, @mzgreen, @pyricau for the contributions, bug reports and feature requests.</p>"},{"location":"changelog/#a-gradle-plugin-for-obfuscated-apps","title":"A Gradle plugin for obfuscated apps","text":"<p>It\u2019s fairly common for teams to have a QA build that is tested before making the release build. Usually that build will be obfuscated (via Proguard or R8), but also add LeakCanary to detect leaks during QA. This leads to obfuscated leak traces, which are hard to understand \ud83e\udd2f. Check out our new Gradle deobfuscation plugin and rejoice!</p>"},{"location":"changelog/#ui-twix-tweaks","title":"UI twix tweaks","text":"<p>In 2.0 we changed the LeakCanary UI and UX, and built a foundation on which 2.1 extends.</p> <p></p> <ul> <li>Since 2.0, Leaks are grouped by their distinct signature. In 2.1 there\u2019s a <code>New</code> tag that will show until you open up a leak. There\u2019s also a <code>Library Leak</code> tag for leaks that are known to be caused by a bug in the Android Framework or Google libraries, and the library leak description now shows up in the UI.</li> <li>The type of the Java objects (class, instance, array) is now displayed in the LeakTrace, e.g. see <code>FontsContract class</code> and <code>ExampleApplication instance</code> above.</li> <li>The type of the GC root now shows up at the root of the leak trace. Makes sense!</li> <li>The leak result notification has an importance now set to MAX so that it\u2019ll show up right in your face. If you turn it off, the canary will haunt you in your dreams \ud83d\udc24\ud83d\udc7b. To save your sanity and your device battery, automatic heap dumps now won\u2019t happen more often than once per minute.</li> <li>The resource id name for <code>View</code> instances is now displayed in the leak trace. You shouldn\u2019t look at the implementation.</li> </ul> <pre><code>\u251c\u2500 android.widget.TextView instance\n\u2502 View.mID = R.id.helper_text\n</code></pre>"},{"location":"changelog/#documentation-goodies","title":"Documentation goodies","text":"<ul> <li>The Fundamentals page was entirely rewritten, split into 3 pages and moved to its own tab. Please read it and provide feedback!</li> <li>At Square, we have been uploading leaks to Bugsnag for 3 years now, so that no leak ever gets missed. Follow this recipe!</li> <li>Did you know you can run LeakCanary in a JVM?</li> </ul>"},{"location":"changelog/#api-breaking-bettering-changes","title":"API breaking bettering changes","text":"<ul> <li>The APIs of the <code>Leak</code> and <code>LeakTrace</code> classes have significantly changed, e.g. all <code>LeakTrace</code> instances with an identical signature are grouped under the same Leak object. Despite these breaking changes, this release version is a minor update. Oh noes, what about semantic versioning \ud83d\ude31? Ask Don Quixote.</li> <li>You can now customize the way LeakCanary finds the leaking objects in the heap dump. For example, here\u2019s the configuration SharkCli uses to find leaks in heap dumps of apps that don\u2019t even have the LeakCanary dependency:</li> </ul> <pre><code>LeakCanary.config = LeakCanary.config.copy(\nleakingObjectFinder = FilteringLeakingObjectFinder(\nAndroidObjectInspectors.appLeakingObjectFilters\n)\n)\n</code></pre> <ul> <li>LeakCanary automatically disables itself in tests by detecting that the <code>org.junit.Test</code> is in the classpath. Unfortunately, some apps ship Junit in their app debug classpath (e.g. when using OkHttp MockWebServer). You can now customize which class is used to detect tests:</li> </ul> <pre><code><resources>\n<string name=\"leak_canary_test_class_name\">assertk.Assert</string>\n</resources>\n</code></pre>"},{"location":"changelog/#interactive-cli","title":"Interactive CLI","text":"<p>Shark CLI was rewritten on top of Clikt:</p> <pre><code>$ shark-cli\nUsage: shark-cli [OPTIONS] COMMAND [ARGS]...\n\n ^`. .=\"\"=.\n ^_ \\ \\ / _ _ \\\n\\ \\ { \\ | d b |\n{ \\ / `~~~--__ \\ /\\ /\n { \\___----~~' `~~-_/'-=\\/=-'\\,\n \\ /// a `~. \\ \\\n / /~~~~-, ,__. , /// __,,,,) \\ |\n \\/ \\/ `~~~; ,---~~-_`/ \\ / \\/\n / / '. .'\n '._.' _|`~~`|_\n /|\\ /|\\\n\nOptions:\n -p, --process NAME Full or partial name of a process, e.g.\n \"example\" would match \"com.example.app\"\n-d, --device ID device/emulator id\n -m, --obfuscation-mapping PATH path to obfuscation mapping file\n --verbose / --no-verbose provide additional details as to what\n shark-cli is doing\n -h, --hprof FILE path to a .hprof file\n --help Show this message and exit\n\nCommands:\n interactive Explore a heap dump.\n analyze Analyze a heap dump.\n dump-process Dump the heap and pull the hprof file.\n strip-hprof Replace all primitive arrays from the provided heap dump with\n arrays of zeroes and generate a new \"-stripped.hprof\" file.\n</code></pre> <p>There\u2019s a new <code>interactive</code> command which enables exploring the heap dump from the command line:</p> <pre><code>$ shark-cli -h heapdump.hprof interactive\nEnter command [help]:\nhelp\n\nAvailable commands:\n analyze Analyze the heap dump.\n class NAME@ID Show class with a matching NAME and Object ID.\n instance CLASS_NAME@ID Show instance with a matching CLASS_NAME and Object\nID.\n array CLASS_NAME@ID Show array instance with a matching CLASS_NAME and\nObject ID.\n ->instance CLASS_NAME@ID Show path from GC Roots to instance.\n ~>instance CLASS_NAME@ID Show path from GC Roots to instance, highlighting\nsuspect references.\n help Show this message.\n exit Exit this interactive prompt.\n</code></pre> <p>We\u2019re currently exploring the idea of adding support for SQL queries, feedback welcome!</p> <p>For more details, see the 2.1 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-2019-11-27","title":"Version 2.0 (2019-11-27)","text":"<p>In the past 7 months, LeakCanary went through 3 alphas and 5 betas, encompassing 23 contributors over 493 commits, 35826 insertions and 10156 deletions.</p>"},{"location":"changelog/#should-i-upgrade","title":"Should I upgrade?","text":"<p>YES! LeakCanary 2 is so much better, it might make you excited when you see a new memory leak. Follow the upgrade guide, you won\u2019t regret it!</p>"},{"location":"changelog/#so-whats-changed-since-163","title":"So, what\u2019s changed since 1.6.3?","text":"<p>Everything. The LeakCanary codebase went from ~6000 lines of Java to ~16000 lines of Kotlin, excluding comments & blanks.</p> <p>Isn\u2019t Kotlin supposed to drastically reduce the amount of boilerplate code?</p> <p>Absolutely! And it did. But then, we wrote more code. LeakCanary used to depend on HAHA, a repackaging of perflib, the heap dump parser used by Android Studio. Unfortunately perflib was slow and used too much memory, so LeakCanary now includes its own heap dump parser: Shark. The extra code comes from Shark, but also from having a lot more automated tests, and an improved UI layer.</p> <p>One major difference: when the app is in foreground, LeakCanary 2 will not trigger on every retained instance. Instead it will wait until the app goes in background or to reach a threashold of 5 retained instances in foreground. The analysis will then find all the leaks at once, and group identical leaks in the results UI. Please read the Fundamentals section to learn more!</p>"},{"location":"changelog/#random-facts","title":"Random facts","text":"<ul> <li>You can customize the Leaks launcher icon and label: learn more here.</li> <li>If you ` press on your main activity launcher icon, you should see a LeakCanary dynamic shortcut. You can then long press that to drop it on your home screen, and the launcher shows that it\u2019s the leaks launcher for your app.</li> <li>Out of the box, LeakCanary tracks all fragments flavors: AOSP, Support Library and Android X.</li> <li>From within the leak screen, you can share a leak to stack overflow. You can also share a heap dump, or import and analyze a heap dump from another device.</li> <li>You can run LeakCanary from your computer command line, on any debuggable app even if that app doesn\u2019t have LeakCanary: learn more here.</li> <li>The new documentation is fully searchable and includes the API documentation. Try the search bar \u2934.</li> <li>A large 160Mb heap dump uses 2Gb memory when opening it in Android Studio, but only 40Mb with Shark.</li> </ul>"},{"location":"changelog/#changes-since-20-beta-5","title":"Changes since 2.0 Beta 5","text":"<ul> <li>Shark CLI supports multiple connected devices #1642</li> <li>Fixed missing sources from Maven Central #1643</li> <li>Updated notification icon to avoid confusion with Twitter DM notifications, and added icons to bottom navigation bar #1648</li> <li>Automatic leak detection for support library fragments #1611</li> </ul> <p>Many thanks to @AndreasBoehm, @jrodbx, @pyricau for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-beta-5-2019-11-25","title":"Version 2.0 Beta 5 (2019-11-25)","text":"<ul> <li>Major bugfix: native gc roots were accidentally ignored in Beta 4, as a result some leaks were not found #1634</li> <li>Fixed Lint warning (<code>leak_canary_about_message</code> string triggered multiple substitutions warning) #1630</li> </ul> <p>Many thanks to @DanEdgarTarget, @msfjarvis, @PaulWoitaschek, @pyricau, @ZacSweers for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-beta-5 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-beta-4-2019-11-18","title":"Version 2.0 Beta 4 (2019-11-18)","text":"<ul> <li>Improved string rendering for heap analysis results</li> <li>UX redesign #1445</li> <li>Support for pattern matching of native reference leaks #1562</li> <li>Added support for deobfuscation using Proguard mapping files in Shark #1499. This isn\u2019t directly supported in LeakCanary yet.</li> <li>Added support for extracting metadata from the heap dump (see the recipe) #1519</li> <li>Improved auto disabling of LeakCanary in Unit and UI tests #1552</li> <li>Several performance improvements when parsing heap dumps</li> <li>Fixed several bugs and crashes</li> <li>Added new known leak patterns</li> </ul> <p>Many thanks to @Armaxis, @BraisGabin, @bric3, @elihart, @fernandospr, @flickator, @gabrysgab, @JorgeDLS, @lannyf77, @msfjarvis, @mzgreen, @ozmium, @PaulWoitaschek, @pyricau, @shelpy, @vRallev, @ZacSweers for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-beta-4 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-beta-3-2019-08-22","title":"Version 2.0 Beta 3 (2019-08-22)","text":"<ul> <li>Baseline memory usage for large hprofs divided by 3 and removed memory spikes #1543</li> <li>Fixed crash when LeakCanary is initialized from another process #1529</li> <li>Java local references are deprioritized to look for longer alternative paths #1525</li> <li>Fixed <code>JavaLocalPattern</code> not matching on Lollipop #1524</li> </ul> <p>Many thanks to @Armaxis, @elihart, @emartynov, @hmcgreevy-instil, @pyricau for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-beta-3 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-beta-2-2019-08-02","title":"Version 2.0 Beta 2 (2019-08-02)","text":"<ul> <li>Fixed Leak analysis failed: Object id not found in heap dump. #1516</li> <li>10x speed increase of hprof indexing on large heap dumps #1520</li> </ul> <p>Many thanks to @kolphi, @pyricau, @ZacSweers for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-beta-2 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-beta-1-2019-07-30","title":"Version 2.0 Beta 1 (2019-07-30)","text":"<ul> <li>New standalone library! Shark is the heap analyzer that powers LeakCanary 2, and it can run in any Java VM. It comes with a CLI: you can now run <code>shark-cli analyze-process com.example.myapp</code> from your computer.</li> <li>New Heap Explorer directly on device! Open a Heap Analysis in LeakCanary, tap the options menu and select \u201cHeap Explorer\u201d. This is still experimental and not very user friendly, contributions welcome!</li> <li>Large API rewrite to improve usability. If you used the alpha with a customized configuration, there are breaking changes. Of note: LeakSentry became AppWatcher, RefWatcher became ObjectWatcher, AndroidExcludedRefs became AndroidReferenceMatchers, AnalysisResultListener became OnHeapAnalyzedListener, AndroidLeakTraceInspectors became AndroidObjectInspectors.</li> <li>The entire API surface is now documented and the documentation is available on this website: see the LeakCanary API tab at the top.</li> <li>Removed the dependency on Android X. No more configuration issues! #1462</li> <li>Added Proguard rules for LeakCanary and ObjectWatcher. #1500</li> <li>Display LeakCanary version in the About screen. #1448</li> <li>Bug fixes, new reference matchers and object inspectors</li> </ul> <p>Many thanks to @arctouch-carlosottoboni, @jemaystermind, @kushagrakumar27, @pyricau, @snkashis for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-beta-1 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-alpha-3-2019-07-04","title":"Version 2.0 Alpha 3 (2019-07-04)","text":"<ul> <li>#1401 LeakCanary can now import all hprof files created from prior LeakCanary versions.</li> <li>#1414 New API: <code>RefWatcher.retainedInstances</code> which returns the instances that are currently considered retained.</li> <li>#1419 New APIs: <code>LeakCanary.Config.maxStoredHeapDumps</code> (default 7) and <code>LeakCanary.Config.requestWriteExternalStoragePermission</code> (default false). LeakCanary won\u2019t ask for the external storage permission anymore by default.</li> <li>#1338 API change: <code>LeakCanary.Config.exclusionsFactory</code> replaced with <code>LeakCanary.Config.knownReferences</code> (simpler use), <code>LeakCanary.Config.leakInspectors</code> and <code>LeakCanary.Config.labelers</code> merged into <code>LeakCanary.Config.leakTraceInspectors</code> which provides access to the entire leak trace as well as a new graph oriented API that replaces the low level hprof parser API.</li> <li>#1382 LeakCanary now disables automatic heap dumping when running in AndroidX UI tests.</li> <li>#1424 API rename: <code>RefWatcher.hasRetainedReferences</code> => <code>RefWatcher.hasRetainedInstances</code>, <code>RefWatcher.retainedReferenceCount</code> => <code>RefWatcher.retainedInstanceCount</code>, <code>RefWatcher.hasWatchedReferences</code> => <code>RefWatcher.hasWatchedInstances</code>, <code>RefWatcher.removeKeysRetainedBeforeHeapDump</code> => <code>RefWatcher.removeInstancesRetainedBeforeHeapDump</code>, <code>RefWatcher.clearWatchedReferences</code> => <code>RefWatcher.clearWatchedInstances</code>.</li> <li>#1432 #1438 #1440 New \u201cwon\u2019t fix\u201d leaks and leak trace inspectors</li> <li>#1374 #1364 #1366 #1417 #1399 #1416 #1407 #1427 #1385 Bug and crash fixes</li> </ul> <p>Many thanks to @1step2hell, @afollestad, @ansman, @bjdodson, @BraisGabin, @EBfVince, @jaredsburrows, @pforhan, @pyricau, @tellypresence, @wiyarmir for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-alpha-3 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-alpha-2-2019-05-21","title":"Version 2.0 Alpha 2 (2019-05-21)","text":"<ul> <li>#1040 Import and analyze hprof files from other devices</li> <li>#1344 Computing retained size</li> <li>#1325 New notification showing current count of retained instances</li> <li>#1079 \u201cExcluded\u201d leaks have been renamed to \u201cWon\u2019t fix\u201d leaks to clarify meaning.</li> <li>#1328 New leaks are called out in the UI.</li> <li>#1327 LeakSentry can be enabled / disabled and is automatically disabled in non debuggable builds.</li> <li>#1173 Experimental: now reporting leaks that only go through weak references (previously reported as \u201cno path to instance\u201d)</li> <li>#1339 Readded support for Thread name based exclusions</li> <li>#1312 Fixed bug causing LeakCanary to stop detecting leaks after the app is killed.</li> <li>#1310 #1313 #1314 #1340 #1337 Many API changes</li> <li>#1296 #1293 #1306 #1336 Fixed several crashes.</li> </ul> <p>Many thanks to @forrestbice, @Foso, @Goddchen, @marcosholgado, @orionlee, @pyricau, @satoshun, @ZacSweers for the contributions!</p> <p>For more details, see the 2.0-alpha-2 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-alpha-1-2019-04-23","title":"Version 2.0 Alpha 1 (2019-04-23)","text":"<ul> <li>New logo, thanks @flickator!</li> <li>Entirely rewritten to 100% Kotlin</li> <li>Multiple leaks detected in one analysis<ul> <li>The heap is dumped when the app goes in the background, or when a minimum of 5 leaks is reached in the foreground.</li> </ul> </li> <li>Leak grouping<ul> <li>Leaks that share similar causes are grouped in the UI.</li> <li>New screens to see the list of groups and each group.</li> <li>Improved leaktrace strings to highlight leak causes.</li> <li>Leaks can be shared to Stack Overflow</li> </ul> </li> <li>New library: LeakSentry.<ul> <li>Detects when objects are leaking and triggers LeakCanary</li> <li>Can be used independently in production, for instance to report the number of leaking instances on an OutOfMemoryError crash.</li> </ul> </li> <li>New heap parser<ul> <li>Uses 90% less memory and 6 times faster than the prior heap parser.</li> <li>Runs in the same process as the app on a low priority thread.</li> <li>No more dependency on Perflib and TroveJ. New dependency on Okio.</li> <li>The old parser is still available as <code>leakcanary-android-perflib</code> but will be removed after alpha.</li> </ul> </li> <li>Labelers can add any string content to leak elements</li> <li>0 code setup, just add the one debug dependency.</li> <li>Simpler configuration options</li> <li>Updated from support library to Android X</li> </ul> <p>Many thanks to @BraisGabin, @colinmarsch, @jrodbx, @flickator, @JakeWharton, @pyricau, @WhatsEmo for the contributions!</p> <p>For more details, see the 2.0-alpha-1 Milestone and the full diff.</p>"},{"location":"changelog/#version-163-2019-01-10","title":"Version 1.6.3 (2019-01-10)","text":"<ul> <li>#1163 Fixed leaks being incorrectly classified as \u201cno leak\u201d due to missed GC Roots.</li> <li>#1153 <code>LeakCanary.isInAnalyzerProcess</code> now correctly returns true in the analyzer process prior to any first leak (could be triggered by starting the leak result activity).</li> <li>#1158 Stopped enabling DisplayLeakActivity when not using DisplayLeakService.</li> <li>#1135 Fixed IndexOutOfBoundsException for leak traces of size 1.</li> <li>#1163 Keep \u201cno leak\u201d heap dumps.</li> </ul> <p>Many thanks to @KMaragh, @pyricau, @SebRut for the code contributions!</p> <p>For more details, see the 1.6.3 Milestone and the full diff.</p>"},{"location":"changelog/#version-162-2018-10-16","title":"Version 1.6.2 (2018-10-16)","text":"<ul> <li>#1067 Fixed TransactionTooLargeException crash (leak analysis would never complete).</li> <li>#1061 Detection of Fragment view leaks after Fragment#onDestroyView().</li> <li>#1076 Added the FOREGROUND_SERVICE permission for Android P.</li> <li>#1062 The LeakCanary toast now always shows correctly. It doesn\u2019t show if there is no activity in foreground.</li> <li>#1115 Reenabled the DisplayLeakActivity icon on fresh installs.</li> <li>#1100 Added nullability annotations to improve Kotlin support.</li> <li>Updates to excluded leaks (commits).</li> <li>Updates to reachability inspectors (commits).</li> </ul> <p>Many thanks to @fractalwrench, @ZacSweers, @Goddchen, @igokoro, @IlyaGulya, @JakeWharton, @javmarina, @jokermonn, @jrodbx, @Parseus, @pyricau, @scottkennedy for the code contributions!</p>"},{"location":"changelog/#public-api-changes","title":"Public API changes","text":"<ul> <li>Subclasses of <code>AbstractAnalysisResultService</code> should now override <code>onHeapAnalyzed(@NonNull AnalyzedHeap analyzedHeap)</code> instead of <code>onHeapAnalyzed(@NonNull HeapDump heapDump, @NonNull AnalysisResult result)</code></li> </ul> <p>For more details, see the 1.6.2 Milestone and the full diff.</p>"},{"location":"changelog/#version-161-2018-06-21","title":"Version 1.6.1 (2018-06-21)","text":"<ul> <li>#727 Improved leak analysis: LeakCanary now identifies and highlights the potential causes of the leak.</li> <li>#1011 We noticed that computing the retained heap size could take a long time, so it\u2019s now optional and off by default.</li> <li>#633 Support for detecting leaks in instrumentation tests (see the wiki).</li> <li>#985 Ability to convert leak traces into stack traces for easy remote reporting (see the wiki).</li> <li>#983 Support for watching destroyed Fragments.</li> <li>#846 LeakCanary now uses foreground services and displays a notification when the analysis is in progress. This also fixes crashes when analyzing in background on O+.</li> <li>The LeakCanary icon (to start to DisplayLeakActivity) is now hidden by default, and only enabled after the first leak is found.</li> <li>#775 Fixed crash when sharing heap dumps on O+ and added a dependency to the support-core-utils library.</li> <li>#930 DisplayLeakActivity has a responsive icon.</li> <li>#685 Stopped doing IO on main thread in DisplayLeakActivity (fixes StrictMode errors).</li> <li>#999 Updated HAHA to 2.0.4, which uses Trove4j as an external dependency (from jcenter) instead of rebundling it. This is to clarify licences (Apache v2 vs LGPL 2.1).</li> <li>Several bug and crash fixes.</li> </ul> <p>Many thanks to @AdityaAnand1, @alhah, @christxph, @csoon03, @daqi, @JakeWharton, @jankovd, @jrodbx, @kurtisnelson, @NightlyNexus, @pyricau, @SalvatoreT, @shmuelr, @tokou, @xueqiushi for the code contributions!</p> <p>Note: we made a 1.6 release but quickly followed up with 1.6.1 due to #1058.</p>"},{"location":"changelog/#public-api-changes_1","title":"Public API changes","text":"<ul> <li>The installed ref watcher singleton is now available via <code>LeakCanary.installedRefWatcher()</code></li> <li><code>AnalysisResult.leakTraceAsFakeException()</code> returns an exception that can be used to report and group leak traces to a tool like Bugsnag or Crashlytics.</li> <li>New <code>InstrumentationLeakDetector</code> and <code>FailTestOnLeakRunListener</code> APIs for detecting leaks in instrumentation tests.</li> <li>New <code>Reachability.Inspector</code> and <code>RefWatcherBuilder.stethoscopeClasses()</code> API to establish reachability and help identify leak causes.</li> <li>Watching activities can be disabled with <code>AndroidRefWatcherBuilder.watchActivities(false)</code>, watching fragments can be disabled with <code>AndroidRefWatcherBuilder.watchFragments(false)</code></li> <li><code>LeakCanary.setDisplayLeakActivityDirectoryProvider()</code> is deprecated and replaced with <code>LeakCanary.setLeakDirectoryProvider()</code></li> <li>New <code>RefWatcherBuilder.computeRetainedHeapSize()</code> API to enable the computing of the retained heap size (off by default).</li> </ul> <p>For more details, see the 1.6.1 Milestone and the full diff.</p>"},{"location":"changelog/#version-154-2017-09-22","title":"Version 1.5.4 (2017-09-22)","text":"<ul> <li>Restore Java 7 compatibility in leakcanary-watcher</li> </ul>"},{"location":"changelog/#version-153-2017-09-17","title":"Version 1.5.3 (2017-09-17)","text":"<ul> <li>Fix broken 1.5.2 build</li> <li>Convert leakcanary-watcher from Android library to Java library</li> <li>Disable finish animations in RequestStoragePermissionActivity</li> <li>Corrected README sample for Robolectric tests</li> </ul> <p>For more details, see the full diff.</p>"},{"location":"changelog/#version-152-2017-08-09","title":"Version 1.5.2 (2017-08-09)","text":"<ul> <li>New excluded leaks</li> <li>Move Leakcanary UI into leak analyzer process</li> <li>Ignore computing retained sizes for bitmaps on O+</li> <li>Add notification channel for persistent messages on O+</li> <li>Exclude permission activity from recents menu</li> <li>Updated README and sample for handling Robolectric tests</li> </ul> <p>For more details, see the full diff.</p>"},{"location":"changelog/#version-151-2017-04-25","title":"Version 1.5.1 (2017-04-25)","text":"<ul> <li>New excluded leaks</li> <li>Fix java.util.MissingFormatArgumentException in DisplayLeakService</li> <li>Separate task affinities for different apps</li> <li>Bump minSdk to 14</li> <li>Fix HahaHelper for O Preview</li> </ul> <p>For more details, see the full diff.</p>"},{"location":"changelog/#version-15-2016-09-28","title":"Version 1.5 (2016-09-28)","text":"<ul> <li>New excluded leaks</li> <li>Added <code>LeakCanary.isInAnalyzerProcess()</code> to the no-op jar</li> <li>Fixed several file access issues:<ul> <li>No more cleanup on startup, we rotate the heap dump files on every new heap dump.</li> <li>LeakCanary now falls back to the app directory until it can write to the external storage.</li> </ul> </li> <li>Leak notifications now each use a distinct notification instead of erasing each other.</li> <li>If LeakCanary can\u2019t perform a heap dump for any reason (e.g. analysis in progress, debugger attached), it retries later with an exponential backoff.</li> <li>Added confirmation dialog when user deletes all leaks.</li> <li>Replace the two LeakCanary configuration methods with a builder that provides more flexibility, see <code>LeakCanary.refWatcher()</code>.</li> </ul> <p>For more details, see the full diff.</p>"},{"location":"changelog/#public-api-changes_2","title":"Public API changes","text":"<ul> <li>New <code>HeapAnalyzer.findTrackedReferences()</code> method for headless analysis when you have no context on what leaked.</li> <li>Added <code>LeakCanary.isInAnalyzerProcess()</code> to the no-op jar</li> <li>Added <code>LeakCanary.refWatcher()</code> which returns an <code>AndroidRefWatcherBuilder</code> that extends <code>RefWatcherBuilder</code> and lets you fully customize the <code>RefWatcher</code> instance.</li> <li>Removed <code>LeakCanary.install(Application, Class)</code> and <code>LeakCanary.androidWatcher(Context, HeapDump.Listener, ExcludedRefs)</code>.</li> <li>Removed <code>R.integer.leak_canary_max_stored_leaks</code> and <code>R.integer.leak_canary_watch_delay_millis</code>, those can now be set via <code>LeakCanary.refWatcher()</code>.</li> <li>Updated the <code>LeakDirectoryProvider</code> API to centralize all file related responsibilities.</li> <li><code>RefWatcher</code> is now constructed with a <code>WatchExecutor</code> which executes a <code>Retryable</code>, instead of an <code>Executor</code> that executes a <code>Runnable</code>.</li> <li><code>HeapDumper.NO_DUMP</code> was renamed <code>HeapDumper.RETRY_LATER</code></li> </ul>"},{"location":"changelog/#version-14-2016-09-11","title":"Version 1.4 (2016-09-11)","text":"<ul> <li>Fix false negative where GC root is of type android.os.Binder #482</li> <li>Update HAHA to 2.0.3; clear compiler warnings #563</li> <li>Correct some mistakes in German translation #516</li> <li>Don\u2019t loop when storage permission denied #422</li> <li>Remove old references to \u201c__\u201d prefixed resources #477</li> <li>Fix permission crash for DisplayLeakActivity on M #382</li> <li>Fix NPE when thread name not found in heap dump #417</li> <li>Add version info to stacktrace #473</li> </ul>"},{"location":"changelog/#version-14-beta2-2016-03-23","title":"Version 1.4-beta2 (2016-03-23)","text":"<ul> <li>Add reason for ignoring to analysis result #365.</li> <li>Lower memory usage when parsing heap dumps on M #223.</li> <li>Fix NPE in LeakCanaryInternals.isInServiceProcess() #449.</li> <li>New ignored Android SDK leaks #297,#322.</li> <li>Use leakcanary-android-no-op in test builds #143.</li> <li>Fixes to allow LeakCanary to work with ProGuard #398.</li> <li>Optimize png assets #406.</li> <li>Fix delete button not working on error views #408.</li> <li>Add German translation #437.</li> </ul>"},{"location":"changelog/#version-14-beta1-2016-01-08","title":"Version 1.4-beta1 (2016-01-08)","text":"<ul> <li>Switched to HAHA 2.0.2 with uses Perflib instead of MAT under the hood #219. This fixes crashes and improves speed a lot.</li> <li>We can now parse Android M heap dumps #267, although there are still memory issues (see #223).</li> <li>Excluded leaks are now reported as well and available in the display leak activity.</li> <li>Added ProGuard configuration for #132.</li> <li>Many new ignored Android SDK leaks.</li> <li>Added excluded leaks to text report #119.</li> <li>Added LeakCanary SHA to text report #120.</li> <li>Added CanaryLog API to replace the logger: #201.</li> <li>Renamed all resources to begin with <code>leak_canary_</code> instead of <code>__leak_canary</code>#161</li> <li>No crash when heap dump fails #226.</li> <li>Add retained size to leak reports #162.</li> </ul>"},{"location":"changelog/#public-api-changes_3","title":"Public API changes","text":"<ul> <li>AnalysisResult.failure is now a <code>Throwable</code> instead of an <code>Exception</code>. Main goal is to catch and correctly report OOMs while parsing.</li> <li>Added ARRAY_ENTRY to LeakTraceElement.Type for references through array entries.</li> <li>Renamed <code>ExcludedRefs</code> fields.</li> <li>Each <code>ExcludedRef</code> entry can now be ignored entirely or \u201ckept only if no other path\u201d.</li> <li>Added support for ignoring all fields (static and non static) for a given class.</li> </ul>"},{"location":"changelog/#version-131-2015-05-16","title":"Version 1.3.1 (2015-05-16)","text":"<ul> <li>Heap dumps and analysis results are now saved on the sd card: #21.</li> <li><code>ExcludedRef</code> and <code>AndroidExcludedRefs</code> are customizable: #12 #73.</li> <li>7 new ignored Android SDK leaks: #1 #4 #32 #89 #82 #97.</li> <li>Fixed 3 crashes in LeakCanary: #37 #46 #66.</li> <li>Fixed StrictMode thread policy violations: #15.</li> <li>Updated <code>minSdkVersion</code> from <code>9</code> to <code>8</code>: #57.</li> <li>Added LeakCanary version name to <code>LeakCanary.leakInfo()</code>: #49.</li> <li><code>leakcanary-android-no-op</code> is lighter, it does not depend on <code>leakcanary-watcher</code> anymore, only 2 classes now: #74.</li> <li>Adding field state details to the text leak trace.</li> <li>A Toast is displayed while the heap dump is in progress to warn that the UI will freeze: #20. You can customize the toast by providing your own layout named <code>__leak_canary_heap_dump_toast.xml</code> (e.g. you could make it an empty layout).</li> <li>If the analysis fails, the result and heap dump are kept so that it can be reported to LeakCanary: #102.</li> <li>Update to HAHA 1.3 to fix a 2 crashes #3 46</li> </ul>"},{"location":"changelog/#public-api-changes_4","title":"Public API changes","text":"<ul> <li>When upgrading from 1.3 to 1.3.1, previously saved heap dumps will not be readable any more, but they won\u2019t be removed from the app directory. You should probably uninstall your app.</li> <li>Added <code>android.permission.WRITE_EXTERNAL_STORAGE</code> to <code>leakcanary-android</code> artifact.</li> <li><code>LeakCanary.androidWatcher()</code> parameter types have changed (+ExcludedRefs).</li> <li><code>LeakCanary.leakInfo()</code> parameter types have changed (+boolean)</li> <li><code>ExcludedRef</code> is now serializable and immutable, instances can be created using <code>ExcludedRef.Builder</code>.</li> <li><code>ExcludedRef</code> is available in <code>HeapDump</code></li> <li><code>AndroidExcludedRefs</code> is an enum, you can now pick the leaks you want to ignore in <code>AndroidExcludedRefs</code> by creating an <code>EnumSet</code> and calling <code>AndroidExcludedRefs.createBuilder()</code>.</li> <li><code>AndroidExcludedRefs.createAppDefaults()</code> & <code>AndroidExcludedRefs.createAndroidDefaults()</code> return a <code>ExcludedRef.Builder</code>.</li> <li><code>ExcludedRef</code> moved from <code>leakcanary-analyzer</code> to <code>leakcanary-watcher</code></li> </ul>"},{"location":"changelog/#version-13-2015-05-08","title":"Version 1.3 (2015-05-08)","text":"<p>Initial release.</p>"},{"location":"changelog/#dependencies","title":"Dependencies","text":""},{"location":"code_of_conduct/","title":"Open Source Code of Conduct","text":"<p>At Square, we are committed to contributing to the open source community and simplifying the process of releasing and managing open source software. We\u2019ve seen incredible support and enthusiasm from thousands of people who have already contributed to our projects\u200a\u2014\u200aand we want to ensure our community continues to be truly open for everyone.</p> <p>This code of conduct outlines our expectations for participants, as well as steps to reporting unacceptable behavior. We are committed to providing a welcoming and inspiring community for all and expect our code of conduct to be honored.</p> <p>Square\u2019s open source community strives to:</p> <ul> <li> <p>Be open: We invite anyone to participate in any aspect of our projects. Our community is open, and any responsibility can be carried by a contributor who demonstrates the required capacity and competence.</p> </li> <li> <p>Be considerate: People use our work, and we depend on the work of others. Consider users and colleagues before taking action. For example, changes to code, infrastructure, policy, and documentation may negatively impact others.</p> </li> <li> <p>Be respectful: We expect people to work together to resolve conflict, assume good intentions, and act with empathy. Do not turn disagreements into personal attacks.</p> </li> <li> <p>Be collaborative: Collaboration reduces redundancy and improves the quality of our work. We strive for transparency within our open source community, and we work closely with upstream developers and others in the free software community to coordinate our efforts.</p> </li> <li> <p>Be pragmatic: Questions are encouraged and should be asked early in the process to avoid problems later. Be thoughtful and considerate when seeking out the appropriate forum for your questions. Those who are asked should be responsive and helpful.</p> </li> <li> <p>Step down considerately: Members of every project come and go. When somebody leaves or disengages from the project, they should make it known and take the proper steps to ensure that others can pick up where they left off.</p> </li> </ul> <p>This code is not exhaustive or complete. It serves to distill our common understanding of a collaborative, shared environment, and goals. We expect it to be followed in spirit as much as in the letter.</p>"},{"location":"code_of_conduct/#diversity-statement","title":"Diversity Statement","text":"<p>We encourage everyone to participate and are committed to building a community for all. Although we may not be able to satisfy everyone, we all agree that everyone is equal.</p> <p>Whenever a participant has made a mistake, we expect them to take responsibility for it. If someone has been harmed or offended, it is our responsibility to listen carefully and respectfully, and do our best to right the wrong.</p> <p>Although this list cannot be exhaustive, we explicitly honor diversity in age, culture, ethnicity, gender identity or expression, language, national origin, political beliefs, profession, race, religion, sexual orientation, socioeconomic status, and technical ability. We will not tolerate discrimination based on any of the protected characteristics above, including participants with disabilities.</p>"},{"location":"code_of_conduct/#reporting-issues","title":"Reporting Issues","text":"<p>If you experience or witness unacceptable behavior\u200a\u2014\u200aor have any other concerns\u200a\u2014\u200aplease report it by emailing codeofconduct@squareup.com. For more details, please see our Reporting Guidelines below.</p>"},{"location":"code_of_conduct/#thanks","title":"Thanks","text":"<p>Some of the ideas and wording for the statements and guidelines above were based on work by the Twitter, Ubuntu, GDC, and Django communities. We are thankful for their work.</p>"},{"location":"code_of_conduct/#reporting-guide","title":"Reporting Guide","text":"<p>If you experience or witness unacceptable behavior\u200a\u2014\u200aor have any other concerns\u200a\u2014\u200aplease report it by emailing codeofconduct@squareup.com. All reports will be handled with discretion.</p> <p>In your report please include:</p> <ul> <li>Your contact information.</li> <li>Names (real, nicknames, or pseudonyms) of any individuals involved. If there are additional witnesses, please include them as well.</li> <li>Your account of what occurred, and if you believe the incident is ongoing. If there is a publicly available record (e.g. a mailing list archive or a public IRC logger), please include a link.</li> <li>Any additional information that may be helpful.</li> </ul> <p>After filing a report, a representative from the Square Code of Conduct committee will contact you personally. The committee will then review the incident, follow up with any additional questions, and make a decision as to how to respond.</p> <p>Anyone asked to stop unacceptable behavior is expected to comply immediately. If an individual engages in unacceptable behavior, the Square Code of Conduct committee may take any action they deem appropriate, up to and including a permanent ban from all of Square spaces without warning.</p>"},{"location":"dev-env/","title":"Dev Environment for LeakCanary contributors","text":""},{"location":"dev-env/#setup","title":"Setup","text":"<ul> <li>Download Android Studio.</li> <li>We use two spaces code indentation, use <code>SquareAndroid</code> code style settings from https://github.com/square/java-code-styles.</li> <li>Build with <code>./gradlew build</code>.</li> <li>Running the failing UI tests to confirm leak detection correctly fails UI tests: <code>./gradlew leakcanary-android-sample:connectedCheck</code>.</li> <li>Normal UI tests: <code>./gradlew leakcanary-android-core:connectedCheck</code>.</li> </ul>"},{"location":"dev-env/#static-code-analysis","title":"Static Code Analysis","text":"<ul> <li>LeakCanary uses Detekt for static Code analysis.</li> <li>Analyze the entire project with <code>./gradlew check</code> or particular modules with <code>./gradlew :module-name:check</code>. Detekt will fail the build if any ruleset violations are found. You should fix all issues before pushing the branch to remote.</li> <li>There\u2019s also a git pre-push hook that will run analysis automatically before pushing a branch to the remote. If there are any violations - it will prevent the push. Fix the issues!</li> <li>You can bypass the git hook though; Travis CI will still run checks and will fail if any violations are found. </li> <li>Detekt report will be printed in the console and saved to <code>/moduleDir/build/reports/</code>.</li> </ul>"},{"location":"dev-env/#deploying-locally","title":"Deploying locally","text":"<p>To deploy LeakCanary to your local maven repository, run the following command, changing the path to the path of your local repository:</p> <pre><code>./gradlew uploadArchives -PSNAPSHOT_REPOSITORY_URL=file:///Users/py/.m2/repository\n</code></pre> <p>Then add the SNAPSHOT dependency and <code>mavenLocal()</code> repository to your project:</p> <pre><code>dependencies {\n debugImplementation 'com.squareup.leakcanary:leakcanary-android:3.0-alpha-8-SNAPSHOT'\n}\n\nrepositories {\n mavenLocal()\n}\n</code></pre>"},{"location":"dev-env/#deploying-the-docs-locally","title":"Deploying the docs locally","text":"<p>Installing or updating the docs dependencies:</p> <pre><code>pip install --requirement docs/requirements.txt\n</code></pre> <p>Deploying locally</p> <pre><code>mkdocs serve\n</code></pre>"},{"location":"faq/","title":"FAQ","text":""},{"location":"faq/#can-a-leak-be-caused-by-the-android-sdk","title":"Can a leak be caused by the Android SDK?","text":"<p>Yes. There are a number of known memory leaks that have been fixed over time in AOSP as well as in manufacturer implementations. When such a leak occurs, there is little you can do as an app developer to fix it. For that reason, LeakCanary has a built-in list of known Android leaks to recognize, called Library Leaks (see Categorizing leaks).</p> <p>If you find a new one, please create an issue (choose \ud83e\udd16Leak in Android SDK / support library) and follow these steps:</p> <ol> <li>Provide the entire leak trace information (including metadata), and use backticks (`) for formatting.</li> <li>Read the AOSP source for that version of Android, and try to figure out why it happens. You can easily navigate through SDK versions by switching branches on the GitHub mirror: android/platform_frameworks_base.</li> <li>Check if it happens on the latest version of Android, and otherwise use blame to find when it was fixed.</li> <li>If it\u2019s still happening, build a simple repro case.</li> <li>File an issue on b.android.com with the leak trace and the repro case. Please remember to follow up the issue when there are new responses. b/176886060 is a good example of effective and respectful communication.</li> <li>Create a PR in LeakCanary to update AndroidReferenceMatchers. Optional: if you find a hack to clear that leak on previous versions of Android, feel free to document it.</li> </ol>"},{"location":"faq/#how-do-i-know-if-leakcanary-is-running","title":"How do I know if LeakCanary is running?","text":"<p>You can confirm that LeakCanary starts correctly by filtering on the LeakCanary tag in Logcat:</p> <pre><code>$ adb logcat | grep LeakCanary\n\nD/LeakCanary: Installing AppWatcher\n</code></pre> <p>If you do not see <code>Installing AppWatcher</code> in the logs, check your dependencies (<code>./gradlew app:dependencies</code>) and make sure LeakCanary is there.</p> <p>Note that LeakCanary is automatically disabled in tests (see LeakCanary test environment detection):</p> <pre><code>$ adb logcat | grep LeakCanary\n\nD/LeakCanary: Installing AppWatcher\nD/LeakCanary: JUnit detected in classpath, app is running tests => disabling heap dumping & analysis\nD/LeakCanary: Updated LeakCanary.config: Config(dumpHeap=false)\n</code></pre>"},{"location":"faq/#where-does-leakcanary-store-heap-dumps","title":"Where does LeakCanary store heap dumps?","text":"<p>The default behavior is to store heap dumps in a <code>leakcanary</code> folder under the app directory. If the app has been granted the <code>android.permission.WRITE_EXTERNAL_STORAGE</code> permission, then heap dumps will be stored in a <code>leakcanary-com.example</code> folder (where <code>com.example</code> is your app package name) under the <code>Download</code> folder of the external storage. If the app has not been granted the <code>android.permission.WRITE_EXTERNAL_STORAGE</code> permission but that permission is listed in <code>AndroidManifest.xml</code> then LeakCanary will show a notification that can be tapped to grant permission.</p>"},{"location":"faq/#how-can-i-dig-beyond-the-leak-trace","title":"How can I dig beyond the leak trace?","text":"<p>Sometimes the leak trace isn\u2019t enough and you need to dig into a heap dump with MAT or YourKit.</p> <ul> <li>Go to a heap analysis screen, click the overflow menu and select Share Heap Dump.</li> </ul> <p>Here\u2019s how you can find the leaking instance in the heap dump:</p> <ol> <li>Look for all instances of <code>leakcanary.KeyedWeakReference</code>.</li> <li>For each of these, look at the <code>key</code> field.</li> <li>Find the <code>KeyedWeakReference</code> that has a <code>key</code> field equal to the reference key reported by LeakCanary.</li> <li>The <code>referent</code> field of that <code>KeyedWeakReference</code> is your leaking object.</li> <li>From then on, the matter is in your hands. A good start is to look at the shortest path to GC Roots (excluding weak references).</li> </ol>"},{"location":"faq/#how-does-leakcanary-get-installed-by-only-adding-a-dependency","title":"How does LeakCanary get installed by only adding a dependency?","text":"<p>On Android, content providers are created after the Application instance is created but before Application.onCreate() is called. The <code>leakcanary-object-watcher-android</code> artifact has a non exported ContentProvider defined in its <code>AndroidManifest.xml</code> file. When that ContentProvider is installed, it adds activity and fragment lifecycle listeners to the application.</p>"},{"location":"faq/#how-many-methods-does-leakcanary-add","title":"How many methods does LeakCanary add?","text":"<p>0. LeakCanary is a debug only library.</p>"},{"location":"faq/#how-do-i-use-the-snapshot-version","title":"How do I use the SNAPSHOT version?","text":"<p>Update your dependencies to the latest SNAPSHOT (see build.gradle):</p> <pre><code>dependencies {\n debugImplementation 'com.squareup.leakcanary:leakcanary-android:3.0-alpha-8-SNAPSHOT'\n}\n</code></pre> <p>Add Sonatype\u2019s <code>snapshots</code> repository:</p> <pre><code>repositories {\n mavenCentral()\n maven {\n url 'https://s01.oss.sonatype.org/content/repositories/snapshots/'\n }\n}\n</code></pre> <p>Status of the snapshot build: </p>"},{"location":"faq/#whos-behind-leakcanary","title":"Who\u2019s behind LeakCanary?","text":"<p>LeakCanary was created and open sourced by @pyricau, with many contributions from the community.</p>"},{"location":"faq/#why-is-it-called-leakcanary","title":"Why is it called LeakCanary?","text":"<p>The name LeakCanary is a reference to the expression canary in a coal mine, because LeakCanary is a sentinel used to detect risks by providing advance warning of a danger. Props to @edenman for suggesting it!</p>"},{"location":"faq/#who-made-the-logo","title":"Who made the logo?","text":"<ul> <li>@pyricau quickly made the first version of the logo. It was based on cliparts from Android Asset Studio, mixed with the selection from a photo of a Canary. The exclamation mark means danger, the shield stands for protection, and the bird, well, is a canary.</li> <li>@romainguy turned the ugly logo into a nice vector asset.</li> <li>@flickator designed a much nicer logo for LeakCanary 2.0!</li> </ul>"},{"location":"fundamentals-fixing-a-memory-leak/","title":"Fixing a memory leak","text":"<p>A memory leak is a programming error that causes an application to keep a reference to an object that is no longer needed. Somewhere in the code, there\u2019s a reference that should have been cleared and wasn\u2019t.</p> <p>Follow these 4 steps to fix memory leaks:</p> <ol> <li>Find the leak trace.</li> <li>Narrow down the suspect references.</li> <li>Find the reference causing the leak.</li> <li>Fix the leak.</li> </ol> <p>LeakCanary helps you with the first two steps. The last two steps are up to you!</p>"},{"location":"fundamentals-fixing-a-memory-leak/#1-find-the-leak-trace","title":"1. Find the leak trace","text":"<p>A leak trace is a shorter name for the best strong reference path from garbage collection roots to the retained object, ie the path of references that is holding an object in memory, therefore preventing it from being garbage collected.</p> <p>For example, let\u2019s store a helper singleton in a static field:</p> <pre><code>class Helper {\n}\n\nclass Utils {\npublic static Helper helper = new Helper();\n}\n</code></pre> <p>Let\u2019s tell LeakCanary that the singleton instance is expected to be garbage collected:</p> <pre><code>AppWatcher.objectWatcher.watch(Utils.helper)\n</code></pre> <p>The leak trace for that singleton looks like this:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: Local variable in native code\n\u2502\n\u251c\u2500 dalvik.system.PathClassLoader instance\n\u2502 \u2193 PathClassLoader.runtimeInternalObjects\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[43]\n\u251c\u2500 com.example.Utils class\n\u2502 \u2193 static Utils.helper\n\u2570\u2192 java.example.Helper\n</code></pre> <p>Let\u2019s break it down! At the top, a <code>PathClassLoader</code> instance is held by a garbage collection (GC) root, more specifically a local variable in native code. GC roots are special objects that are always reachable, ie they cannot be garbage collected. There are 4 main types of GC root:</p> <ul> <li>Local variables, which belong to the stack of a thread.</li> <li>Instances of active Java threads.</li> <li>System Classes, which never unload.</li> <li>Native references, which are controlled by native code.</li> </ul> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: Local variable in native code\n\u2502\n\u251c\u2500 dalvik.system.PathClassLoader instance\n</code></pre> <p>A line starting with <code>\u251c\u2500</code> represents a Java object (either a class, an object array or an instance), and a line starting with <code>\u2502 \u2193</code> represents a reference to the Java object on the next line.</p> <p><code>PathClassLoader</code> has a <code>runtimeInternalObjects</code> field that is a reference to an array of <code>Object</code>:</p> <pre><code>\u251c\u2500 dalvik.system.PathClassLoader instance\n\u2502 \u2193 PathClassLoader.runtimeInternalObjects\n\u251c\u2500 java.lang.Object[] array\n</code></pre> <p>The element at position 43 in that array of <code>Object</code> is a reference to the <code>Utils</code> class.</p> <pre><code>\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[43]\n\u251c\u2500 com.example.Utils class\n</code></pre> <p>A line starting with <code>\u2570\u2192</code> represents the leaking object, ie the object that is passed to AppWatcher.objectWatcher.watch().</p> <p>The <code>Utils</code> class has a static <code>helper</code> field which is a reference to the leaking object, which is the Helper singleton instance:</p> <pre><code>\u251c\u2500 com.example.Utils class\n\u2502 \u2193 static Utils.helper\n\u2570\u2192 java.example.Helper instance\n</code></pre>"},{"location":"fundamentals-fixing-a-memory-leak/#2-narrow-down-the-suspect-references","title":"2. Narrow down the suspect references","text":"<p>A leak trace is a path of references. Initially, all references in that path are suspected of causing the leak, but LeakCanary can automatically narrow down the suspect references. To understand what that means, let\u2019s go through that process manually.</p> <p>Here\u2019s an example of bad Android code:</p> <pre><code>class ExampleApplication : Application() {\nval leakedViews = mutableListOf<View>()\n}\n\nclass MainActivity : Activity() {\noverride fun onCreate(savedInstanceState: Bundle?) {\nsuper.onCreate(savedInstanceState)\nsetContentView(R.layout.main_activity)\n\nval textView = findViewById<View>(R.id.helper_text)\n\nval app = application as ExampleApplication\n// This creates a leak, What a Terrible Failure!\napp.leakedViews.add(textView)\n}\n}\n</code></pre> <p>LeakCanary produces a leak trace that looks like this:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 android.provider.FontsContract class\n\u2502 \u2193 static FontsContract.sContext\n\u251c\u2500 com.example.leakcanary.ExampleApplication instance\n\u2502 \u2193 ExampleApplication.leakedViews\n\u251c\u2500 java.util.ArrayList instance\n\u2502 \u2193 ArrayList.elementData\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[0]\n\u251c\u2500 android.widget.TextView instance\n\u2502 \u2193 TextView.mContext\n\u2570\u2192 com.example.leakcanary.MainActivity instance\n</code></pre> <p>Here\u2019s how to read that leak trace:</p> <p>The <code>FontsContract</code> class is a system class (see <code>GC Root: System class</code>) and has an <code>sContext</code> static field which references an <code>ExampleApplication</code> instance which has a <code>leakedViews</code> field which references an <code>ArrayList</code> instance which references an array (the array backing the array list implementation) which has an element that references a <code>TextView</code> which has an <code>mContext</code> field which references a destroyed instance of <code>MainActivity</code>.</p> <p>LeakCanary highlights all references suspected of causing this leak using ~~~ underlines. Initially, all references are suspect:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 android.provider.FontsContract class\n\u2502 \u2193 static FontsContract.sContext\n\u2502 ~~~~~~~~\n\u251c\u2500 com.example.leakcanary.ExampleApplication instance\n\u2502 Leaking: NO (Application is a singleton)\n\u2502 \u2193 ExampleApplication.leakedViews\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.util.ArrayList instance\n\u2502 \u2193 ArrayList.elementData\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[0]\n\u2502 ~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 \u2193 TextView.mContext\n\u2502 ~~~~~~~~\n\u2570\u2192 com.example.leakcanary.MainActivity instance\n</code></pre> <p>Then, LeakCanary makes deductions about the state and the lifecycle of the objects in the leak trace. In an Android app the <code>Application</code> instance is a singleton that is never garbage collected, so it\u2019s never leaking (<code>Leaking: NO (Application is a singleton)</code>). From that, LeakCanary concludes that the leak is not caused by <code>FontsContract.sContext</code> (removal of corresponding <code>~~~</code>). Here\u2019s the updated leak trace:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 android.provider.FontsContract class\n\u2502 \u2193 static FontsContract.sContext\n\u251c\u2500 com.example.leakcanary.ExampleApplication instance\n\u2502 Leaking: NO (Application is a singleton)\n\u2502 \u2193 ExampleApplication.leakedViews\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.util.ArrayList instance\n\u2502 \u2193 ArrayList.elementData\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[0]\n\u2502 ~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 \u2193 TextView.mContext\n\u2502 ~~~~~~~~\n\u2570\u2192 com.example.leakcanary.MainActivity instance\n</code></pre> <p>The <code>TextView</code> instance references the destroyed <code>MainActivity</code> instance via it\u2019s <code>mContext</code> field. Views should not survive the lifecycle of their context, so LeakCanary knows that this <code>TextView</code> instance is leaking (<code>Leaking: YES (View.mContext references a destroyed activity)</code>), and therefore that the leak is not caused by <code>TextView.mContext</code> (removal of corresponding <code>~~~</code>). Here\u2019s the updated leak trace:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 android.provider.FontsContract class\n\u2502 \u2193 static FontsContract.sContext\n\u251c\u2500 com.example.leakcanary.ExampleApplication instance\n\u2502 Leaking: NO (Application is a singleton)\n\u2502 \u2193 ExampleApplication.leakedViews\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.util.ArrayList instance\n\u2502 \u2193 ArrayList.elementData\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[0]\n\u2502 ~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 Leaking: YES (View.mContext references a destroyed activity)\n\u2502 \u2193 TextView.mContext\n\u2570\u2192 com.example.leakcanary.MainActivity instance\n</code></pre> <p>To summarize, LeakCanary inspects the state of objects in the leak trace to figure out if these objects are leaking (<code>Leaking: YES</code> vs <code>Leaking: NO</code>), and leverages that information to narrow down the suspect references. You can provide custom <code>ObjectInspector</code> implementations to improve how LeakCanary works in your codebase (see Identifying leaking objects and labeling objects).</p>"},{"location":"fundamentals-fixing-a-memory-leak/#3-find-the-reference-causing-the-leak","title":"3. Find the reference causing the leak","text":"<p>In the previous example, LeakCanary narrowed down the suspect references to <code>ExampleApplication.leakedViews</code>, <code>ArrayList.elementData</code> and <code>Object[].[0]</code>:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 android.provider.FontsContract class\n\u2502 \u2193 static FontsContract.sContext\n\u251c\u2500 com.example.leakcanary.ExampleApplication instance\n\u2502 Leaking: NO (Application is a singleton)\n\u2502 \u2193 ExampleApplication.leakedViews\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.util.ArrayList instance\n\u2502 \u2193 ArrayList.elementData\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[0]\n\u2502 ~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 Leaking: YES (View.mContext references a destroyed activity)\n\u2502 \u2193 TextView.mContext\n\u2570\u2192 com.example.leakcanary.MainActivity instance\n</code></pre> <p><code>ArrayList.elementData</code> and <code>Object[].[0]</code> are implementation details of <code>ArrayList</code>, and it\u2019s unlikely that there\u2019s a bug in the <code>ArrayList</code> implementation, so the reference causing the leak is the only remaining reference: <code>ExampleApplication.leakedViews</code>.</p>"},{"location":"fundamentals-fixing-a-memory-leak/#4-fix-the-leak","title":"4. Fix the leak","text":"<p>Once you find the reference causing the leak, you need to figure out what that reference is about, when it should have been cleared and why it hasn\u2019t been. Sometimes it\u2019s obvious, like in the previous example. Sometimes you need more information to figure it out. You can add labels, or explore the hprof directly (see How can I dig beyond the leak trace?).</p> <p>Warning</p> <p>Memory leaks cannot be fixed by replacing strong references with weak references. It\u2019s a common solution when attempting to quickly address memory issues, however it never works. The bugs that were causing references to be kept longer than necessary are still there. On top of that, it creates more bugs as some objects will now be garbage collected sooner than they should. It also makes the code much harder to maintain.</p> <p>What\u2019s next? Customize LeakCanary to your needs with code recipes!</p>"},{"location":"fundamentals-how-leakcanary-works/","title":"How LeakCanary works","text":"<p>Once LeakCanary is installed, it automatically detects and report memory leaks, in 4 steps:</p> <ol> <li>Detecting retained objects.</li> <li>Dumping the heap.</li> <li>Analyzing the heap.</li> <li>Categorizing leaks.</li> </ol>"},{"location":"fundamentals-how-leakcanary-works/#1-detecting-retained-objects","title":"1. Detecting retained objects","text":"<p>LeakCanary hooks into the Android lifecycle to automatically detect when activities and fragments are destroyed and should be garbage collected. These destroyed objects are passed to an <code>ObjectWatcher</code>, which holds weak references to them. LeakCanary automatically detects leaks for the following objects:</p> <ul> <li>destroyed <code>Activity</code> instances</li> <li>destroyed <code>Fragment</code> instances</li> <li>destroyed fragment <code>View</code> instances</li> <li>cleared <code>ViewModel</code> instances</li> </ul> <p>You can watch any objects that is no longer needed, for example a detached view or a destroyed presenter:</p> <pre><code>AppWatcher.objectWatcher.watch(myDetachedView, \"View was detached\")\n</code></pre> <p>If the weak reference held by <code>ObjectWatcher</code> isn\u2019t cleared after waiting 5 seconds and running garbage collection, the watched object is considered retained, and potentially leaking. LeakCanary logs this to Logcat:</p> <pre><code>D LeakCanary: Watching instance of com.example.leakcanary.MainActivity\n (Activity received Activity#onDestroy() callback) \n\n... 5 seconds later ...\n\nD LeakCanary: Scheduling check for retained objects because found new object\n retained\n</code></pre> <p>LeakCanary waits for the count of retained objects to reach a threshold before dumping the heap, and displays a notification with the latest count.</p> <p> Figure 1. LeakCanary found 4 retained objects.</p> <pre><code>D LeakCanary: Rescheduling check for retained objects in 2000ms because found\n only 4 retained objects (< 5 while app visible)\n</code></pre> <p>Info</p> <p>The default threshold is 5 retained objects when the app is visible, and 1 retained object when the app is not visible. If you see the retained objects notification and then put the app in background (for example by pressing the Home button), then the threshold changes from 5 to 1 and LeakCanary dumps the heap within 5 seconds. Tapping the notification forces LeakCanary to dump the heap immediately.</p>"},{"location":"fundamentals-how-leakcanary-works/#2-dumping-the-heap","title":"2. Dumping the heap","text":"<p>When the count of retained objects reaches a threshold, LeakCanary dumps the Java heap into a <code>.hprof</code> file (a heap dump) stored onto the Android file system (see Where does LeakCanary store heap dumps?). Dumping the heap freezes the app for a short amount of time, during which LeakCanary displays the following toast:</p> <p> Figure 2. LeakCanary shows a toast while dumping the heap.</p>"},{"location":"fundamentals-how-leakcanary-works/#3-analyzing-the-heap","title":"3. Analyzing the heap","text":"<p>LeakCanary parses the <code>.hprof</code> file using Shark and locates the retained objects in that heap dump.</p> <p> Figure 3. LeakCanary finds retained objects in the heap dump.</p> <p>For each retained object, LeakCanary finds the path of references that prevents that retained object from being garbage collected: its leak trace. You will learn to analyze a leak trace in the next section: Fixing a memory leak.</p> <p> Figure 4. LeakCanary computes the leak trace for each retained object.</p> <p>When the analysis is done, LeakCanary displays a notification with a summary, and also prints the result in Logcat. Notice below how the 4 retained objects are grouped as 2 distinct leaks. LeakCanary creates a signature for each leak trace, and groups together leaks that have the same signature, ie leaks that are caused by the same bug.</p> <p> Figure 5. The 4 leak traces turned into 2 distinct leak signatures.</p> <pre><code>====================================\nHEAP ANALYSIS RESULT\n====================================\n2 APPLICATION LEAKS\n\nDisplaying only 1 leak trace out of 2 with the same signature\nSignature: ce9dee3a1feb859fd3b3a9ff51e3ddfd8efbc6\n\u252c\u2500\u2500\u2500\n\u2502 GC Root: Local variable in native code\n\u2502\n...\n</code></pre> <p>Tapping the notification starts an activity that provides more details. Come back to it again later by tapping the LeakCanary launcher icon:</p> <p> Figure 6. LeakCanary adds a launcher icon for each app it\u2019s installed in.</p> <p>Each row corresponds to a group of leaks with the same signature. LeakCanary marks a row as New the first time the app triggers a leak with that signature.</p> <p> Figure 7. The 4 leaks grouped into 2 rows, one for each distinct leak signature.</p> <p>Tap on a leak to open up a screen with the leak trace. You can toggle between retained objects and their leak trace via a drop down.</p> <p> Figure 8. A screen showing 3 leaks grouped by their common leak signature.</p> <p>The leak signature is the hash of the concatenation of each reference suspected to cause the leak, ie each reference displayed with a red underline:</p> <p> Figure 9. A leak trace with 3 suspect references.</p> <p>These same suspicious references are underlined with <code>~~~</code> when the leak trace is shared as text:</p> <pre><code>...\n\u2502 \n\u251c\u2500 com.example.leakcanary.LeakingSingleton class\n\u2502 Leaking: NO (a class is never leaking)\n\u2502 \u2193 static LeakingSingleton.leakedViews\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.util.ArrayList instance\n\u2502 Leaking: UNKNOWN\n\u2502 \u2193 ArrayList.elementData\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.lang.Object[] array\n\u2502 Leaking: UNKNOWN\n\u2502 \u2193 Object[].[0]\n\u2502 ~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 Leaking: YES (View.mContext references a destroyed activity)\n...\n</code></pre> <p>In the example above, the signature of the leak would be computed as:</p> <pre><code>val leakSignature = sha1Hash(\n\"com.example.leakcanary.LeakingSingleton.leakedView\" +\n\"java.util.ArrayList.elementData\" +\n\"java.lang.Object[].[x]\"\n)\nprintln(leakSignature)\n// dbfa277d7e5624792e8b60bc950cd164190a11aa\n</code></pre>"},{"location":"fundamentals-how-leakcanary-works/#4-categorizing-leaks","title":"4. Categorizing leaks","text":"<p>LeakCanary separates the leaks it finds in your app into two categories: Application Leaks and Library Leaks. A Library Leak is a leak caused by a known bug in 3rd party code that you do not have control over. This leak is impacting your application, but unfortunately fixing it may not be in your control so LeakCanary separates it out.</p> <p>The two categories are separated in the result printed in Logcat:</p> <pre><code>====================================\nHEAP ANALYSIS RESULT\n====================================\n0 APPLICATION LEAKS\n\n====================================\n1 LIBRARY LEAK\n\n...\n\u252c\u2500\u2500\u2500\n\u2502 GC Root: Local variable in native code\n\u2502\n...\n</code></pre> <p>LeakCanary marks a row as a Library Leak in its list of leaks:</p> <p> Figure 10. LeakCanary found a Library Leak.</p> <p>LeakCanary ships with a database of known leaks, which it recognizes by pattern matching on reference names. For example:</p> <pre><code>Leak pattern: instance field android.app.Activity$1#this$0\nDescription: Android Q added a new IRequestFinishCallback$Stub class [...]\n\u252c\u2500\u2500\u2500\n\u2502 GC Root: Global variable in native code\n\u2502\n\u251c\u2500 android.app.Activity$1 instance\n\u2502 Leaking: UNKNOWN\n\u2502 Anonymous subclass of android.app.IRequestFinishCallback$Stub\n\u2502 \u2193 Activity$1.this$0\n\u2502 ~~~~~~\n\u2570\u2192 com.example.MainActivity instance\n</code></pre> <p>What did I do to cause this leak?</p> <p>Nothing wrong! You used an API the way it was intended but the implementation has a bug that is causing this leak.</p> <p>Is there anything I can do to prevent it?</p> <p>Maybe! Some Library Leaks can be fixed using reflection, others by exercising a code path that makes the leak go away. This type of fix tends to be hacky, so beware! Your best option might be to find the bug report or file one, and insist that the bug gets fixed.</p> <p>Since I can\u2019t do much about this leak, is there a way I can ask LeakCanary to ignore it?</p> <p>There\u2019s no way for LeakCanary to know whether a leak is a Library Leak prior to dumping the heap and analyzing it. If LeakCanary didn\u2019t show the result notification when a Library Leak is found then you\u2019d start wondering what happened to the LeakCanary analysis after the dumping toast.</p> <p>You can see the full list of known leaks in the AndroidReferenceMatchers class. If you find an Android SDK leak that isn\u2019t recognized, please report it. You can also customize the list of known Library Leaks.</p> <p>What\u2019s next? Learn how to fix a memory leak!</p>"},{"location":"fundamentals/","title":"Introduction","text":"<p>The fundamentals describe how LeakCanary works and how to use it to detect and fix memory leaks. This documentation is designed to help developers of all levels, so please don\u2019t hesitate to report any confusing section.</p>"},{"location":"fundamentals/#what-is-a-memory-leak","title":"What is a memory leak?","text":"<p>In a Java based runtime, a memory leak is a programming error that causes an application to keep a reference to an object that is no longer needed. As a result, the memory allocated for that object cannot be reclaimed.</p> <p>For example, an Android <code>Activity</code> instance is no longer needed after its <code>onDestroy()</code> method is called, and storing a reference to that instance in a static field prevents it from being garbage collected.</p>"},{"location":"fundamentals/#common-causes-for-memory-leaks","title":"Common causes for memory leaks","text":"<p>Most memory leaks are caused by bugs related to the lifecycle of objects. Here are a few common Android mistakes:</p> <ul> <li>Adding a <code>Fragment</code> instance to the backstack without clearing that Fragment\u2019s view fields in <code>Fragment.onDestroyView()</code> (more details in this StackOverflow answer).</li> <li>Storing an <code>Activity</code> instance as a <code>Context</code> field in an object that survives activity recreation due to configuration changes.</li> <li>Registering a listener, broadcast receiver or RxJava subscription which references an object with lifecycle, and forgetting to unregister when the lifecycle reaches its end.</li> </ul>"},{"location":"fundamentals/#why-should-i-use-leakcanary","title":"Why should I use LeakCanary?","text":"<p>Memory leaks are very common in Android apps. As small memory leaks accumulate, memory usage grows, the Garbage Collector (GC) runs more frequently and consumes more CPU, causing jank, UI freezes and Application Not Responding (ANR) reports, eventually leading to an OutOfMemoryError (OOME) crash. LeakCanary will help you find and fix these memory leaks during development. When Square engineers first enabled LeakCanary in the Square Point Of Sale app, they were able to fix several leaks and reduced the OOM crash rate by 94%.</p> <p>Info</p> <p>Your crash reporting tool might not correctly report OOMEs. When memory is low because of memory leak accumulation, an OOM can be thrown from anywhere in the app code, which means that every OOM has a different stacktrace. So instead of one crash entry with a 1000 crashes, OOMs get reported as 1000 distinct crashes and hide in the long tail of low occurring crashes.</p> <p>What\u2019s next? Learn how LeakCanary works!</p>"},{"location":"getting_started/","title":"Getting started","text":"<p>To use LeakCanary, add the <code>leakcanary-android</code> dependency to your app\u2019s <code>build.gradle</code> file:</p> <pre><code>dependencies {\n// debugImplementation because LeakCanary should only run in debug builds.\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'\n}\n</code></pre> <p>That\u2019s it, there is no code change needed!</p> <p>Confirm that LeakCanary is running on startup by filtering on the <code>LeakCanary</code> tag in Logcat:</p> <pre><code>D LeakCanary: LeakCanary is running and ready to detect leaks\n</code></pre> <p>Info</p> <p>LeakCanary automatically detects leaks of the following objects:</p> <ul> <li>destroyed <code>Activity</code> instances</li> <li>destroyed <code>Fragment</code> instances</li> <li>destroyed fragment <code>View</code> instances</li> <li>cleared <code>ViewModel</code> instances</li> <li>destroyed <code>Service</code> instance</li> </ul> <p>What\u2019s next? Learn the Fundamentals!</p>"},{"location":"how_to_help/","title":"How to help","text":"<p>\ud83d\ude4f\ud83d\ude4f\ud83d\ude4f</p> <p>LeakCanary is maintained by volunteers. Your help is welcome and will benefit the entire Android community!</p> <p>Here\u2019s how you can help:</p> <ul> <li>Contribute to Help Wanted issues.</li> <li>Answer StackOverflow questions.</li> <li>Provide feedback on pull requests.</li> <li>Contribute code by forking the repository on GitHub and sending a pull request. Please read Dev Environment for LeakCanary contributors. When submitting code, please make every effort to follow existing conventions and style in order to keep the code as readable as possible.</li> </ul>"},{"location":"leakcanary-for-releases/","title":"LeakCanary for releases","text":""},{"location":"leakcanary-for-releases/#leakcanary-for-releases","title":"LeakCanary for releases","text":"<p>Fixing leaks found in debug builds helps reduce <code>Application Not Responding</code> freezes and <code>OutfOfMemoryError</code> error crashes, but only scratches the surface of all the leaks that can happen. For the leaks that are found in debug builds, it\u2019s hard to determine which leaks to fix first.</p> <p>This situation is very similar to debug crashes, where we are often unable to make an accurate assessment of their future impact in a production environment nor find all crashes that will happen in production. For crashes, apps typically monitor a crash rate by having a release crash reporting pipeline, with counts to prioritize fixes.</p> <p>LeakCanary for releases exposes APIs to run a heap analysis in release builds, in production.</p> <p>Danger</p> <p>Everything about this is experimental. Running a heap analysis in production is not a very common thing to do, and we\u2019re still learning and experimenting with this. Also, both the artifact name and the APIs may change.</p>"},{"location":"leakcanary-for-releases/#getting-started","title":"Getting started","text":"<p>LeakCanary provides an artifact dedicated to detecting leaks in release builds:</p> <pre><code>dependencies {\n// LeakCanary for releases\nreleaseImplementation 'com.squareup.leakcanary:leakcanary-android-release:2.14'\n// Optional: detect retained objects. This helps but is not required.\nreleaseImplementation 'com.squareup.leakcanary:leakcanary-object-watcher-android:2.14'\n}\n</code></pre> <p>Here\u2019s a code example that runs a heap analysis when the screen is turned off or the app enters background, checking first if a Firebase Remote Config flag is turned on, and uploading the result to Bugsnag:</p> <pre><code>import android.os.Process.THREAD_PRIORITY_BACKGROUND\nimport java.util.concurrent.Executors\nimport kotlin.concurrent.thread\nimport leakcanary.BackgroundTrigger\nimport leakcanary.HeapAnalysisClient\nimport leakcanary.HeapAnalysisConfig\nimport leakcanary.HeapAnalysisInterceptor\nimport leakcanary.HeapAnalysisInterceptor.Chain\nimport leakcanary.HeapAnalysisJob\nimport leakcanary.HeapAnalysisJob.Result.Done\nimport leakcanary.ScreenOffTrigger\n\nclass ReleaseExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\n\n// Delete any remaining heap dump (if we crashed)\nanalysisExecutor.execute {\nanalysisClient.deleteHeapDumpFiles()\n}\n\n// Starts heap analysis on background importance\nBackgroundTrigger(\napplication = this,\nanalysisClient = analysisClient,\nanalysisExecutor = analysisExecutor,\nanalysisCallback = analysisCallback\n).start()\n\n// Starts heap analysis when screen off\nScreenOffTrigger(\napplication = this,\nanalysisClient = analysisClient,\nanalysisExecutor = analysisExecutor,\nanalysisCallback = analysisCallback\n).start()\n}\n\n/**\n * Call this to trigger heap analysis manually, e.g. from\n * a help button.\n *\n * This method returns a `HeapAnalysisJob` on which you can\n * call `HeapAnalysisJob.cancel()` at any time.\n */\nfun triggerHeapAnalysisNow(): HeapAnalysisJob {\nval job = analysisClient.newJob()\nanalysisExecutor.execute {\nval result = job.execute()\nanalysisCallback(result)\n}\nreturn job\n}\n\nprivate val analysisClient by lazy {\nHeapAnalysisClient(\n// Use private app storage. cacheDir is never backed up which is important.\nheapDumpDirectoryProvider = { cacheDir },\n// stripHeapDump: remove all user data from hprof before analysis.\nconfig = HeapAnalysisConfig(stripHeapDump = true),\n// Default interceptors may cancel analysis for several other reasons.\ninterceptors = listOf(flagInterceptor) + HeapAnalysisClient.defaultInterceptors(this)\n)\n}\n\n// Cancels heap analysis if \"heap_analysis_flag\" is false.\nprivate val flagInterceptor = object : HeapAnalysisInterceptor {\nval remoteConfig by lazy { FirebaseRemoteConfig.getInstance() }\n\noverride fun intercept(chain: Chain): HeapAnalysisJob.Result {\nif (remoteConfig.getBoolean(\"heap_analysis_flag\")) {\nchain.job.cancel(\"heap_analysis_flag false\")\n}\nreturn chain.proceed()\n}\n}\n\nprivate val analysisExecutor = Executors.newSingleThreadExecutor {\nthread(start = false, name = \"Heap analysis executor\") {\nandroid.os.Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND)\nit.run()\n}\n}\n\nprivate val analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result ->\nif (result is Done) {\nuploader.upload(result.analysis)\n}\n}\n\nprivate val uploader by lazy {\nBugsnagLeakUploader(this@ReleaseExampleApplication)\n}\n}\n</code></pre> <p>Here\u2019s the <code>BugsnagLeakUploader</code>:</p> <pre><code>import android.app.Application\nimport com.bugsnag.android.Bugsnag\nimport com.bugsnag.android.Configuration\nimport com.bugsnag.android.ErrorTypes\nimport com.bugsnag.android.Event\nimport com.bugsnag.android.ThreadSendPolicy\nimport shark.HeapAnalysis\nimport shark.HeapAnalysisFailure\nimport shark.HeapAnalysisSuccess\nimport shark.Leak\nimport shark.LeakTrace\nimport shark.LeakTraceReference\nimport shark.LibraryLeak\n\nclass BugsnagLeakUploader(applicationContext: Application) {\n\nprivate val bugsnagClient = Bugsnag.start(\napplicationContext,\nConfiguration(\"YOUR_BUGSNAG_API_KEY\").apply {\nenabledErrorTypes = ErrorTypes(\nanrs = false,\nndkCrashes = false,\nunhandledExceptions = false,\nunhandledRejections = false\n)\nsendThreads = ThreadSendPolicy.NEVER\n}\n)\n\nfun upload(heapAnalysis: HeapAnalysis) {\nwhen (heapAnalysis) {\nis HeapAnalysisSuccess -> {\nval allLeakTraces = heapAnalysis\n.allLeaks\n.toList()\n.flatMap { leak ->\nleak.leakTraces.map { leakTrace -> leak to leakTrace }\n}\nif (allLeakTraces.isEmpty()) {\n// Track how often we perform a heap analysis that yields no result.\nbugsnagClient.notify(NoLeakException()) { event ->\nevent.addHeapAnalysis(heapAnalysis)\ntrue\n}\n} else {\nallLeakTraces.forEach { (leak, leakTrace) ->\nval message = \"Memory leak: ${leak.shortDescription}. See LEAK tab.\"\nval exception = leakTrace.asFakeException(message)\nbugsnagClient.notify(exception) { event ->\nevent.addHeapAnalysis(heapAnalysis)\nevent.addLeak(leak)\nevent.addLeakTrace(leakTrace)\nevent.groupingHash = leak.signature\ntrue\n}\n}\n}\n}\nis HeapAnalysisFailure -> {\n// Please file any reported failure to\n// https://github.com/square/leakcanary/issues\nbugsnagClient.notify(heapAnalysis.exception)\n}\n}\n}\n\nclass NoLeakException : RuntimeException()\n\nprivate fun Event.addHeapAnalysis(heapAnalysis: HeapAnalysisSuccess) {\naddMetadata(\"Leak\", \"heapDumpPath\", heapAnalysis.heapDumpFile.absolutePath)\nheapAnalysis.metadata.forEach { (key, value) ->\naddMetadata(\"Leak\", key, value)\n}\naddMetadata(\"Leak\", \"analysisDurationMs\", heapAnalysis.analysisDurationMillis)\n}\n\nprivate fun Event.addLeak(leak: Leak) {\naddMetadata(\"Leak\", \"libraryLeak\", leak is LibraryLeak)\nif (leak is LibraryLeak) {\naddMetadata(\"Leak\", \"libraryLeakPattern\", leak.pattern.toString())\naddMetadata(\"Leak\", \"libraryLeakDescription\", leak.description)\n}\n}\n\nprivate fun Event.addLeakTrace(leakTrace: LeakTrace) {\naddMetadata(\"Leak\", \"retainedHeapByteSize\", leakTrace.retainedHeapByteSize)\naddMetadata(\"Leak\", \"signature\", leakTrace.signature)\naddMetadata(\"Leak\", \"leakTrace\", leakTrace.toString())\n}\n\nprivate fun LeakTrace.asFakeException(message: String): RuntimeException {\nval exception = RuntimeException(message)\nval stackTrace = mutableListOf<StackTraceElement>()\nstackTrace.add(StackTraceElement(\"GcRoot\", gcRootType.name, \"GcRoot.kt\", 42))\nfor (cause in referencePath) {\nstackTrace.add(buildStackTraceElement(cause))\n}\nexception.stackTrace = stackTrace.toTypedArray()\nreturn exception\n}\n\nprivate fun buildStackTraceElement(reference: LeakTraceReference): StackTraceElement {\nval file = reference.owningClassName.substringAfterLast(\".\") + \".kt\"\nreturn StackTraceElement(reference.owningClassName, reference.referenceDisplayName, file, 42)\n}\n}\n</code></pre>"},{"location":"recipes/","title":"Code Recipes","text":"<p>This page contains code recipes to customize LeakCanary to your needs. Read through the section titles and cook your own meal! Also don\u2019t forget to check out the FAQ.</p> <p>Bug</p> <p>If you think a recipe might be missing or you\u2019re not sure that what you\u2019re trying to achieve is possible with the current APIs, please file an issue. Your feedback helps us make LeakCanary better for the entire community.</p>"},{"location":"recipes/#watching-objects-with-a-lifecycle","title":"Watching objects with a lifecycle","text":"<p>The default configuration of LeakCanary will automatically watch Activity, Fragment, Fragment View and ViewModel instances.</p> <p>In your application, you may have other objects with a lifecycle, such as services, Dagger components, etc. Use AppWatcher.objectWatcher to watch instances that should be garbage collected:</p> <pre><code>class MyService : Service {\n\n// ...\n\noverride fun onDestroy() {\nsuper.onDestroy()\nAppWatcher.objectWatcher.watch(\nwatchedObject = this,\ndescription = \"MyService received Service#onDestroy() callback\"\n)\n}\n}\n</code></pre>"},{"location":"recipes/#configuration","title":"Configuration","text":"<p>LeakCanary has a default configuration that works well for most apps. You can also customize it to your needs. The LeakCanary configuration is held by two singleton objects (<code>AppWatcher</code> and <code>LeakCanary</code>) and can be updated at any time. Most developers configure LeakCanary in their debug Application class:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nAppWatcher.config = AppWatcher.config.copy(watchFragmentViews = false)\n}\n}\n</code></pre> <p>Info</p> <p>Create a debug application class in your <code>src/debug/java</code> folder. Don\u2019t forget to also register it in <code>src/debug/AndroidManifest.xml</code>.</p> <p>To customize the detection of retained objects at runtime, specify the watchers you wish to install via AppWatcher.manualInstall():</p> <pre><code>val watchersToInstall = AppWatcher.appDefaultWatchers(this)\n.filter { it !is FragmentAndViewModelWatcher }\nAppWatcher.manualInstall(\napplication = this,\nwatchersToInstall = watchersToInstall\n)\n</code></pre> <p>To customize the heap dumping & analysis, update LeakCanary.config:</p> <pre><code>LeakCanary.config = LeakCanary.config.copy(retainedVisibleThreshold = 3)\n</code></pre> <p>Java</p> <p>In Java, use LeakCanary.Config.Builder instead:</p> <pre><code>LeakCanary.Config config = LeakCanary.getConfig().newBuilder()\n.retainedVisibleThreshold(3)\n.build();\nLeakCanary.setConfig(config);\n</code></pre> <p>Configure the LeakCanary UI by overriding the following resources:</p> <ul> <li><code>mipmap/leak_canary_icon</code> see Icon and label</li> <li><code>string/leak_canary_display_activity_label</code> see Icon and label</li> <li><code>bool/leak_canary_add_dynamic_shortcut</code> see Disabling LeakCanary</li> <li><code>bool/leak_canary_add_launcher_icon</code> see Disabling LeakCanary</li> <li><code>layout/leak_canary_heap_dump_toast</code> the layout for the toast shown when the heap is dumped</li> </ul>"},{"location":"recipes/#disabling-leakcanary","title":"Disabling LeakCanary","text":"<p>Sometimes it\u2019s necessary to disable LeakCanary temporarily, for example for a product demo or when running performance tests. You have different options, depending on what you\u2019re trying to achieve:</p> <ul> <li>Create a build variant that does not include the LeakCanary dependencies, see Setting up LeakCanary for different product flavors.</li> <li>Disable the heap dumping & analysis: <code>LeakCanary.config = LeakCanary.config.copy(dumpHeap = false)</code>.</li> <li>Hide the leak display activity launcher icon: override <code>R.bool.leak_canary_add_launcher_icon</code> or call <code>LeakCanary.showLeakDisplayActivityLauncherIcon(false)</code></li> </ul> <p>Info</p> <p>When you set <code>LeakCanary.Config.dumpHeap</code> to <code>false</code>, <code>AppWatcher.objectWatcher</code> will still keep track of retained objects, and LeakCanary will look for these objects when you change <code>LeakCanary.Config.dumpHeap</code> back to <code>true</code>.</p>"},{"location":"recipes/#leakcanary-test-environment-detection","title":"LeakCanary test environment detection","text":"<p>By default, LeakCanary will look for the <code>org.junit.Test</code> class in your classpath and if found, will disable itself to avoid running in tests. However, some apps may ship JUnit in their debug classpaths (for example, when using OkHttp\u2019s MockWebServer) so we offer a way to customise the class that is used to determine that the app is running in a test environment.</p> <pre><code><resources>\n<string name=\"leak_canary_test_class_name\">assertk.Assert</string>\n</resources>\n</code></pre>"},{"location":"recipes/#counting-retained-instances-in-release-builds","title":"Counting retained instances in release builds","text":"<p>The <code>com.squareup.leakcanary:leakcanary-android</code> dependency should only be used in debug builds. It depends on <code>com.squareup.leakcanary:leakcanary-object-watcher-android</code> which you can use in release builds to track and count retained instances.</p> <p>In your <code>build.gradle</code>:</p> <pre><code>dependencies {\n implementation 'com.squareup.leakcanary:leakcanary-object-watcher-android:2.14'\n}\n</code></pre> <p>In your leak reporting code: <pre><code>val retainedInstanceCount = AppWatcher.objectWatcher.retainedObjectCount\n</code></pre></p>"},{"location":"recipes/#leakcanary-in-release-builds","title":"LeakCanary in release builds","text":"<p>We do not recommend including LeakCanary in release builds, as it could negatively impact the experience of your customers. To avoid accidentally including the <code>com.squareup.leakcanary:leakcanary-android</code> dependency in a release build, LeakCanary crashes during initialization if the APK is not debuggable. You may have a good reason to create a non debuggable build that includes LeakCanary, for example for a QA build. If necessary, the crashing check can be disabled by overriding the <code>bool/leak_canary_allow_in_non_debuggable_build</code> resource, e.g. by creating a file under <code>res/values</code> with the following contents:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<bool name=\"leak_canary_allow_in_non_debuggable_build\">true</bool>\n</resources>\n</code></pre>"},{"location":"recipes/#android-tv","title":"Android TV","text":"<p>LeakCanary works on Android TV devices (FireTV, Nexus player, Nvidia Shield, MiBox, etc.) without any additional setup. However, there are couple things you need to be aware of:</p> <ul> <li>Android TV doesn\u2019t have notifications. LeakCanary will display Toast messages when objects become retained and when leak analysis completes. You can also check Logcat for more details.</li> <li>Due to lack of notifications, the only way to manually trigger a heap dump is to background the app.</li> <li>There\u2019s a bug on API 26+ devices that prevents the activity that displays leaks from appearing in apps list. As a workaround, LeakCanary prints an <code>adb shell</code> command in Logcat after heap dump analysis that launches leak list activity: <pre><code>adb shell am start -n \"com.your.package.name/leakcanary.internal.activity.LeakLauncherActivity\"\n</code></pre></li> <li>Some Android TV devices have very little memory available per app process and this might impact LeakCanary. Running the LeakCanary analysis in a separate process might help in such cases.</li> </ul>"},{"location":"recipes/#icon-and-label","title":"Icon and label","text":"<p>The activity that displays leaks comes with a default icon and label, which you can change by providing <code>R.mipmap.leak_canary_icon</code> and <code>R.string.leak_canary_display_activity_label</code> in your app:</p> <pre><code>res/\n mipmap-hdpi/\n leak_canary_icon.png\n mipmap-mdpi/\n leak_canary_icon.png\n mipmap-xhdpi/\n leak_canary_icon.png\n mipmap-xxhdpi/\n leak_canary_icon.png\n mipmap-xxxhdpi/\n leak_canary_icon.png\n mipmap-anydpi-v26/\n leak_canary_icon.xml\n</code></pre> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<string name=\"leak_canary_display_activity_label\">MyLeaks</string>\n</resources>\n</code></pre>"},{"location":"recipes/#matching-known-library-leaks","title":"Matching known library leaks","text":"<p>Set LeakCanary.Config.referenceMatchers to a list that builds on top of AndroidReferenceMatchers.appDefaults:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nLeakCanary.config = LeakCanary.config.copy(\nreferenceMatchers = AndroidReferenceMatchers.appDefaults +\nAndroidReferenceMatchers.staticFieldLeak(\nclassName = \"com.samsing.SomeSingleton\",\nfieldName = \"sContext\",\ndescription = \"SomeSingleton has a static field leaking a context.\",\npatternApplies = {\nmanufacturer == \"Samsing\" && sdkInt == 26\n}\n)\n)\n}\n}\n</code></pre>"},{"location":"recipes/#ignoring-specific-activities-or-fragment-classes","title":"Ignoring specific activities or fragment classes","text":"<p>Sometimes a 3rd party library provides its own activities or fragments which contain a number of bugs leading to leaks of those specific 3rd party activities and fragments. You should push hard on that library to fix their memory leaks as it\u2019s directly impacting your application. That being said, until those are fixed, you have two options:</p> <ol> <li>Add the specific leaks as known library leaks (see Matching known library leaks). LeakCanary will run when those leaks are detected and then report them as known library leaks.</li> <li>Disable LeakCanary automatic activity or fragment watching (e.g. <code>AppWatcher.config = AppWatcher.config.copy(watchActivities = false)</code>) and then manually pass objects to <code>AppWatcher.objectWatcher.watch</code>.</li> </ol>"},{"location":"recipes/#identifying-leaking-objects-and-labeling-objects","title":"Identifying leaking objects and labeling objects","text":"<pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nval addEntityIdLabel = ObjectInspector { reporter ->\nreporter.whenInstanceOf(\"com.example.DbEntity\") { instance ->\nval databaseIdField = instance[\"com.example.DbEntity\", \"databaseId\"]!!\nval databaseId = databaseIdField.value.asInt!!\nlabels += \"DbEntity.databaseId = $databaseId\"\n}\n}\n\nval singletonsInspector =\nAppSingletonInspector(\"com.example.MySingleton\", \"com.example.OtherSingleton\")\n\nval mmvmInspector = ObjectInspector { reporter ->\nreporter.whenInstanceOf(\"com.mmvm.SomeViewModel\") { instance ->\nval destroyedField = instance[\"com.mmvm.SomeViewModel\", \"destroyed\"]!!\nif (destroyedField.value.asBoolean!!) {\nleakingReasons += \"SomeViewModel.destroyed is true\"\n} else {\nnotLeakingReasons += \"SomeViewModel.destroyed is false\"\n}\n}\n}\n\nLeakCanary.config = LeakCanary.config.copy(\nobjectInspectors = AndroidObjectInspectors.appDefaults +\nlistOf(addObjectIdLabel, singletonsInspector, mmvmInspector)\n)\n}\n}\n</code></pre>"},{"location":"recipes/#running-the-leakcanary-analysis-in-a-separate-process","title":"Running the LeakCanary analysis in a separate process","text":"<p>LeakCanary runs in your main app process. LeakCanary 2 is optimized to keep memory usage low while analysing and runs in a background thread with priority <code>Process.THREAD_PRIORITY_BACKGROUND</code>. If you find that LeakCanary is still using too much memory or impacting the app process performance, you can configure it to run the analysis in a separate process.</p> <p>All you have to do is replace the <code>leakcanary-android</code> dependency with <code>leakcanary-android-process</code>:</p> <pre><code>dependencies {\n// debugImplementation 'com.squareup.leakcanary:leakcanary-android:${version}'\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android-process:${version}'\n}\n</code></pre> <p>You can call LeakCanaryProcess.isInAnalyzerProcess to check if your Application class is being created in the LeakCanary process. This is useful when configuring libraries like Firebase that may crash when running in an unexpected process.</p>"},{"location":"recipes/#setting-up-leakcanary-for-different-product-flavors","title":"Setting up LeakCanary for different product flavors","text":"<p>You can setup LeakCanary to run in a specific product flavors of your app. For example, create:</p> <pre><code>android {\n flavorDimensions \"default\"\n productFlavors {\n prod {\n // ...\n }\n qa {\n // ...\n }\n dev {\n // ...\n }\n }\n}\n</code></pre> <p>Then, define a custom configuration for the flavor for which you want to enable LeakCanary:</p> <pre><code>android {\n // ...\n}\nconfigurations {\n devDebugImplementation {}\n}\n</code></pre> <p>You can now add the LeakCanary dependency for that configuration:</p> <pre><code>dependencies {\n devDebugImplementation \"com.squareup.leakcanary:leakcanary-android:${version}\"\n}\n</code></pre>"},{"location":"recipes/#extracting-metadata-from-the-heap-dump","title":"Extracting metadata from the heap dump","text":"<p>LeakCanary.Config.metadataExtractor extracts metadata from a heap dump. The metadata is then available in <code>HeapAnalysisSuccess.metadata</code>. <code>LeakCanary.Config.metadataExtractor</code> defaults to <code>AndroidMetadataExtractor</code> but you can replace it to extract additional metadata from the hprof.</p> <p>For example, if you want to include the app version name in your heap analysis reports, you need to first store it in memory (e.g. in a static field) and then you can retrieve it in <code>MetadataExtractor</code>.</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\ncompanion object {\n@JvmStatic\nlateinit var savedVersionName: String\n}\n\noverride fun onCreate() {\nsuper.onCreate()\n\nval packageInfo = packageManager.getPackageInfo(packageName, 0)\nsavedVersionName = packageInfo.versionName\n\nLeakCanary.config = LeakCanary.config.copy(\nmetadataExtractor = MetadataExtractor { graph ->\nval companionClass =\ngraph.findClassByName(\"com.example.DebugExampleApplication\")!!\n\nval versionNameField = companionClass[\"savedVersionName\"]!!\nval versionName = versionNameField.valueAsInstance!!.readAsJavaString()!!\n\nval defaultMetadata = AndroidMetadataExtractor.extractMetadata(graph)\n\nmapOf(\"App Version Name\" to versionName) + defaultMetadata\n})\n}\n}\n</code></pre>"},{"location":"recipes/#using-leakcanary-with-obfuscated-apps","title":"Using LeakCanary with obfuscated apps","text":"<p>If obfuscation is turned on then leak traces will be obfuscated. It\u2019s possible to automatically deobfuscate leak traces by using a deobfuscation gradle plugin provided by LeakCanary.</p> <p>You have to add a plugin dependency in your root <code>build.gradle</code> file:</p> <pre><code>buildscript {\ndependencies {\nclasspath 'com.squareup.leakcanary:leakcanary-deobfuscation-gradle-plugin:${version}'\n}\n}\n</code></pre> <p>And then you need to apply and configure the plugin in your app (or library) specific <code>build.gradle</code> file:</p> <pre><code>apply plugin: 'com.android.application'\napply plugin: 'com.squareup.leakcanary.deobfuscation'\n\nleakCanary {\n// LeakCanary needs to know which variants have obfuscation turned on\nfilterObfuscatedVariants { variant ->\nvariant.name == \"debug\"\n}\n}\n</code></pre> <p>Now you can run LeakCanary on an obfuscated app and leak traces will be automatically deobfuscated.</p> <p>Important: never use this plugin on a release variant. This plugin copies obfuscation mapping file and puts it inside the .apk, so if you use it on release build then the obfuscation becomes pointless because the code can be easily deobfuscated using mapping file.</p> <p>Warning: R8 (Google Proguard replacement) can now understand Kotlin language constructs but the side effect is that mapping files can get very large (a couple dozen megabytes). It means that the size of .apk containing copied mapping file will increase as well. This is another reason for not using this plugin on a release variant.</p>"},{"location":"recipes/#detecting-leaks-in-jvm-applications","title":"Detecting leaks in JVM applications","text":"<p>While LeakCanary was designed to work out of the box on Android, it can run on any JVM with a bit of configuration.</p> <p>Add the ObjectWatcher and Shark dependencies to your build file:</p> <pre><code>dependencies {\nimplementation 'com.squareup.leakcanary:leakcanary-object-watcher:2.14'\nimplementation 'com.squareup.leakcanary:shark:2.14'\n}\n</code></pre> <p>Define a <code>HotSpotHeapDumper</code> to dump the heap:</p> <pre><code>import com.sun.management.HotSpotDiagnosticMXBean\nimport java.lang.management.ManagementFactory\n\nobject HotSpotHeapDumper {\nprivate val mBean: HotSpotDiagnosticMXBean by lazy {\nval server = ManagementFactory.getPlatformMBeanServer()\nManagementFactory.newPlatformMXBeanProxy(\nserver,\n\"com.sun.management:type=HotSpotDiagnostic\",\nHotSpotDiagnosticMXBean::class.java\n)\n}\n\nfun dumpHeap(fileName: String) {\nmBean.dumpHeap(fileName, LIVE)\n}\n\nprivate const val LIVE = true\n}\n</code></pre> <p>Define a <code>JvmHeapAnalyzer</code> to analyze the heap when objects are retained and print the result to the console:</p> <pre><code>import leakcanary.GcTrigger\nimport leakcanary.ObjectWatcher\nimport leakcanary.OnObjectRetainedListener\nimport java.io.File\nimport java.text.SimpleDateFormat\nimport java.util.Date\nimport java.util.Locale.US\n\nclass JvmHeapAnalyzer(private val objectWatcher: ObjectWatcher) :\nOnObjectRetainedListener {\n\nprivate val fileNameFormat = SimpleDateFormat(DATE_PATTERN, US)\n\noverride fun onObjectRetained() {\nGcTrigger.Default.runGc()\nif (objectWatcher.retainedObjectCount == 0) {\nreturn\n}\nval fileName = fileNameFormat.format(Date())\nval hprofFile = File(fileName)\n\nprintln(\"Dumping the heap to ${hprofFile.absolutePath}\")\nHotSpotHeapDumper.dumpHeap(hprofFile.absolutePath)\n\nval analyzer = HeapAnalyzer(\nOnAnalysisProgressListener { step ->\nprintln(\"Analysis in progress, working on: ${step.name}\")\n})\n\nval heapDumpAnalysis = analyzer.analyze(\nheapDumpFile = hprofFile,\nleakingObjectFinder = KeyedWeakReferenceFinder,\ncomputeRetainedHeapSize = true,\nobjectInspectors = ObjectInspectors.jdkDefaults\n)\nprintln(heapDumpAnalysis)\n}\ncompanion object {\nprivate const val DATE_PATTERN = \"yyyy-MM-dd_HH-mm-ss_SSS'.hprof'\"\n}\n}\n</code></pre> <p>Create an <code>ObjectWatcher</code> instance and configure it to watch objects for 5 seconds before notifying a <code>JvmHeapAnalyzer</code> instance:</p> <pre><code>val scheduledExecutor = Executors.newSingleThreadScheduledExecutor()\nval objectWatcher = ObjectWatcher(\nclock = Clock {\nSystem.currentTimeMillis()\n},\ncheckRetainedExecutor = Executor { command ->\nscheduledExecutor.schedule(command, 5, SECONDS)\n}\n)\n\nval heapAnalyzer = JvmHeapAnalyzer(objectWatcher)\nobjectWatcher.addOnObjectRetainedListener(heapAnalyzer)\n</code></pre> <p>Pass objects that you expect to be garbage collected (e.g. closed resources) to the <code>ObjectWatcher</code> instance:</p> <pre><code>objectWatcher.watch(\nwatchedObject = closedResource,\ndescription = \"$closedResource is closed and should be garbage collected\"\n)\n</code></pre> <p>If you end up using LeakCanary on a JVM, the community will definitely benefit from your experience, so don\u2019t hesitate to let us know!</p>"},{"location":"recipes/#packagemanagergetlaunchintentforpackage-returns-leaklauncheractivity","title":"PackageManager.getLaunchIntentForPackage() returns LeakLauncherActivity","text":"<p>LeakCanary adds a main activity that has a Intent#CATEGORY_LAUNCHER category. PackageManager.getLaunchIntentForPackage() looks for a main activity in the category <code>Intent#CATEGORY_INFO</code>, and next for a main activity in the category <code>Intent#CATEGORY_LAUNCHER</code>. <code>PackageManager.getLaunchIntentForPackage()</code> returns the first activity that matches in the merged manifest of your app. If your app relies on <code>PackageManager.getLaunchIntentForPackage()</code>, you have two options:</p> <ul> <li>Add <code>Intent#CATEGORY_INFO</code> to your main activity intent filter, so that it gets picked up first. This is what the Android documentation recommends.</li> <li>Disable the leakcanary launcher activity by setting the <code>leak_canary_add_launcher_icon</code> resource boolean to false.</li> </ul>"},{"location":"recorded-presentations/","title":"Recorded Presentations","text":"<ul> <li>Live leak investigations, investigating leaks on Stack Overflow and fixes for AOSP leaks</li> <li>Fixing leaks in Firefox</li> <li>Shark: Diving into the guts of LeakCanary\u2019s Hprof parser</li> <li>LeakCanary 2: Leaner, Better, Faster, Kotliner!</li> <li>LeakCanary, then what? Nuking Nasty Memory Leaks</li> <li>Memory Leak Hunt, a live investigation.</li> <li>Installing LeakCanary (LeakCanary 1.5)</li> <li>How to use LeakCanary</li> </ul> <p>Your presentation should be here, please update this list! Any technical level welcome.</p>"},{"location":"releasing/","title":"Releasing LeakCanary","text":""},{"location":"releasing/#preparing-the-release-environment","title":"Preparing the release environment","text":""},{"location":"releasing/#set-up-your-sonatype-ossrh-account","title":"Set up your Sonatype OSSRH account","text":"<ul> <li>Create a Sonatype OSSRH JIRA account.</li> <li>Create a ticket to request access to the <code>com.squareup.leakcanary</code> project. Here\u2019s an example: OSSRH-54959.</li> <li>Then ask someone with deployer role from the LeakCanary team to confirm access.</li> </ul>"},{"location":"releasing/#set-up-your-signing-key","title":"Set up your signing key","text":"<pre><code># Create a new key\ngpg --gen-key\n# List local keys. Key id is last 8 characters\ngpg -K\ncd ~/.gnupg\n# Export key locally\ngpg --export-secret-keys -o secring.gpg\n# Upload key to Ubuntu servers\ngpg --send-keys --keyserver keyserver.ubuntu.com <KEY ID>\n# Confirm the key can now be found\ngpg --recv-keys --keyserver keyserver.ubuntu.com <KEY ID>\n</code></pre>"},{"location":"releasing/#set-up-your-home-gradleproperties","title":"Set up your home gradle.properties","text":"<p>Add this to your <code>~/.gradle/gradle.properties</code>:</p> <pre><code>signing.keyId=<KEY ID>\nsigning.password=<KEY PASSWORD>\nsigning.secretKeyRingFile=/Users/YOUR_USERNAME_/.gnupg/secring.gpg\nSONATYPE_NEXUS_USERNAME=<SONATYPE_USERNAME>\nSONATYPE_NEXUS_PASSWORD=<SONATYPE_PASSWORD>\n</code></pre>"},{"location":"releasing/#set-up-the-google-analytics-docs-key","title":"Set up the Google Analytics docs key","text":"<p>Add this to your <code>~/.bashrc</code>:</p> <pre><code>export LEAKCANARY_GOOGLE_ANALYTICS_KEY=\"UA-142834539-1\"\n</code></pre>"},{"location":"releasing/#set-up-github-cli","title":"Set up GitHub CLI","text":"<p>Install GitHub CLI</p> <pre><code>brew install gh\n</code></pre> <p>Install jq, a CLI Json processor</p> <pre><code>brew install jq\n</code></pre> <p>Set up aliases for milestone management:</p> <pre><code>gh alias set listOpenMilestones \"api graphql -F owner=':owner' -F name=':repo' -f query='\n query ListOpenMilestones(\\$name: String\\!, \\$owner: String\\!) {\n repository(owner: \\$owner, name: \\$name) {\n milestones(first: 100, states: OPEN) {\n nodes {\n title\n number\n description\n dueOn\n url\n state\n closed\n closedAt\n updatedAt\n }\n }\n }\n }\n'\"\n\ngh alias set --shell createMilestone \"gh api --method POST repos/:owner/:repo/milestones --input - | jq '{ html_url: .html_url, state: .state, created_at: .created_at }'\"\n\ngh alias set --shell closeMilestone \"echo '{\\\"state\\\": \\\"closed\\\"}' | gh api --method PATCH repos/:owner/:repo/milestones/\\$1 --input - | jq '{ html_url: .html_url, state: .state, closed_at: .closed_at }'\"\n</code></pre>"},{"location":"releasing/#install-or-update-the-doc-generation-dependencies","title":"Install or update the doc generation dependencies","text":"<pre><code>python3 -m venv venv\nsource venv/bin/activate\npip3 install --requirement docs/requirements.txt\n</code></pre>"},{"location":"releasing/#releasing","title":"Releasing","text":"<ul> <li> <p>Create a local release branch from <code>main</code> <pre><code>git checkout main && \\\ngit pull && \\\ngit checkout -b release_3.0-alpha-8\n</code></pre></p> </li> <li> <p>Update <code>VERSION_NAME</code> in <code>gradle.properties</code> (remove <code>-SNAPSHOT</code>) <pre><code>sed -i '' 's/VERSION_NAME=3.0-alpha-8-SNAPSHOT/VERSION_NAME=3.0-alpha-8/' gradle.properties\n</code></pre></p> </li> <li> <p>Update the current version and next version in <code>mkdocs.yml</code> <pre><code>sed -i '' 's/3.0-alpha-8/NEXT/' mkdocs.yml\nsed -i '' 's/2.14/3.0-alpha-8/' mkdocs.yml\n</code></pre></p> </li> <li> <p>Create the release <pre><code>git commit -am \"Prepare 3.0-alpha-8 release\" && \\\n./gradlew clean && \\\n./gradlew build && \\\ngit tag v3.0-alpha-8 && \\\ngit push origin v3.0-alpha-8 && \\\n./gradlew publish --no-daemon --no-parallel && \\\n./gradlew closeAndReleaseRepository && \\\n./gradlew shark:shark-cli:distZip\n</code></pre></p> </li> </ul> <p>Note: if anything goes wrong, you can manually drop the release at https://s01.oss.sonatype.org/</p> <ul> <li>Merge back to main <pre><code>git checkout main && \\\ngit pull && \\\ngit merge --no-ff release_3.0-alpha-8\n</code></pre></li> <li> <p>Update <code>VERSION_NAME</code> in <code>gradle.properties</code> (increase version and add <code>-SNAPSHOT</code>) <pre><code>sed -i '' 's/VERSION_NAME=3.0-alpha-8/VERSION_NAME=NEXT-SNAPSHOT/' gradle.properties\n</code></pre></p> </li> <li> <p>Generate the Dokka docs <pre><code>rm -rf docs/api && ./gradlew siteDokka\n</code></pre></p> </li> <li> <p>Update the changelog (commit list) <pre><code>mate docs/changelog.md\n</code></pre></p> </li> <li> <p>Deploy the docs locally then open the changelog and check everything looks good <pre><code>source venv/bin/activate && \\\nmkdocs serve\n</code></pre></p> </li> <li> <p>Finish up the release</p> </li> </ul> <pre><code>git commit -am \"Prepare for next development iteration\" && \\\ngit push && \\\nsource venv/bin/activate && \\\nmkdocs gh-deploy && \\\ngh release create v3.0-alpha-8 ./shark/shark-cli/build/distributions/shark-cli-3.0-alpha-8.zip --title v3.0-alpha-8 --notes 'See [Change Log](https://square.github.io/leakcanary/changelog)' && \\\ngh listOpenMilestones | jq '.data.repository.milestones.nodes[0].number' | xargs gh closeMilestone && \\\necho '{\n \"title\": \"REPLACE_WITH_NEXT_VERSION_NUMBER\",\n \"state\": \"open\",\n \"description\": \"\"\n}' | gh createMilestone\n</code></pre> <ul> <li> <p>Open the v3.0-alpha-8 release to confirm everything looks good.</p> </li> <li> <p>Upload shark-cli to brew: <pre><code>brew bump-formula-pr --url https://github.com/square/leakcanary/releases/download/v3.0-alpha-8/shark-cli-3.0-alpha-8.zip leakcanary-shark\n</code></pre></p> </li> <li> <p>Wait for the release to be available on Maven Central.</p> </li> <li>Tell your friends, update all of your apps, and tweet the new release. As a nice extra touch, mention external contributions.</li> </ul>"},{"location":"shark/","title":"Shark \ud83e\udd88","text":"<p>Shark: Smart Heap Analysis Reports for Kotlin</p> <p> </p> <p>Shark is the heap analyzer that powers LeakCanary 2. It\u2019s a Kotlin standalone heap analysis library that runs at high speed with a low memory footprint.</p> <p>Shark is released in layers:</p> <ol> <li>Shark Hprof: Read and write records in hprof files.</li> <li>Shark Graph: Navigate the heap object graph.</li> <li>Shark: Generate heap analysis reports.</li> <li>Shark Android: Android heuristics to generate tailored heap analysis reports.</li> <li>Shark CLI: Analyze the heap of debuggable apps installed on an Android device connected to your desktop. The output is similar to the output of LeakCanary, except you don\u2019t have to add the LeakCanary dependency to your app.</li> <li>LeakCanary: Builds on top. It automatically watches destroyed activities and fragments, triggers a heap dump, runs Shark Android and then displays the result.</li> </ol> <p>A few more things:</p> <ul> <li>Shark is built on top of Okio. Okio makes it easy to parse heap dumps efficiently.</li> <li>Shark is a 100% Kotlin library, and Kotlin is essential to its design, because Shark relies heavily on sealed classes and sequences to save memory.</li> <li>Shark has the unique ability to help narrow down the cause of memory leaks through platform specific heuristics.</li> <li>Shark is heavily tested (80% test coverage).</li> <li>Shark can run in both Java and Android VMs, with no other dependency than Okio and Kotlin.</li> <li>Shark can analyze both Java and Android VM hprof files.</li> <li>Shark can deobfuscate hprof records if it has access to obfuscation mapping file.</li> </ul>"},{"location":"shark/#shark-cli","title":"Shark CLI","text":"<p>The Shark Command Line Interface (CLI) enables you to analyze heaps directly from your computer. It can dump the heap of an app installed on a connected Android device, analyze it, and even strip a heap dump of any sensitive data (e.g. PII, passwords or encryption keys) which is useful when sharing a heap dump.</p> <p>Install it via Homebrew:</p> <pre><code>brew install leakcanary-shark\n</code></pre> <p>You can also download it here.</p> <p>You can then look for leaks in apps on any connected device, for example: </p> <pre><code>$ shark-cli --device emulator-5554 --process com.example.app.debug analyze\n</code></pre> <p>Info</p> <p><code>shark-cli</code> works with all debuggable apps, even if they don\u2019t include the <code>leakcanary-android</code> dependency.</p> <p>Run <code>shark-cli</code> to see usage instructions:</p> <pre><code>$ shark-cli\n\nUsage: shark-cli [OPTIONS] COMMAND [ARGS]...\n\n ^`. .=\"\"=.\n ^_ \\ \\ / _ _ \\\n \\ \\ { \\ | d b |\n { \\ / `~~~--__ \\ /\\ /\n { \\___----~~' `~~-_/'-=\\/=-'\\,\n \\ /// a `~. \\ \\\n / /~~~~-, ,__. , /// __,,,,) \\ |\n \\/ \\/ `~~~; ,---~~-_`/ \\ / \\/\n / / '. .'\n '._.' _|`~~`|_\n /|\\ /|\\\n\nOptions:\n -p, --process TEXT Full or partial name of a process, e.g.\n \"example\" would match \"com.example.app\"\n -d, --device ID device/emulator id\n -m, --obfuscation-mapping PATH path to obfuscation mapping file\n --verbose / --no-verbose provide additional details as to what\n shark-cli is doing\n -h, --hprof FILE path to a .hprof file\n --help Show this message and exit\n\nCommands:\n interactive Explore a heap dump.\n analyze Analyze a heap dump.\n dump-process Dump the heap and pull the hprof file.\n strip-hprof Replace all primitive arrays from the provided heap dump with\n arrays of zeroes and generate a new \"-stripped.hprof\" file.\n</code></pre>"},{"location":"shark/#shark-code-examples","title":"Shark code examples","text":""},{"location":"shark/#reading-records-in-a-hprof-file","title":"Reading records in a hprof file","text":"<pre><code>// build.gradle\ndependencies {\nimplementation 'com.squareup.leakcanary:shark-hprof:$sharkVersion'\n}\n</code></pre> <pre><code>import java.io.File\nimport shark.Hprof\nimport shark.HprofRecord.StringRecord\nimport shark.OnHprofRecordListener\n\nfun main(args: Array<String>) {\nval heapDumpFile = File(args[0])\n\n// Prints all class and field names\nHprof.open(heapDumpFile).use { hprof ->\nhprof.reader.readHprofRecords(\nrecordTypes = setOf(StringRecord::class),\nlistener =\nOnHprofRecordListener { position, record -> println((record as StringRecord).string) },\n)\n}\n}\n</code></pre>"},{"location":"shark/#navigating-the-heap-object-graph","title":"Navigating the heap object graph","text":"<pre><code>// build.gradle\ndependencies {\nimplementation 'com.squareup.leakcanary:shark-graph:$sharkVersion'\n}\n</code></pre> <pre><code>import java.io.File\nimport shark.Hprof\nimport shark.HprofHeapGraph\n\nfun main(args: Array<String>) {\nval heapDumpFile = File(args[0])\n\n// Prints all thread names\nHprof.open(heapDumpFile).use { hprof ->\nval heapGraph = HprofHeapGraph.indexHprof(hprof)\nval threadClass = heapGraph.findClassByName(\"java.lang.Thread\")!!\nval threadNames: Sequence<String> =\nthreadClass.instances.map { instance ->\nval nameField = instance[\"java.lang.Thread\", \"name\"]!!\nnameField.value.readAsJavaString()!!\n}\nthreadNames.forEach { println(it) }\n}\n}\n</code></pre>"},{"location":"shark/#generating-a-heap-analysis-report","title":"Generating a heap analysis report","text":"<pre><code>// build.gradle\ndependencies {\nimplementation 'com.squareup.leakcanary:shark:$sharkVersion'\n}\n</code></pre> <pre><code>import java.io.File\nimport shark.FilteringLeakingObjectFinder\nimport shark.FilteringLeakingObjectFinder.LeakingObjectFilter\nimport shark.HeapAnalyzer\nimport shark.HeapObject\nimport shark.HeapObject.HeapInstance\nimport shark.Hprof\nimport shark.HprofHeapGraph\n\n// Marks any instance of com.example.ThingWithLifecycle with\n// ThingWithLifecycle.destroyed=true as leaking\nval leakingObjectFilter =\nobject : LeakingObjectFilter {\noverride fun isLeakingObject(heapObject: HeapObject): Boolean {\nreturn if (\nheapObject is HeapInstance && heapObject instanceOf \"com.example.ThingWithLifecycle\"\n) {\nval destroyedField = heapObject[\"com.example.ThingWithLifecycle\", \"destroyed\"]!!\ndestroyedField.value.asBoolean!!\n} else false\n}\n}\n\nval leakingObjectFinder = FilteringLeakingObjectFinder(listOf(leakingObjectFilter))\n\nfun main(args: Array<String>) {\nval heapDumpFile = File(args[0])\nval heapAnalysis =\nHprof.open(heapDumpFile).use { hprof ->\nval heapGraph = HprofHeapGraph.indexHprof(hprof)\nval heapAnalyzer = HeapAnalyzer({})\nheapAnalyzer.analyze(\nheapDumpFile = heapDumpFile,\ngraph = heapGraph,\nleakingObjectFinder = leakingObjectFinder,\n)\n}\nprintln(heapAnalysis)\n}\n</code></pre>"},{"location":"shark/#generating-an-android-heap-analysis-report","title":"Generating an Android heap analysis report","text":"<pre><code>// build.gradle\ndependencies {\nimplementation 'com.squareup.leakcanary:shark-android:$sharkVersion'\n}\n</code></pre> <pre><code>import java.io.File\nimport shark.AndroidObjectInspectors\nimport shark.AndroidReferenceMatchers\nimport shark.FilteringLeakingObjectFinder\nimport shark.FilteringLeakingObjectFinder.LeakingObjectFilter\nimport shark.HeapAnalyzer\nimport shark.HeapObject\nimport shark.HeapObject.HeapInstance\nimport shark.Hprof\nimport shark.HprofHeapGraph\n\n// Marks any instance of com.example.ThingWithLifecycle with\n// ThingWithLifecycle.destroyed=true as leaking\nval leakingObjectFilter =\nobject : LeakingObjectFilter {\noverride fun isLeakingObject(heapObject: HeapObject): Boolean {\nreturn if (\nheapObject is HeapInstance && heapObject instanceOf \"com.example.ThingWithLifecycle\"\n) {\nval instance = heapObject as HeapInstance\nval destroyedField = instance[\"com.example.ThingWithLifecycle\", \"destroyed\"]!!\ndestroyedField.value.asBoolean!!\n} else false\n}\n}\n\nval leakingObjectFinder = FilteringLeakingObjectFinder(listOf(leakingObjectFilter))\n\nfun main(args: Array<String>) {\nval heapDumpFile = File(args[0])\n\nval heapAnalysis =\nHprof.open(heapDumpFile).use { hprof ->\nval heapGraph = HprofHeapGraph.indexHprof(hprof)\nval heapAnalyzer = HeapAnalyzer({})\nheapAnalyzer.analyze(\nheapDumpFile = heapDumpFile,\ngraph = heapGraph,\nleakingObjectFinder = leakingObjectFinder,\nreferenceMatchers = AndroidReferenceMatchers.appDefaults,\nobjectInspectors = AndroidObjectInspectors.appDefaults,\n)\n}\n\nprintln(heapAnalysis)\n}\n</code></pre>"},{"location":"support/","title":"LeakCanary Support","text":"<p>If you\u2019re looking for help with LeakCanary:</p> <ul> <li>Learn the Fundamentals</li> <li>Try the code recipes</li> <li>Read the FAQ</li> <li>Watch recorded presentations</li> <li>Read blog articles</li> <li>Ask a question on StackOverflow</li> </ul>"},{"location":"ui-tests/","title":"Leak detection in UI tests","text":"<p>Running leak detection in UI tests means you can detect memory leaks automatically in Continuous Integration prior to new leaks being merged into the codebase.</p> <p>Test environment detection</p> <p>In debug builds, LeakCanary looks for retained instances continuously, freezes the VM to take a heap dump after a watched object has been retained for 5 seconds, then performs the analysis in a background thread and reports the result using notifications. That behavior isn\u2019t well suited for UI tests, so LeakCanary is automatically disabled when JUnit is on the runtime classpath (see test environment detection).</p>"},{"location":"ui-tests/#getting-started","title":"Getting started","text":"<p>LeakCanary provides an artifact dedicated to detecting leaks in UI tests:</p> <pre><code>androidTestImplementation 'com.squareup.leakcanary:leakcanary-android-instrumentation:2.14'\n// You still need to include the LeakCanary artifact in your app:\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'\n</code></pre> <p>You can then call <code>LeakAssertions.assertNoLeaks()</code> at any point in your tests to check for leaks:</p> <pre><code>class CartTest {\n\n@Test\nfun addItemToCart() {\n// ...\nLeakAssertions.assertNoLeaks()\n}\n}\n</code></pre> <p>If retained instances are detected, LeakCanary will dump and analyze the heap. If application leaks are found, <code>LeakAssertions.assertNoLeaks()</code> will throw a <code>NoLeakAssertionFailedError</code>.</p> <pre><code>leakcanary.NoLeakAssertionFailedError: Application memory leaks were detected:\n====================================\nHEAP ANALYSIS RESULT\n====================================\n1 APPLICATION LEAKS\n\n\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 com.example.MySingleton class\n\u2502 Leaking: NO (a class is never leaking)\n\u2502 \u2193 static MySingleton.leakedView\n\u2502 ~~~~~~~~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 Leaking: YES (View.mContext references a destroyed activity)\n\u2502 \u2193 TextView.mContext\n\u2570\u2192 com.example.MainActivity instance\n Leaking: YES (Activity#mDestroyed is true)\n====================================\n at leakcanary.AndroidDetectLeaksAssert.assertNoLeaks(AndroidDetectLeaksAssert.kt:34)\n at leakcanary.LeakAssertions.assertNoLeaks(LeakAssertions.kt:21)\n at com.example.CartTest.addItemToCart(TuPeuxPasTest.kt:41)\n</code></pre> <p>Obfuscated instrumentation tests</p> <p>When running instrumentation tests against obfuscated release builds, the LeakCanary classes end up spread over the test APK and the main APK. Unfortunately there is a bug in the Android Gradle Plugin that leads to runtime crashes when running tests, because code from the main APK is changed without the using code in the test APK being updated accordingly. If you run into this issue, setting up the Keeper plugin should fix it.</p>"},{"location":"ui-tests/#test-rule","title":"Test rule","text":"<p>You can use the <code>DetectLeaksAfterTestSuccess</code> test rule to automatically call <code>LeakAssertions.assertNoLeaks()</code> at the end of a test:</p> <pre><code>class CartTest {\n@get:Rule\nval rule = DetectLeaksAfterTestSuccess()\n\n@Test\nfun addItemToCart() {\n// ...\n}\n}\n</code></pre> <p>You can call also <code>LeakAssertions.assertNoLeaks()</code> as many times as you want in a single test:</p> <pre><code>class CartTest {\n@get:Rule\nval rule = DetectLeaksAfterTestSuccess()\n\n// This test has 3 leak assertions (2 in the test + 1 from the rule).\n@Test\nfun addItemToCart() {\n// ...\nLeakAssertions.assertNoLeaks()\n// ...\nLeakAssertions.assertNoLeaks()\n// ...\n}\n}\n</code></pre>"},{"location":"ui-tests/#skipping-leak-detection","title":"Skipping leak detection","text":"<p>Use <code>@SkipLeakDetection</code> to disable <code>LeakAssertions.assertNoLeaks()</code> calls:</p> <pre><code>class CartTest {\n@get:Rule\nval rule = DetectLeaksAfterTestSuccess()\n\n// This test will not perform any leak assertion.\n@SkipLeakDetection(\"See issue #1234\")\n@Test\nfun addItemToCart() {\n// ...\nLeakAssertions.assertNoLeaks()\n// ...\nLeakAssertions.assertNoLeaks()\n// ...\n}\n}\n</code></pre> <p>You can use tags to identify each <code>LeakAssertions.assertNoLeaks()</code> call and disable only a subset of these calls:</p> <pre><code>class CartTest {\n@get:Rule\nval rule = DetectLeaksAfterTestSuccess(tag = \"EndOfTest\")\n\n// This test will only perform the second leak assertion.\n@SkipLeakDetection(\"See issue #1234\", \"First Assertion\", \"EndOfTest\")\n@Test\nfun addItemToCart() {\n// ...\nLeakAssertions.assertNoLeak(tag = \"First Assertion\")\n// ...\nLeakAssertions.assertNoLeak(tag = \"Second Assertion\")\n// ...\n}\n}\n</code></pre> <p>Tags can be retrieved by calling <code>HeapAnalysisSuccess.assertionTag</code> and are also reported in the heap analysis result metadata:</p> <pre><code>====================================\nMETADATA\n\nPlease include this in bug reports and Stack Overflow questions.\n\nBuild.VERSION.SDK_INT: 23\n...\nassertionTag: Second Assertion\n</code></pre>"},{"location":"ui-tests/#test-rule-chains","title":"Test rule chains","text":"<pre><code>// Example test rule chain\n@get:Rule\nval rule = RuleChain.outerRule(LoginRule())\n.around(ActivityScenarioRule(CartActivity::class.java))\n.around(LoadingScreenRule())\n</code></pre> <p>If you use a test rule chain, the position of the <code>DetectLeaksAfterTestSuccess</code> rule in that chain could be significant. For example, if you use an <code>ActivityScenarioRule</code> that automatically finishes the activity at the end of a test, having <code>DetectLeaksAfterTestSuccess</code> around <code>ActivityScenarioRule</code> will detect leaks after the activity is destroyed and therefore detect any activity leak. But then <code>DetectLeaksAfterTestSuccess</code> will not detect fragment leaks that go away when the activity is destroyed.</p> <pre><code>@get:Rule\nval rule = RuleChain.outerRule(LoginRule())\n// Detect leaks AFTER activity is destroyed\n.around(DetectLeaksAfterTestSuccess(tag = \"AfterActivityDestroyed\"))\n.around(ActivityScenarioRule())\n.around(LoadingScreenRule())\n</code></pre> <p>If instead you set up <code>ActivityScenarioRule</code> around <code>DetectLeaksAfterTestSuccess</code>, destroyed activity leaks will not be detected as the activity will still be created when the leak assertion rule runs, but more fragment leaks might be detected.</p> <pre><code>@get:Rule\nval rule = RuleChain.outerRule(LoginRule())\n.around(ActivityScenarioRule(CartActivity::class.java))\n// Detect leaks BEFORE activity is destroyed\n.around(DetectLeaksAfterTestSuccess(tag = \"BeforeActivityDestroyed\"))\n.around(LoadingScreenRule())\n</code></pre> <p>To detect all leaks, the best option is to set up the <code>DetectLeaksAfterTestSuccess</code> rule twice, before and after the <code>ActivityScenarioRule</code> rule.</p> <pre><code>// Detect leaks BEFORE and AFTER activity is destroyed\n@get:Rule\nval rule = RuleChain.outerRule(LoginRule())\n.around(DetectLeaksAfterTestSuccess(tag = \"AfterActivityDestroyed\"))\n.around(ActivityScenarioRule(CartActivity::class.java))\n.around(DetectLeaksAfterTestSuccess(tag = \"BeforeActivityDestroyed\"))\n.around(LoadingScreenRule())\n</code></pre> <p><code>RuleChain.detectLeaksAfterTestSuccessWrapping()</code> is a helper for doing just that:</p> <pre><code>// Detect leaks BEFORE and AFTER activity is destroyed\n@get:Rule\nval rule = RuleChain.outerRule(LoginRule())\n// The tag will be suffixed with \"Before\" and \"After\".\n.detectLeaksAfterTestSuccessWrapping(tag = \"ActivitiesDestroyed\") {\naround(ActivityScenarioRule(CartActivity::class.java))\n}\n.around(LoadingScreenRule())\n</code></pre>"},{"location":"ui-tests/#customizing-assertnoleaks","title":"Customizing <code>assertNoLeaks()</code>","text":"<p><code>LeakAssertions.assertNoLeaks()</code> delegates calls to a global <code>DetectLeaksAssert</code> implementation, which by default is an instance of <code>AndroidDetectLeaksAssert</code>. You can change the <code>DetectLeaksAssert</code> implementation by calling <code>DetectLeaksAssert.update(customLeaksAssert)</code>.</p> <p>The <code>AndroidDetectLeaksAssert</code> implementation performs a heap dump when retained instances are detected, analyzes the heap, then passes the result to a <code>HeapAnalysisReporter</code>. The default <code>HeapAnalysisReporter</code> is <code>NoLeakAssertionFailedError.throwOnApplicationLeaks()</code> which throws a <code>NoLeakAssertionFailedError</code> if an application leak is detected.</p> <p>You could provide a custom implementation to also upload heap analysis results to a central place before failing the test: <pre><code>val throwingReporter = NoLeakAssertionFailedError.throwOnApplicationLeaks()\n\nDetectLeaksAssert.update(AndroidDetectLeaksAssert(\nheapAnalysisReporter = { heapAnalysis ->\n// Upload the heap analysis result\nheapAnalysisUploader.upload(heapAnalysis)\n// Fail the test if there are application leaks\nthrowingReporter.reportHeapAnalysis(heapAnalysis)\n}\n))\n</code></pre></p>"},{"location":"upgrading-to-leakcanary-2.0/","title":"Upgrading to LeakCanary 2","text":"<p>LeakCanary 2 is a major rewrite. High level changes:</p> <ul> <li>New heap analyzer, reimplemented from scratch to use 10 times less memory (see Shark).</li> <li>APIs updated to simplify configuration and provide access to the new heap analyzer.</li> <li>Internals rewritten to 100% Kotlin.</li> <li>Multiple leaks detected in one analysis, grouped per leak type</li> </ul>"},{"location":"upgrading-to-leakcanary-2.0/#dependencies","title":"Dependencies","text":""},{"location":"upgrading-to-leakcanary-2.0/#before","title":"Before","text":"<pre><code>dependencies {\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'\nreleaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'\n// Optional, if you use support library fragments:\ndebugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.3'\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now","title":"Now","text":"<pre><code>dependencies {\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#worth-noting","title":"Worth noting","text":"<ul> <li>The <code>leakcanary-android-no-op</code> artifact is gone. If you have compile errors, see below.</li> <li>Question: if there\u2019s no no-op anymore, how do I ensure none of this runs during release builds?</li> <li>Answer: as long as you add <code>leakcanary-android</code> as <code>debugImplementation</code>, there won\u2019t be any code referencing LeakCanary in your release builds.</li> <li>LeakCanary does not depend on the support library anymore, and it doesn\u2019t depend on AndroidX either.</li> <li>Detection of AndroidX fragments is automatic if you have the AndroidX fragments dependency.</li> </ul>"},{"location":"upgrading-to-leakcanary-2.0/#default-setup-code","title":"Default setup code","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_1","title":"Before","text":"<pre><code>public class ExampleApplication extends Application {\n\n@Override public void onCreate() {\nsuper.onCreate();\nif (LeakCanary.isInAnalyzerProcess(this)) {\n// This process is dedicated to LeakCanary for heap analysis.\n// You should not init your app in this process.\nreturn;\n}\nLeakCanary.install(this);\n// Normal app init code...\n}\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_1","title":"Now","text":"<p>There is no more code for default setup.</p>"},{"location":"upgrading-to-leakcanary-2.0/#worth-noting_1","title":"Worth noting","text":"<ul> <li>LeakCanary auto installs itself</li> <li>LeakCanary analysis now runs in the main process so there is no need to call <code>LeakCanary.isInAnalyzerProcess()</code>.</li> </ul>"},{"location":"upgrading-to-leakcanary-2.0/#retrieve-the-refwatcher","title":"Retrieve the RefWatcher","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_2","title":"Before","text":"<pre><code>val refWatcher: RefWatcher = LeakCanary.installedRefWatcher()\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_2","title":"Now","text":"<pre><code>val objectWatcher: ObjectWatcher = AppWatcher.objectWatcher\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#compile-errors-because-refwatcher-is-used-in-release-code","title":"Compile errors because RefWatcher is used in release code","text":"<p>If you were using <code>RefWatcher</code> in non debug code, you now get a compile error because the no-op artifact is gone. ObjectWatcher now lives in the <code>object-watcher</code> artifact, which is suitable for release builds. You have two options:</p>"},{"location":"upgrading-to-leakcanary-2.0/#option-1-add-object-watcher-android-to-release-builds","title":"Option 1: Add <code>object-watcher-android</code> to release builds.","text":"<pre><code>dependencies {\nimplementation 'com.squareup.leakcanary:leakcanary-object-watcher-android:2.14'\n}\n</code></pre> <ul> <li>It will automatically keep weak references to destroyed activities, fragments, and any instance you pass to AppWatcher.objectWatcher.</li> <li>It will not trigger heap dumps or anything else that LeakCanary does.</li> <li>It\u2019s very little code and should have a no impact on your release app.</li> <li>You can use it to count how many objects are retained, for example to add metadata to OutOfMemoryError crashes:</li> </ul> <pre><code>val retainedObjectCount = AppWatcher.objectWatcher.retainedObjectCount\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#option-2-make-your-own-objectwatcher-interface","title":"Option 2: Make your own <code>ObjectWatcher</code> interface","text":"<pre><code>// In shared code\ninterface MaybeObjectWatcher {\nfun watch(watchedObject: Any, description: String)\n\nobject None : MaybeObjectWatcher {\noverride fun watch(watchedObject: Any, description: String) {\n}\n}\n}\n\n// In debug code\nclass RealObjectWatcher : MaybeObjectWatcher {\noverride fun watch(watchedObject: Any, description: String) {\nAppWatcher.objectWatcher.watch(watchedObject, description)\n}\n}\n</code></pre> <p>Use <code>MaybeObjectWatcher.None</code> in release code and <code>RealObjectWatcher</code> in debug code.</p>"},{"location":"upgrading-to-leakcanary-2.0/#configuring-leakcanary","title":"Configuring LeakCanary","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_3","title":"Before","text":"<pre><code>public class DebugExampleApplication extends ExampleApplication {\n\n@Override protected void installLeakCanary() {\nRefWatcher refWatcher = LeakCanary.refWatcher(this)\n.watchActivities(false)\n.buildAndInstall();\n}\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_3","title":"Now","text":"<p>AppWatcher is in charge of detecting retained objects. Its configuration can be updated at any time by replacing AppWatcher.config:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nAppWatcher.config = AppWatcher.config.copy(watchFragmentViews = false)\n}\n}\n</code></pre> <p>LeakCanary is in charge of taking heap dumps and analyzing them. Its configuration can be updated at any time by replacing LeakCanary.config:</p> <pre><code>disableLeakCanaryButton.setOnClickListener {\nLeakCanary.config = LeakCanary.config.copy(dumpHeap = false)\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#running-leakcanary-in-instrumentation-tests","title":"Running LeakCanary in instrumentation tests","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_4","title":"Before","text":"<p>In your <code>build.gradle</code> file:</p> <pre><code>dependencies {\nandroidTestImplementation \"com.squareup.leakcanary:leakcanary-android-instrumentation:${leakCanaryVersion}\"\n}\n\nandroid {\ndefaultConfig {\n// ...\n\ntestInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\ntestInstrumentationRunnerArgument \"listener\", \"com.squareup.leakcanary.FailTestOnLeakRunListener\"\n}\n}\n</code></pre> <p>In your test <code>Application</code> class:</p> <pre><code>public class InstrumentationTestExampleApplication extends DebugExampleApplication {\n@Override protected void installLeakCanary() {\nInstrumentationLeakDetector.instrumentationRefWatcher(this)\n.buildAndInstall();\n}\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_4","title":"Now","text":"<p>Remove all the previous test related leak detection code then follow Leak detection in UI tests.</p>"},{"location":"upgrading-to-leakcanary-2.0/#analysis-listener-uploading-to-a-server","title":"Analysis listener / uploading to a server","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_5","title":"Before","text":"<pre><code>public class LeakUploadService extends DisplayLeakService {\n@Override protected void afterDefaultHandling(HeapDump heapDump, AnalysisResult result, String leakInfo) {\n// TODO Upload result to server\n}\n}\n</code></pre> <pre><code>RefWatcher refWatcher = LeakCanary.refWatcher(this)\n.listenerServiceClass(LeakUploadService.class)\n.buildAndInstall();\n</code></pre> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n<application android:name=\"com.example.DebugExampleApplication\">\n<service android:name=\"com.example.LeakUploadService\" />\n</application>\n</manifest>\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_5","title":"Now","text":"<pre><code>class LeakUploader : OnHeapAnalyzedListener {\n\nval defaultListener = DefaultOnHeapAnalyzedListener.create()\n\noverride fun onHeapAnalyzed(heapAnalysis: HeapAnalysis) {\nTODO(\"Upload heap analysis to server\")\n\n// Delegate to default behavior (notification and saving result)\ndefaultListener.onHeapAnalyzed(heapAnalysis)\n}\n}\n\nclass DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nLeakCanary.config = LeakCanary.config.copy(\nonHeapAnalyzedListener = LeakUploader()\n)\n}\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#matching-known-library-leaks","title":"Matching known library leaks","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_6","title":"Before","text":"<pre><code>ExcludedRefs excludedRefs = AndroidExcludedRefs.createAppDefaults()\n.staticField(\"com.samsing.SomeSingleton\", \"sContext\")\n.build();\nRefWatcher refWatcher = LeakCanary.refWatcher(this)\n.excludedRefs(excludedRefs)\n.buildAndInstall();\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_6","title":"Now","text":"<pre><code>LeakCanary.config = LeakCanary.config.copy(\nreferenceMatchers = AndroidReferenceMatchers.appDefaults +\nAndroidReferenceMatchers.staticFieldLeak(\n\"com.samsing.SomeSingleton\",\n\"sContext\"\n)\n)\n</code></pre> <p>Info</p> <p>There is no equivalent API to <code>ExcludedRefs.Builder.clazz()</code> because it led to abuses. Instead see Ignoring specific activities or fragment classes.</p>"},{"location":"upgrading-to-leakcanary-2.0/#public-api-packages","title":"Public API packages","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_7","title":"Before","text":"<p>All public APIs were in <code>com.squareup.leakcanary.*</code></p>"},{"location":"upgrading-to-leakcanary-2.0/#now_7","title":"Now","text":"<p>All public APIs are in <code>leakcanary.*</code></p>"},{"location":"uploading/","title":"Uploading analysis results","text":"<p>You can add an <code>EventListener</code> to upload the analysis result to a server of your choosing:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nval analysisUploadListener = EventListener { event ->\nif (event is HeapAnalysisSucceeded) {\nval heapAnalysis = event.heapAnalysis\nTODO(\"Upload heap analysis to server\")\n}\n}\n\nLeakCanary.config = LeakCanary.config.run {\ncopy(eventListeners = eventListeners + analysisUploadListener)\n}\n}\n}\n</code></pre>"},{"location":"uploading/#uploading-to-bugsnag","title":"Uploading to Bugsnag","text":"<p>A leak trace has a lot in common with a stack trace, so if you lack the engineering resources to build a backend for LeakCanary, you can instead upload leak traces to a crash reporting backend. The client needs to support grouping via custom client-side hashing as well as custom metadata with support for newlines.</p> <p>Info</p> <p>As of this writing, the only known library suitable for uploading leaks is the Bugsnag client. If you managed to make it work with another library, please file an issue.</p> <p>Create a Bugsnag account, create a new project for leak reporting and grab an API key. Make sure the app has the <code>android.permission.INTERNET</code> permission then add the latest version of the Bugsnag Android client library to <code>build.gradle</code>:</p> <pre><code>dependencies {\n// debugImplementation because LeakCanary should only run in debug builds.\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'\ndebugImplementation \"com.bugsnag:bugsnag-android:$bugsnagVersion\"\n}\n</code></pre> <p>Info</p> <p>If you\u2019re only using Bugsnag for uploading leaks, then you do not need to set up the Bugsnag Gradle plugin or to configure the API key in your app manifest.</p> <p>Create a new <code>BugsnagLeakUploader</code>:</p> <pre><code>import android.app.Application\nimport com.bugsnag.android.Bugsnag\nimport com.bugsnag.android.Configuration\nimport com.bugsnag.android.ErrorTypes\nimport com.bugsnag.android.Event\nimport com.bugsnag.android.ThreadSendPolicy\nimport shark.HeapAnalysis\nimport shark.HeapAnalysisFailure\nimport shark.HeapAnalysisSuccess\nimport shark.Leak\nimport shark.LeakTrace\nimport shark.LeakTraceReference\nimport shark.LibraryLeak\n\nclass BugsnagLeakUploader(applicationContext: Application) {\n\nprivate val bugsnagClient = Bugsnag.start(\napplicationContext,\nConfiguration(\"YOUR_BUGSNAG_API_KEY\").apply {\nenabledErrorTypes = ErrorTypes(\nanrs = false,\nndkCrashes = false,\nunhandledExceptions = false,\nunhandledRejections = false\n)\nsendThreads = ThreadSendPolicy.NEVER\n}\n)\n\nfun upload(heapAnalysis: HeapAnalysis) {\nwhen (heapAnalysis) {\nis HeapAnalysisSuccess -> {\nval allLeakTraces = heapAnalysis\n.allLeaks\n.toList()\n.flatMap { leak ->\nleak.leakTraces.map { leakTrace -> leak to leakTrace }\n}\nif (allLeakTraces.isEmpty()) {\n// Track how often we perform a heap analysis that yields no result.\nbugsnagClient.notify(NoLeakException()) { event ->\nevent.addHeapAnalysis(heapAnalysis)\ntrue\n}\n} else {\nallLeakTraces.forEach { (leak, leakTrace) ->\nval message = \"Memory leak: ${leak.shortDescription}. See LEAK tab.\"\nval exception = leakTrace.asFakeException(message)\nbugsnagClient.notify(exception) { event ->\nevent.addHeapAnalysis(heapAnalysis)\nevent.addLeak(leak)\nevent.addLeakTrace(leakTrace)\nevent.groupingHash = leak.signature\ntrue\n}\n}\n}\n}\nis HeapAnalysisFailure -> {\n// Please file any reported failure to\n// https://github.com/square/leakcanary/issues\nbugsnagClient.notify(heapAnalysis.exception)\n}\n}\n}\n\nclass NoLeakException : RuntimeException()\n\nprivate fun Event.addHeapAnalysis(heapAnalysis: HeapAnalysisSuccess) {\naddMetadata(\"Leak\", \"heapDumpPath\", heapAnalysis.heapDumpFile.absolutePath)\nheapAnalysis.metadata.forEach { (key, value) ->\naddMetadata(\"Leak\", key, value)\n}\naddMetadata(\"Leak\", \"analysisDurationMs\", heapAnalysis.analysisDurationMillis)\n}\n\nprivate fun Event.addLeak(leak: Leak) {\naddMetadata(\"Leak\", \"libraryLeak\", leak is LibraryLeak)\nif (leak is LibraryLeak) {\naddMetadata(\"Leak\", \"libraryLeakPattern\", leak.pattern.toString())\naddMetadata(\"Leak\", \"libraryLeakDescription\", leak.description)\n}\n}\n\nprivate fun Event.addLeakTrace(leakTrace: LeakTrace) {\naddMetadata(\"Leak\", \"retainedHeapByteSize\", leakTrace.retainedHeapByteSize)\naddMetadata(\"Leak\", \"signature\", leakTrace.signature)\naddMetadata(\"Leak\", \"leakTrace\", leakTrace.toString())\n}\n\nprivate fun LeakTrace.asFakeException(message: String): RuntimeException {\nval exception = RuntimeException(message)\nval stackTrace = mutableListOf<StackTraceElement>()\nstackTrace.add(StackTraceElement(\"GcRoot\", gcRootType.name, \"GcRoot.kt\", 42))\nfor (cause in referencePath) {\nstackTrace.add(buildStackTraceElement(cause))\n}\nexception.stackTrace = stackTrace.toTypedArray()\nreturn exception\n}\n\nprivate fun buildStackTraceElement(reference: LeakTraceReference): StackTraceElement {\nval file = reference.owningClassName.substringAfterLast(\".\") + \".kt\"\nreturn StackTraceElement(reference.owningClassName, reference.referenceDisplayName, file, 42)\n}\n}\n</code></pre> <p>Then add an <code>EventListener</code> to upload the analysis result to Bugsnag:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nLeakCanary.config = LeakCanary.config.copy(\nonHeapAnalyzedListener = BugsnagLeakUploader(applicationContext = this)\n)\n}\n}\n</code></pre> <p>You should start seeing leaks reported into Bugsnag, grouped by their leak signature:</p> <p></p> <p>The <code>LEAK</code> tab contains the leak trace:</p> <p></p>"},{"location":"api/leakcanary/","title":"LeakCanary API","text":"<p>//leakcanary-repo/leakcanary</p>"},{"location":"api/leakcanary/#package-level-declarations","title":"Package-level declarations","text":""},{"location":"api/leakcanary/#types","title":"Types","text":"Name Summary ActivityWatcher [androidJvm]class ActivityWatcher(application: Application, deletableObjectReporter: DeletableObjectReporter) : InstallableWatcherExpects activities to become weakly reachable soon after they receive the Activity.onDestroy callback. AndroidDebugHeapDumper [androidJvm]object AndroidDebugHeapDumper : HeapDumperDumps the Android heap using Debug.dumpHprofData. AndroidDetectLeaksAssert [androidJvm]class AndroidDetectLeaksAssert(detectLeaksInterceptor: DetectLeaksInterceptor = AndroidDetectLeaksInterceptor(), heapAnalysisReporter: HeapAnalysisReporter = NoLeakAssertionFailedError.throwOnApplicationLeaks()) : DetectLeaksAssertDefault DetectLeaksAssert implementation. Uses public helpers so you should be able to create our own implementation if needed. AndroidDetectLeaksInterceptor [androidJvm]class AndroidDetectLeaksInterceptor(instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(), retainedObjectTracker: RetainedObjectTracker = AppWatcher.objectWatcher, retainedDelayMillis: Long = AppWatcher.retainedDelayMillis) : DetectLeaksInterceptor AndroidDeviceTempHeapDumpDirectoryProvider [androidJvm]class AndroidDeviceTempHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider AndroidLeakFixes [androidJvm]enum AndroidLeakFixes : Enum<AndroidLeakFixes> A collection of hacks to fix leaks in the Android Framework and other Google Android libraries. AppWatcher [androidJvm]object AppWatcherThe entry point API for using ObjectWatcher in an Android app. AppWatcher.objectWatcher is in charge of detecting retained objects, and AppWatcher is auto configured on app start to pass it activity and fragment instances. Call ObjectWatcher.watch on objectWatcher to watch any other object that you expect to be unreachable. AppWatcherStartupInitializer [androidJvm]class AppWatcherStartupInitializer : Initializer<AppWatcherStartupInitializer> BackgroundThreadHeapAnalyzer [androidJvm]object BackgroundThreadHeapAnalyzer : EventListenerStarts heap analysis on a background HandlerThread when receiving a HeapDump event. BackgroundTrigger [androidJvm]class BackgroundTrigger(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, processInfo: ProcessInfo = ProcessInfo.Real, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } }) ConditionalInterceptor [androidJvm]class ConditionalInterceptor(delegate: HeapAnalysisInterceptor, evaluateCondition: (HeapAnalysisJob) -> Boolean) : HeapAnalysisInterceptorAn interceptor that runs only when evaluateCondition returns true. DatetimeFormattedHeapDumpFileProvider [jvm]class DatetimeFormattedHeapDumpFileProvider(heapDumpDirectoryProvider: HeapDumpDirectoryProvider, dateProvider: () -> Date = { Date() }, prefixProvider: () -> String = { \"\" }, suffixProvider: () -> String = { \"\" }) : HeapDumpFileProvider DefaultDelayDeletableObjectReporter [jvm]class DefaultDelayDeletableObjectReporter(defaultDelay: Duration, delayedReporter: DelayedDeletableObjectReporter) : DeletableObjectReporter DelayedDeletableObjectReporter [jvm]class DelayedDeletableObjectReporter(deletableObjectReporter: TriggeredDeletableObjectReporter, delayedExecutor: DelayedExecutor) DelayedExecutor [jvm]fun interface DelayedExecutor DeletableObjectReporter [jvm]fun interface DeletableObjectReporter DetectLeaksAfterTestSuccess [androidJvm]class DetectLeaksAfterTestSuccess(tag: String = DetectLeaksAfterTestSuccess::class.java.simpleName) : TestRuleTestRule that invokes LeakAssertions.assertNoLeaks after the test successfully evaluates. Pay attention to where you set up this rule in the rule chain as you might detect different leaks (e.g. around vs wrapped by the activity rule). It\u2019s also possible to use this rule several times in a rule chain. DetectLeaksAssert [androidJvm]fun interface DetectLeaksAssertThe interface for the implementation that LeakAssertions.assertNoLeaks delegates to. You can call DetectLeaksAssert.update to provide your own implementation. DetectLeaksInterceptor [androidJvm]fun interface DetectLeaksInterceptorDecides whether to dump & analyze the heap to look for leaks in instrumentation tests. The implementation might block for a while to allow temporary leaks to be flushed out, as those aren\u2019t that interesting to report and heap analysis increases test duration significantly. DumpingHeapGraphProvider [jvm]class DumpingHeapGraphProvider(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpClosedListener: DumpingHeapGraphProvider.HeapDumpClosedListener = HeapDumpClosedListener {}) : HeapGraphProvider EventListener [androidJvm]fun interface EventListener FinalizingInProcessGcTrigger [jvm]object FinalizingInProcessGcTrigger : GcTriggerA GcTrigger that attempts to perform a GC by invoking the corresponding JDK API then waiting and then running finalization. Based on FinalizationTest in AOSP. FragmentAndViewModelWatcher [androidJvm]class FragmentAndViewModelWatcher(application: Application, deletableObjectReporter: DeletableObjectReporter) : InstallableWatcherExpects: GcTrigger [jvm]fun interface GcTrigger GoodAndroidVersionInterceptor [androidJvm]class GoodAndroidVersionInterceptor : HeapAnalysisInterceptor HeapAnalysisClient [androidJvm]class HeapAnalysisClient(heapDumpDirectoryProvider: () -> File, config: HeapAnalysisConfig, interceptors: List<HeapAnalysisInterceptor>) HeapAnalysisConfig [androidJvm]data class HeapAnalysisConfig(val referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, val objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, val metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, val computeRetainedHeapSize: Boolean = true, val leakingObjectFinder: LeakingObjectFinder = FilteringLeakingObjectFinder( AndroidObjectInspectors.appLeakingObjectFilters ), val stripHeapDump: Boolean = false, val proguardMappingProvider: () -> ProguardMapping? = { null }) HeapAnalysisDecision [androidJvm]sealed class HeapAnalysisDecision HeapAnalysisInterceptor [androidJvm]fun interface HeapAnalysisInterceptor HeapAnalysisJob [androidJvm]interface HeapAnalysisJobA HeapAnalysisJob represents a single prepared request to analyze the heap. It cannot be executed twice. HeapAnalysisReporter [androidJvm]fun interface HeapAnalysisReporterReports the results of a heap analysis created by AndroidDetectLeaksAssert. HeapDumpDirectoryProvider [jvm]fun interface HeapDumpDirectoryProvider HeapDumper [jvm]fun interface HeapDumper HeapDumpFileProvider [jvm]fun interface HeapDumpFileProvider HeapDumpStorageStrategy [jvm]interface HeapDumpStorageStrategy : DumpingHeapGraphProvider.HeapDumpClosedListener, RepeatingHeapGraphObjectGrowthDetector.CompletionListener HotSpotHeapDumper [jvm]object HotSpotHeapDumper : HeapDumper InstallableWatcher [androidJvm]interface InstallableWatcher JobContext [androidJvm]class JobContext(val starter: Class<*>? = null)In memory store that can be used to store objects in a given HeapAnalysisJob instance. This is a simple MutableMap of String to Any, but with unsafe generics access. KeyedWeakReference [jvm]class KeyedWeakReference(referent: Any, val key: String, val description: String, val watchUptimeMillis: Long, referenceQueue: ReferenceQueue<Any>) : WeakReference<Any> A weak reference used by ReferenceQueueRetainedObjectTracker to determine which objects become weakly reachable and which don\u2019t. ReferenceQueueRetainedObjectTracker uses key to keep track of KeyedWeakReference instances that haven\u2019t made it into the associated ReferenceQueue yet. LazyForwardingEventListener [androidJvm]class LazyForwardingEventListener(lazyEventListener: () -> EventListener) : EventListenerForwards events to the EventListener provided by lazyEventListener which is evaluated lazily, when the first comes in. LeakAssertions [androidJvm]object LeakAssertions LeakCanary [androidJvm]object LeakCanaryThe entry point API for LeakCanary. LeakCanary builds on top of AppWatcher. AppWatcher notifies LeakCanary of retained instances, which in turns dumps the heap, analyses it and publishes the results. LeakCanaryProcess [androidJvm]object LeakCanaryProcessUsed to determine whether the current process is the LeakCanary analyzer process. By depending on the <code>leakcanary-android-process</code> artifact instead of the <code>leakcanary-android</code>, LeakCanary will automatically run its analysis in a separate process. LogcatEventListener [androidJvm]object LogcatEventListener : EventListener LogcatSharkLog [androidJvm]class LogcatSharkLog : SharkLog.Logger MinimumDiskSpaceInterceptor [androidJvm]class MinimumDiskSpaceInterceptor(application: Application, minimumDiskSpaceBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor MinimumElapsedSinceStartInterceptor [androidJvm]class MinimumElapsedSinceStartInterceptor(minimumElapsedSinceStartMillis: Long = TimeUnit.SECONDS.toMillis(30), processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor MinimumMemoryInterceptor [androidJvm]class MinimumMemoryInterceptor(application: Application, minimumRequiredAvailableMemoryBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor NoLeakAssertionFailedError [androidJvm]class NoLeakAssertionFailedError(val heapAnalysis: HeapAnalysisSuccess) : AssertionErrorThrown when using the NoLeakAssertionFailedError.throwOnApplicationLeaks HeapAnalysisReporter NotificationEventListener [androidJvm]object NotificationEventListener : EventListener ObjectGrowthWarmupHeapDumper [jvm]class ObjectGrowthWarmupHeapDumper(objectGrowthDetector: ObjectGrowthDetector, delegate: HeapDumper, androidHeap: Boolean) : HeapDumper OncePerPeriodInterceptor [androidJvm]class OncePerPeriodInterceptor(application: Application, periodMillis: Long = TimeUnit.DAYS.toMillis(1)) : HeapAnalysisInterceptorProceeds once per period (of time) and then cancels all follow up jobs until period has passed. OnObjectRetainedListener [jvm]fun interface OnObjectRetainedListenerListener used by ReferenceQueueRetainedObjectTracker to report retained objects. PlumberStartupInitializer [androidJvm]class PlumberStartupInitializer : Initializer<PlumberStartupInitializer> ProcessInfo [androidJvm]interface ProcessInfo ReferenceQueueRetainedObjectTracker [jvm]class ReferenceQueueRetainedObjectTracker(clock: UptimeClock, onObjectRetainedListener: OnObjectRetainedListener) : RetainedObjectTracker, TriggeredDeletableObjectReporterReferenceQueueRetainedObjectTracker can be passed objects to expectDeletionOnTriggerFor. It will create KeyedWeakReference instances that reference tracked objects, and check if those references have been cleared as expected. If not, these objects are considered retained and ReferenceQueueRetainedObjectTracker will then notify registered OnObjectRetainedListeners. ReferenceQueueRetainedObjectTracker is thread safe. RemoteWorkManagerHeapAnalyzer [androidJvm]object RemoteWorkManagerHeapAnalyzer : EventListenerWhen receiving a HeapDump event, starts a WorkManager worker that performs heap analysis in a dedicated :leakcanary process RepositoryRootHeapDumpDirectoryProvider [jvm]class RepositoryRootHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider RetainedObjectTracker [jvm]interface RetainedObjectTrackerHelper util for tracking retained objects. RootViewWatcher [androidJvm]class RootViewWatcher(deletableObjectReporter: DeletableObjectReporter, rootViewFilter: RootViewWatcher.Filter = WindowTypeFilter(watchDismissedDialogs = false)) : InstallableWatcherExpects root views to become weakly reachable soon after they are removed from the window manager. SaveResourceIdsInterceptor [androidJvm]class SaveResourceIdsInterceptor(resources: Resources) : HeapAnalysisInterceptorInterceptor that saves the names of R.id.* entries and their associated int values to a static field that can then be read from the heap dump. ScreenOffTrigger [androidJvm]class ScreenOffTrigger(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } }) ServiceWatcher [androidJvm]class ServiceWatcher(deletableObjectReporter: DeletableObjectReporter) : InstallableWatcherExpects services to become weakly reachable soon after they receive the Service.onDestroy callback. SkipLeakDetection [androidJvm]@Target(allowedTargets = [AnnotationTarget.CLASS, AnnotationTarget.FUNCTION])annotation class SkipLeakDetection(val message: String, val assertionTags: String)Annotation for skipping leak detection in a UI test that calls LeakAssertions.assertNoLeaks. This annotation is useful to skip a leak detection in a test until the leaks are fixed. TargetContextHeapDumpDirectoryProvider [androidJvm]class TargetContextHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider TestDescriptionHolder [jvm]object TestDescriptionHolder : TestRuleA TestRule that holds onto the test Description in a thread local while evaluating, making it possible to retrieve that test Description from the test thread via testDescription. TestName [jvm]interface TestName TestNameProvider [jvm]object TestNameProvider ToastEventListener [androidJvm]object ToastEventListener : EventListener TrackedObjectReachability [jvm]interface TrackedObjectReachability TriggeredDeletableObjectReporter [jvm]interface TriggeredDeletableObjectReporterTracks deletion of target objects, marking them retained on trigger. TvEventListener [androidJvm]object TvEventListener : EventListener UiAutomatorShellFileDeleter [androidJvm]object UiAutomatorShellFileDeleter UiAutomatorShellHeapDumper [androidJvm]class UiAutomatorShellHeapDumper(withGc: Boolean, dumpedAppPackageName: String) : HeapDumper UptimeClock [jvm]fun interface UptimeClockAn interface to abstract the clock to get the system uptime. ViewLocationHolderLeakFix [androidJvm]object ViewLocationHolderLeakFix WorkManagerHeapAnalyzer [androidJvm]object WorkManagerHeapAnalyzer : EventListenerWhen receiving a HeapDump event, starts a WorkManager worker that performs heap analysis."},{"location":"api/leakcanary/#functions","title":"Functions","text":"Name Summary filteringInstances [jvm]inline fun <T> DeletableObjectReporter.filteringInstances(crossinline apply: (T) -> Boolean): DeletableObjectReporterCreates a wrapper around DeletableObjectReporter that will run any instance of T by apply to decide whether to forward to DeletableObjectReporter.expectDeletionFor calls. Objects that do not extend T will always be forwarded. forAndroidInProcess [androidJvm]fun HeapDumper.Companion.forAndroidInProcess(): AndroidDebugHeapDumper forJvmInProcess [jvm]fun HeapDumper.Companion.forJvmInProcess(): HotSpotHeapDumper forUiAutomatorAsShell [androidJvm]fun HeapDumper.Companion.forUiAutomatorAsShell(withGc: Boolean, dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName): UiAutomatorShellHeapDumper inProcess [jvm]fun GcTrigger.Companion.inProcess(): FinalizingInProcessGcTrigger repeatingAndroidInProcessScenario [androidJvm]fun HeapDiff.Companion.repeatingAndroidInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = TargetContextHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forAndroidInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = true), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for Android in process tests, such as Espresso tests. repeatingDumpingTestScenario [jvm]fun HeapDiff.Companion.repeatingDumpingTestScenario(objectGrowthDetector: ObjectGrowthDetector, heapDumpDirectoryProvider: HeapDumpDirectoryProvider, heapDumper: HeapDumper, heapDumpStorageStrategy: HeapDumpStorageStrategy): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for junit based automated tests that can dump the heap. repeatingJvmInProcessScenario [jvm]fun HeapDiff.Companion.repeatingJvmInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forJvmHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = RepositoryRootHeapDumpDirectoryProvider( \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forJvmInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = false), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for JVM in process tests. repeatingUiAutomatorScenario [androidJvm]fun HeapDiff.Companion.repeatingUiAutomatorScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName, heapDumpDirectoryProvider: HeapDumpDirectoryProvider = AndroidDeviceTempHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth_$dumpedAppPackageName\" ), heapDumper: HeapDumper = HeapDumper.forUiAutomatorAsShell( withGc = true, dumpedAppPackageName = dumpedAppPackageName ), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose { heapDumpFile -> UiAutomatorShellFileDeleter.deleteFileUsingShell(heapDumpFile) }): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for Android UI Automator tests. withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/datetime-formatted/","title":"Datetime formatted","text":"<p>//leakcanary-repo/leakcanary/datetimeFormatted</p>"},{"location":"api/leakcanary/datetime-formatted/#datetimeformatted","title":"datetimeFormatted","text":"<p>[jvm]\\ fun HeapDumpFileProvider.Companion.datetimeFormatted(directory: File, prefix: String = \"\", suffix: String = \"\", dateProvider: () -> Date = { Date() }): HeapDumpFileProvider</p>"},{"location":"api/leakcanary/dumping-and-deleting/","title":"Dumping and deleting","text":"<p>//leakcanary-repo/leakcanary/dumpingAndDeleting</p>"},{"location":"api/leakcanary/dumping-and-deleting/#dumpinganddeleting","title":"dumpingAndDeleting","text":"<p>[jvm]\\ fun HeapGraphProvider.Companion.dumpingAndDeleting(heapDumper: HeapDumper, heapDumpFileProvider: HeapDumpFileProvider = TempHeapDumpFileProvider, fileDeleter: FileDeleter = FileDeleter { it.delete() }): DumpingAndDeletingHeapGraphProvider</p>"},{"location":"api/leakcanary/filtering-instances/","title":"Filtering instances","text":"<p>//leakcanary-repo/leakcanary/filteringInstances</p>"},{"location":"api/leakcanary/filtering-instances/#filteringinstances","title":"filteringInstances","text":"<p>[jvm]\\ inline fun <T> DeletableObjectReporter.filteringInstances(crossinline apply: (T) -> Boolean): DeletableObjectReporter</p> <p>Creates a wrapper around DeletableObjectReporter that will run any instance of T by apply to decide whether to forward to DeletableObjectReporter.expectDeletionFor calls. Objects that do not extend T will always be forwarded.</p>"},{"location":"api/leakcanary/for-android-in-process/","title":"For android in process","text":"<p>//leakcanary-repo/leakcanary/forAndroidInProcess</p>"},{"location":"api/leakcanary/for-android-in-process/#forandroidinprocess","title":"forAndroidInProcess","text":"<p>[androidJvm]\\ fun HeapDumper.Companion.forAndroidInProcess(): AndroidDebugHeapDumper</p>"},{"location":"api/leakcanary/for-jvm-in-process/","title":"For jvm in process","text":"<p>//leakcanary-repo/leakcanary/forJvmInProcess</p>"},{"location":"api/leakcanary/for-jvm-in-process/#forjvminprocess","title":"forJvmInProcess","text":"<p>[jvm]\\ fun HeapDumper.Companion.forJvmInProcess(): HotSpotHeapDumper</p>"},{"location":"api/leakcanary/for-ui-automator-as-shell/","title":"For ui automator as shell","text":"<p>//leakcanary-repo/leakcanary/forUiAutomatorAsShell</p>"},{"location":"api/leakcanary/for-ui-automator-as-shell/#foruiautomatorasshell","title":"forUiAutomatorAsShell","text":"<p>[androidJvm]\\ fun HeapDumper.Companion.forUiAutomatorAsShell(withGc: Boolean, dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName): UiAutomatorShellHeapDumper</p>"},{"location":"api/leakcanary/in-process/","title":"In process","text":"<p>//leakcanary-repo/leakcanary/inProcess</p>"},{"location":"api/leakcanary/in-process/#inprocess","title":"inProcess","text":"<p>[jvm]\\ fun GcTrigger.Companion.inProcess(): FinalizingInProcessGcTrigger</p>"},{"location":"api/leakcanary/repeating-android-in-process-scenario/","title":"Repeating android in process scenario","text":"<p>//leakcanary-repo/leakcanary/repeatingAndroidInProcessScenario</p>"},{"location":"api/leakcanary/repeating-android-in-process-scenario/#repeatingandroidinprocessscenario","title":"repeatingAndroidInProcessScenario","text":"<p>[androidJvm]\\ fun HeapDiff.Companion.repeatingAndroidInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = TargetContextHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forAndroidInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = true), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetector</p> <p>Creates a RepeatingScenarioObjectGrowthDetector suitable for Android in process tests, such as Espresso tests.</p> <p>Dumps the heap by leveraging Android APIs, running an in process GC right before dumping.</p>"},{"location":"api/leakcanary/repeating-android-in-process-scenario/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/leakcanary/repeating-dumping-test-scenario/","title":"Repeating dumping test scenario","text":"<p>//leakcanary-repo/leakcanary/repeatingDumpingTestScenario</p>"},{"location":"api/leakcanary/repeating-dumping-test-scenario/#repeatingdumpingtestscenario","title":"repeatingDumpingTestScenario","text":"<p>[jvm]\\ fun HeapDiff.Companion.repeatingDumpingTestScenario(objectGrowthDetector: ObjectGrowthDetector, heapDumpDirectoryProvider: HeapDumpDirectoryProvider, heapDumper: HeapDumper, heapDumpStorageStrategy: HeapDumpStorageStrategy): RepeatingScenarioObjectGrowthDetector</p> <p>Creates a RepeatingScenarioObjectGrowthDetector suitable for junit based automated tests that can dump the heap.</p>"},{"location":"api/leakcanary/repeating-dumping-test-scenario/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/leakcanary/repeating-jvm-in-process-scenario/","title":"Repeating jvm in process scenario","text":"<p>//leakcanary-repo/leakcanary/repeatingJvmInProcessScenario</p>"},{"location":"api/leakcanary/repeating-jvm-in-process-scenario/#repeatingjvminprocessscenario","title":"repeatingJvmInProcessScenario","text":"<p>[jvm]\\ fun HeapDiff.Companion.repeatingJvmInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forJvmHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = RepositoryRootHeapDumpDirectoryProvider( \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forJvmInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = false), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetector</p> <p>Creates a RepeatingScenarioObjectGrowthDetector suitable for JVM in process tests.</p> <p>Dumps the heap by leveraging Hotspot APIs, running an in process GC right before dumping. Deletes the heap dump file as soon as we\u2019re done traversing it.</p>"},{"location":"api/leakcanary/repeating-jvm-in-process-scenario/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/leakcanary/repeating-ui-automator-scenario/","title":"Repeating ui automator scenario","text":"<p>//leakcanary-repo/leakcanary/repeatingUiAutomatorScenario</p>"},{"location":"api/leakcanary/repeating-ui-automator-scenario/#repeatinguiautomatorscenario","title":"repeatingUiAutomatorScenario","text":"<p>[androidJvm]\\ fun HeapDiff.Companion.repeatingUiAutomatorScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName, heapDumpDirectoryProvider: HeapDumpDirectoryProvider = AndroidDeviceTempHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth_$dumpedAppPackageName\" ), heapDumper: HeapDumper = HeapDumper.forUiAutomatorAsShell( withGc = true, dumpedAppPackageName = dumpedAppPackageName ), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose { heapDumpFile -> UiAutomatorShellFileDeleter.deleteFileUsingShell(heapDumpFile) }): RepeatingScenarioObjectGrowthDetector</p> <p>Creates a RepeatingScenarioObjectGrowthDetector suitable for Android UI Automator tests.</p> <p>Dumps the heap by leveraging adb, running a GC on API 27+ right before dumping.</p>"},{"location":"api/leakcanary/repeating-ui-automator-scenario/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/leakcanary/temp-file/","title":"Temp file","text":"<p>//leakcanary-repo/leakcanary/tempFile</p>"},{"location":"api/leakcanary/temp-file/#tempfile","title":"tempFile","text":"<p>[jvm]\\ fun HeapDumpFileProvider.Companion.tempFile(): HeapDumpFileProvider</p>"},{"location":"api/leakcanary/with-detector-warmup/","title":"With detector warmup","text":"<p>//leakcanary-repo/leakcanary/withDetectorWarmup</p>"},{"location":"api/leakcanary/with-detector-warmup/#withdetectorwarmup","title":"withDetectorWarmup","text":"<p>[jvm]\\ fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper</p>"},{"location":"api/leakcanary/with-gc/","title":"With gc","text":"<p>//leakcanary-repo/leakcanary/withGc</p>"},{"location":"api/leakcanary/with-gc/#withgc","title":"withGc","text":"<p>[jvm]\\ fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper</p>"},{"location":"api/leakcanary/-activity-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ActivityWatcher</p>"},{"location":"api/leakcanary/-activity-watcher/#activitywatcher","title":"ActivityWatcher","text":"<p>[androidJvm]\\ class ActivityWatcher(application: Application, deletableObjectReporter: DeletableObjectReporter) : InstallableWatcher</p> <p>Expects activities to become weakly reachable soon after they receive the Activity.onDestroy callback.</p>"},{"location":"api/leakcanary/-activity-watcher/#constructors","title":"Constructors","text":"ActivityWatcher [androidJvm]constructor(application: Application, reachabilityWatcher: ReachabilityWatcher)constructor(application: Application, deletableObjectReporter: DeletableObjectReporter)"},{"location":"api/leakcanary/-activity-watcher/#functions","title":"Functions","text":"Name Summary install [androidJvm]open override fun install() uninstall [androidJvm]open override fun uninstall()"},{"location":"api/leakcanary/-activity-watcher/-activity-watcher/","title":"activity watcher","text":"<p>//leakcanary-repo/leakcanary/ActivityWatcher/ActivityWatcher</p>"},{"location":"api/leakcanary/-activity-watcher/-activity-watcher/#activitywatcher","title":"ActivityWatcher","text":"<p>[androidJvm]\\ constructor(application: Application, reachabilityWatcher: ReachabilityWatcher)</p> <p>constructor(application: Application, deletableObjectReporter: DeletableObjectReporter)</p>"},{"location":"api/leakcanary/-activity-watcher/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/ActivityWatcher/install</p>"},{"location":"api/leakcanary/-activity-watcher/install/#install","title":"install","text":"<p>[androidJvm]\\ open override fun install()</p>"},{"location":"api/leakcanary/-activity-watcher/uninstall/","title":"Uninstall","text":"<p>//leakcanary-repo/leakcanary/ActivityWatcher/uninstall</p>"},{"location":"api/leakcanary/-activity-watcher/uninstall/#uninstall","title":"uninstall","text":"<p>[androidJvm]\\ open override fun uninstall()</p>"},{"location":"api/leakcanary/-android-debug-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidDebugHeapDumper</p>"},{"location":"api/leakcanary/-android-debug-heap-dumper/#androiddebugheapdumper","title":"AndroidDebugHeapDumper","text":"<p>[androidJvm]\\ object AndroidDebugHeapDumper : HeapDumper</p> <p>Dumps the Android heap using Debug.dumpHprofData.</p> <p>Note: despite being part of the Debug class, Debug.dumpHprofData can be called from non debuggable non profileable builds.</p>"},{"location":"api/leakcanary/-android-debug-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [androidJvm]open override fun dumpHeap(heapDumpFile: File) withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/-android-debug-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/AndroidDebugHeapDumper/dumpHeap</p>"},{"location":"api/leakcanary/-android-debug-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[androidJvm]\\ open override fun dumpHeap(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/#androiddetectleaksassert","title":"AndroidDetectLeaksAssert","text":"<p>[androidJvm]\\ class AndroidDetectLeaksAssert(detectLeaksInterceptor: DetectLeaksInterceptor = AndroidDetectLeaksInterceptor(), heapAnalysisReporter: HeapAnalysisReporter = NoLeakAssertionFailedError.throwOnApplicationLeaks()) : DetectLeaksAssert</p> <p>Default DetectLeaksAssert implementation. Uses public helpers so you should be able to create our own implementation if needed.</p> <p>Leak detection can be skipped by annotating tests with SkipLeakDetection which requires the TestDescriptionHolder test rule be applied and evaluating when assertNoLeaks is called.</p> <p>For improved leak detection, you should consider updating LeakCanary.Config.leakingObjectFinder to <code>FilteringLeakingObjectFinder(AndroidObjectInspectors.appLeakingObjectFilters)</code> when running in instrumentation tests. This changes leak detection from being incremental (based on AppWatcher to also scanning for all objects of known types in the heap).</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/#constructors","title":"Constructors","text":"AndroidDetectLeaksAssert [androidJvm]constructor(detectLeaksInterceptor: DetectLeaksInterceptor = AndroidDetectLeaksInterceptor(), heapAnalysisReporter: HeapAnalysisReporter = NoLeakAssertionFailedError.throwOnApplicationLeaks())"},{"location":"api/leakcanary/-android-detect-leaks-assert/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-android-detect-leaks-assert/#functions","title":"Functions","text":"Name Summary assertNoLeaks [androidJvm]open override fun assertNoLeaks(tag: String)"},{"location":"api/leakcanary/-android-detect-leaks-assert/-android-detect-leaks-assert/","title":"android detect leaks assert","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/AndroidDetectLeaksAssert</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-android-detect-leaks-assert/#androiddetectleaksassert","title":"AndroidDetectLeaksAssert","text":"<p>[androidJvm]\\ constructor(detectLeaksInterceptor: DetectLeaksInterceptor = AndroidDetectLeaksInterceptor(), heapAnalysisReporter: HeapAnalysisReporter = NoLeakAssertionFailedError.throwOnApplicationLeaks())</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/assert-no-leaks/","title":"Assert no leaks","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/assertNoLeaks</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/assert-no-leaks/#assertnoleaks","title":"assertNoLeaks","text":"<p>[androidJvm]\\ open override fun assertNoLeaks(tag: String)</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/Companion</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/#properties","title":"Properties","text":"Name Summary assertionTag [androidJvm]val HeapAnalysisSuccess.assertionTag: String? totalDurationMillis [androidJvm]val HeapAnalysisSuccess.totalDurationMillis: Int? waitForRetainedDurationMillis [androidJvm]val HeapAnalysisSuccess.waitForRetainedDurationMillis: Int?"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/assertion-tag/","title":"Assertion tag","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/Companion/assertionTag</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/assertion-tag/#assertiontag","title":"assertionTag","text":"<p>[androidJvm]\\ val HeapAnalysisSuccess.assertionTag: String?</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/total-duration-millis/","title":"Total duration millis","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/Companion/totalDurationMillis</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/total-duration-millis/#totaldurationmillis","title":"totalDurationMillis","text":"<p>[androidJvm]\\ val HeapAnalysisSuccess.totalDurationMillis: Int?</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/wait-for-retained-duration-millis/","title":"Wait for retained duration millis","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/Companion/waitForRetainedDurationMillis</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/wait-for-retained-duration-millis/#waitforretaineddurationmillis","title":"waitForRetainedDurationMillis","text":"<p>[androidJvm]\\ val HeapAnalysisSuccess.waitForRetainedDurationMillis: Int?</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksInterceptor</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/#androiddetectleaksinterceptor","title":"AndroidDetectLeaksInterceptor","text":"<p>[androidJvm]\\ class AndroidDetectLeaksInterceptor(instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(), retainedObjectTracker: RetainedObjectTracker = AppWatcher.objectWatcher, retainedDelayMillis: Long = AppWatcher.retainedDelayMillis) : DetectLeaksInterceptor</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/#constructors","title":"Constructors","text":"AndroidDetectLeaksInterceptor [androidJvm]constructor(instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(), retainedObjectTracker: RetainedObjectTracker = AppWatcher.objectWatcher, retainedDelayMillis: Long = AppWatcher.retainedDelayMillis)"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/#functions","title":"Functions","text":"Name Summary waitUntilReadyForHeapAnalysis [androidJvm]open override fun waitUntilReadyForHeapAnalysis(): HeapAnalysisDecision"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/-android-detect-leaks-interceptor/","title":"android detect leaks interceptor","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksInterceptor/AndroidDetectLeaksInterceptor</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/-android-detect-leaks-interceptor/#androiddetectleaksinterceptor","title":"AndroidDetectLeaksInterceptor","text":"<p>[androidJvm]\\ constructor(instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(), retainedObjectTracker: RetainedObjectTracker = AppWatcher.objectWatcher, retainedDelayMillis: Long = AppWatcher.retainedDelayMillis)</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/wait-until-ready-for-heap-analysis/","title":"Wait until ready for heap analysis","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksInterceptor/waitUntilReadyForHeapAnalysis</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/wait-until-ready-for-heap-analysis/#waituntilreadyforheapanalysis","title":"waitUntilReadyForHeapAnalysis","text":"<p>[androidJvm]\\ open override fun waitUntilReadyForHeapAnalysis(): HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidDeviceTempHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/#androiddevicetempheapdumpdirectoryprovider","title":"AndroidDeviceTempHeapDumpDirectoryProvider","text":"<p>[androidJvm]\\ class AndroidDeviceTempHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/#constructors","title":"Constructors","text":"AndroidDeviceTempHeapDumpDirectoryProvider [androidJvm]constructor(heapDumpDirectoryName: String)"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/#functions","title":"Functions","text":"Name Summary heapDumpDirectory [androidJvm]open override fun heapDumpDirectory(): File"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/-android-device-temp-heap-dump-directory-provider/","title":"android device temp heap dump directory provider","text":"<p>//leakcanary-repo/leakcanary/AndroidDeviceTempHeapDumpDirectoryProvider/AndroidDeviceTempHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/-android-device-temp-heap-dump-directory-provider/#androiddevicetempheapdumpdirectoryprovider","title":"AndroidDeviceTempHeapDumpDirectoryProvider","text":"<p>[androidJvm]\\ constructor(heapDumpDirectoryName: String)</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/heap-dump-directory/","title":"Heap dump directory","text":"<p>//leakcanary-repo/leakcanary/AndroidDeviceTempHeapDumpDirectoryProvider/heapDumpDirectory</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/heap-dump-directory/#heapdumpdirectory","title":"heapDumpDirectory","text":"<p>[androidJvm]\\ open override fun heapDumpDirectory(): File</p>"},{"location":"api/leakcanary/-android-leak-fixes/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes</p>"},{"location":"api/leakcanary/-android-leak-fixes/#androidleakfixes","title":"AndroidLeakFixes","text":"<p>[androidJvm]\\ enum AndroidLeakFixes : Enum<AndroidLeakFixes> </p> <p>A collection of hacks to fix leaks in the Android Framework and other Google Android libraries.</p>"},{"location":"api/leakcanary/-android-leak-fixes/#entries","title":"Entries","text":"MEDIA_SESSION_LEGACY_HELPER [androidJvm]MEDIA_SESSION_LEGACY_HELPERMediaSessionLegacyHelper is a static singleton and did not use the application context. Introduced in android-5.0.1_r1, fixed in Android 5.1.0_r1. https://github.com/android/platform_frameworks_base/commit/9b5257c9c99c4cb541d8e8e78fb04f008b1a9091 TEXT_LINE_POOL [androidJvm]TEXT_LINE_POOLThis flushes the TextLine pool when an activity is destroyed, to prevent memory leaks. USER_MANAGER [androidJvm]USER_MANAGERObtaining the UserManager service ends up calling the hidden UserManager.get() method which stores the context in a singleton UserManager instance and then stores that instance in a static field. FLUSH_HANDLER_THREADS [androidJvm]FLUSH_HANDLER_THREADSHandlerThread instances keep local reference to their last handled message after recycling it. That message is obtained by a dialog which sets on an OnClickListener on it and then never recycles it, expecting it to be garbage collected but it ends up being held by the HandlerThread. ACCESSIBILITY_NODE_INFO [androidJvm]ACCESSIBILITY_NODE_INFOUntil API 28, AccessibilityNodeInfo has a mOriginalText field that was not properly cleared when instance were put back in the pool. Leak introduced here: https://android.googlesource.com/platform/frameworks/base/+/193520e3dff5248ddcf8435203bf99d2ba667219%5E%21/core/java/android/view/accessibility/AccessibilityNodeInfo.java CONNECTIVITY_MANAGER [androidJvm]CONNECTIVITY_MANAGERConnectivityManager has a sInstance field that is set when the first ConnectivityManager instance is created. ConnectivityManager has a mContext field. When calling activity.getSystemService(Context.CONNECTIVITY_SERVICE) , the first ConnectivityManager instance is created with the activity context and stored in sInstance. That activity context then leaks forever. SAMSUNG_CLIPBOARD_MANAGER [androidJvm]SAMSUNG_CLIPBOARD_MANAGERClipboardUIManager is a static singleton that leaks an activity context. This fix makes sure the manager is called with an application context. BUBBLE_POPUP [androidJvm]BUBBLE_POPUPA static helper for EditText bubble popups leaks a reference to the latest focused view. LAST_HOVERED_VIEW [androidJvm]LAST_HOVERED_VIEWmLastHoveredView is a static field in TextView that leaks the last hovered view. ACTIVITY_MANAGER [androidJvm]ACTIVITY_MANAGERSamsung added a static mContext field to ActivityManager, holding a reference to the activity. VIEW_LOCATION_HOLDER [androidJvm]VIEW_LOCATION_HOLDERIn Android P, ViewLocationHolder has an mRoot field that is not cleared in its clear() method. Introduced in https://github.com/aosp-mirror/platform_frameworks_base/commit/86b326012813f09d8f1de7d6d26c986a909d IMM_FOCUSED_VIEW [androidJvm]IMM_FOCUSED_VIEWFix for https://code.google.com/p/android/issues/detail?id=171190 . IMM_CUR_ROOT_VIEW [androidJvm]IMM_CUR_ROOT_VIEWWhen an activity is destroyed, the corresponding ViewRootImpl instance is released and ready to be garbage collected. Some time after that, ViewRootImpl#W receives a windowfocusChanged() callback, which it normally delegates to ViewRootImpl which in turn calls InputMethodManager#onPreWindowFocus which clears InputMethodManager#mCurRootView. SPELL_CHECKER [androidJvm]SPELL_CHECKEREvery editable TextView has an Editor instance which has a SpellChecker instance. SpellChecker is in charge of displaying the little squiggle spans that show typos. SpellChecker starts a SpellCheckerSession as needed and then closes it when the TextView is detached from the window. A SpellCheckerSession is in charge of communicating with the spell checker service (which lives in another process) through TextServicesManager. PERMISSION_CONTROLLER_MANAGER [androidJvm]PERMISSION_CONTROLLER_MANAGERPermissionControllerManager stores the first context it\u2019s initialized with forever. Sometimes it\u2019s an Activity context which then leaks after Activity is destroyed."},{"location":"api/leakcanary/-android-leak-fixes/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-android-leak-fixes/#functions","title":"Functions","text":"Name Summary valueOf [androidJvm]fun valueOf(value: String): AndroidLeakFixesReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [androidJvm]fun values(): Array<AndroidLeakFixes>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/leakcanary/-android-leak-fixes/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/value-of/","title":"Value of","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/valueOf</p>"},{"location":"api/leakcanary/-android-leak-fixes/value-of/#valueof","title":"valueOf","text":"<p>[androidJvm]\\ fun valueOf(value: String): AndroidLeakFixes</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/leakcanary/-android-leak-fixes/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/leakcanary/-android-leak-fixes/values/","title":"Values","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/values</p>"},{"location":"api/leakcanary/-android-leak-fixes/values/#values","title":"values","text":"<p>[androidJvm]\\ fun values(): Array<AndroidLeakFixes></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/ACCESSIBILITY_NODE_INFO</p>"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o/#accessibility_node_info","title":"ACCESSIBILITY_NODE_INFO","text":"<p>[androidJvm]\\ ACCESSIBILITY_NODE_INFO</p> <p>Until API 28, AccessibilityNodeInfo has a mOriginalText field that was not properly cleared when instance were put back in the pool. Leak introduced here: https://android.googlesource.com/platform/frameworks/base/+/193520e3dff5248ddcf8435203bf99d2ba667219%5E%21/core/java/android/view/accessibility/AccessibilityNodeInfo.java</p> <p>Fixed here: https://android.googlesource.com/platform/frameworks/base/+/6f8ec1fd8c159b09d617ed6d9132658051443c0c</p>"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/ACTIVITY_MANAGER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/#activity_manager","title":"ACTIVITY_MANAGER","text":"<p>[androidJvm]\\ ACTIVITY_MANAGER</p> <p>Samsung added a static mContext field to ActivityManager, holding a reference to the activity.</p> <p>This fix clears the field when an activity is destroyed if it refers to this specific activity.</p> <p>Observed here: https://github.com/square/leakcanary/issues/177</p>"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-b-u-b-b-l-e_-p-o-p-u-p/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/BUBBLE_POPUP</p>"},{"location":"api/leakcanary/-android-leak-fixes/-b-u-b-b-l-e_-p-o-p-u-p/#bubble_popup","title":"BUBBLE_POPUP","text":"<p>[androidJvm]\\ BUBBLE_POPUP</p> <p>A static helper for EditText bubble popups leaks a reference to the latest focused view.</p> <p>This fix clears it when the activity is destroyed.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-b-u-b-b-l-e_-p-o-p-u-p/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/CONNECTIVITY_MANAGER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/#connectivity_manager","title":"CONNECTIVITY_MANAGER","text":"<p>[androidJvm]\\ CONNECTIVITY_MANAGER</p> <p>ConnectivityManager has a sInstance field that is set when the first ConnectivityManager instance is created. ConnectivityManager has a mContext field. When calling activity.getSystemService(Context.CONNECTIVITY_SERVICE) , the first ConnectivityManager instance is created with the activity context and stored in sInstance. That activity context then leaks forever.</p> <p>This fix makes sure the connectivity manager is created with the application context.</p> <p>Tracked here: https://code.google.com/p/android/issues/detail?id=198852 Introduced here: https://github.com/android/platform_frameworks_base/commit/e0bef71662d81caaaa0d7214fb0bef5d39996a69</p>"},{"location":"api/leakcanary/-android-leak-fixes/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/Companion</p>"},{"location":"api/leakcanary/-android-leak-fixes/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-android-leak-fixes/-companion/#functions","title":"Functions","text":"Name Summary applyFixes [androidJvm]fun applyFixes(application: Application, fixes: Set<AndroidLeakFixes> = EnumSet.allOf(AndroidLeakFixes::class.java))"},{"location":"api/leakcanary/-android-leak-fixes/-companion/apply-fixes/","title":"Apply fixes","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/Companion/applyFixes</p>"},{"location":"api/leakcanary/-android-leak-fixes/-companion/apply-fixes/#applyfixes","title":"applyFixes","text":"<p>[androidJvm]\\ fun applyFixes(application: Application, fixes: Set<AndroidLeakFixes> = EnumSet.allOf(AndroidLeakFixes::class.java))</p>"},{"location":"api/leakcanary/-android-leak-fixes/-f-l-u-s-h_-h-a-n-d-l-e-r_-t-h-r-e-a-d-s/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/FLUSH_HANDLER_THREADS</p>"},{"location":"api/leakcanary/-android-leak-fixes/-f-l-u-s-h_-h-a-n-d-l-e-r_-t-h-r-e-a-d-s/#flush_handler_threads","title":"FLUSH_HANDLER_THREADS","text":"<p>[androidJvm]\\ FLUSH_HANDLER_THREADS</p> <p>HandlerThread instances keep local reference to their last handled message after recycling it. That message is obtained by a dialog which sets on an OnClickListener on it and then never recycles it, expecting it to be garbage collected but it ends up being held by the HandlerThread.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-f-l-u-s-h_-h-a-n-d-l-e-r_-t-h-r-e-a-d-s/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-c-u-r_-r-o-o-t_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/IMM_CUR_ROOT_VIEW</p>"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-c-u-r_-r-o-o-t_-v-i-e-w/#imm_cur_root_view","title":"IMM_CUR_ROOT_VIEW","text":"<p>[androidJvm]\\ IMM_CUR_ROOT_VIEW</p> <p>When an activity is destroyed, the corresponding ViewRootImpl instance is released and ready to be garbage collected. Some time after that, ViewRootImpl#W receives a windowfocusChanged() callback, which it normally delegates to ViewRootImpl which in turn calls InputMethodManager#onPreWindowFocus which clears InputMethodManager#mCurRootView.</p> <p>Unfortunately, since the ViewRootImpl instance is garbage collectable it may be garbage collected before that happens. ViewRootImpl#W has a weak reference on ViewRootImpl, so that weak reference will then return null and the windowfocusChanged() callback will be ignored, leading to InputMethodManager#mCurRootView not being cleared.</p> <p>Filed here: https://issuetracker.google.com/u/0/issues/116078227 Fixed here: https://android.googlesource.com/platform/frameworks/base/+/dff365ef4dc61239fac70953b631e92972a9f41f%5E%21/#F0 InputMethodManager.mCurRootView is part of the unrestricted grey list on Android 9: https://android.googlesource.com/platform/frameworks/base/+/pie-release/config/hiddenapi-light-greylist.txt#6057</p>"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-c-u-r_-r-o-o-t_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-f-o-c-u-s-e-d_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/IMM_FOCUSED_VIEW</p>"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-f-o-c-u-s-e-d_-v-i-e-w/#imm_focused_view","title":"IMM_FOCUSED_VIEW","text":"<p>[androidJvm]\\ IMM_FOCUSED_VIEW</p> <p>Fix for https://code.google.com/p/android/issues/detail?id=171190 .</p> <p>When a view that has focus gets detached, we wait for the main thread to be idle and then check if the InputMethodManager is leaking a view. If yes, we tell it that the decor view got focus, which is what happens if you press home and come back from recent apps. This replaces the reference to the detached view with a reference to the decor view.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-f-o-c-u-s-e-d_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/LAST_HOVERED_VIEW</p>"},{"location":"api/leakcanary/-android-leak-fixes/-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/#last_hovered_view","title":"LAST_HOVERED_VIEW","text":"<p>[androidJvm]\\ LAST_HOVERED_VIEW</p> <p>mLastHoveredView is a static field in TextView that leaks the last hovered view.</p> <p>This fix clears it when the activity is destroyed.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/MEDIA_SESSION_LEGACY_HELPER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r/#media_session_legacy_helper","title":"MEDIA_SESSION_LEGACY_HELPER","text":"<p>[androidJvm]\\ MEDIA_SESSION_LEGACY_HELPER</p> <p>MediaSessionLegacyHelper is a static singleton and did not use the application context. Introduced in android-5.0.1_r1, fixed in Android 5.1.0_r1. https://github.com/android/platform_frameworks_base/commit/9b5257c9c99c4cb541d8e8e78fb04f008b1a9091</p> <p>We fix this leak by invoking MediaSessionLegacyHelper.getHelper() early in the app lifecycle.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/PERMISSION_CONTROLLER_MANAGER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/#permission_controller_manager","title":"PERMISSION_CONTROLLER_MANAGER","text":"<p>[androidJvm]\\ PERMISSION_CONTROLLER_MANAGER</p> <p>PermissionControllerManager stores the first context it\u2019s initialized with forever. Sometimes it\u2019s an Activity context which then leaks after Activity is destroyed.</p> <p>This fix makes sure the PermissionControllerManager is created with the application context.</p> <p>For Pixel devices the issue can be tracked here https://issuetracker.google.com/issues/318415056</p>"},{"location":"api/leakcanary/-android-leak-fixes/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-s-a-m-s-u-n-g_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/SAMSUNG_CLIPBOARD_MANAGER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-s-a-m-s-u-n-g_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r/#samsung_clipboard_manager","title":"SAMSUNG_CLIPBOARD_MANAGER","text":"<p>[androidJvm]\\ SAMSUNG_CLIPBOARD_MANAGER</p> <p>ClipboardUIManager is a static singleton that leaks an activity context. This fix makes sure the manager is called with an application context.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-s-a-m-s-u-n-g_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-s-p-e-l-l_-c-h-e-c-k-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/SPELL_CHECKER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-s-p-e-l-l_-c-h-e-c-k-e-r/#spell_checker","title":"SPELL_CHECKER","text":"<p>[androidJvm]\\ SPELL_CHECKER</p> <p>Every editable TextView has an Editor instance which has a SpellChecker instance. SpellChecker is in charge of displaying the little squiggle spans that show typos. SpellChecker starts a SpellCheckerSession as needed and then closes it when the TextView is detached from the window. A SpellCheckerSession is in charge of communicating with the spell checker service (which lives in another process) through TextServicesManager.</p> <p>The SpellChecker sends the TextView content to the spell checker service every 400ms, ie every time the service calls back with a result the SpellChecker schedules another check for 400ms later.</p> <p>When the TextView is detached from the window, the spell checker closes the session. In practice, SpellCheckerSessionListenerImpl.mHandler is set to null and when the service calls SpellCheckerSessionListenerImpl.onGetSuggestions or SpellCheckerSessionListenerImpl.onGetSentenceSuggestions back from another process, there\u2019s a null check for SpellCheckerSessionListenerImpl.mHandler and the callback is dropped.</p> <p>Unfortunately, on Android M there\u2019s a race condition in how that\u2019s done. When the service calls back into our app process, the IPC call is received on a binder thread. That\u2019s when the null check happens. If the session is not closed at this point (mHandler not null), the callback is then posted to the main thread. If on the main thread the session is closed after that post but prior to that post being handled, then the post will still be processed, after the session has been closed.</p> <p>When the post is processed, SpellCheckerSession calls back into SpellChecker which in turns schedules a new spell check to be ran in 400ms. The check is an anonymous inner class (SpellChecker$1) stored as SpellChecker.mSpellRunnable and implementing Runnable. It is scheduled by calling View.postDelayed. As we\u2019ve seen, at this point the session may be closed which means that the view has been detached. View.postDelayed behaves differently when a view is detached: instead of posting to the single Handler used by the view hierarchy, it enqueues the Runnable into ViewRootImpl.RunQueue, a static queue that holds on to \"actions\" to be executed. As soon as a view hierarchy is attached, the ViewRootImpl.RunQueue is processed and emptied.</p> <p>Unfortunately, that means that as long as no view hierarchy is attached, ie as long as there are no activities alive, the actions stay in ViewRootImpl.RunQueue. That means SpellChecker$1 ends up being kept in memory. It holds on to SpellChecker which in turns holds on to the detached TextView and corresponding destroyed activity & view hierarchy.</p> <p>We have a fix for this! When the spell check session is closed, we replace SpellCheckerSession.mSpellCheckerSessionListener (which normally is the SpellChecker) with a no-op implementation. So even if callbacks are enqueued to the main thread handler, these callbacks will call the no-op implementation and SpellChecker will not be scheduling a spell check.</p> <p>Sources to corroborate:</p> <p>https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release/core/java/android/view/textservice/SpellCheckerSession.java https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release/core/java/android/view/textservice/TextServicesManager.java https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release/core/java/android/widget/SpellChecker.java https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release/core/java/android/view/ViewRootImpl.java</p>"},{"location":"api/leakcanary/-android-leak-fixes/-s-p-e-l-l_-c-h-e-c-k-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-t-e-x-t_-l-i-n-e_-p-o-o-l/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/TEXT_LINE_POOL</p>"},{"location":"api/leakcanary/-android-leak-fixes/-t-e-x-t_-l-i-n-e_-p-o-o-l/#text_line_pool","title":"TEXT_LINE_POOL","text":"<p>[androidJvm]\\ TEXT_LINE_POOL</p> <p>This flushes the TextLine pool when an activity is destroyed, to prevent memory leaks.</p> <p>The first memory leak has been fixed in android-5.1.0_r1 https://github.com/android/platform_frameworks_base/commit/893d6fe48d37f71e683f722457bea646994a10bf</p> <p>Second memory leak: https://github.com/android/platform_frameworks_base/commit/b3a9bc038d3a218b1dbdf7b5668e3d6c12be5ee4</p>"},{"location":"api/leakcanary/-android-leak-fixes/-t-e-x-t_-l-i-n-e_-p-o-o-l/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-u-s-e-r_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/USER_MANAGER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-u-s-e-r_-m-a-n-a-g-e-r/#user_manager","title":"USER_MANAGER","text":"<p>[androidJvm]\\ USER_MANAGER</p> <p>Obtaining the UserManager service ends up calling the hidden UserManager.get() method which stores the context in a singleton UserManager instance and then stores that instance in a static field.</p> <p>We obtain the user manager from an activity context, so if it hasn\u2019t been created yet it will leak that activity forever.</p> <p>This fix makes sure the UserManager is created and holds on to the Application context.</p> <p>Issue: https://code.google.com/p/android/issues/detail?id=173789</p> <p>Fixed in https://android.googlesource.com/platform/frameworks/base/+/5200e1cb07190a1f6874d72a4561064cad3ee3e0%5E%21/#F0 (Android O)</p>"},{"location":"api/leakcanary/-android-leak-fixes/-u-s-e-r_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-v-i-e-w_-l-o-c-a-t-i-o-n_-h-o-l-d-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/VIEW_LOCATION_HOLDER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-v-i-e-w_-l-o-c-a-t-i-o-n_-h-o-l-d-e-r/#view_location_holder","title":"VIEW_LOCATION_HOLDER","text":"<p>[androidJvm]\\ VIEW_LOCATION_HOLDER</p> <p>In Android P, ViewLocationHolder has an mRoot field that is not cleared in its clear() method. Introduced in https://github.com/aosp-mirror/platform_frameworks_base/commit/86b326012813f09d8f1de7d6d26c986a909d</p> <p>This leaks triggers very often when accessibility is on. To fix this leak we need to clear the ViewGroup.ViewLocationHolder.sPool pool. Unfortunately Android P prevents accessing that field through reflection. So instead, we call ViewGroup#addChildrenForAccessibility with a view group that has 32 children (32 being the pool size), which as result fills in the pool with 32 dumb views that reference a dummy context instead of an activity context.</p> <p>This fix empties the pool on every activity destroy and every AndroidX fragment view destroy. You can support other cases where views get detached by calling directly ViewLocationHolderLeakFix.clearStaticPool.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-v-i-e-w_-l-o-c-a-t-i-o-n_-h-o-l-d-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-app-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AppWatcher</p>"},{"location":"api/leakcanary/-app-watcher/#appwatcher","title":"AppWatcher","text":"<p>[androidJvm]\\ object AppWatcher</p> <p>The entry point API for using ObjectWatcher in an Android app. AppWatcher.objectWatcher is in charge of detecting retained objects, and AppWatcher is auto configured on app start to pass it activity and fragment instances. Call ObjectWatcher.watch on objectWatcher to watch any other object that you expect to be unreachable.</p>"},{"location":"api/leakcanary/-app-watcher/#functions","title":"Functions","text":"Name Summary appDefaultWatchers [androidJvm]fun appDefaultWatchers(application: Application, deletableObjectReporter: DeletableObjectReporter = objectWatcher.asDeletableObjectReporter()): List<InstallableWatcher>Creates a new list of default app InstallableWatcher, created with the passed in deletableObjectReporter (which defaults to objectWatcher). Once installed, these watchers will pass in to deletableObjectReporter objects that they expect to become weakly reachable. manualInstall [androidJvm]@JvmOverloadsfun manualInstall(application: Application, retainedDelayMillis: Long = TimeUnit.SECONDS.toMillis(5), watchersToInstall: List<InstallableWatcher> = appDefaultWatchers(application))Enables usage of AppWatcher.objectWatcher which will expect passed in objects to become weakly reachable within retainedDelayMillis ms and if not will trigger LeakCanary (if LeakCanary is in the classpath)."},{"location":"api/leakcanary/-app-watcher/#properties","title":"Properties","text":"Name Summary isInstalled [androidJvm]val isInstalled: Boolean objectWatcher [androidJvm]val objectWatcher: ObjectWatcherThe ObjectWatcher used by AppWatcher to detect retained objects. Only set when isInstalled is true. retainedDelayMillis [androidJvm]@Volatilevar retainedDelayMillis: Long"},{"location":"api/leakcanary/-app-watcher/app-default-watchers/","title":"App default watchers","text":"<p>//leakcanary-repo/leakcanary/AppWatcher/appDefaultWatchers</p>"},{"location":"api/leakcanary/-app-watcher/app-default-watchers/#appdefaultwatchers","title":"appDefaultWatchers","text":"<p>[androidJvm]\\ fun appDefaultWatchers(application: Application, deletableObjectReporter: DeletableObjectReporter = objectWatcher.asDeletableObjectReporter()): List<InstallableWatcher></p> <p>Creates a new list of default app InstallableWatcher, created with the passed in deletableObjectReporter (which defaults to objectWatcher). Once installed, these watchers will pass in to deletableObjectReporter objects that they expect to become weakly reachable.</p> <p>The passed in deletableObjectReporter should probably delegate to objectWatcher but can be used to filter out specific instances.</p>"},{"location":"api/leakcanary/-app-watcher/is-installed/","title":"Is installed","text":"<p>//leakcanary-repo/leakcanary/AppWatcher/isInstalled</p>"},{"location":"api/leakcanary/-app-watcher/is-installed/#isinstalled","title":"isInstalled","text":"<p>[androidJvm]\\ val isInstalled: Boolean</p>"},{"location":"api/leakcanary/-app-watcher/is-installed/#see-also","title":"See also","text":"AppWatcher.manualInstall"},{"location":"api/leakcanary/-app-watcher/manual-install/","title":"Manual install","text":"<p>//leakcanary-repo/leakcanary/AppWatcher/manualInstall</p>"},{"location":"api/leakcanary/-app-watcher/manual-install/#manualinstall","title":"manualInstall","text":"<p>[androidJvm]\\</p> <p>@JvmOverloads</p> <p>fun manualInstall(application: Application, retainedDelayMillis: Long = TimeUnit.SECONDS.toMillis(5), watchersToInstall: List<InstallableWatcher> = appDefaultWatchers(application))</p> <p>Enables usage of AppWatcher.objectWatcher which will expect passed in objects to become weakly reachable within retainedDelayMillis ms and if not will trigger LeakCanary (if LeakCanary is in the classpath).</p> <p>In the main process, this method is automatically called with default parameter values on app startup. You can call this method directly to customize the installation, however you must first disable the automatic call by overriding the <code>leak_canary_watcher_auto_install</code> boolean resource:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<bool name=\"leak_canary_watcher_auto_install\">false</bool>\n</resources>\n</code></pre> <p>watchersToInstall can be customized to a subset of the default app watchers:</p> <pre><code>val watchersToInstall = AppWatcher.appDefaultWatchers(application)\n.filter { it !is RootViewWatcher }\nAppWatcher.manualInstall(\napplication = application,\nwatchersToInstall = watchersToInstall\n)\n</code></pre> <p>watchersToInstall can also be customized to ignore specific instances (e.g. here ignoring leaks of BadSdkLeakingFragment):</p> <pre><code>val watchersToInstall = AppWatcher.appDefaultWatchers(application, ReachabilityWatcher { watchedObject, description ->\nif (watchedObject !is BadSdkLeakingFragment) {\nAppWatcher.objectWatcher.expectWeaklyReachable(watchedObject, description)\n}\n})\nAppWatcher.manualInstall(\napplication = application,\nwatchersToInstall = watchersToInstall\n)\n</code></pre>"},{"location":"api/leakcanary/-app-watcher/object-watcher/","title":"Object watcher","text":"<p>//leakcanary-repo/leakcanary/AppWatcher/objectWatcher</p>"},{"location":"api/leakcanary/-app-watcher/object-watcher/#objectwatcher","title":"objectWatcher","text":"<p>[androidJvm]\\ val objectWatcher: ObjectWatcher</p> <p>The ObjectWatcher used by AppWatcher to detect retained objects. Only set when isInstalled is true.</p>"},{"location":"api/leakcanary/-app-watcher/retained-delay-millis/","title":"Retained delay millis","text":"<p>//leakcanary-repo/leakcanary/AppWatcher/retainedDelayMillis</p>"},{"location":"api/leakcanary/-app-watcher/retained-delay-millis/#retaineddelaymillis","title":"retainedDelayMillis","text":"<p>[androidJvm]\\</p> <p>@Volatile</p> <p>var retainedDelayMillis: Long</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AppWatcherStartupInitializer</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/#appwatcherstartupinitializer","title":"AppWatcherStartupInitializer","text":"<p>[androidJvm]\\ class AppWatcherStartupInitializer : Initializer<AppWatcherStartupInitializer></p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/#constructors","title":"Constructors","text":"AppWatcherStartupInitializer [androidJvm]constructor()"},{"location":"api/leakcanary/-app-watcher-startup-initializer/#functions","title":"Functions","text":"Name Summary create [androidJvm]open override fun create(context: Context): AppWatcherStartupInitializer dependencies [androidJvm]open override fun dependencies(): List<Class<out Initializer<*>>>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/-app-watcher-startup-initializer/","title":"app watcher startup initializer","text":"<p>//leakcanary-repo/leakcanary/AppWatcherStartupInitializer/AppWatcherStartupInitializer</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/-app-watcher-startup-initializer/#appwatcherstartupinitializer","title":"AppWatcherStartupInitializer","text":"<p>[androidJvm]\\ constructor()</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/create/","title":"Create","text":"<p>//leakcanary-repo/leakcanary/AppWatcherStartupInitializer/create</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/create/#create","title":"create","text":"<p>[androidJvm]\\ open override fun create(context: Context): AppWatcherStartupInitializer</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/dependencies/","title":"Dependencies","text":"<p>//leakcanary-repo/leakcanary/AppWatcherStartupInitializer/dependencies</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/dependencies/#dependencies","title":"dependencies","text":"<p>[androidJvm]\\ open override fun dependencies(): List<Class<out Initializer<*>>></p>"},{"location":"api/leakcanary/-background-thread-heap-analyzer/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/BackgroundThreadHeapAnalyzer</p>"},{"location":"api/leakcanary/-background-thread-heap-analyzer/#backgroundthreadheapanalyzer","title":"BackgroundThreadHeapAnalyzer","text":"<p>[androidJvm]\\ object BackgroundThreadHeapAnalyzer : EventListener</p> <p>Starts heap analysis on a background HandlerThread when receiving a HeapDump event.</p>"},{"location":"api/leakcanary/-background-thread-heap-analyzer/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-background-thread-heap-analyzer/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/BackgroundThreadHeapAnalyzer/onEvent</p>"},{"location":"api/leakcanary/-background-thread-heap-analyzer/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-background-trigger/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/BackgroundTrigger</p>"},{"location":"api/leakcanary/-background-trigger/#backgroundtrigger","title":"BackgroundTrigger","text":"<p>[androidJvm]\\ class BackgroundTrigger(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, processInfo: ProcessInfo = ProcessInfo.Real, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })</p>"},{"location":"api/leakcanary/-background-trigger/#constructors","title":"Constructors","text":"BackgroundTrigger [androidJvm]constructor(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, processInfo: ProcessInfo = ProcessInfo.Real, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })"},{"location":"api/leakcanary/-background-trigger/#functions","title":"Functions","text":"Name Summary start [androidJvm]fun start() stop [androidJvm]fun stop()"},{"location":"api/leakcanary/-background-trigger/-background-trigger/","title":"background trigger","text":"<p>//leakcanary-repo/leakcanary/BackgroundTrigger/BackgroundTrigger</p>"},{"location":"api/leakcanary/-background-trigger/-background-trigger/#backgroundtrigger","title":"BackgroundTrigger","text":"<p>[androidJvm]\\ constructor(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, processInfo: ProcessInfo = ProcessInfo.Real, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })</p>"},{"location":"api/leakcanary/-background-trigger/start/","title":"Start","text":"<p>//leakcanary-repo/leakcanary/BackgroundTrigger/start</p>"},{"location":"api/leakcanary/-background-trigger/start/#start","title":"start","text":"<p>[androidJvm]\\ fun start()</p>"},{"location":"api/leakcanary/-background-trigger/stop/","title":"Stop","text":"<p>//leakcanary-repo/leakcanary/BackgroundTrigger/stop</p>"},{"location":"api/leakcanary/-background-trigger/stop/#stop","title":"stop","text":"<p>[androidJvm]\\ fun stop()</p>"},{"location":"api/leakcanary/-conditional-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ConditionalInterceptor</p>"},{"location":"api/leakcanary/-conditional-interceptor/#conditionalinterceptor","title":"ConditionalInterceptor","text":"<p>[androidJvm]\\ class ConditionalInterceptor(delegate: HeapAnalysisInterceptor, evaluateCondition: (HeapAnalysisJob) -> Boolean) : HeapAnalysisInterceptor</p> <p>An interceptor that runs only when evaluateCondition returns true.</p>"},{"location":"api/leakcanary/-conditional-interceptor/#constructors","title":"Constructors","text":"ConditionalInterceptor [androidJvm]constructor(delegate: HeapAnalysisInterceptor, evaluateCondition: (HeapAnalysisJob) -> Boolean)"},{"location":"api/leakcanary/-conditional-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-conditional-interceptor/-conditional-interceptor/","title":"conditional interceptor","text":"<p>//leakcanary-repo/leakcanary/ConditionalInterceptor/ConditionalInterceptor</p>"},{"location":"api/leakcanary/-conditional-interceptor/-conditional-interceptor/#conditionalinterceptor","title":"ConditionalInterceptor","text":"<p>[androidJvm]\\ constructor(delegate: HeapAnalysisInterceptor, evaluateCondition: (HeapAnalysisJob) -> Boolean)</p>"},{"location":"api/leakcanary/-conditional-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/ConditionalInterceptor/intercept</p>"},{"location":"api/leakcanary/-conditional-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DateFormatHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/#dateformatheapdumpfileprovider","title":"DateFormatHeapDumpFileProvider","text":"<p>[jvm]\\ class DateFormatHeapDumpFileProvider(heapDumpDirectory: File, dateProvider: () -> Date = { Date() }, prefix: String = \"\", suffix: String = \"\") : HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/#constructors","title":"Constructors","text":"DateFormatHeapDumpFileProvider [jvm]constructor(heapDumpDirectory: File, dateProvider: () -> Date = { Date() }, prefix: String = \"\", suffix: String = \"\")"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/#functions","title":"Functions","text":"Name Summary newHeapDumpFile [jvm]open override fun newHeapDumpFile(): FileReturns a File that can be passed to a HeapDumper to dump the heap."},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-date-format-heap-dump-file-provider/","title":"date format heap dump file provider","text":"<p>//leakcanary-repo/leakcanary/DateFormatHeapDumpFileProvider/DateFormatHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-date-format-heap-dump-file-provider/#dateformatheapdumpfileprovider","title":"DateFormatHeapDumpFileProvider","text":"<p>[jvm]\\ constructor(heapDumpDirectory: File, dateProvider: () -> Date = { Date() }, prefix: String = \"\", suffix: String = \"\")</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/new-heap-dump-file/","title":"New heap dump file","text":"<p>//leakcanary-repo/leakcanary/DateFormatHeapDumpFileProvider/newHeapDumpFile</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/new-heap-dump-file/#newheapdumpfile","title":"newHeapDumpFile","text":"<p>[jvm]\\ open override fun newHeapDumpFile(): File</p> <p>Returns a File that can be passed to a HeapDumper to dump the heap.</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DateFormatHeapDumpFileProvider/Companion</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-companion/#properties","title":"Properties","text":"Name Summary TIME_PATTERN [jvm]const val TIME_PATTERN: String"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-companion/-t-i-m-e_-p-a-t-t-e-r-n/","title":"t i m e p a t t e r n","text":"<p>//leakcanary-repo/leakcanary/DateFormatHeapDumpFileProvider/Companion/TIME_PATTERN</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-companion/-t-i-m-e_-p-a-t-t-e-r-n/#time_pattern","title":"TIME_PATTERN","text":"<p>[jvm]\\ const val TIME_PATTERN: String</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DatetimeFormattedHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/#datetimeformattedheapdumpfileprovider","title":"DatetimeFormattedHeapDumpFileProvider","text":"<p>[jvm]\\ class DatetimeFormattedHeapDumpFileProvider(heapDumpDirectoryProvider: HeapDumpDirectoryProvider, dateProvider: () -> Date = { Date() }, prefixProvider: () -> String = { \"\" }, suffixProvider: () -> String = { \"\" }) : HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/#constructors","title":"Constructors","text":"DatetimeFormattedHeapDumpFileProvider [jvm]constructor(heapDumpDirectoryProvider: HeapDumpDirectoryProvider, dateProvider: () -> Date = { Date() }, prefixProvider: () -> String = { \"\" }, suffixProvider: () -> String = { \"\" })"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/#functions","title":"Functions","text":"Name Summary newHeapDumpFile [jvm]open override fun newHeapDumpFile(): FileReturns a File that can be passed to a HeapDumper to dump the heap."},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-datetime-formatted-heap-dump-file-provider/","title":"datetime formatted heap dump file provider","text":"<p>//leakcanary-repo/leakcanary/DatetimeFormattedHeapDumpFileProvider/DatetimeFormattedHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-datetime-formatted-heap-dump-file-provider/#datetimeformattedheapdumpfileprovider","title":"DatetimeFormattedHeapDumpFileProvider","text":"<p>[jvm]\\ constructor(heapDumpDirectoryProvider: HeapDumpDirectoryProvider, dateProvider: () -> Date = { Date() }, prefixProvider: () -> String = { \"\" }, suffixProvider: () -> String = { \"\" })</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/new-heap-dump-file/","title":"New heap dump file","text":"<p>//leakcanary-repo/leakcanary/DatetimeFormattedHeapDumpFileProvider/newHeapDumpFile</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/new-heap-dump-file/#newheapdumpfile","title":"newHeapDumpFile","text":"<p>[jvm]\\ open override fun newHeapDumpFile(): File</p> <p>Returns a File that can be passed to a HeapDumper to dump the heap.</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DatetimeFormattedHeapDumpFileProvider/Companion</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-companion/#properties","title":"Properties","text":"Name Summary TIME_PATTERN [jvm]const val TIME_PATTERN: String"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-companion/-t-i-m-e_-p-a-t-t-e-r-n/","title":"t i m e p a t t e r n","text":"<p>//leakcanary-repo/leakcanary/DatetimeFormattedHeapDumpFileProvider/Companion/TIME_PATTERN</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-companion/-t-i-m-e_-p-a-t-t-e-r-n/#time_pattern","title":"TIME_PATTERN","text":"<p>[jvm]\\ const val TIME_PATTERN: String</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DefaultDelayDeletableObjectReporter</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/#defaultdelaydeletableobjectreporter","title":"DefaultDelayDeletableObjectReporter","text":"<p>[jvm]\\ class DefaultDelayDeletableObjectReporter(defaultDelay: Duration, delayedReporter: DelayedDeletableObjectReporter) : DeletableObjectReporter</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/#constructors","title":"Constructors","text":"DefaultDelayDeletableObjectReporter [jvm]constructor(defaultDelay: Duration, delayedReporter: DelayedDeletableObjectReporter)"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/#functions","title":"Functions","text":"Name Summary expectDeletionFor [jvm]open override fun expectDeletionFor(target: Any, reason: String): TrackedObjectReachabilityStart tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. stop being strongly reachable soon. If target stays strongly reachable, target will be considered retained. The time at which target is considered retained is determined by the DeletableObjectReporter implementation. filteringInstances [jvm]inline fun <T> DeletableObjectReporter.filteringInstances(crossinline apply: (T) -> Boolean): DeletableObjectReporterCreates a wrapper around DeletableObjectReporter that will run any instance of T by apply to decide whether to forward to DeletableObjectReporter.expectDeletionFor calls. Objects that do not extend T will always be forwarded."},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/-default-delay-deletable-object-reporter/","title":"default delay deletable object reporter","text":"<p>//leakcanary-repo/leakcanary/DefaultDelayDeletableObjectReporter/DefaultDelayDeletableObjectReporter</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/-default-delay-deletable-object-reporter/#defaultdelaydeletableobjectreporter","title":"DefaultDelayDeletableObjectReporter","text":"<p>[jvm]\\ constructor(defaultDelay: Duration, delayedReporter: DelayedDeletableObjectReporter)</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/expect-deletion-for/","title":"Expect deletion for","text":"<p>//leakcanary-repo/leakcanary/DefaultDelayDeletableObjectReporter/expectDeletionFor</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/expect-deletion-for/#expectdeletionfor","title":"expectDeletionFor","text":"<p>[jvm]\\ open override fun expectDeletionFor(target: Any, reason: String): TrackedObjectReachability</p> <p>Start tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. stop being strongly reachable soon. If target stays strongly reachable, target will be considered retained. The time at which target is considered retained is determined by the DeletableObjectReporter implementation.</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/expect-deletion-for/#parameters","title":"Parameters","text":"<p>jvm</p> target an object expected to not be strongly reachable soon. reason reason why the passed in object should be deleted. For example, \"MyPresenter received the destroy() callback\"."},{"location":"api/leakcanary/-delayed-deletable-object-reporter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DelayedDeletableObjectReporter</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/#delayeddeletableobjectreporter","title":"DelayedDeletableObjectReporter","text":"<p>[jvm]\\ class DelayedDeletableObjectReporter(deletableObjectReporter: TriggeredDeletableObjectReporter, delayedExecutor: DelayedExecutor)</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/#constructors","title":"Constructors","text":"DelayedDeletableObjectReporter [jvm]constructor(deletableObjectReporter: TriggeredDeletableObjectReporter, delayedExecutor: DelayedExecutor)"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/#functions","title":"Functions","text":"Name Summary expectDelayedDeletionFor [jvm]fun expectDelayedDeletionFor(target: Any, reason: String, delayUptime: Duration): TrackedObjectReachabilitySame as DeletableObjectReporter.expectDeletionFor but allows providing a delay for when target is expected to be deleted."},{"location":"api/leakcanary/-delayed-deletable-object-reporter/-delayed-deletable-object-reporter/","title":"delayed deletable object reporter","text":"<p>//leakcanary-repo/leakcanary/DelayedDeletableObjectReporter/DelayedDeletableObjectReporter</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/-delayed-deletable-object-reporter/#delayeddeletableobjectreporter","title":"DelayedDeletableObjectReporter","text":"<p>[jvm]\\ constructor(deletableObjectReporter: TriggeredDeletableObjectReporter, delayedExecutor: DelayedExecutor)</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/expect-delayed-deletion-for/","title":"Expect delayed deletion for","text":"<p>//leakcanary-repo/leakcanary/DelayedDeletableObjectReporter/expectDelayedDeletionFor</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/expect-delayed-deletion-for/#expectdelayeddeletionfor","title":"expectDelayedDeletionFor","text":"<p>[jvm]\\ fun expectDelayedDeletionFor(target: Any, reason: String, delayUptime: Duration): TrackedObjectReachability</p> <p>Same as DeletableObjectReporter.expectDeletionFor but allows providing a delay for when target is expected to be deleted.</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/expect-delayed-deletion-for/#parameters","title":"Parameters","text":"<p>jvm</p> delayUptime how long to wait until target is considered retained. Should be a significant enough delay for the GC to get a chance to run and update reachability status. You should generally use DefaultDelayDeletableObjectReporter, this is only useful if target is a special object that you know needs more time to stop being strongly reachable."},{"location":"api/leakcanary/-delayed-executor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DelayedExecutor</p>"},{"location":"api/leakcanary/-delayed-executor/#delayedexecutor","title":"DelayedExecutor","text":"<p>[jvm]\\ fun interface DelayedExecutor</p>"},{"location":"api/leakcanary/-delayed-executor/#functions","title":"Functions","text":"Name Summary executeWithDelay [jvm]abstract fun executeWithDelay(delayUptime: Duration, runnable: Runnable)"},{"location":"api/leakcanary/-delayed-executor/execute-with-delay/","title":"Execute with delay","text":"<p>//leakcanary-repo/leakcanary/DelayedExecutor/executeWithDelay</p>"},{"location":"api/leakcanary/-delayed-executor/execute-with-delay/#executewithdelay","title":"executeWithDelay","text":"<p>[jvm]\\ abstract fun executeWithDelay(delayUptime: Duration, runnable: Runnable)</p>"},{"location":"api/leakcanary/-deletable-object-reporter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DeletableObjectReporter</p>"},{"location":"api/leakcanary/-deletable-object-reporter/#deletableobjectreporter","title":"DeletableObjectReporter","text":"<p>fun interface DeletableObjectReporter</p>"},{"location":"api/leakcanary/-deletable-object-reporter/#inheritors","title":"Inheritors","text":"DefaultDelayDeletableObjectReporter"},{"location":"api/leakcanary/-deletable-object-reporter/#functions","title":"Functions","text":"Name Summary expectDeletionFor [jvm]abstract fun expectDeletionFor(target: Any, reason: String): TrackedObjectReachabilityStart tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. stop being strongly reachable soon. If target stays strongly reachable, target will be considered retained. The time at which target is considered retained is determined by the DeletableObjectReporter implementation. filteringInstances [jvm]inline fun <T> DeletableObjectReporter.filteringInstances(crossinline apply: (T) -> Boolean): DeletableObjectReporterCreates a wrapper around DeletableObjectReporter that will run any instance of T by apply to decide whether to forward to DeletableObjectReporter.expectDeletionFor calls. Objects that do not extend T will always be forwarded."},{"location":"api/leakcanary/-deletable-object-reporter/expect-deletion-for/","title":"Expect deletion for","text":"<p>//leakcanary-repo/leakcanary/DeletableObjectReporter/expectDeletionFor</p>"},{"location":"api/leakcanary/-deletable-object-reporter/expect-deletion-for/#expectdeletionfor","title":"expectDeletionFor","text":"<p>[jvm]\\ abstract fun expectDeletionFor(target: Any, reason: String): TrackedObjectReachability</p> <p>Start tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. stop being strongly reachable soon. If target stays strongly reachable, target will be considered retained. The time at which target is considered retained is determined by the DeletableObjectReporter implementation.</p>"},{"location":"api/leakcanary/-deletable-object-reporter/expect-deletion-for/#parameters","title":"Parameters","text":"<p>jvm</p> target an object expected to not be strongly reachable soon. reason reason why the passed in object should be deleted. For example, \"MyPresenter received the destroy() callback\"."},{"location":"api/leakcanary/-detect-leaks-after-test-success/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAfterTestSuccess</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/#detectleaksaftertestsuccess","title":"DetectLeaksAfterTestSuccess","text":"<p>[androidJvm]\\ class DetectLeaksAfterTestSuccess(tag: String = DetectLeaksAfterTestSuccess::class.java.simpleName) : TestRule</p> <p>TestRule that invokes LeakAssertions.assertNoLeaks after the test successfully evaluates. Pay attention to where you set up this rule in the rule chain as you might detect different leaks (e.g. around vs wrapped by the activity rule). It\u2019s also possible to use this rule several times in a rule chain.</p> <p>This rule automatically applies the TestDescriptionHolder rule.</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/#constructors","title":"Constructors","text":"DetectLeaksAfterTestSuccess [androidJvm]constructor(tag: String = DetectLeaksAfterTestSuccess::class.java.simpleName)"},{"location":"api/leakcanary/-detect-leaks-after-test-success/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-detect-leaks-after-test-success/#functions","title":"Functions","text":"Name Summary apply [androidJvm]open override fun apply(base: Statement, description: Description): Statement"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-detect-leaks-after-test-success/","title":"detect leaks after test success","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAfterTestSuccess/DetectLeaksAfterTestSuccess</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-detect-leaks-after-test-success/#detectleaksaftertestsuccess","title":"DetectLeaksAfterTestSuccess","text":"<p>[androidJvm]\\ constructor(tag: String = DetectLeaksAfterTestSuccess::class.java.simpleName)</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/apply/","title":"Apply","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAfterTestSuccess/apply</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/apply/#apply","title":"apply","text":"<p>[androidJvm]\\ open override fun apply(base: Statement, description: Description): Statement</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAfterTestSuccess/Companion</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-companion/#functions","title":"Functions","text":"Name Summary detectLeaksAfterTestSuccessWrapping [androidJvm]fun RuleChain.detectLeaksAfterTestSuccessWrapping(tag: String, wrapped: RuleChain.() -> RuleChain): RuleChainA helper function to trigger leak detection twice during test tear down, before and after the tear down of a set of wrapped rule chains. For example, this can be useful to detect leaks both right before and right after the activity under test is destroyed. Before means we can detect detached fragment leaks that go away when the activity is destroyed. After means we can detect activity leaks."},{"location":"api/leakcanary/-detect-leaks-after-test-success/-companion/detect-leaks-after-test-success-wrapping/","title":"Detect leaks after test success wrapping","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAfterTestSuccess/Companion/detectLeaksAfterTestSuccessWrapping</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-companion/detect-leaks-after-test-success-wrapping/#detectleaksaftertestsuccesswrapping","title":"detectLeaksAfterTestSuccessWrapping","text":"<p>[androidJvm]\\ fun RuleChain.detectLeaksAfterTestSuccessWrapping(tag: String, wrapped: RuleChain.() -> RuleChain): RuleChain</p> <p>A helper function to trigger leak detection twice during test tear down, before and after the tear down of a set of wrapped rule chains. For example, this can be useful to detect leaks both right before and right after the activity under test is destroyed. Before means we can detect detached fragment leaks that go away when the activity is destroyed. After means we can detect activity leaks.</p> <pre><code>RuleChain.outerRule(LoginRule())\n.detectLeaksAfterTestSuccessWrapping(\"ActivitiesDestroyed\") {\naround(ActivityScenarioRule(MyActivity::class.java))\n}\n.around(LoadingScreenRule())\n</code></pre>"},{"location":"api/leakcanary/-detect-leaks-assert/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAssert</p>"},{"location":"api/leakcanary/-detect-leaks-assert/#detectleaksassert","title":"DetectLeaksAssert","text":"<p>fun interface DetectLeaksAssert</p> <p>The interface for the implementation that LeakAssertions.assertNoLeaks delegates to. You can call DetectLeaksAssert.update to provide your own implementation.</p> <p>The default implementation is AndroidDetectLeaksAssert.</p>"},{"location":"api/leakcanary/-detect-leaks-assert/#inheritors","title":"Inheritors","text":"AndroidDetectLeaksAssert"},{"location":"api/leakcanary/-detect-leaks-assert/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-detect-leaks-assert/#functions","title":"Functions","text":"Name Summary assertNoLeaks [androidJvm]abstract fun assertNoLeaks(tag: String)"},{"location":"api/leakcanary/-detect-leaks-assert/assert-no-leaks/","title":"Assert no leaks","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAssert/assertNoLeaks</p>"},{"location":"api/leakcanary/-detect-leaks-assert/assert-no-leaks/#assertnoleaks","title":"assertNoLeaks","text":"<p>[androidJvm]\\ abstract fun assertNoLeaks(tag: String)</p>"},{"location":"api/leakcanary/-detect-leaks-assert/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAssert/Companion</p>"},{"location":"api/leakcanary/-detect-leaks-assert/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-detect-leaks-assert/-companion/#functions","title":"Functions","text":"Name Summary update [androidJvm]fun update(delegate: DetectLeaksAssert)"},{"location":"api/leakcanary/-detect-leaks-assert/-companion/update/","title":"Update","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAssert/Companion/update</p>"},{"location":"api/leakcanary/-detect-leaks-assert/-companion/update/#update","title":"update","text":"<p>[androidJvm]\\ fun update(delegate: DetectLeaksAssert)</p>"},{"location":"api/leakcanary/-detect-leaks-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksInterceptor</p>"},{"location":"api/leakcanary/-detect-leaks-interceptor/#detectleaksinterceptor","title":"DetectLeaksInterceptor","text":"<p>fun interface DetectLeaksInterceptor</p> <p>Decides whether to dump & analyze the heap to look for leaks in instrumentation tests. The implementation might block for a while to allow temporary leaks to be flushed out, as those aren\u2019t that interesting to report and heap analysis increases test duration significantly.</p>"},{"location":"api/leakcanary/-detect-leaks-interceptor/#inheritors","title":"Inheritors","text":"AndroidDetectLeaksInterceptor"},{"location":"api/leakcanary/-detect-leaks-interceptor/#functions","title":"Functions","text":"Name Summary waitUntilReadyForHeapAnalysis [androidJvm]abstract fun waitUntilReadyForHeapAnalysis(): HeapAnalysisDecision"},{"location":"api/leakcanary/-detect-leaks-interceptor/wait-until-ready-for-heap-analysis/","title":"Wait until ready for heap analysis","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksInterceptor/waitUntilReadyForHeapAnalysis</p>"},{"location":"api/leakcanary/-detect-leaks-interceptor/wait-until-ready-for-heap-analysis/#waituntilreadyforheapanalysis","title":"waitUntilReadyForHeapAnalysis","text":"<p>[androidJvm]\\ abstract fun waitUntilReadyForHeapAnalysis(): HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DumpingAndDeletingHeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/#dumpinganddeletingheapgraphprovider","title":"DumpingAndDeletingHeapGraphProvider","text":"<p>[jvm]\\ class DumpingAndDeletingHeapGraphProvider(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, fileDeleter: FileDeleter) : HeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/#constructors","title":"Constructors","text":"DumpingAndDeletingHeapGraphProvider [jvm]constructor(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, fileDeleter: FileDeleter)"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]open override fun openHeapGraph(): CloseableHeapGraph"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/-dumping-and-deleting-heap-graph-provider/","title":"dumping and deleting heap graph provider","text":"<p>//leakcanary-repo/leakcanary/DumpingAndDeletingHeapGraphProvider/DumpingAndDeletingHeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/-dumping-and-deleting-heap-graph-provider/#dumpinganddeletingheapgraphprovider","title":"DumpingAndDeletingHeapGraphProvider","text":"<p>[jvm]\\ constructor(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, fileDeleter: FileDeleter)</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/open-heap-graph/","title":"Open heap graph","text":"<p>//leakcanary-repo/leakcanary/DumpingAndDeletingHeapGraphProvider/openHeapGraph</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/open-heap-graph/#openheapgraph","title":"openHeapGraph","text":"<p>[jvm]\\ open override fun openHeapGraph(): CloseableHeapGraph</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DumpingHeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/#dumpingheapgraphprovider","title":"DumpingHeapGraphProvider","text":"<p>[jvm]\\ class DumpingHeapGraphProvider(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpClosedListener: DumpingHeapGraphProvider.HeapDumpClosedListener = HeapDumpClosedListener {}) : HeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/#constructors","title":"Constructors","text":"DumpingHeapGraphProvider [jvm]constructor(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpClosedListener: DumpingHeapGraphProvider.HeapDumpClosedListener = HeapDumpClosedListener {})"},{"location":"api/leakcanary/-dumping-heap-graph-provider/#types","title":"Types","text":"Name Summary HeapDumpClosedListener [jvm]fun interface HeapDumpClosedListener"},{"location":"api/leakcanary/-dumping-heap-graph-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]open override fun openHeapGraph(): CloseableHeapGraph"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-dumping-heap-graph-provider/","title":"dumping heap graph provider","text":"<p>//leakcanary-repo/leakcanary/DumpingHeapGraphProvider/DumpingHeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-dumping-heap-graph-provider/#dumpingheapgraphprovider","title":"DumpingHeapGraphProvider","text":"<p>[jvm]\\ constructor(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpClosedListener: DumpingHeapGraphProvider.HeapDumpClosedListener = HeapDumpClosedListener {})</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/open-heap-graph/","title":"Open heap graph","text":"<p>//leakcanary-repo/leakcanary/DumpingHeapGraphProvider/openHeapGraph</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/open-heap-graph/#openheapgraph","title":"openHeapGraph","text":"<p>[jvm]\\ open override fun openHeapGraph(): CloseableHeapGraph</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DumpingHeapGraphProvider/HeapDumpClosedListener</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/#heapdumpclosedlistener","title":"HeapDumpClosedListener","text":"<p>fun interface HeapDumpClosedListener</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/#functions","title":"Functions","text":"Name Summary onHeapDumpClosed [jvm]abstract fun onHeapDumpClosed(heapDumpFile: File)"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/on-heap-dump-closed/","title":"On heap dump closed","text":"<p>//leakcanary-repo/leakcanary/DumpingHeapGraphProvider/HeapDumpClosedListener/onHeapDumpClosed</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/on-heap-dump-closed/#onheapdumpclosed","title":"onHeapDumpClosed","text":"<p>[jvm]\\ abstract fun onHeapDumpClosed(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener</p>"},{"location":"api/leakcanary/-event-listener/#eventlistener","title":"EventListener","text":"<p>fun interface EventListener</p>"},{"location":"api/leakcanary/-event-listener/#inheritors","title":"Inheritors","text":"BackgroundThreadHeapAnalyzer LazyForwardingEventListener LogcatEventListener NotificationEventListener RemoteWorkManagerHeapAnalyzer ToastEventListener TvEventListener WorkManagerHeapAnalyzer"},{"location":"api/leakcanary/-event-listener/#types","title":"Types","text":"Name Summary Event [androidJvm]sealed class Event : SerializableNote: Event is Serializable for convenience but we currently make no guarantee that the Serialization is backward / forward compatible across LeakCanary versions, so plan accordingly. This is convenient for passing events around processes, and shouldn\u2019t be used to store them."},{"location":"api/leakcanary/-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]abstract fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/EventListener/onEvent</p>"},{"location":"api/leakcanary/-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ abstract fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-event-listener/-event/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event</p>"},{"location":"api/leakcanary/-event-listener/-event/#event","title":"Event","text":"<p>sealed class Event : Serializable</p> <p>Note: Event is Serializable for convenience but we currently make no guarantee that the Serialization is backward / forward compatible across LeakCanary versions, so plan accordingly. This is convenient for passing events around processes, and shouldn\u2019t be used to store them.</p>"},{"location":"api/leakcanary/-event-listener/-event/#inheritors","title":"Inheritors","text":"DumpingHeap HeapDump HeapDumpFailed HeapAnalysisProgress HeapAnalysisDone"},{"location":"api/leakcanary/-event-listener/-event/#types","title":"Types","text":"Name Summary DumpingHeap [androidJvm]class DumpingHeap(val uniqueId: String) : EventListener.EventSent from the \"LeakCanary-Heap-Dump\" HandlerThread. HeapAnalysisDone [androidJvm]sealed class HeapAnalysisDone<T : HeapAnalysis> : EventListener.EventSent from the thread performing the analysis. HeapAnalysisProgress [androidJvm]class HeapAnalysisProgress(val uniqueId: String, val step: OnAnalysisProgressListener.Step, val progressPercent: Double) : EventListener.EventprogressPercent is a value between 0..1 HeapDump [androidJvm]class HeapDump(val uniqueId: String, val file: File, val durationMillis: Long, val reason: String) : EventListener.EventSent from the \"LeakCanary-Heap-Dump\" HandlerThread. HeapDumpFailed [androidJvm]class HeapDumpFailed(val uniqueId: String, val exception: Throwable, val willRetryLater: Boolean) : EventListener.EventSent from the \"LeakCanary-Heap-Dump\" HandlerThread."},{"location":"api/leakcanary/-event-listener/-event/#properties","title":"Properties","text":"Name Summary uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/unique-id/","title":"Unique id","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/uniqueId</p>"},{"location":"api/leakcanary/-event-listener/-event/unique-id/#uniqueid","title":"uniqueId","text":"<p>[androidJvm]\\ val uniqueId: String</p> <p>Unique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent.</p>"},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/DumpingHeap</p>"},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/#dumpingheap","title":"DumpingHeap","text":"<p>[androidJvm]\\ class DumpingHeap(val uniqueId: String) : EventListener.Event</p> <p>Sent from the \"LeakCanary-Heap-Dump\" HandlerThread.</p>"},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/#constructors","title":"Constructors","text":"DumpingHeap [androidJvm]constructor(uniqueId: String)"},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/#properties","title":"Properties","text":"Name Summary uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/-dumping-heap/","title":"dumping heap","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/DumpingHeap/DumpingHeap</p>"},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/-dumping-heap/#dumpingheap","title":"DumpingHeap","text":"<p>[androidJvm]\\ constructor(uniqueId: String)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/#heapanalysisdone","title":"HeapAnalysisDone","text":"<p>sealed class HeapAnalysisDone<T : HeapAnalysis> : EventListener.Event</p> <p>Sent from the thread performing the analysis.</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/#inheritors","title":"Inheritors","text":"HeapAnalysisSucceeded HeapAnalysisFailed"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/#types","title":"Types","text":"Name Summary HeapAnalysisFailed [androidJvm]class HeapAnalysisFailed(uniqueId: String, heapAnalysis: HeapAnalysisFailure, showIntent: Intent) : EventListener.Event.HeapAnalysisDone<HeapAnalysisFailure> HeapAnalysisSucceeded [androidJvm]class HeapAnalysisSucceeded(uniqueId: String, heapAnalysis: HeapAnalysisSuccess, val unreadLeakSignatures: Set<String>, showIntent: Intent) : EventListener.Event.HeapAnalysisDone<HeapAnalysisSuccess>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/#properties","title":"Properties","text":"Name Summary heapAnalysis [androidJvm]val heapAnalysis: T showIntent [androidJvm]val showIntent: Intent uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/heap-analysis/","title":"Heap analysis","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/heapAnalysis</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/heap-analysis/#heapanalysis","title":"heapAnalysis","text":"<p>[androidJvm]\\ val heapAnalysis: T</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/show-intent/","title":"Show intent","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/showIntent</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/show-intent/#showintent","title":"showIntent","text":"<p>[androidJvm]\\ val showIntent: Intent</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/HeapAnalysisFailed</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/#heapanalysisfailed","title":"HeapAnalysisFailed","text":"<p>[androidJvm]\\ class HeapAnalysisFailed(uniqueId: String, heapAnalysis: HeapAnalysisFailure, showIntent: Intent) : EventListener.Event.HeapAnalysisDone<HeapAnalysisFailure></p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/#constructors","title":"Constructors","text":"HeapAnalysisFailed [androidJvm]constructor(uniqueId: String, heapAnalysis: HeapAnalysisFailure, showIntent: Intent)"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/#properties","title":"Properties","text":"Name Summary heapAnalysis [androidJvm]val heapAnalysis: HeapAnalysisFailure showIntent [androidJvm]val showIntent: Intent uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/-heap-analysis-failed/","title":"heap analysis failed","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/HeapAnalysisFailed/HeapAnalysisFailed</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/-heap-analysis-failed/#heapanalysisfailed","title":"HeapAnalysisFailed","text":"<p>[androidJvm]\\ constructor(uniqueId: String, heapAnalysis: HeapAnalysisFailure, showIntent: Intent)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/HeapAnalysisSucceeded</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/#heapanalysissucceeded","title":"HeapAnalysisSucceeded","text":"<p>[androidJvm]\\ class HeapAnalysisSucceeded(uniqueId: String, heapAnalysis: HeapAnalysisSuccess, val unreadLeakSignatures: Set<String>, showIntent: Intent) : EventListener.Event.HeapAnalysisDone<HeapAnalysisSuccess></p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/#constructors","title":"Constructors","text":"HeapAnalysisSucceeded [androidJvm]constructor(uniqueId: String, heapAnalysis: HeapAnalysisSuccess, unreadLeakSignatures: Set<String>, showIntent: Intent)"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/#properties","title":"Properties","text":"Name Summary heapAnalysis [androidJvm]val heapAnalysis: HeapAnalysisSuccess showIntent [androidJvm]val showIntent: Intent uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent. unreadLeakSignatures [androidJvm]val unreadLeakSignatures: Set<String>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/-heap-analysis-succeeded/","title":"heap analysis succeeded","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/HeapAnalysisSucceeded/HeapAnalysisSucceeded</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/-heap-analysis-succeeded/#heapanalysissucceeded","title":"HeapAnalysisSucceeded","text":"<p>[androidJvm]\\ constructor(uniqueId: String, heapAnalysis: HeapAnalysisSuccess, unreadLeakSignatures: Set<String>, showIntent: Intent)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/unread-leak-signatures/","title":"Unread leak signatures","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/HeapAnalysisSucceeded/unreadLeakSignatures</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/unread-leak-signatures/#unreadleaksignatures","title":"unreadLeakSignatures","text":"<p>[androidJvm]\\ val unreadLeakSignatures: Set<String></p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisProgress</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/#heapanalysisprogress","title":"HeapAnalysisProgress","text":"<p>[androidJvm]\\ class HeapAnalysisProgress(val uniqueId: String, val step: OnAnalysisProgressListener.Step, val progressPercent: Double) : EventListener.Event</p> <p>progressPercent is a value between 0..1</p> <p>Sent from the thread performing the analysis.</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/#constructors","title":"Constructors","text":"HeapAnalysisProgress [androidJvm]constructor(uniqueId: String, step: OnAnalysisProgressListener.Step, progressPercent: Double)"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/#properties","title":"Properties","text":"Name Summary progressPercent [androidJvm]val progressPercent: Double step [androidJvm]val step: OnAnalysisProgressListener.Step uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/-heap-analysis-progress/","title":"heap analysis progress","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisProgress/HeapAnalysisProgress</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/-heap-analysis-progress/#heapanalysisprogress","title":"HeapAnalysisProgress","text":"<p>[androidJvm]\\ constructor(uniqueId: String, step: OnAnalysisProgressListener.Step, progressPercent: Double)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/progress-percent/","title":"Progress percent","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisProgress/progressPercent</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/progress-percent/#progresspercent","title":"progressPercent","text":"<p>[androidJvm]\\ val progressPercent: Double</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/step/","title":"Step","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisProgress/step</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/step/#step","title":"step","text":"<p>[androidJvm]\\ val step: OnAnalysisProgressListener.Step</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDump</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/#heapdump","title":"HeapDump","text":"<p>[androidJvm]\\ class HeapDump(val uniqueId: String, val file: File, val durationMillis: Long, val reason: String) : EventListener.Event</p> <p>Sent from the \"LeakCanary-Heap-Dump\" HandlerThread.</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/#constructors","title":"Constructors","text":"HeapDump [androidJvm]constructor(uniqueId: String, file: File, durationMillis: Long, reason: String)"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/#properties","title":"Properties","text":"Name Summary durationMillis [androidJvm]val durationMillis: Long file [androidJvm]val file: File reason [androidJvm]val reason: String uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/-heap-dump/","title":"heap dump","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDump/HeapDump</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/-heap-dump/#heapdump","title":"HeapDump","text":"<p>[androidJvm]\\ constructor(uniqueId: String, file: File, durationMillis: Long, reason: String)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/duration-millis/","title":"Duration millis","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDump/durationMillis</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/duration-millis/#durationmillis","title":"durationMillis","text":"<p>[androidJvm]\\ val durationMillis: Long</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/file/","title":"File","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDump/file</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/file/#file","title":"file","text":"<p>[androidJvm]\\ val file: File</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/reason/","title":"Reason","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDump/reason</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/reason/#reason","title":"reason","text":"<p>[androidJvm]\\ val reason: String</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDumpFailed</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/#heapdumpfailed","title":"HeapDumpFailed","text":"<p>[androidJvm]\\ class HeapDumpFailed(val uniqueId: String, val exception: Throwable, val willRetryLater: Boolean) : EventListener.Event</p> <p>Sent from the \"LeakCanary-Heap-Dump\" HandlerThread.</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/#constructors","title":"Constructors","text":"HeapDumpFailed [androidJvm]constructor(uniqueId: String, exception: Throwable, willRetryLater: Boolean)"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/#properties","title":"Properties","text":"Name Summary exception [androidJvm]val exception: Throwable uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent. willRetryLater [androidJvm]val willRetryLater: Boolean"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/-heap-dump-failed/","title":"heap dump failed","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDumpFailed/HeapDumpFailed</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/-heap-dump-failed/#heapdumpfailed","title":"HeapDumpFailed","text":"<p>[androidJvm]\\ constructor(uniqueId: String, exception: Throwable, willRetryLater: Boolean)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/exception/","title":"Exception","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDumpFailed/exception</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/exception/#exception","title":"exception","text":"<p>[androidJvm]\\ val exception: Throwable</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/will-retry-later/","title":"Will retry later","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDumpFailed/willRetryLater</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/will-retry-later/#willretrylater","title":"willRetryLater","text":"<p>[androidJvm]\\ val willRetryLater: Boolean</p>"},{"location":"api/leakcanary/-file-deleter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/FileDeleter</p>"},{"location":"api/leakcanary/-file-deleter/#filedeleter","title":"FileDeleter","text":"<p>fun interface FileDeleter</p>"},{"location":"api/leakcanary/-file-deleter/#functions","title":"Functions","text":"Name Summary delete [jvm]abstract fun delete(file: File)"},{"location":"api/leakcanary/-file-deleter/delete/","title":"Delete","text":"<p>//leakcanary-repo/leakcanary/FileDeleter/delete</p>"},{"location":"api/leakcanary/-file-deleter/delete/#delete","title":"delete","text":"<p>[jvm]\\ abstract fun delete(file: File)</p>"},{"location":"api/leakcanary/-finalizing-in-process-gc-trigger/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/FinalizingInProcessGcTrigger</p>"},{"location":"api/leakcanary/-finalizing-in-process-gc-trigger/#finalizinginprocessgctrigger","title":"FinalizingInProcessGcTrigger","text":"<p>[jvm]\\ object FinalizingInProcessGcTrigger : GcTrigger</p> <p>A GcTrigger that attempts to perform a GC by invoking the corresponding JDK API then waiting and then running finalization. Based on FinalizationTest in AOSP.</p>"},{"location":"api/leakcanary/-finalizing-in-process-gc-trigger/#functions","title":"Functions","text":"Name Summary runGc [jvm]open override fun runGc()Attempts to run garbage collection."},{"location":"api/leakcanary/-finalizing-in-process-gc-trigger/run-gc/","title":"Run gc","text":"<p>//leakcanary-repo/leakcanary/FinalizingInProcessGcTrigger/runGc</p>"},{"location":"api/leakcanary/-finalizing-in-process-gc-trigger/run-gc/#rungc","title":"runGc","text":"<p>[jvm]\\ open override fun runGc()</p> <p>Attempts to run garbage collection.</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/FragmentAndViewModelWatcher</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/#fragmentandviewmodelwatcher","title":"FragmentAndViewModelWatcher","text":"<p>[androidJvm]\\ class FragmentAndViewModelWatcher(application: Application, deletableObjectReporter: DeletableObjectReporter) : InstallableWatcher</p> <p>Expects:</p> <ul> <li>Fragments (Support Library, Android X and AOSP) to become weakly reachable soon after they receive the Fragment#onDestroy() callback.</li> <li>Fragment views (Support Library, Android X and AOSP) to become weakly reachable soon after fragments receive the Fragment#onDestroyView() callback.</li> <li>Android X view models (both activity and fragment view models) to become weakly reachable soon after they received the ViewModel#onCleared() callback.</li> </ul>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/#constructors","title":"Constructors","text":"FragmentAndViewModelWatcher [androidJvm]constructor(application: Application, deletableObjectReporter: DeletableObjectReporter)"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/#functions","title":"Functions","text":"Name Summary install [androidJvm]open override fun install() uninstall [androidJvm]open override fun uninstall()"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/-fragment-and-view-model-watcher/","title":"fragment and view model watcher","text":"<p>//leakcanary-repo/leakcanary/FragmentAndViewModelWatcher/FragmentAndViewModelWatcher</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/-fragment-and-view-model-watcher/#fragmentandviewmodelwatcher","title":"FragmentAndViewModelWatcher","text":"<p>[androidJvm]\\ constructor(application: Application, deletableObjectReporter: DeletableObjectReporter)</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/FragmentAndViewModelWatcher/install</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/install/#install","title":"install","text":"<p>[androidJvm]\\ open override fun install()</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/uninstall/","title":"Uninstall","text":"<p>//leakcanary-repo/leakcanary/FragmentAndViewModelWatcher/uninstall</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/uninstall/#uninstall","title":"uninstall","text":"<p>[androidJvm]\\ open override fun uninstall()</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/FragmentAndViewModelWatcher/Companion</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-gc-trigger/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/GcTrigger</p>"},{"location":"api/leakcanary/-gc-trigger/#gctrigger","title":"GcTrigger","text":"<p>fun interface GcTrigger</p>"},{"location":"api/leakcanary/-gc-trigger/#inheritors","title":"Inheritors","text":"FinalizingInProcessGcTrigger"},{"location":"api/leakcanary/-gc-trigger/#types","title":"Types","text":"Name Summary Companion [jvm]object CompanionThis allows external modules to add factory methods for implementations of this interface as extension functions of this companion object."},{"location":"api/leakcanary/-gc-trigger/#functions","title":"Functions","text":"Name Summary runGc [jvm]abstract fun runGc()Attempts to run garbage collection."},{"location":"api/leakcanary/-gc-trigger/run-gc/","title":"Run gc","text":"<p>//leakcanary-repo/leakcanary/GcTrigger/runGc</p>"},{"location":"api/leakcanary/-gc-trigger/run-gc/#rungc","title":"runGc","text":"<p>[jvm]\\ abstract fun runGc()</p> <p>Attempts to run garbage collection.</p>"},{"location":"api/leakcanary/-gc-trigger/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/GcTrigger/Companion</p>"},{"location":"api/leakcanary/-gc-trigger/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p> <p>This allows external modules to add factory methods for implementations of this interface as extension functions of this companion object.</p>"},{"location":"api/leakcanary/-gc-trigger/-companion/#functions","title":"Functions","text":"Name Summary inProcess [jvm]fun GcTrigger.Companion.inProcess(): FinalizingInProcessGcTrigger"},{"location":"api/leakcanary/-good-android-version-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/GoodAndroidVersionInterceptor</p>"},{"location":"api/leakcanary/-good-android-version-interceptor/#goodandroidversioninterceptor","title":"GoodAndroidVersionInterceptor","text":"<p>[androidJvm]\\ class GoodAndroidVersionInterceptor : HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-good-android-version-interceptor/#constructors","title":"Constructors","text":"GoodAndroidVersionInterceptor [androidJvm]constructor()"},{"location":"api/leakcanary/-good-android-version-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-good-android-version-interceptor/-good-android-version-interceptor/","title":"good android version interceptor","text":"<p>//leakcanary-repo/leakcanary/GoodAndroidVersionInterceptor/GoodAndroidVersionInterceptor</p>"},{"location":"api/leakcanary/-good-android-version-interceptor/-good-android-version-interceptor/#goodandroidversioninterceptor","title":"GoodAndroidVersionInterceptor","text":"<p>[androidJvm]\\ constructor()</p>"},{"location":"api/leakcanary/-good-android-version-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/GoodAndroidVersionInterceptor/intercept</p>"},{"location":"api/leakcanary/-good-android-version-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-heap-analysis-client/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient</p>"},{"location":"api/leakcanary/-heap-analysis-client/#heapanalysisclient","title":"HeapAnalysisClient","text":"<p>[androidJvm]\\ class HeapAnalysisClient(heapDumpDirectoryProvider: () -> File, config: HeapAnalysisConfig, interceptors: List<HeapAnalysisInterceptor>)</p>"},{"location":"api/leakcanary/-heap-analysis-client/#constructors","title":"Constructors","text":"HeapAnalysisClient [androidJvm]constructor(heapDumpDirectoryProvider: () -> File, config: HeapAnalysisConfig, interceptors: List<HeapAnalysisInterceptor>)"},{"location":"api/leakcanary/-heap-analysis-client/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-heap-analysis-client/#functions","title":"Functions","text":"Name Summary deleteHeapDumpFiles [androidJvm]fun deleteHeapDumpFiles() newJob [androidJvm]fun newJob(context: JobContext = JobContext()): HeapAnalysisJob"},{"location":"api/leakcanary/-heap-analysis-client/-heap-analysis-client/","title":"heap analysis client","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient/HeapAnalysisClient</p>"},{"location":"api/leakcanary/-heap-analysis-client/-heap-analysis-client/#heapanalysisclient","title":"HeapAnalysisClient","text":"<p>[androidJvm]\\ constructor(heapDumpDirectoryProvider: () -> File, config: HeapAnalysisConfig, interceptors: List<HeapAnalysisInterceptor>)</p>"},{"location":"api/leakcanary/-heap-analysis-client/delete-heap-dump-files/","title":"Delete heap dump files","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient/deleteHeapDumpFiles</p>"},{"location":"api/leakcanary/-heap-analysis-client/delete-heap-dump-files/#deleteheapdumpfiles","title":"deleteHeapDumpFiles","text":"<p>[androidJvm]\\ fun deleteHeapDumpFiles()</p>"},{"location":"api/leakcanary/-heap-analysis-client/new-job/","title":"New job","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient/newJob</p>"},{"location":"api/leakcanary/-heap-analysis-client/new-job/#newjob","title":"newJob","text":"<p>[androidJvm]\\ fun newJob(context: JobContext = JobContext()): HeapAnalysisJob</p>"},{"location":"api/leakcanary/-heap-analysis-client/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient/Companion</p>"},{"location":"api/leakcanary/-heap-analysis-client/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-heap-analysis-client/-companion/#functions","title":"Functions","text":"Name Summary defaultInterceptors [androidJvm]fun defaultInterceptors(application: Application): List<HeapAnalysisInterceptor>"},{"location":"api/leakcanary/-heap-analysis-client/-companion/default-interceptors/","title":"Default interceptors","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient/Companion/defaultInterceptors</p>"},{"location":"api/leakcanary/-heap-analysis-client/-companion/default-interceptors/#defaultinterceptors","title":"defaultInterceptors","text":"<p>[androidJvm]\\ fun defaultInterceptors(application: Application): List<HeapAnalysisInterceptor></p>"},{"location":"api/leakcanary/-heap-analysis-config/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig</p>"},{"location":"api/leakcanary/-heap-analysis-config/#heapanalysisconfig","title":"HeapAnalysisConfig","text":"<p>[androidJvm]\\ data class HeapAnalysisConfig(val referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, val objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, val metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, val computeRetainedHeapSize: Boolean = true, val leakingObjectFinder: LeakingObjectFinder = FilteringLeakingObjectFinder( AndroidObjectInspectors.appLeakingObjectFilters ), val stripHeapDump: Boolean = false, val proguardMappingProvider: () -> ProguardMapping? = { null })</p>"},{"location":"api/leakcanary/-heap-analysis-config/#constructors","title":"Constructors","text":"HeapAnalysisConfig [androidJvm]constructor(referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: Boolean = true, leakingObjectFinder: LeakingObjectFinder = FilteringLeakingObjectFinder( AndroidObjectInspectors.appLeakingObjectFilters ), stripHeapDump: Boolean = false, proguardMappingProvider: () -> ProguardMapping? = { null })"},{"location":"api/leakcanary/-heap-analysis-config/#properties","title":"Properties","text":"Name Summary computeRetainedHeapSize [androidJvm]val computeRetainedHeapSize: Boolean = trueWhether to compute the retained heap size, which is the total number of bytes in memory that would be reclaimed if the detected leaks didn\u2019t happen. This includes native memory associated to Java objects (e.g. Android bitmaps). leakingObjectFinder [androidJvm]val leakingObjectFinder: LeakingObjectFinderFinds the objects that are leaking, for which LeakCanary will compute leak traces. metadataExtractor [androidJvm]val metadataExtractor: MetadataExtractorExtracts metadata from a hprof to be reported in shark.HeapAnalysisSuccess.metadata. Called on a background thread during heap analysis. objectInspectors [androidJvm]val objectInspectors: List<ObjectInspector>List of ObjectInspector that provide LeakCanary with insights about objects found in the heap. You can create your own ObjectInspector implementations, and also add a shark.AppSingletonInspector instance created with the list of internal singletons. proguardMappingProvider [androidJvm]val proguardMappingProvider: () -> ProguardMapping? referenceMatchers [androidJvm]val referenceMatchers: List<ReferenceMatcher>Known patterns of references in the heap, added here either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher). stripHeapDump [androidJvm]val stripHeapDump: Boolean = falseWhether the first step after a heap dump should be to replace the content of all arrays with zeroes. This increases the overall processing time but limits the amount of time the heap dump exists on disk with potential PII."},{"location":"api/leakcanary/-heap-analysis-config/-heap-analysis-config/","title":"heap analysis config","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/HeapAnalysisConfig</p>"},{"location":"api/leakcanary/-heap-analysis-config/-heap-analysis-config/#heapanalysisconfig","title":"HeapAnalysisConfig","text":"<p>[androidJvm]\\ constructor(referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: Boolean = true, leakingObjectFinder: LeakingObjectFinder = FilteringLeakingObjectFinder( AndroidObjectInspectors.appLeakingObjectFilters ), stripHeapDump: Boolean = false, proguardMappingProvider: () -> ProguardMapping? = { null })</p>"},{"location":"api/leakcanary/-heap-analysis-config/compute-retained-heap-size/","title":"Compute retained heap size","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/computeRetainedHeapSize</p>"},{"location":"api/leakcanary/-heap-analysis-config/compute-retained-heap-size/#computeretainedheapsize","title":"computeRetainedHeapSize","text":"<p>[androidJvm]\\ val computeRetainedHeapSize: Boolean = true</p> <p>Whether to compute the retained heap size, which is the total number of bytes in memory that would be reclaimed if the detected leaks didn\u2019t happen. This includes native memory associated to Java objects (e.g. Android bitmaps).</p> <p>Computing the retained heap size can slow down the analysis because it requires navigating from GC roots through the entire object graph, whereas shark.HeapAnalyzer would otherwise stop as soon as all leaking instances are found.</p> <p>Defaults to true.</p>"},{"location":"api/leakcanary/-heap-analysis-config/leaking-object-finder/","title":"Leaking object finder","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/leakingObjectFinder</p>"},{"location":"api/leakcanary/-heap-analysis-config/leaking-object-finder/#leakingobjectfinder","title":"leakingObjectFinder","text":"<p>[androidJvm]\\ val leakingObjectFinder: LeakingObjectFinder</p> <p>Finds the objects that are leaking, for which LeakCanary will compute leak traces.</p> <p>Defaults to a FilteringLeakingObjectFinder that scans all objects in the heap dump and delegates the decision to AndroidObjectInspectors.appLeakingObjectFilters.</p>"},{"location":"api/leakcanary/-heap-analysis-config/metadata-extractor/","title":"Metadata extractor","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/metadataExtractor</p>"},{"location":"api/leakcanary/-heap-analysis-config/metadata-extractor/#metadataextractor","title":"metadataExtractor","text":"<p>[androidJvm]\\ val metadataExtractor: MetadataExtractor</p> <p>Extracts metadata from a hprof to be reported in shark.HeapAnalysisSuccess.metadata. Called on a background thread during heap analysis.</p> <p>Defaults to AndroidMetadataExtractor</p>"},{"location":"api/leakcanary/-heap-analysis-config/object-inspectors/","title":"Object inspectors","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/objectInspectors</p>"},{"location":"api/leakcanary/-heap-analysis-config/object-inspectors/#objectinspectors","title":"objectInspectors","text":"<p>[androidJvm]\\ val objectInspectors: List<ObjectInspector></p> <p>List of ObjectInspector that provide LeakCanary with insights about objects found in the heap. You can create your own ObjectInspector implementations, and also add a shark.AppSingletonInspector instance created with the list of internal singletons.</p> <p>Defaults to AndroidObjectInspectors.appDefaults</p>"},{"location":"api/leakcanary/-heap-analysis-config/proguard-mapping-provider/","title":"Proguard mapping provider","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/proguardMappingProvider</p>"},{"location":"api/leakcanary/-heap-analysis-config/proguard-mapping-provider/#proguardmappingprovider","title":"proguardMappingProvider","text":"<p>[androidJvm]\\ val proguardMappingProvider: () -> ProguardMapping?</p>"},{"location":"api/leakcanary/-heap-analysis-config/reference-matchers/","title":"Reference matchers","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/referenceMatchers</p>"},{"location":"api/leakcanary/-heap-analysis-config/reference-matchers/#referencematchers","title":"referenceMatchers","text":"<p>[androidJvm]\\ val referenceMatchers: List<ReferenceMatcher></p> <p>Known patterns of references in the heap, added here either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher).</p> <p>When adding your own custom LibraryLeakReferenceMatcher instances, you\u2019ll most likely want to set LibraryLeakReferenceMatcher.patternApplies with a filter that checks for the Android OS version and manufacturer. The build information can be obtained by calling shark.AndroidBuildMirror.fromHeapGraph.</p> <p>Defaults to AndroidReferenceMatchers.appDefaults</p>"},{"location":"api/leakcanary/-heap-analysis-config/strip-heap-dump/","title":"Strip heap dump","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/stripHeapDump</p>"},{"location":"api/leakcanary/-heap-analysis-config/strip-heap-dump/#stripheapdump","title":"stripHeapDump","text":"<p>[androidJvm]\\ val stripHeapDump: Boolean = false</p> <p>Whether the first step after a heap dump should be to replace the content of all arrays with zeroes. This increases the overall processing time but limits the amount of time the heap dump exists on disk with potential PII.</p>"},{"location":"api/leakcanary/-heap-analysis-decision/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-heap-analysis-decision/#heapanalysisdecision","title":"HeapAnalysisDecision","text":"<p>sealed class HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-heap-analysis-decision/#inheritors","title":"Inheritors","text":"AnalyzeHeap NoHeapAnalysis"},{"location":"api/leakcanary/-heap-analysis-decision/#types","title":"Types","text":"Name Summary AnalyzeHeap [androidJvm]object AnalyzeHeap : HeapAnalysisDecision NoHeapAnalysis [androidJvm]class NoHeapAnalysis(val reason: String) : HeapAnalysisDecision"},{"location":"api/leakcanary/-heap-analysis-decision/-analyze-heap/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisDecision/AnalyzeHeap</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-analyze-heap/#analyzeheap","title":"AnalyzeHeap","text":"<p>[androidJvm]\\ object AnalyzeHeap : HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisDecision/NoHeapAnalysis</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/#noheapanalysis","title":"NoHeapAnalysis","text":"<p>[androidJvm]\\ class NoHeapAnalysis(val reason: String) : HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/#constructors","title":"Constructors","text":"NoHeapAnalysis [androidJvm]constructor(reason: String)"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/#properties","title":"Properties","text":"Name Summary reason [androidJvm]val reason: String"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/-no-heap-analysis/","title":"no heap analysis","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisDecision/NoHeapAnalysis/NoHeapAnalysis</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/-no-heap-analysis/#noheapanalysis","title":"NoHeapAnalysis","text":"<p>[androidJvm]\\ constructor(reason: String)</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/reason/","title":"Reason","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisDecision/NoHeapAnalysis/reason</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/reason/#reason","title":"reason","text":"<p>[androidJvm]\\ val reason: String</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/#heapanalysisinterceptor","title":"HeapAnalysisInterceptor","text":"<p>fun interface HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/#inheritors","title":"Inheritors","text":"ConditionalInterceptor GoodAndroidVersionInterceptor MinimumDiskSpaceInterceptor MinimumElapsedSinceStartInterceptor MinimumMemoryInterceptor OncePerPeriodInterceptor SaveResourceIdsInterceptor"},{"location":"api/leakcanary/-heap-analysis-interceptor/#types","title":"Types","text":"Name Summary Chain [androidJvm]interface Chain"},{"location":"api/leakcanary/-heap-analysis-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]abstract fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-heap-analysis-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisInterceptor/intercept</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ abstract fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisInterceptor/Chain</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/#chain","title":"Chain","text":"<p>[androidJvm]\\ interface Chain</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/#functions","title":"Functions","text":"Name Summary proceed [androidJvm]abstract fun proceed(): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/#properties","title":"Properties","text":"Name Summary job [androidJvm]abstract val job: HeapAnalysisJob"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/job/","title":"Job","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisInterceptor/Chain/job</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/job/#job","title":"job","text":"<p>[androidJvm]\\ abstract val job: HeapAnalysisJob</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/proceed/","title":"Proceed","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisInterceptor/Chain/proceed</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/proceed/#proceed","title":"proceed","text":"<p>[androidJvm]\\ abstract fun proceed(): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-heap-analysis-job/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob</p>"},{"location":"api/leakcanary/-heap-analysis-job/#heapanalysisjob","title":"HeapAnalysisJob","text":"<p>[androidJvm]\\ interface HeapAnalysisJob</p> <p>A HeapAnalysisJob represents a single prepared request to analyze the heap. It cannot be executed twice.</p>"},{"location":"api/leakcanary/-heap-analysis-job/#types","title":"Types","text":"Name Summary Result [androidJvm]sealed class Result"},{"location":"api/leakcanary/-heap-analysis-job/#functions","title":"Functions","text":"Name Summary cancel [androidJvm]abstract fun cancel(cancelReason: String)Cancels the job, if possible. Jobs that are already complete cannot be canceled. execute [androidJvm]abstract fun execute(): HeapAnalysisJob.ResultStarts the analysis job immediately, and blocks until a result is available."},{"location":"api/leakcanary/-heap-analysis-job/#properties","title":"Properties","text":"Name Summary canceled [androidJvm]abstract val canceled: Booleantrue of cancel has been called or if an HeapAnalysisInterceptor has returned Result.Canceled from HeapAnalysisInterceptor.intercept. context [androidJvm]abstract val context: JobContextIn memory store, mutable and thread safe. This allows passing data to interceptors. executed [androidJvm]abstract val executed: Booleantrue if execute has been called. It is an error to call execute more than once."},{"location":"api/leakcanary/-heap-analysis-job/cancel/","title":"Cancel","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/cancel</p>"},{"location":"api/leakcanary/-heap-analysis-job/cancel/#cancel","title":"cancel","text":"<p>[androidJvm]\\ abstract fun cancel(cancelReason: String)</p> <p>Cancels the job, if possible. Jobs that are already complete cannot be canceled.</p>"},{"location":"api/leakcanary/-heap-analysis-job/canceled/","title":"Canceled","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/canceled</p>"},{"location":"api/leakcanary/-heap-analysis-job/canceled/#canceled","title":"canceled","text":"<p>[androidJvm]\\ abstract val canceled: Boolean</p> <p>true of cancel has been called or if an HeapAnalysisInterceptor has returned Result.Canceled from HeapAnalysisInterceptor.intercept.</p>"},{"location":"api/leakcanary/-heap-analysis-job/context/","title":"Context","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/context</p>"},{"location":"api/leakcanary/-heap-analysis-job/context/#context","title":"context","text":"<p>[androidJvm]\\ abstract val context: JobContext</p> <p>In memory store, mutable and thread safe. This allows passing data to interceptors.</p>"},{"location":"api/leakcanary/-heap-analysis-job/execute/","title":"Execute","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/execute</p>"},{"location":"api/leakcanary/-heap-analysis-job/execute/#execute","title":"execute","text":"<p>[androidJvm]\\ abstract fun execute(): HeapAnalysisJob.Result</p> <p>Starts the analysis job immediately, and blocks until a result is available.</p>"},{"location":"api/leakcanary/-heap-analysis-job/execute/#return","title":"Return","text":"<p>Either Result.Done if the analysis was attempted or Result.Canceled</p>"},{"location":"api/leakcanary/-heap-analysis-job/executed/","title":"Executed","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/executed</p>"},{"location":"api/leakcanary/-heap-analysis-job/executed/#executed","title":"executed","text":"<p>[androidJvm]\\ abstract val executed: Boolean</p> <p>true if execute has been called. It is an error to call execute more than once.</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/#result","title":"Result","text":"<p>sealed class Result</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/#inheritors","title":"Inheritors","text":"Done Canceled"},{"location":"api/leakcanary/-heap-analysis-job/-result/#types","title":"Types","text":"Name Summary Canceled [androidJvm]data class Canceled(val cancelReason: String) : HeapAnalysisJob.Result Done [androidJvm]data class Done(val analysis: HeapAnalysis, val stripHeapDumpDurationMillis: Long? = null) : HeapAnalysisJob.Result"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Canceled</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/#canceled","title":"Canceled","text":"<p>[androidJvm]\\ data class Canceled(val cancelReason: String) : HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/#constructors","title":"Constructors","text":"Canceled [androidJvm]constructor(cancelReason: String)"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/#properties","title":"Properties","text":"Name Summary cancelReason [androidJvm]val cancelReason: String"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/-canceled/","title":"canceled","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Canceled/Canceled</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/-canceled/#canceled","title":"Canceled","text":"<p>[androidJvm]\\ constructor(cancelReason: String)</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/cancel-reason/","title":"Cancel reason","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Canceled/cancelReason</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/cancel-reason/#cancelreason","title":"cancelReason","text":"<p>[androidJvm]\\ val cancelReason: String</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Done</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/#done","title":"Done","text":"<p>[androidJvm]\\ data class Done(val analysis: HeapAnalysis, val stripHeapDumpDurationMillis: Long? = null) : HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/#constructors","title":"Constructors","text":"Done [androidJvm]constructor(analysis: HeapAnalysis, stripHeapDumpDurationMillis: Long? = null)"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/#properties","title":"Properties","text":"Name Summary analysis [androidJvm]val analysis: HeapAnalysis stripHeapDumpDurationMillis [androidJvm]val stripHeapDumpDurationMillis: Long? = nullThe time spent stripping the hprof of any data if HeapAnalysisConfig.stripHeapDump is true, null otherwise."},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/-done/","title":"done","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Done/Done</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/-done/#done","title":"Done","text":"<p>[androidJvm]\\ constructor(analysis: HeapAnalysis, stripHeapDumpDurationMillis: Long? = null)</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/analysis/","title":"Analysis","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Done/analysis</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/analysis/#analysis","title":"analysis","text":"<p>[androidJvm]\\ val analysis: HeapAnalysis</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/strip-heap-dump-duration-millis/","title":"Strip heap dump duration millis","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Done/stripHeapDumpDurationMillis</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/strip-heap-dump-duration-millis/#stripheapdumpdurationmillis","title":"stripHeapDumpDurationMillis","text":"<p>[androidJvm]\\ val stripHeapDumpDurationMillis: Long? = null</p> <p>The time spent stripping the hprof of any data if HeapAnalysisConfig.stripHeapDump is true, null otherwise.</p>"},{"location":"api/leakcanary/-heap-analysis-reporter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisReporter</p>"},{"location":"api/leakcanary/-heap-analysis-reporter/#heapanalysisreporter","title":"HeapAnalysisReporter","text":"<p>[androidJvm]\\ fun interface HeapAnalysisReporter</p> <p>Reports the results of a heap analysis created by AndroidDetectLeaksAssert.</p>"},{"location":"api/leakcanary/-heap-analysis-reporter/#functions","title":"Functions","text":"Name Summary reportHeapAnalysis [androidJvm]abstract fun reportHeapAnalysis(heapAnalysis: HeapAnalysis)"},{"location":"api/leakcanary/-heap-analysis-reporter/report-heap-analysis/","title":"Report heap analysis","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisReporter/reportHeapAnalysis</p>"},{"location":"api/leakcanary/-heap-analysis-reporter/report-heap-analysis/#reportheapanalysis","title":"reportHeapAnalysis","text":"<p>[androidJvm]\\ abstract fun reportHeapAnalysis(heapAnalysis: HeapAnalysis)</p>"},{"location":"api/leakcanary/-heap-dump-directory-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-heap-dump-directory-provider/#heapdumpdirectoryprovider","title":"HeapDumpDirectoryProvider","text":"<p>fun interface HeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-heap-dump-directory-provider/#functions","title":"Functions","text":"Name Summary heapDumpDirectory [jvm]abstract fun heapDumpDirectory(): FileExpected to be only once per HeapDumpFileProvider implementation instance."},{"location":"api/leakcanary/-heap-dump-directory-provider/heap-dump-directory/","title":"Heap dump directory","text":"<p>//leakcanary-repo/leakcanary/HeapDumpDirectoryProvider/heapDumpDirectory</p>"},{"location":"api/leakcanary/-heap-dump-directory-provider/heap-dump-directory/#heapdumpdirectory","title":"heapDumpDirectory","text":"<p>[jvm]\\ abstract fun heapDumpDirectory(): File</p> <p>Expected to be only once per HeapDumpFileProvider implementation instance.</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/#heapdumpfileprovider","title":"HeapDumpFileProvider","text":"<p>fun interface HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/#inheritors","title":"Inheritors","text":"DatetimeFormattedHeapDumpFileProvider"},{"location":"api/leakcanary/-heap-dump-file-provider/#functions","title":"Functions","text":"Name Summary newHeapDumpFile [jvm]abstract fun newHeapDumpFile(): FileReturns a File that can be passed to a HeapDumper to dump the heap."},{"location":"api/leakcanary/-heap-dump-file-provider/new-heap-dump-file/","title":"New heap dump file","text":"<p>//leakcanary-repo/leakcanary/HeapDumpFileProvider/newHeapDumpFile</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/new-heap-dump-file/#newheapdumpfile","title":"newHeapDumpFile","text":"<p>[jvm]\\ abstract fun newHeapDumpFile(): File</p> <p>Returns a File that can be passed to a HeapDumper to dump the heap.</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpFileProvider/Companion</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p> <p>This allows external modules to add factory methods for implementations of this interface as extension functions of this companion object.</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/-companion/#functions","title":"Functions","text":"Name Summary datetimeFormatted [jvm]fun HeapDumpFileProvider.Companion.datetimeFormatted(directory: File, prefix: String = \"\", suffix: String = \"\", dateProvider: () -> Date = { Date() }): HeapDumpFileProvider tempFile [jvm]fun HeapDumpFileProvider.Companion.tempFile(): HeapDumpFileProvider"},{"location":"api/leakcanary/-heap-dump-storage-strategy/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/#heapdumpstoragestrategy","title":"HeapDumpStorageStrategy","text":"<p>interface HeapDumpStorageStrategy : DumpingHeapGraphProvider.HeapDumpClosedListener, RepeatingHeapGraphObjectGrowthDetector.CompletionListener</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/#inheritors","title":"Inheritors","text":"DeleteOnHeapDumpClose KeepHeapDumps KeepHeapDumpsOnObjectsGrowing KeepZippedHeapDumpsOnObjectsGrowing"},{"location":"api/leakcanary/-heap-dump-storage-strategy/#types","title":"Types","text":"Name Summary DeleteOnHeapDumpClose [jvm]class DeleteOnHeapDumpClose(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategyDeletes heap dumps as soon as we\u2019re done traversing them. This is the most disk space efficient strategy. KeepHeapDumps [jvm]object KeepHeapDumps : HeapDumpStorageStrategyNo deletion of heap dump files. This is useful if you intend to open up the heap dumps directly or re run the analysis no matter the outcome. KeepHeapDumpsOnObjectsGrowing [jvm]class KeepHeapDumpsOnObjectsGrowing(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategyKeeps the heap dumps until we\u2019re done diffing, then delete them only if there are no growing objects. This is useful if you intend to open up the heap dumps directly or re run the analysis on failure. KeepZippedHeapDumpsOnObjectsGrowing [jvm]class KeepZippedHeapDumpsOnObjectsGrowing(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategyKeeps the heap dumps until we\u2019re done diffing, then on completion creates a zip for each heap dump if there are growing object, and delete all the source heap dumps. This is useful if you intend to upload the heap dumps on failure in CI and you want to keep disk space, network usage and cloud storage low. Zipped heap dumps are typically 4x smaller so this is worth it, although the trade off is that zipping can add a few seconds per heap dump to the runtime duration of a test."},{"location":"api/leakcanary/-heap-dump-storage-strategy/#functions","title":"Functions","text":"Name Summary onHeapDumpClosed [jvm]open override fun onHeapDumpClosed(heapDumpFile: File) onObjectGrowthDetectionComplete [jvm]open override fun onObjectGrowthDetectionComplete(result: HeapDiff)"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-heap-dump-closed/","title":"On heap dump closed","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/onHeapDumpClosed</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-heap-dump-closed/#onheapdumpclosed","title":"onHeapDumpClosed","text":"<p>[jvm]\\ open override fun onHeapDumpClosed(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-object-growth-detection-complete/","title":"On object growth detection complete","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/onObjectGrowthDetectionComplete</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-object-growth-detection-complete/#onobjectgrowthdetectioncomplete","title":"onObjectGrowthDetectionComplete","text":"<p>[jvm]\\ open override fun onObjectGrowthDetectionComplete(result: HeapDiff)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/DeleteOnHeapDumpClose</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/#deleteonheapdumpclose","title":"DeleteOnHeapDumpClose","text":"<p>[jvm]\\ class DeleteOnHeapDumpClose(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategy</p> <p>Deletes heap dumps as soon as we\u2019re done traversing them. This is the most disk space efficient strategy.</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/#constructors","title":"Constructors","text":"DeleteOnHeapDumpClose [jvm]constructor(deleteFile: (File) -> Unit = { it.delete() })"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/#functions","title":"Functions","text":"Name Summary onHeapDumpClosed [jvm]open override fun onHeapDumpClosed(heapDumpFile: File) onObjectGrowthDetectionComplete [jvm]open override fun onObjectGrowthDetectionComplete(result: HeapDiff)"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/-delete-on-heap-dump-close/","title":"delete on heap dump close","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/DeleteOnHeapDumpClose/DeleteOnHeapDumpClose</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/-delete-on-heap-dump-close/#deleteonheapdumpclose","title":"DeleteOnHeapDumpClose","text":"<p>[jvm]\\ constructor(deleteFile: (File) -> Unit = { it.delete() })</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/on-heap-dump-closed/","title":"On heap dump closed","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/DeleteOnHeapDumpClose/onHeapDumpClosed</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/on-heap-dump-closed/#onheapdumpclosed","title":"onHeapDumpClosed","text":"<p>[jvm]\\ open override fun onHeapDumpClosed(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumps</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/#keepheapdumps","title":"KeepHeapDumps","text":"<p>[jvm]\\ object KeepHeapDumps : HeapDumpStorageStrategy</p> <p>No deletion of heap dump files. This is useful if you intend to open up the heap dumps directly or re run the analysis no matter the outcome.</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/#functions","title":"Functions","text":"Name Summary onHeapDumpClosed [jvm]open override fun onHeapDumpClosed(heapDumpFile: File) onObjectGrowthDetectionComplete [jvm]open override fun onObjectGrowthDetectionComplete(result: HeapDiff)"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumpsOnObjectsGrowing</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/#keepheapdumpsonobjectsgrowing","title":"KeepHeapDumpsOnObjectsGrowing","text":"<p>[jvm]\\ class KeepHeapDumpsOnObjectsGrowing(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategy</p> <p>Keeps the heap dumps until we\u2019re done diffing, then delete them only if there are no growing objects. This is useful if you intend to open up the heap dumps directly or re run the analysis on failure.</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/#constructors","title":"Constructors","text":"KeepHeapDumpsOnObjectsGrowing [jvm]constructor(deleteFile: (File) -> Unit = { it.delete() })"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/#functions","title":"Functions","text":"Name Summary onHeapDumpClosed [jvm]open override fun onHeapDumpClosed(heapDumpFile: File) onObjectGrowthDetectionComplete [jvm]open override fun onObjectGrowthDetectionComplete(result: HeapDiff)"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/-keep-heap-dumps-on-objects-growing/","title":"keep heap dumps on objects growing","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumpsOnObjectsGrowing/KeepHeapDumpsOnObjectsGrowing</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/-keep-heap-dumps-on-objects-growing/#keepheapdumpsonobjectsgrowing","title":"KeepHeapDumpsOnObjectsGrowing","text":"<p>[jvm]\\ constructor(deleteFile: (File) -> Unit = { it.delete() })</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dump-closed/","title":"On heap dump closed","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumpsOnObjectsGrowing/onHeapDumpClosed</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dump-closed/#onheapdumpclosed","title":"onHeapDumpClosed","text":"<p>[jvm]\\ open override fun onHeapDumpClosed(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-object-growth-detection-complete/","title":"On object growth detection complete","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumpsOnObjectsGrowing/onObjectGrowthDetectionComplete</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-object-growth-detection-complete/#onobjectgrowthdetectioncomplete","title":"onObjectGrowthDetectionComplete","text":"<p>[jvm]\\ open override fun onObjectGrowthDetectionComplete(result: HeapDiff)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepZippedHeapDumpsOnObjectsGrowing</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/#keepzippedheapdumpsonobjectsgrowing","title":"KeepZippedHeapDumpsOnObjectsGrowing","text":"<p>[jvm]\\ class KeepZippedHeapDumpsOnObjectsGrowing(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategy</p> <p>Keeps the heap dumps until we\u2019re done diffing, then on completion creates a zip for each heap dump if there are growing object, and delete all the source heap dumps. This is useful if you intend to upload the heap dumps on failure in CI and you want to keep disk space, network usage and cloud storage low. Zipped heap dumps are typically 4x smaller so this is worth it, although the trade off is that zipping can add a few seconds per heap dump to the runtime duration of a test.</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/#constructors","title":"Constructors","text":"KeepZippedHeapDumpsOnObjectsGrowing [jvm]constructor(deleteFile: (File) -> Unit = { it.delete() })"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/#functions","title":"Functions","text":"Name Summary onHeapDumpClosed [jvm]open override fun onHeapDumpClosed(heapDumpFile: File) onObjectGrowthDetectionComplete [jvm]open override fun onObjectGrowthDetectionComplete(result: HeapDiff)"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/-keep-zipped-heap-dumps-on-objects-growing/","title":"keep zipped heap dumps on objects growing","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepZippedHeapDumpsOnObjectsGrowing/KeepZippedHeapDumpsOnObjectsGrowing</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/-keep-zipped-heap-dumps-on-objects-growing/#keepzippedheapdumpsonobjectsgrowing","title":"KeepZippedHeapDumpsOnObjectsGrowing","text":"<p>[jvm]\\ constructor(deleteFile: (File) -> Unit = { it.delete() })</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dump-closed/","title":"On heap dump closed","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepZippedHeapDumpsOnObjectsGrowing/onHeapDumpClosed</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dump-closed/#onheapdumpclosed","title":"onHeapDumpClosed","text":"<p>[jvm]\\ open override fun onHeapDumpClosed(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-object-growth-detection-complete/","title":"On object growth detection complete","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepZippedHeapDumpsOnObjectsGrowing/onObjectGrowthDetectionComplete</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-object-growth-detection-complete/#onobjectgrowthdetectioncomplete","title":"onObjectGrowthDetectionComplete","text":"<p>[jvm]\\ open override fun onObjectGrowthDetectionComplete(result: HeapDiff)</p>"},{"location":"api/leakcanary/-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumper</p>"},{"location":"api/leakcanary/-heap-dumper/#heapdumper","title":"HeapDumper","text":"<p>fun interface HeapDumper</p>"},{"location":"api/leakcanary/-heap-dumper/#inheritors","title":"Inheritors","text":"ObjectGrowthWarmupHeapDumper"},{"location":"api/leakcanary/-heap-dumper/#types","title":"Types","text":"Name Summary Companion [jvm]object CompanionThis allows external modules to add factory methods for implementations of this interface as extension functions of this companion object."},{"location":"api/leakcanary/-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [jvm]abstract fun dumpHeap(heapDumpFile: File)Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed. withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/HeapDumper/dumpHeap</p>"},{"location":"api/leakcanary/-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ abstract fun dumpHeap(heapDumpFile: File)</p> <p>Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed.</p> <p>Implementations can throw a runtime exception if heap dumping failed.</p>"},{"location":"api/leakcanary/-heap-dumper/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumper/Companion</p>"},{"location":"api/leakcanary/-heap-dumper/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p> <p>This allows external modules to add factory methods for implementations of this interface as extension functions of this companion object.</p>"},{"location":"api/leakcanary/-heap-dumper/-companion/#functions","title":"Functions","text":"Name Summary forAndroidInProcess [androidJvm]fun HeapDumper.Companion.forAndroidInProcess(): AndroidDebugHeapDumper forJvmInProcess [jvm]fun HeapDumper.Companion.forJvmInProcess(): HotSpotHeapDumper forUiAutomatorAsShell [androidJvm]fun HeapDumper.Companion.forUiAutomatorAsShell(withGc: Boolean, dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName): UiAutomatorShellHeapDumper"},{"location":"api/leakcanary/-hot-spot-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HotSpotHeapDumper</p>"},{"location":"api/leakcanary/-hot-spot-heap-dumper/#hotspotheapdumper","title":"HotSpotHeapDumper","text":"<p>[jvm]\\ object HotSpotHeapDumper : HeapDumper</p>"},{"location":"api/leakcanary/-hot-spot-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [jvm]open override fun dumpHeap(heapDumpFile: File) withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/-hot-spot-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/HotSpotHeapDumper/dumpHeap</p>"},{"location":"api/leakcanary/-hot-spot-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ open override fun dumpHeap(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-installable-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/InstallableWatcher</p>"},{"location":"api/leakcanary/-installable-watcher/#installablewatcher","title":"InstallableWatcher","text":"<p>interface InstallableWatcher</p>"},{"location":"api/leakcanary/-installable-watcher/#inheritors","title":"Inheritors","text":"ActivityWatcher FragmentAndViewModelWatcher RootViewWatcher ServiceWatcher"},{"location":"api/leakcanary/-installable-watcher/#functions","title":"Functions","text":"Name Summary install [androidJvm]abstract fun install() uninstall [androidJvm]abstract fun uninstall()"},{"location":"api/leakcanary/-installable-watcher/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/InstallableWatcher/install</p>"},{"location":"api/leakcanary/-installable-watcher/install/#install","title":"install","text":"<p>[androidJvm]\\ abstract fun install()</p>"},{"location":"api/leakcanary/-installable-watcher/uninstall/","title":"Uninstall","text":"<p>//leakcanary-repo/leakcanary/InstallableWatcher/uninstall</p>"},{"location":"api/leakcanary/-installable-watcher/uninstall/#uninstall","title":"uninstall","text":"<p>[androidJvm]\\ abstract fun uninstall()</p>"},{"location":"api/leakcanary/-job-context/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/JobContext</p>"},{"location":"api/leakcanary/-job-context/#jobcontext","title":"JobContext","text":"<p>[androidJvm]\\ class JobContext(val starter: Class<*>? = null)</p> <p>In memory store that can be used to store objects in a given HeapAnalysisJob instance. This is a simple MutableMap of String to Any, but with unsafe generics access.</p> <p>By convention, starter should be the class that triggered the start of the job.</p>"},{"location":"api/leakcanary/-job-context/#constructors","title":"Constructors","text":"JobContext [androidJvm]constructor(starter: KClass<>)constructor(starter: Class<>? = null)"},{"location":"api/leakcanary/-job-context/#functions","title":"Functions","text":"Name Summary contains [androidJvm]operator fun contains(key: String): Boolean get [androidJvm]operator fun <T> get(key: String): T? getOrPut [androidJvm]fun <T> getOrPut(key: String, defaultValue: () -> T): T minusAssign [androidJvm]operator fun minusAssign(key: String) set [androidJvm]operator fun <T> set(key: String, value: T)"},{"location":"api/leakcanary/-job-context/#properties","title":"Properties","text":"Name Summary starter [androidJvm]val starter: Class<*>? = null"},{"location":"api/leakcanary/-job-context/-job-context/","title":"job context","text":"<p>//leakcanary-repo/leakcanary/JobContext/JobContext</p>"},{"location":"api/leakcanary/-job-context/-job-context/#jobcontext","title":"JobContext","text":"<p>[androidJvm]\\ constructor(starter: KClass<*>)</p> <p>constructor(starter: Class<*>? = null)</p>"},{"location":"api/leakcanary/-job-context/contains/","title":"Contains","text":"<p>//leakcanary-repo/leakcanary/JobContext/contains</p>"},{"location":"api/leakcanary/-job-context/contains/#contains","title":"contains","text":"<p>[androidJvm]\\ operator fun contains(key: String): Boolean</p>"},{"location":"api/leakcanary/-job-context/contains/#see-also","title":"See also","text":"MutableMap.containsKey"},{"location":"api/leakcanary/-job-context/get-or-put/","title":"Get or put","text":"<p>//leakcanary-repo/leakcanary/JobContext/getOrPut</p>"},{"location":"api/leakcanary/-job-context/get-or-put/#getorput","title":"getOrPut","text":"<p>[androidJvm]\\ fun <T> getOrPut(key: String, defaultValue: () -> T): T</p>"},{"location":"api/leakcanary/-job-context/get-or-put/#see-also","title":"See also","text":"getOrPut"},{"location":"api/leakcanary/-job-context/get/","title":"Get","text":"<p>//leakcanary-repo/leakcanary/JobContext/get</p>"},{"location":"api/leakcanary/-job-context/get/#get","title":"get","text":"<p>[androidJvm]\\ operator fun <T> get(key: String): T?</p>"},{"location":"api/leakcanary/-job-context/minus-assign/","title":"Minus assign","text":"<p>//leakcanary-repo/leakcanary/JobContext/minusAssign</p>"},{"location":"api/leakcanary/-job-context/minus-assign/#minusassign","title":"minusAssign","text":"<p>[androidJvm]\\ operator fun minusAssign(key: String)</p>"},{"location":"api/leakcanary/-job-context/minus-assign/#see-also","title":"See also","text":"MutableMap.remove"},{"location":"api/leakcanary/-job-context/set/","title":"Set","text":"<p>//leakcanary-repo/leakcanary/JobContext/set</p>"},{"location":"api/leakcanary/-job-context/set/#set","title":"set","text":"<p>[androidJvm]\\ operator fun <T> set(key: String, value: T)</p>"},{"location":"api/leakcanary/-job-context/set/#see-also","title":"See also","text":"set"},{"location":"api/leakcanary/-job-context/starter/","title":"Starter","text":"<p>//leakcanary-repo/leakcanary/JobContext/starter</p>"},{"location":"api/leakcanary/-job-context/starter/#starter","title":"starter","text":"<p>[androidJvm]\\ val starter: Class<*>? = null</p>"},{"location":"api/leakcanary/-keyed-weak-reference/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference</p>"},{"location":"api/leakcanary/-keyed-weak-reference/#keyedweakreference","title":"KeyedWeakReference","text":"<p>[jvm]\\ class KeyedWeakReference(referent: Any, val key: String, val description: String, val watchUptimeMillis: Long, referenceQueue: ReferenceQueue<Any>) : WeakReference<Any> </p> <p>A weak reference used by ReferenceQueueRetainedObjectTracker to determine which objects become weakly reachable and which don\u2019t. ReferenceQueueRetainedObjectTracker uses key to keep track of KeyedWeakReference instances that haven\u2019t made it into the associated ReferenceQueue yet.</p> <p>heapDumpUptimeMillis should be set with the current time from UptimeClock.uptime right before dumping the heap, so that we can later determine how long an object was retained.</p>"},{"location":"api/leakcanary/-keyed-weak-reference/#constructors","title":"Constructors","text":"KeyedWeakReference [jvm]constructor(referent: Any, key: String, description: String, watchUptimeMillis: Long, referenceQueue: ReferenceQueue<Any>)"},{"location":"api/leakcanary/-keyed-weak-reference/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/leakcanary/-keyed-weak-reference/#functions","title":"Functions","text":"Name Summary clear [jvm]open override fun clear() enqueue [jvm]open fun enqueue(): Boolean get [jvm]open override fun get(): Any? getAndLeakReferent [jvm]fun getAndLeakReferent(): Any?Same as WeakReference.get but does not trigger an intentional crash. refersTo [jvm]fun refersTo(p0: Any): Boolean"},{"location":"api/leakcanary/-keyed-weak-reference/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String key [jvm]val key: String retained [jvm]val retained: Boolean retainedUptimeMillis [jvm]@Volatilevar retainedUptimeMillis: LongTime at which the associated object (referent) was considered retained, or -1 if it hasn\u2019t been yet. watchUptimeMillis [jvm]val watchUptimeMillis: Long"},{"location":"api/leakcanary/-keyed-weak-reference/-keyed-weak-reference/","title":"keyed weak reference","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/KeyedWeakReference</p>"},{"location":"api/leakcanary/-keyed-weak-reference/-keyed-weak-reference/#keyedweakreference","title":"KeyedWeakReference","text":"<p>[jvm]\\ constructor(referent: Any, key: String, description: String, watchUptimeMillis: Long, referenceQueue: ReferenceQueue<Any>)</p>"},{"location":"api/leakcanary/-keyed-weak-reference/clear/","title":"Clear","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/clear</p>"},{"location":"api/leakcanary/-keyed-weak-reference/clear/#clear","title":"clear","text":"<p>[jvm]\\ open override fun clear()</p>"},{"location":"api/leakcanary/-keyed-weak-reference/description/","title":"Description","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/description</p>"},{"location":"api/leakcanary/-keyed-weak-reference/description/#description","title":"description","text":"<p>[jvm]\\ val description: String</p>"},{"location":"api/leakcanary/-keyed-weak-reference/get-and-leak-referent/","title":"Get and leak referent","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/getAndLeakReferent</p>"},{"location":"api/leakcanary/-keyed-weak-reference/get-and-leak-referent/#getandleakreferent","title":"getAndLeakReferent","text":"<p>[jvm]\\ fun getAndLeakReferent(): Any?</p> <p>Same as WeakReference.get but does not trigger an intentional crash.</p> <p>Calling this method will end up creating local references to the objects, preventing them from becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>"},{"location":"api/leakcanary/-keyed-weak-reference/get/","title":"Get","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/get</p>"},{"location":"api/leakcanary/-keyed-weak-reference/get/#get","title":"get","text":"<p>[jvm]\\ open override fun get(): Any?</p>"},{"location":"api/leakcanary/-keyed-weak-reference/key/","title":"Key","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/key</p>"},{"location":"api/leakcanary/-keyed-weak-reference/key/#key","title":"key","text":"<p>[jvm]\\ val key: String</p>"},{"location":"api/leakcanary/-keyed-weak-reference/retained-uptime-millis/","title":"Retained uptime millis","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/retainedUptimeMillis</p>"},{"location":"api/leakcanary/-keyed-weak-reference/retained-uptime-millis/#retaineduptimemillis","title":"retainedUptimeMillis","text":"<p>[jvm]\\</p> <p>@Volatile</p> <p>var retainedUptimeMillis: Long</p> <p>Time at which the associated object (referent) was considered retained, or -1 if it hasn\u2019t been yet.</p>"},{"location":"api/leakcanary/-keyed-weak-reference/retained/","title":"Retained","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/retained</p>"},{"location":"api/leakcanary/-keyed-weak-reference/retained/#retained","title":"retained","text":"<p>[jvm]\\ val retained: Boolean</p>"},{"location":"api/leakcanary/-keyed-weak-reference/watch-uptime-millis/","title":"Watch uptime millis","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/watchUptimeMillis</p>"},{"location":"api/leakcanary/-keyed-weak-reference/watch-uptime-millis/#watchuptimemillis","title":"watchUptimeMillis","text":"<p>[jvm]\\ val watchUptimeMillis: Long</p>"},{"location":"api/leakcanary/-keyed-weak-reference/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/Companion</p>"},{"location":"api/leakcanary/-keyed-weak-reference/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/leakcanary/-keyed-weak-reference/-companion/#properties","title":"Properties","text":"Name Summary heapDumpUptimeMillis [jvm]@JvmStatic@Volatilevar heapDumpUptimeMillis: Long"},{"location":"api/leakcanary/-keyed-weak-reference/-companion/heap-dump-uptime-millis/","title":"Heap dump uptime millis","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/Companion/heapDumpUptimeMillis</p>"},{"location":"api/leakcanary/-keyed-weak-reference/-companion/heap-dump-uptime-millis/#heapdumpuptimemillis","title":"heapDumpUptimeMillis","text":"<p>[jvm]\\</p> <p>@JvmStatic</p> <p>@Volatile</p> <p>var heapDumpUptimeMillis: Long</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LazyForwardingEventListener</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/#lazyforwardingeventlistener","title":"LazyForwardingEventListener","text":"<p>[androidJvm]\\ class LazyForwardingEventListener(lazyEventListener: () -> EventListener) : EventListener</p> <p>Forwards events to the EventListener provided by lazyEventListener which is evaluated lazily, when the first comes in.</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/#constructors","title":"Constructors","text":"LazyForwardingEventListener [androidJvm]constructor(lazyEventListener: () -> EventListener)"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-lazy-forwarding-event-listener/-lazy-forwarding-event-listener/","title":"lazy forwarding event listener","text":"<p>//leakcanary-repo/leakcanary/LazyForwardingEventListener/LazyForwardingEventListener</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/-lazy-forwarding-event-listener/#lazyforwardingeventlistener","title":"LazyForwardingEventListener","text":"<p>[androidJvm]\\ constructor(lazyEventListener: () -> EventListener)</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/LazyForwardingEventListener/onEvent</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-leak-assertions/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LeakAssertions</p>"},{"location":"api/leakcanary/-leak-assertions/#leakassertions","title":"LeakAssertions","text":"<p>[androidJvm]\\ object LeakAssertions</p>"},{"location":"api/leakcanary/-leak-assertions/#functions","title":"Functions","text":"Name Summary assertNoLeaks [androidJvm]fun assertNoLeaks(tag: String = NO_TAG)Asserts that there are no leak in the heap at this point in time."},{"location":"api/leakcanary/-leak-assertions/#properties","title":"Properties","text":"Name Summary NO_TAG [androidJvm]const val NO_TAG: String"},{"location":"api/leakcanary/-leak-assertions/-n-o_-t-a-g/","title":"n o t a g","text":"<p>//leakcanary-repo/leakcanary/LeakAssertions/NO_TAG</p>"},{"location":"api/leakcanary/-leak-assertions/-n-o_-t-a-g/#no_tag","title":"NO_TAG","text":"<p>[androidJvm]\\ const val NO_TAG: String</p>"},{"location":"api/leakcanary/-leak-assertions/assert-no-leaks/","title":"Assert no leaks","text":"<p>//leakcanary-repo/leakcanary/LeakAssertions/assertNoLeaks</p>"},{"location":"api/leakcanary/-leak-assertions/assert-no-leaks/#assertnoleaks","title":"assertNoLeaks","text":"<p>[androidJvm]\\ fun assertNoLeaks(tag: String = NO_TAG)</p> <p>Asserts that there are no leak in the heap at this point in time.</p> <p>This method should be called on the instrumentation thread.</p> <p>This method is may block the current thread for a significant amount of time, as it might need to dump the heap and analyze it.</p> <p>If leaks are found, this method is expected to throw an exception, which will fail the test.</p> <p>The specific details depend on what you configured in DetectLeaksAssert.update.</p> <p>tag identifies the calling code, which can then be used for reporting purposes or to skip leak detection for specific tags in a subset of tests (see SkipLeakDetection).</p>"},{"location":"api/leakcanary/-leak-canary/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LeakCanary</p>"},{"location":"api/leakcanary/-leak-canary/#leakcanary","title":"LeakCanary","text":"<p>[androidJvm]\\ object LeakCanary</p> <p>The entry point API for LeakCanary. LeakCanary builds on top of AppWatcher. AppWatcher notifies LeakCanary of retained instances, which in turns dumps the heap, analyses it and publishes the results.</p> <p>LeakCanary can be configured by updating config.</p>"},{"location":"api/leakcanary/-leak-canary/#types","title":"Types","text":"Name Summary Config [androidJvm]data class Config(val dumpHeap: Boolean = true, val dumpHeapWhenDebugging: Boolean = false, val retainedVisibleThreshold: Int = 5, val referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, val objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, val metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, val computeRetainedHeapSize: Boolean = true, val maxStoredHeapDumps: Int = 7, val requestWriteExternalStoragePermission: Boolean = false, val leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, val heapDumper: HeapDumper = AndroidDebugHeapDumper, val eventListeners: List<EventListener> = listOf( LogcatEventListener, ToastEventListener, LazyForwardingEventListener { if (InternalLeakCanary.formFactor == TV) TvEventListener else NotificationEventListener }, when { RemoteWorkManagerHeapAnalyzer.remoteLeakCanaryServiceInClasspath -> RemoteWorkManagerHeapAnalyzer WorkManagerHeapAnalyzer.validWorkManagerInClasspath -> WorkManagerHeapAnalyzer else -> BackgroundThreadHeapAnalyzer } ), val showNotifications: Boolean = true)LeakCanary configuration data class. Properties can be updated via copy."},{"location":"api/leakcanary/-leak-canary/#functions","title":"Functions","text":"Name Summary dumpHeap [androidJvm]fun dumpHeap()Immediately triggers a heap dump and analysis, if there is at least one retained instance tracked by AppWatcher.objectWatcher. If there are no retained instances then the heap will not be dumped and a notification will be shown instead. newLeakDisplayActivityIntent [androidJvm]fun newLeakDisplayActivityIntent(): IntentReturns a new Intent that can be used to programmatically launch the leak display activity. showLeakDisplayActivityLauncherIcon [androidJvm]fun showLeakDisplayActivityLauncherIcon(showLauncherIcon: Boolean)Dynamically shows / hides the launcher icon for the leak display activity. Note: you can change the default value by overriding the <code>leak_canary_add_launcher_icon</code> boolean resource:"},{"location":"api/leakcanary/-leak-canary/#properties","title":"Properties","text":"Name Summary config [androidJvm]@JvmStatic@Volatilevar config: LeakCanary.ConfigThe current LeakCanary configuration. Can be updated at any time, usually by replacing it with a mutated copy, e.g.:"},{"location":"api/leakcanary/-leak-canary/config/","title":"Config","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/config</p>"},{"location":"api/leakcanary/-leak-canary/config/#config","title":"config","text":"<p>[androidJvm]\\</p> <p>@JvmStatic</p> <p>@Volatile</p> <p>var config: LeakCanary.Config</p> <p>The current LeakCanary configuration. Can be updated at any time, usually by replacing it with a mutated copy, e.g.:</p> <pre><code>LeakCanary.config = LeakCanary.config.copy(retainedVisibleThreshold = 3)\n</code></pre> <p>In Java, use LeakCanary.Config.Builder instead:</p> <pre><code>LeakCanary.Config config = LeakCanary.getConfig().newBuilder()\n.retainedVisibleThreshold(3)\n.build();\nLeakCanary.setConfig(config);\n</code></pre>"},{"location":"api/leakcanary/-leak-canary/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/dumpHeap</p>"},{"location":"api/leakcanary/-leak-canary/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[androidJvm]\\ fun dumpHeap()</p> <p>Immediately triggers a heap dump and analysis, if there is at least one retained instance tracked by AppWatcher.objectWatcher. If there are no retained instances then the heap will not be dumped and a notification will be shown instead.</p>"},{"location":"api/leakcanary/-leak-canary/new-leak-display-activity-intent/","title":"New leak display activity intent","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/newLeakDisplayActivityIntent</p>"},{"location":"api/leakcanary/-leak-canary/new-leak-display-activity-intent/#newleakdisplayactivityintent","title":"newLeakDisplayActivityIntent","text":"<p>[androidJvm]\\ fun newLeakDisplayActivityIntent(): Intent</p> <p>Returns a new Intent that can be used to programmatically launch the leak display activity.</p>"},{"location":"api/leakcanary/-leak-canary/show-leak-display-activity-launcher-icon/","title":"Show leak display activity launcher icon","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/showLeakDisplayActivityLauncherIcon</p>"},{"location":"api/leakcanary/-leak-canary/show-leak-display-activity-launcher-icon/#showleakdisplayactivitylaunchericon","title":"showLeakDisplayActivityLauncherIcon","text":"<p>[androidJvm]\\ fun showLeakDisplayActivityLauncherIcon(showLauncherIcon: Boolean)</p> <p>Dynamically shows / hides the launcher icon for the leak display activity. Note: you can change the default value by overriding the <code>leak_canary_add_launcher_icon</code> boolean resource:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<bool name=\"leak_canary_add_launcher_icon\">false</bool>\n</resources>\n</code></pre>"},{"location":"api/leakcanary/-leak-canary/-config/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config</p>"},{"location":"api/leakcanary/-leak-canary/-config/#config","title":"Config","text":"<p>data class Config(val dumpHeap: Boolean = true, val dumpHeapWhenDebugging: Boolean = false, val retainedVisibleThreshold: Int = 5, val referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, val objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, val metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, val computeRetainedHeapSize: Boolean = true, val maxStoredHeapDumps: Int = 7, val requestWriteExternalStoragePermission: Boolean = false, val leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, val heapDumper: HeapDumper = AndroidDebugHeapDumper, val eventListeners: List<EventListener> = listOf( LogcatEventListener, ToastEventListener, LazyForwardingEventListener { if (InternalLeakCanary.formFactor == TV) TvEventListener else NotificationEventListener }, when { RemoteWorkManagerHeapAnalyzer.remoteLeakCanaryServiceInClasspath -> RemoteWorkManagerHeapAnalyzer WorkManagerHeapAnalyzer.validWorkManagerInClasspath -> WorkManagerHeapAnalyzer else -> BackgroundThreadHeapAnalyzer } ), val showNotifications: Boolean = true)</p> <p>LeakCanary configuration data class. Properties can be updated via copy.</p>"},{"location":"api/leakcanary/-leak-canary/-config/#see-also","title":"See also","text":"LeakCanary.config"},{"location":"api/leakcanary/-leak-canary/-config/#constructors","title":"Constructors","text":"Config [androidJvm]constructor(dumpHeap: Boolean = true, dumpHeapWhenDebugging: Boolean = false, retainedVisibleThreshold: Int = 5, referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: Boolean = true, maxStoredHeapDumps: Int = 7, requestWriteExternalStoragePermission: Boolean = false, leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, heapDumper: HeapDumper = AndroidDebugHeapDumper, eventListeners: List<EventListener> = listOf( LogcatEventListener, ToastEventListener, LazyForwardingEventListener { if (InternalLeakCanary.formFactor == TV) TvEventListener else NotificationEventListener }, when { RemoteWorkManagerHeapAnalyzer.remoteLeakCanaryServiceInClasspath -> RemoteWorkManagerHeapAnalyzer WorkManagerHeapAnalyzer.validWorkManagerInClasspath -> WorkManagerHeapAnalyzer else -> BackgroundThreadHeapAnalyzer } ), showNotifications: Boolean = true)"},{"location":"api/leakcanary/-leak-canary/-config/#types","title":"Types","text":"Name Summary Builder [androidJvm]class BuilderBuilder for LeakCanary.Config intended to be used only from Java code."},{"location":"api/leakcanary/-leak-canary/-config/#functions","title":"Functions","text":"Name Summary newBuilder [androidJvm]fun newBuilder(): LeakCanary.Config.BuilderConstruct a new Config via LeakCanary.Config.Builder. Note: this method is intended to be used from Java code only. For idiomatic Kotlin use <code>copy()</code> to modify LeakCanary.config."},{"location":"api/leakcanary/-leak-canary/-config/#properties","title":"Properties","text":"Name Summary computeRetainedHeapSize [androidJvm]val computeRetainedHeapSize: Boolean = trueWhether to compute the retained heap size, which is the total number of bytes in memory that would be reclaimed if the detected leaks didn\u2019t happen. This includes native memory associated to Java objects (e.g. Android bitmaps). dumpHeap [androidJvm]val dumpHeap: Boolean = trueWhether LeakCanary should dump the heap when enough retained instances are found. This needs to be true for LeakCanary to work, but sometimes you may want to temporarily disable LeakCanary (e.g. for a product demo). dumpHeapWhenDebugging [androidJvm]val dumpHeapWhenDebugging: Boolean = falseIf dumpHeapWhenDebugging is false then LeakCanary will not dump the heap when the debugger is attached. The debugger can create temporary memory leaks (for instance if a thread is blocked on a breakpoint). eventListeners [androidJvm]val eventListeners: List<EventListener>Listeners for LeakCanary events. See EventListener.Event for the list of events and which thread they\u2019re sent from. You most likely want to keep this list and add to it, or remove a few entries but not all entries. Each listener is independent and provides additional behavior which you can disable by not excluding it: heapDumper [androidJvm]val heapDumper: HeapDumperDumps the Java heap. You may replace this with your own implementation if you wish to change the core heap dumping implementation. leakingObjectFinder [androidJvm]val leakingObjectFinder: LeakingObjectFinderFinds the objects that are leaking, for which LeakCanary will compute leak traces. maxStoredHeapDumps [androidJvm]val maxStoredHeapDumps: Int = 7How many heap dumps are kept on the Android device for this app package. When this threshold is reached LeakCanary deletes the older heap dumps. As several heap dumps may be enqueued you should avoid going down to 1 or 2. metadataExtractor [androidJvm]val metadataExtractor: MetadataExtractorExtracts metadata from a hprof to be reported in HeapAnalysisSuccess.metadata. Called on a background thread during heap analysis. objectInspectors [androidJvm]val objectInspectors: List<ObjectInspector>List of ObjectInspector that provide LeakCanary with insights about objects found in the heap. You can create your own ObjectInspector implementations, and also add a shark.AppSingletonInspector instance created with the list of internal singletons. referenceMatchers [androidJvm]val referenceMatchers: List<ReferenceMatcher>Known patterns of references in the heap, added here either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher). requestWriteExternalStoragePermission [androidJvm]val requestWriteExternalStoragePermission: Boolean = falseLeakCanary always attempts to store heap dumps on the external storage if the WRITE_EXTERNAL_STORAGE is already granted, and otherwise uses the app storage. If the WRITE_EXTERNAL_STORAGE permission is not granted and requestWriteExternalStoragePermission is true, then LeakCanary will display a notification to ask for that permission. retainedVisibleThreshold [androidJvm]val retainedVisibleThreshold: Int = 5When the app is visible, LeakCanary will wait for at least retainedVisibleThreshold retained instances before dumping the heap. Dumping the heap freezes the UI and can be frustrating for developers who are trying to work. This is especially frustrating as the Android Framework has a number of leaks that cannot easily be fixed. showNotifications [androidJvm]val showNotifications: Boolean = trueWhether to show LeakCanary notifications. When showNotifications is true, LeakCanary will only display notifications if the app is in foreground and is not an instant, TV or Wear app."},{"location":"api/leakcanary/-leak-canary/-config/-config/","title":"config","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Config</p>"},{"location":"api/leakcanary/-leak-canary/-config/-config/#config","title":"Config","text":"<p>[androidJvm]\\ constructor(dumpHeap: Boolean = true, dumpHeapWhenDebugging: Boolean = false, retainedVisibleThreshold: Int = 5, referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: Boolean = true, maxStoredHeapDumps: Int = 7, requestWriteExternalStoragePermission: Boolean = false, leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, heapDumper: HeapDumper = AndroidDebugHeapDumper, eventListeners: List<EventListener> = listOf( LogcatEventListener, ToastEventListener, LazyForwardingEventListener { if (InternalLeakCanary.formFactor == TV) TvEventListener else NotificationEventListener }, when { RemoteWorkManagerHeapAnalyzer.remoteLeakCanaryServiceInClasspath -> RemoteWorkManagerHeapAnalyzer WorkManagerHeapAnalyzer.validWorkManagerInClasspath -> WorkManagerHeapAnalyzer else -> BackgroundThreadHeapAnalyzer } ), showNotifications: Boolean = true)</p>"},{"location":"api/leakcanary/-leak-canary/-config/compute-retained-heap-size/","title":"Compute retained heap size","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/computeRetainedHeapSize</p>"},{"location":"api/leakcanary/-leak-canary/-config/compute-retained-heap-size/#computeretainedheapsize","title":"computeRetainedHeapSize","text":"<p>[androidJvm]\\ val computeRetainedHeapSize: Boolean = true</p> <p>Whether to compute the retained heap size, which is the total number of bytes in memory that would be reclaimed if the detected leaks didn\u2019t happen. This includes native memory associated to Java objects (e.g. Android bitmaps).</p> <p>Computing the retained heap size can slow down the analysis because it requires navigating from GC roots through the entire object graph, whereas shark.HeapAnalyzer would otherwise stop as soon as all leaking instances are found.</p> <p>Defaults to true.</p>"},{"location":"api/leakcanary/-leak-canary/-config/dump-heap-when-debugging/","title":"Dump heap when debugging","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/dumpHeapWhenDebugging</p>"},{"location":"api/leakcanary/-leak-canary/-config/dump-heap-when-debugging/#dumpheapwhendebugging","title":"dumpHeapWhenDebugging","text":"<p>[androidJvm]\\ val dumpHeapWhenDebugging: Boolean = false</p> <p>If dumpHeapWhenDebugging is false then LeakCanary will not dump the heap when the debugger is attached. The debugger can create temporary memory leaks (for instance if a thread is blocked on a breakpoint).</p> <p>Defaults to false.</p>"},{"location":"api/leakcanary/-leak-canary/-config/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/dumpHeap</p>"},{"location":"api/leakcanary/-leak-canary/-config/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[androidJvm]\\ val dumpHeap: Boolean = true</p> <p>Whether LeakCanary should dump the heap when enough retained instances are found. This needs to be true for LeakCanary to work, but sometimes you may want to temporarily disable LeakCanary (e.g. for a product demo).</p> <p>Defaults to true.</p>"},{"location":"api/leakcanary/-leak-canary/-config/event-listeners/","title":"Event listeners","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/eventListeners</p>"},{"location":"api/leakcanary/-leak-canary/-config/event-listeners/#eventlisteners","title":"eventListeners","text":"<p>[androidJvm]\\ val eventListeners: List<EventListener></p> <p>Listeners for LeakCanary events. See EventListener.Event for the list of events and which thread they\u2019re sent from. You most likely want to keep this list and add to it, or remove a few entries but not all entries. Each listener is independent and provides additional behavior which you can disable by not excluding it:</p> <pre><code>// No cute canary toast (very sad!)\nLeakCanary.config = LeakCanary.config.run {\ncopy(\neventListeners = eventListeners.filter {\nit !is ToastEventListener\n}\n)\n}\n</code></pre>"},{"location":"api/leakcanary/-leak-canary/-config/heap-dumper/","title":"Heap dumper","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/heapDumper</p>"},{"location":"api/leakcanary/-leak-canary/-config/heap-dumper/#heapdumper","title":"heapDumper","text":"<p>[androidJvm]\\ val heapDumper: HeapDumper</p> <p>Dumps the Java heap. You may replace this with your own implementation if you wish to change the core heap dumping implementation.</p>"},{"location":"api/leakcanary/-leak-canary/-config/leaking-object-finder/","title":"Leaking object finder","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/leakingObjectFinder</p>"},{"location":"api/leakcanary/-leak-canary/-config/leaking-object-finder/#leakingobjectfinder","title":"leakingObjectFinder","text":"<p>[androidJvm]\\ val leakingObjectFinder: LeakingObjectFinder</p> <p>Finds the objects that are leaking, for which LeakCanary will compute leak traces.</p> <p>Defaults to KeyedWeakReferenceFinder which finds all objects tracked by a KeyedWeakReference, ie all objects that were passed to ObjectWatcher.expectWeaklyReachable.</p> <p>You could instead replace it with a FilteringLeakingObjectFinder, which scans all objects in the heap dump and delegates the decision to a list of FilteringLeakingObjectFinder.LeakingObjectFilter. This can lead to finding more leaks than the default and shorter leak traces. This also means that every analysis during a given process life will bring up the same leaking objects over and over again, unlike when using KeyedWeakReferenceFinder (because KeyedWeakReference instances are cleared after each heap dump).</p> <p>The list of filters can be built from AndroidObjectInspectors:</p> <pre><code>LeakCanary.config = LeakCanary.config.copy(\nleakingObjectFinder = FilteringLeakingObjectFinder(\nAndroidObjectInspectors.appLeakingObjectFilters\n)\n)\n</code></pre>"},{"location":"api/leakcanary/-leak-canary/-config/max-stored-heap-dumps/","title":"Max stored heap dumps","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/maxStoredHeapDumps</p>"},{"location":"api/leakcanary/-leak-canary/-config/max-stored-heap-dumps/#maxstoredheapdumps","title":"maxStoredHeapDumps","text":"<p>[androidJvm]\\ val maxStoredHeapDumps: Int = 7</p> <p>How many heap dumps are kept on the Android device for this app package. When this threshold is reached LeakCanary deletes the older heap dumps. As several heap dumps may be enqueued you should avoid going down to 1 or 2.</p> <p>Defaults to 7.</p>"},{"location":"api/leakcanary/-leak-canary/-config/metadata-extractor/","title":"Metadata extractor","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/metadataExtractor</p>"},{"location":"api/leakcanary/-leak-canary/-config/metadata-extractor/#metadataextractor","title":"metadataExtractor","text":"<p>[androidJvm]\\ val metadataExtractor: MetadataExtractor</p> <p>Extracts metadata from a hprof to be reported in HeapAnalysisSuccess.metadata. Called on a background thread during heap analysis.</p> <p>Defaults to AndroidMetadataExtractor</p>"},{"location":"api/leakcanary/-leak-canary/-config/new-builder/","title":"New builder","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/newBuilder</p>"},{"location":"api/leakcanary/-leak-canary/-config/new-builder/#newbuilder","title":"newBuilder","text":"<p>[androidJvm]\\ fun newBuilder(): LeakCanary.Config.Builder</p> <p>Construct a new Config via LeakCanary.Config.Builder. Note: this method is intended to be used from Java code only. For idiomatic Kotlin use <code>copy()</code> to modify LeakCanary.config.</p>"},{"location":"api/leakcanary/-leak-canary/-config/object-inspectors/","title":"Object inspectors","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/objectInspectors</p>"},{"location":"api/leakcanary/-leak-canary/-config/object-inspectors/#objectinspectors","title":"objectInspectors","text":"<p>[androidJvm]\\ val objectInspectors: List<ObjectInspector></p> <p>List of ObjectInspector that provide LeakCanary with insights about objects found in the heap. You can create your own ObjectInspector implementations, and also add a shark.AppSingletonInspector instance created with the list of internal singletons.</p> <p>Defaults to AndroidObjectInspectors.appDefaults</p>"},{"location":"api/leakcanary/-leak-canary/-config/reference-matchers/","title":"Reference matchers","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/referenceMatchers</p>"},{"location":"api/leakcanary/-leak-canary/-config/reference-matchers/#referencematchers","title":"referenceMatchers","text":"<p>[androidJvm]\\ val referenceMatchers: List<ReferenceMatcher></p> <p>Known patterns of references in the heap, added here either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher).</p> <p>When adding your own custom LibraryLeakReferenceMatcher instances, you\u2019ll most likely want to set LibraryLeakReferenceMatcher.patternApplies with a filter that checks for the Android OS version and manufacturer. The build information can be obtained by calling shark.AndroidBuildMirror.fromHeapGraph.</p> <p>Defaults to AndroidReferenceMatchers.appDefaults</p>"},{"location":"api/leakcanary/-leak-canary/-config/request-write-external-storage-permission/","title":"Request write external storage permission","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/requestWriteExternalStoragePermission</p>"},{"location":"api/leakcanary/-leak-canary/-config/request-write-external-storage-permission/#requestwriteexternalstoragepermission","title":"requestWriteExternalStoragePermission","text":"<p>[androidJvm]\\ val requestWriteExternalStoragePermission: Boolean = false</p> <p>LeakCanary always attempts to store heap dumps on the external storage if the WRITE_EXTERNAL_STORAGE is already granted, and otherwise uses the app storage. If the WRITE_EXTERNAL_STORAGE permission is not granted and requestWriteExternalStoragePermission is true, then LeakCanary will display a notification to ask for that permission.</p> <p>Defaults to false because that permission notification can be annoying.</p>"},{"location":"api/leakcanary/-leak-canary/-config/retained-visible-threshold/","title":"Retained visible threshold","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/retainedVisibleThreshold</p>"},{"location":"api/leakcanary/-leak-canary/-config/retained-visible-threshold/#retainedvisiblethreshold","title":"retainedVisibleThreshold","text":"<p>[androidJvm]\\ val retainedVisibleThreshold: Int = 5</p> <p>When the app is visible, LeakCanary will wait for at least retainedVisibleThreshold retained instances before dumping the heap. Dumping the heap freezes the UI and can be frustrating for developers who are trying to work. This is especially frustrating as the Android Framework has a number of leaks that cannot easily be fixed.</p> <p>When the app becomes invisible, LeakCanary dumps the heap after AppWatcher.retainedDelayMillis ms.</p> <p>The app is considered visible if it has at least one activity in started state.</p> <p>A higher threshold means LeakCanary will dump the heap less often, therefore it won\u2019t be bothering developers as much but it could miss some leaks.</p> <p>Defaults to 5.</p>"},{"location":"api/leakcanary/-leak-canary/-config/show-notifications/","title":"Show notifications","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/showNotifications</p>"},{"location":"api/leakcanary/-leak-canary/-config/show-notifications/#shownotifications","title":"showNotifications","text":"<p>[androidJvm]\\ val showNotifications: Boolean = true</p> <p>Whether to show LeakCanary notifications. When showNotifications is true, LeakCanary will only display notifications if the app is in foreground and is not an instant, TV or Wear app.</p> <p>Defaults to true.</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/#builder","title":"Builder","text":"<p>[androidJvm]\\ class Builder</p> <p>Builder for LeakCanary.Config intended to be used only from Java code.</p> <p>Usage:</p> <pre><code>LeakCanary.Config config = LeakCanary.getConfig().newBuilder()\n.retainedVisibleThreshold(3)\n.build();\nLeakCanary.setConfig(config);\n</code></pre> <p>For idiomatic Kotlin use <code>copy()</code> method instead:</p> <pre><code>LeakCanary.config = LeakCanary.config.copy(retainedVisibleThreshold = 3)\n</code></pre>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/#functions","title":"Functions","text":"Name Summary build [androidJvm]fun build(): LeakCanary.Config computeRetainedHeapSize [androidJvm]fun computeRetainedHeapSize(computeRetainedHeapSize: Boolean): LeakCanary.Config.Builder dumpHeap [androidJvm]fun dumpHeap(dumpHeap: Boolean): LeakCanary.Config.Builder dumpHeapWhenDebugging [androidJvm]fun dumpHeapWhenDebugging(dumpHeapWhenDebugging: Boolean): LeakCanary.Config.Builder eventListeners [androidJvm]fun eventListeners(eventListeners: List<EventListener>): LeakCanary.Config.Builder heapDumper [androidJvm]fun heapDumper(heapDumper: HeapDumper): LeakCanary.Config.Builder leakingObjectFinder [androidJvm]fun leakingObjectFinder(leakingObjectFinder: LeakingObjectFinder): LeakCanary.Config.Builder maxStoredHeapDumps [androidJvm]fun maxStoredHeapDumps(maxStoredHeapDumps: Int): LeakCanary.Config.Builder metadataExtractor [androidJvm]fun metadataExtractor(metadataExtractor: MetadataExtractor): LeakCanary.Config.Builder objectInspectors [androidJvm]fun objectInspectors(objectInspectors: List<ObjectInspector>): LeakCanary.Config.Builder referenceMatchers [androidJvm]fun referenceMatchers(referenceMatchers: List<ReferenceMatcher>): LeakCanary.Config.Builder requestWriteExternalStoragePermission [androidJvm]fun requestWriteExternalStoragePermission(requestWriteExternalStoragePermission: Boolean): LeakCanary.Config.Builder retainedVisibleThreshold [androidJvm]fun retainedVisibleThreshold(retainedVisibleThreshold: Int): LeakCanary.Config.Builder showNotifications [androidJvm]fun showNotifications(showNotifications: Boolean): LeakCanary.Config.Builder"},{"location":"api/leakcanary/-leak-canary/-config/-builder/build/","title":"Build","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/build</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/build/#build","title":"build","text":"<p>[androidJvm]\\ fun build(): LeakCanary.Config</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/compute-retained-heap-size/","title":"Compute retained heap size","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/computeRetainedHeapSize</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/compute-retained-heap-size/#computeretainedheapsize","title":"computeRetainedHeapSize","text":"<p>[androidJvm]\\ fun computeRetainedHeapSize(computeRetainedHeapSize: Boolean): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/compute-retained-heap-size/#see-also","title":"See also","text":"LeakCanary.Config.computeRetainedHeapSize"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap-when-debugging/","title":"Dump heap when debugging","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/dumpHeapWhenDebugging</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap-when-debugging/#dumpheapwhendebugging","title":"dumpHeapWhenDebugging","text":"<p>[androidJvm]\\ fun dumpHeapWhenDebugging(dumpHeapWhenDebugging: Boolean): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap-when-debugging/#see-also","title":"See also","text":"LeakCanary.Config.dumpHeapWhenDebugging"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/dumpHeap</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[androidJvm]\\ fun dumpHeap(dumpHeap: Boolean): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap/#see-also","title":"See also","text":"LeakCanary.Config.dumpHeap"},{"location":"api/leakcanary/-leak-canary/-config/-builder/event-listeners/","title":"Event listeners","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/eventListeners</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/event-listeners/#eventlisteners","title":"eventListeners","text":"<p>[androidJvm]\\ fun eventListeners(eventListeners: List<EventListener>): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/event-listeners/#see-also","title":"See also","text":"LeakCanary.Config.eventListeners"},{"location":"api/leakcanary/-leak-canary/-config/-builder/heap-dumper/","title":"Heap dumper","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/heapDumper</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/heap-dumper/#heapdumper","title":"heapDumper","text":"<p>[androidJvm]\\ fun heapDumper(heapDumper: HeapDumper): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/heap-dumper/#see-also","title":"See also","text":"LeakCanary.Config.heapDumper"},{"location":"api/leakcanary/-leak-canary/-config/-builder/leaking-object-finder/","title":"Leaking object finder","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/leakingObjectFinder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/leaking-object-finder/#leakingobjectfinder","title":"leakingObjectFinder","text":"<p>[androidJvm]\\ fun leakingObjectFinder(leakingObjectFinder: LeakingObjectFinder): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/leaking-object-finder/#see-also","title":"See also","text":"LeakCanary.Config.leakingObjectFinder"},{"location":"api/leakcanary/-leak-canary/-config/-builder/max-stored-heap-dumps/","title":"Max stored heap dumps","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/maxStoredHeapDumps</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/max-stored-heap-dumps/#maxstoredheapdumps","title":"maxStoredHeapDumps","text":"<p>[androidJvm]\\ fun maxStoredHeapDumps(maxStoredHeapDumps: Int): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/max-stored-heap-dumps/#see-also","title":"See also","text":"LeakCanary.Config.maxStoredHeapDumps"},{"location":"api/leakcanary/-leak-canary/-config/-builder/metadata-extractor/","title":"Metadata extractor","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/metadataExtractor</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/metadata-extractor/#metadataextractor","title":"metadataExtractor","text":"<p>[androidJvm]\\ fun metadataExtractor(metadataExtractor: MetadataExtractor): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/metadata-extractor/#see-also","title":"See also","text":"LeakCanary.Config.metadataExtractor"},{"location":"api/leakcanary/-leak-canary/-config/-builder/object-inspectors/","title":"Object inspectors","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/objectInspectors</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/object-inspectors/#objectinspectors","title":"objectInspectors","text":"<p>[androidJvm]\\ fun objectInspectors(objectInspectors: List<ObjectInspector>): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/object-inspectors/#see-also","title":"See also","text":"LeakCanary.Config.objectInspectors"},{"location":"api/leakcanary/-leak-canary/-config/-builder/reference-matchers/","title":"Reference matchers","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/referenceMatchers</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/reference-matchers/#referencematchers","title":"referenceMatchers","text":"<p>[androidJvm]\\ fun referenceMatchers(referenceMatchers: List<ReferenceMatcher>): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/reference-matchers/#see-also","title":"See also","text":"LeakCanary.Config.referenceMatchers"},{"location":"api/leakcanary/-leak-canary/-config/-builder/request-write-external-storage-permission/","title":"Request write external storage permission","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/requestWriteExternalStoragePermission</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/request-write-external-storage-permission/#requestwriteexternalstoragepermission","title":"requestWriteExternalStoragePermission","text":"<p>[androidJvm]\\ fun requestWriteExternalStoragePermission(requestWriteExternalStoragePermission: Boolean): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/request-write-external-storage-permission/#see-also","title":"See also","text":"LeakCanary.Config.requestWriteExternalStoragePermission"},{"location":"api/leakcanary/-leak-canary/-config/-builder/retained-visible-threshold/","title":"Retained visible threshold","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/retainedVisibleThreshold</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/retained-visible-threshold/#retainedvisiblethreshold","title":"retainedVisibleThreshold","text":"<p>[androidJvm]\\ fun retainedVisibleThreshold(retainedVisibleThreshold: Int): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/retained-visible-threshold/#see-also","title":"See also","text":"LeakCanary.Config.retainedVisibleThreshold"},{"location":"api/leakcanary/-leak-canary/-config/-builder/show-notifications/","title":"Show notifications","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/showNotifications</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/show-notifications/#shownotifications","title":"showNotifications","text":"<p>[androidJvm]\\ fun showNotifications(showNotifications: Boolean): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/show-notifications/#see-also","title":"See also","text":"LeakCanary.Config.showNotifications"},{"location":"api/leakcanary/-leak-canary-process/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LeakCanaryProcess</p>"},{"location":"api/leakcanary/-leak-canary-process/#leakcanaryprocess","title":"LeakCanaryProcess","text":"<p>[androidJvm]\\ object LeakCanaryProcess</p> <p>Used to determine whether the current process is the LeakCanary analyzer process. By depending on the <code>leakcanary-android-process</code> artifact instead of the <code>leakcanary-android</code>, LeakCanary will automatically run its analysis in a separate process.</p> <p>As such, you\u2019ll need to be careful to do any custom configuration of LeakCanary in both the main process and the analyzer process.</p>"},{"location":"api/leakcanary/-leak-canary-process/#functions","title":"Functions","text":"Name Summary isInAnalyzerProcess [androidJvm]fun isInAnalyzerProcess(context: Context): BooleanWhether the current process is the process running the heap analyzer, which is a different process than the normal app process."},{"location":"api/leakcanary/-leak-canary-process/is-in-analyzer-process/","title":"Is in analyzer process","text":"<p>//leakcanary-repo/leakcanary/LeakCanaryProcess/isInAnalyzerProcess</p>"},{"location":"api/leakcanary/-leak-canary-process/is-in-analyzer-process/#isinanalyzerprocess","title":"isInAnalyzerProcess","text":"<p>[androidJvm]\\ fun isInAnalyzerProcess(context: Context): Boolean</p> <p>Whether the current process is the process running the heap analyzer, which is a different process than the normal app process.</p>"},{"location":"api/leakcanary/-logcat-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LogcatEventListener</p>"},{"location":"api/leakcanary/-logcat-event-listener/#logcateventlistener","title":"LogcatEventListener","text":"<p>[androidJvm]\\ object LogcatEventListener : EventListener</p>"},{"location":"api/leakcanary/-logcat-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-logcat-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/LogcatEventListener/onEvent</p>"},{"location":"api/leakcanary/-logcat-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-logcat-shark-log/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LogcatSharkLog</p>"},{"location":"api/leakcanary/-logcat-shark-log/#logcatsharklog","title":"LogcatSharkLog","text":"<p>[androidJvm]\\ class LogcatSharkLog : SharkLog.Logger</p>"},{"location":"api/leakcanary/-logcat-shark-log/#constructors","title":"Constructors","text":"LogcatSharkLog [androidJvm]constructor()"},{"location":"api/leakcanary/-logcat-shark-log/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-logcat-shark-log/#functions","title":"Functions","text":"Name Summary d [androidJvm]open override fun d(message: String)open override fun d(throwable: Throwable, message: String)"},{"location":"api/leakcanary/-logcat-shark-log/-logcat-shark-log/","title":"logcat shark log","text":"<p>//leakcanary-repo/leakcanary/LogcatSharkLog/LogcatSharkLog</p>"},{"location":"api/leakcanary/-logcat-shark-log/-logcat-shark-log/#logcatsharklog","title":"LogcatSharkLog","text":"<p>[androidJvm]\\ constructor()</p>"},{"location":"api/leakcanary/-logcat-shark-log/d/","title":"D","text":"<p>//leakcanary-repo/leakcanary/LogcatSharkLog/d</p>"},{"location":"api/leakcanary/-logcat-shark-log/d/#d","title":"d","text":"<p>[androidJvm]\\ open override fun d(message: String)</p> <p>open override fun d(throwable: Throwable, message: String)</p>"},{"location":"api/leakcanary/-logcat-shark-log/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LogcatSharkLog/Companion</p>"},{"location":"api/leakcanary/-logcat-shark-log/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-logcat-shark-log/-companion/#functions","title":"Functions","text":"Name Summary install [androidJvm]fun install()"},{"location":"api/leakcanary/-logcat-shark-log/-companion/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/LogcatSharkLog/Companion/install</p>"},{"location":"api/leakcanary/-logcat-shark-log/-companion/install/#install","title":"install","text":"<p>[androidJvm]\\ fun install()</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/MinimumDiskSpaceInterceptor</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/#minimumdiskspaceinterceptor","title":"MinimumDiskSpaceInterceptor","text":"<p>[androidJvm]\\ class MinimumDiskSpaceInterceptor(application: Application, minimumDiskSpaceBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/#constructors","title":"Constructors","text":"MinimumDiskSpaceInterceptor [androidJvm]constructor(application: Application, minimumDiskSpaceBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real)"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/-minimum-disk-space-interceptor/","title":"minimum disk space interceptor","text":"<p>//leakcanary-repo/leakcanary/MinimumDiskSpaceInterceptor/MinimumDiskSpaceInterceptor</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/-minimum-disk-space-interceptor/#minimumdiskspaceinterceptor","title":"MinimumDiskSpaceInterceptor","text":"<p>[androidJvm]\\ constructor(application: Application, minimumDiskSpaceBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real)</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/MinimumDiskSpaceInterceptor/intercept</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/MinimumElapsedSinceStartInterceptor</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/#minimumelapsedsincestartinterceptor","title":"MinimumElapsedSinceStartInterceptor","text":"<p>[androidJvm]\\ class MinimumElapsedSinceStartInterceptor(minimumElapsedSinceStartMillis: Long = TimeUnit.SECONDS.toMillis(30), processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/#constructors","title":"Constructors","text":"MinimumElapsedSinceStartInterceptor [androidJvm]constructor(minimumElapsedSinceStartMillis: Long = TimeUnit.SECONDS.toMillis(30), processInfo: ProcessInfo = ProcessInfo.Real)"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/-minimum-elapsed-since-start-interceptor/","title":"minimum elapsed since start interceptor","text":"<p>//leakcanary-repo/leakcanary/MinimumElapsedSinceStartInterceptor/MinimumElapsedSinceStartInterceptor</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/-minimum-elapsed-since-start-interceptor/#minimumelapsedsincestartinterceptor","title":"MinimumElapsedSinceStartInterceptor","text":"<p>[androidJvm]\\ constructor(minimumElapsedSinceStartMillis: Long = TimeUnit.SECONDS.toMillis(30), processInfo: ProcessInfo = ProcessInfo.Real)</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/MinimumElapsedSinceStartInterceptor/intercept</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/MinimumMemoryInterceptor</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/#minimummemoryinterceptor","title":"MinimumMemoryInterceptor","text":"<p>[androidJvm]\\ class MinimumMemoryInterceptor(application: Application, minimumRequiredAvailableMemoryBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/#constructors","title":"Constructors","text":"MinimumMemoryInterceptor [androidJvm]constructor(application: Application, minimumRequiredAvailableMemoryBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real)"},{"location":"api/leakcanary/-minimum-memory-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-minimum-memory-interceptor/-minimum-memory-interceptor/","title":"minimum memory interceptor","text":"<p>//leakcanary-repo/leakcanary/MinimumMemoryInterceptor/MinimumMemoryInterceptor</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/-minimum-memory-interceptor/#minimummemoryinterceptor","title":"MinimumMemoryInterceptor","text":"<p>[androidJvm]\\ constructor(application: Application, minimumRequiredAvailableMemoryBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real)</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/MinimumMemoryInterceptor/intercept</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/NoLeakAssertionFailedError</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/#noleakassertionfailederror","title":"NoLeakAssertionFailedError","text":"<p>[androidJvm]\\ class NoLeakAssertionFailedError(val heapAnalysis: HeapAnalysisSuccess) : AssertionError</p> <p>Thrown when using the NoLeakAssertionFailedError.throwOnApplicationLeaks HeapAnalysisReporter</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/#constructors","title":"Constructors","text":"NoLeakAssertionFailedError [androidJvm]constructor(heapAnalysis: HeapAnalysisSuccess)"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/#functions","title":"Functions","text":"Name Summary addSuppressed [androidJvm]fun addSuppressed(p0: Throwable) fillInStackTrace [androidJvm]open fun fillInStackTrace(): Throwable getLocalizedMessage [androidJvm]open fun getLocalizedMessage(): String getStackTrace [androidJvm]open fun getStackTrace(): Array<StackTraceElement> getSuppressed [androidJvm]fun getSuppressed(): Array<Throwable> initCause [androidJvm]open fun initCause(p0: Throwable): Throwable printStackTrace [androidJvm]open fun printStackTrace()open fun printStackTrace(p0: PrintStream)open fun printStackTrace(p0: PrintWriter) setStackTrace [androidJvm]open fun setStackTrace(p0: Array<StackTraceElement>)"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/#properties","title":"Properties","text":"Name Summary cause [androidJvm]open val cause: Throwable? heapAnalysis [androidJvm]val heapAnalysis: HeapAnalysisSuccess message [androidJvm]open val message: String?"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-no-leak-assertion-failed-error/","title":"no leak assertion failed error","text":"<p>//leakcanary-repo/leakcanary/NoLeakAssertionFailedError/NoLeakAssertionFailedError</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-no-leak-assertion-failed-error/#noleakassertionfailederror","title":"NoLeakAssertionFailedError","text":"<p>[androidJvm]\\ constructor(heapAnalysis: HeapAnalysisSuccess)</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/heap-analysis/","title":"Heap analysis","text":"<p>//leakcanary-repo/leakcanary/NoLeakAssertionFailedError/heapAnalysis</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/heap-analysis/#heapanalysis","title":"heapAnalysis","text":"<p>[androidJvm]\\ val heapAnalysis: HeapAnalysisSuccess</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/NoLeakAssertionFailedError/Companion</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-companion/#functions","title":"Functions","text":"Name Summary throwOnApplicationLeaks [androidJvm]fun throwOnApplicationLeaks(): HeapAnalysisReporterA HeapAnalysisReporter that throws a NoLeakAssertionFailedError when the heap analysis has application leaks."},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-companion/throw-on-application-leaks/","title":"Throw on application leaks","text":"<p>//leakcanary-repo/leakcanary/NoLeakAssertionFailedError/Companion/throwOnApplicationLeaks</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-companion/throw-on-application-leaks/#throwonapplicationleaks","title":"throwOnApplicationLeaks","text":"<p>[androidJvm]\\ fun throwOnApplicationLeaks(): HeapAnalysisReporter</p> <p>A HeapAnalysisReporter that throws a NoLeakAssertionFailedError when the heap analysis has application leaks.</p>"},{"location":"api/leakcanary/-notification-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/NotificationEventListener</p>"},{"location":"api/leakcanary/-notification-event-listener/#notificationeventlistener","title":"NotificationEventListener","text":"<p>[androidJvm]\\ object NotificationEventListener : EventListener</p>"},{"location":"api/leakcanary/-notification-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-notification-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/NotificationEventListener/onEvent</p>"},{"location":"api/leakcanary/-notification-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ObjectGrowthWarmupHeapDumper</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/#objectgrowthwarmupheapdumper","title":"ObjectGrowthWarmupHeapDumper","text":"<p>[jvm]\\ class ObjectGrowthWarmupHeapDumper(objectGrowthDetector: ObjectGrowthDetector, delegate: HeapDumper, androidHeap: Boolean) : HeapDumper</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/#constructors","title":"Constructors","text":"ObjectGrowthWarmupHeapDumper [jvm]constructor(objectGrowthDetector: ObjectGrowthDetector, delegate: HeapDumper, androidHeap: Boolean)"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [jvm]open override fun dumpHeap(heapDumpFile: File)Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed. withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/-object-growth-warmup-heap-dumper/","title":"object growth warmup heap dumper","text":"<p>//leakcanary-repo/leakcanary/ObjectGrowthWarmupHeapDumper/ObjectGrowthWarmupHeapDumper</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/-object-growth-warmup-heap-dumper/#objectgrowthwarmupheapdumper","title":"ObjectGrowthWarmupHeapDumper","text":"<p>[jvm]\\ constructor(objectGrowthDetector: ObjectGrowthDetector, delegate: HeapDumper, androidHeap: Boolean)</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/ObjectGrowthWarmupHeapDumper/dumpHeap</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ open override fun dumpHeap(heapDumpFile: File)</p> <p>Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed.</p> <p>Implementations can throw a runtime exception if heap dumping failed.</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ObjectGrowthWarmupHeapDumper/Companion</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/leakcanary/-on-object-retained-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/OnObjectRetainedListener</p>"},{"location":"api/leakcanary/-on-object-retained-listener/#onobjectretainedlistener","title":"OnObjectRetainedListener","text":"<p>[jvm]\\ fun interface OnObjectRetainedListener</p> <p>Listener used by ReferenceQueueRetainedObjectTracker to report retained objects.</p>"},{"location":"api/leakcanary/-on-object-retained-listener/#functions","title":"Functions","text":"Name Summary onObjectRetained [jvm]abstract fun onObjectRetained()A tracked object became retained."},{"location":"api/leakcanary/-on-object-retained-listener/on-object-retained/","title":"On object retained","text":"<p>//leakcanary-repo/leakcanary/OnObjectRetainedListener/onObjectRetained</p>"},{"location":"api/leakcanary/-on-object-retained-listener/on-object-retained/#onobjectretained","title":"onObjectRetained","text":"<p>[jvm]\\ abstract fun onObjectRetained()</p> <p>A tracked object became retained.</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/OncePerPeriodInterceptor</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/#onceperperiodinterceptor","title":"OncePerPeriodInterceptor","text":"<p>[androidJvm]\\ class OncePerPeriodInterceptor(application: Application, periodMillis: Long = TimeUnit.DAYS.toMillis(1)) : HeapAnalysisInterceptor</p> <p>Proceeds once per period (of time) and then cancels all follow up jobs until period has passed.</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/#constructors","title":"Constructors","text":"OncePerPeriodInterceptor [androidJvm]constructor(application: Application, periodMillis: Long = TimeUnit.DAYS.toMillis(1))"},{"location":"api/leakcanary/-once-per-period-interceptor/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-once-per-period-interceptor/#functions","title":"Functions","text":"Name Summary forget [androidJvm]fun forget() intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-once-per-period-interceptor/-once-per-period-interceptor/","title":"once per period interceptor","text":"<p>//leakcanary-repo/leakcanary/OncePerPeriodInterceptor/OncePerPeriodInterceptor</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/-once-per-period-interceptor/#onceperperiodinterceptor","title":"OncePerPeriodInterceptor","text":"<p>[androidJvm]\\ constructor(application: Application, periodMillis: Long = TimeUnit.DAYS.toMillis(1))</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/forget/","title":"Forget","text":"<p>//leakcanary-repo/leakcanary/OncePerPeriodInterceptor/forget</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/forget/#forget","title":"forget","text":"<p>[androidJvm]\\ fun forget()</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/OncePerPeriodInterceptor/intercept</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/OncePerPeriodInterceptor/Companion</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/PlumberStartupInitializer</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/#plumberstartupinitializer","title":"PlumberStartupInitializer","text":"<p>[androidJvm]\\ class PlumberStartupInitializer : Initializer<PlumberStartupInitializer></p>"},{"location":"api/leakcanary/-plumber-startup-initializer/#constructors","title":"Constructors","text":"PlumberStartupInitializer [androidJvm]constructor()"},{"location":"api/leakcanary/-plumber-startup-initializer/#functions","title":"Functions","text":"Name Summary create [androidJvm]open override fun create(context: Context): PlumberStartupInitializer dependencies [androidJvm]open override fun dependencies(): List<Class<out Initializer<*>>>"},{"location":"api/leakcanary/-plumber-startup-initializer/-plumber-startup-initializer/","title":"plumber startup initializer","text":"<p>//leakcanary-repo/leakcanary/PlumberStartupInitializer/PlumberStartupInitializer</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/-plumber-startup-initializer/#plumberstartupinitializer","title":"PlumberStartupInitializer","text":"<p>[androidJvm]\\ constructor()</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/create/","title":"Create","text":"<p>//leakcanary-repo/leakcanary/PlumberStartupInitializer/create</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/create/#create","title":"create","text":"<p>[androidJvm]\\ open override fun create(context: Context): PlumberStartupInitializer</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/dependencies/","title":"Dependencies","text":"<p>//leakcanary-repo/leakcanary/PlumberStartupInitializer/dependencies</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/dependencies/#dependencies","title":"dependencies","text":"<p>[androidJvm]\\ open override fun dependencies(): List<Class<out Initializer<*>>></p>"},{"location":"api/leakcanary/-process-info/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo</p>"},{"location":"api/leakcanary/-process-info/#processinfo","title":"ProcessInfo","text":"<p>interface ProcessInfo</p>"},{"location":"api/leakcanary/-process-info/#inheritors","title":"Inheritors","text":"Real"},{"location":"api/leakcanary/-process-info/#types","title":"Types","text":"Name Summary AvailableRam [androidJvm]sealed class AvailableRam Real [androidJvm]object Real : ProcessInfo"},{"location":"api/leakcanary/-process-info/#functions","title":"Functions","text":"Name Summary availableDiskSpaceBytes [androidJvm]abstract fun availableDiskSpaceBytes(path: File): Long availableRam [androidJvm]abstract fun availableRam(context: Context): ProcessInfo.AvailableRam"},{"location":"api/leakcanary/-process-info/#properties","title":"Properties","text":"Name Summary elapsedMillisSinceStart [androidJvm]abstract val elapsedMillisSinceStart: Long isImportanceBackground [androidJvm]abstract val isImportanceBackground: Boolean"},{"location":"api/leakcanary/-process-info/available-disk-space-bytes/","title":"Available disk space bytes","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/availableDiskSpaceBytes</p>"},{"location":"api/leakcanary/-process-info/available-disk-space-bytes/#availablediskspacebytes","title":"availableDiskSpaceBytes","text":"<p>[androidJvm]\\ abstract fun availableDiskSpaceBytes(path: File): Long</p>"},{"location":"api/leakcanary/-process-info/available-ram/","title":"Available ram","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/availableRam</p>"},{"location":"api/leakcanary/-process-info/available-ram/#availableram","title":"availableRam","text":"<p>[androidJvm]\\ abstract fun availableRam(context: Context): ProcessInfo.AvailableRam</p>"},{"location":"api/leakcanary/-process-info/elapsed-millis-since-start/","title":"Elapsed millis since start","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/elapsedMillisSinceStart</p>"},{"location":"api/leakcanary/-process-info/elapsed-millis-since-start/#elapsedmillissincestart","title":"elapsedMillisSinceStart","text":"<p>[androidJvm]\\ abstract val elapsedMillisSinceStart: Long</p>"},{"location":"api/leakcanary/-process-info/is-importance-background/","title":"Is importance background","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/isImportanceBackground</p>"},{"location":"api/leakcanary/-process-info/is-importance-background/#isimportancebackground","title":"isImportanceBackground","text":"<p>[androidJvm]\\ abstract val isImportanceBackground: Boolean</p>"},{"location":"api/leakcanary/-process-info/-available-ram/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-available-ram/#availableram","title":"AvailableRam","text":"<p>sealed class AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-available-ram/#inheritors","title":"Inheritors","text":"LowRamDevice BelowThreshold Memory"},{"location":"api/leakcanary/-process-info/-available-ram/#types","title":"Types","text":"Name Summary BelowThreshold [androidJvm]object BelowThreshold : ProcessInfo.AvailableRam LowRamDevice [androidJvm]object LowRamDevice : ProcessInfo.AvailableRam Memory [androidJvm]class Memory(val bytes: Long) : ProcessInfo.AvailableRam"},{"location":"api/leakcanary/-process-info/-available-ram/-below-threshold/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam/BelowThreshold</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-below-threshold/#belowthreshold","title":"BelowThreshold","text":"<p>[androidJvm]\\ object BelowThreshold : ProcessInfo.AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-low-ram-device/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam/LowRamDevice</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-low-ram-device/#lowramdevice","title":"LowRamDevice","text":"<p>[androidJvm]\\ object LowRamDevice : ProcessInfo.AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam/Memory</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/#memory","title":"Memory","text":"<p>[androidJvm]\\ class Memory(val bytes: Long) : ProcessInfo.AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/#constructors","title":"Constructors","text":"Memory [androidJvm]constructor(bytes: Long)"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/#properties","title":"Properties","text":"Name Summary bytes [androidJvm]val bytes: Long"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/-memory/","title":"memory","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam/Memory/Memory</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/-memory/#memory","title":"Memory","text":"<p>[androidJvm]\\ constructor(bytes: Long)</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/bytes/","title":"Bytes","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam/Memory/bytes</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/bytes/#bytes","title":"bytes","text":"<p>[androidJvm]\\ val bytes: Long</p>"},{"location":"api/leakcanary/-process-info/-real/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/Real</p>"},{"location":"api/leakcanary/-process-info/-real/#real","title":"Real","text":"<p>[androidJvm]\\ object Real : ProcessInfo</p>"},{"location":"api/leakcanary/-process-info/-real/#functions","title":"Functions","text":"Name Summary availableDiskSpaceBytes [androidJvm]open override fun availableDiskSpaceBytes(path: File): Long availableRam [androidJvm]open override fun availableRam(context: Context): ProcessInfo.AvailableRam"},{"location":"api/leakcanary/-process-info/-real/#properties","title":"Properties","text":"Name Summary elapsedMillisSinceStart [androidJvm]open override val elapsedMillisSinceStart: Long isImportanceBackground [androidJvm]open override val isImportanceBackground: Boolean"},{"location":"api/leakcanary/-process-info/-real/available-disk-space-bytes/","title":"Available disk space bytes","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/Real/availableDiskSpaceBytes</p>"},{"location":"api/leakcanary/-process-info/-real/available-disk-space-bytes/#availablediskspacebytes","title":"availableDiskSpaceBytes","text":"<p>[androidJvm]\\ open override fun availableDiskSpaceBytes(path: File): Long</p>"},{"location":"api/leakcanary/-process-info/-real/available-ram/","title":"Available ram","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/Real/availableRam</p>"},{"location":"api/leakcanary/-process-info/-real/available-ram/#availableram","title":"availableRam","text":"<p>[androidJvm]\\ open override fun availableRam(context: Context): ProcessInfo.AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-real/elapsed-millis-since-start/","title":"Elapsed millis since start","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/Real/elapsedMillisSinceStart</p>"},{"location":"api/leakcanary/-process-info/-real/elapsed-millis-since-start/#elapsedmillissincestart","title":"elapsedMillisSinceStart","text":"<p>[androidJvm]\\ open override val elapsedMillisSinceStart: Long</p>"},{"location":"api/leakcanary/-process-info/-real/is-importance-background/","title":"Is importance background","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/Real/isImportanceBackground</p>"},{"location":"api/leakcanary/-process-info/-real/is-importance-background/#isimportancebackground","title":"isImportanceBackground","text":"<p>[androidJvm]\\ open override val isImportanceBackground: Boolean</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/#referencequeueretainedobjecttracker","title":"ReferenceQueueRetainedObjectTracker","text":"<p>[jvm]\\ class ReferenceQueueRetainedObjectTracker(clock: UptimeClock, onObjectRetainedListener: OnObjectRetainedListener) : RetainedObjectTracker, TriggeredDeletableObjectReporter</p> <p>ReferenceQueueRetainedObjectTracker can be passed objects to expectDeletionOnTriggerFor. It will create KeyedWeakReference instances that reference tracked objects, and check if those references have been cleared as expected. If not, these objects are considered retained and ReferenceQueueRetainedObjectTracker will then notify registered OnObjectRetainedListeners. ReferenceQueueRetainedObjectTracker is thread safe.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/#constructors","title":"Constructors","text":"ReferenceQueueRetainedObjectTracker [jvm]constructor(clock: UptimeClock, onObjectRetainedListener: OnObjectRetainedListener)"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/#functions","title":"Functions","text":"Name Summary clearAllObjectsTracked [jvm]open override fun clearAllObjectsTracked()Clears all KeyedWeakReference clearObjectsTrackedBefore [jvm]open override fun clearObjectsTrackedBefore(uptime: Duration)Clears weak reachability expectations for objects that were created before uptime. expectDeletionOnTriggerFor [jvm]open override fun expectDeletionOnTriggerFor(target: Any, reason: String): TriggeredDeletableObjectReporter.RetainTriggerStart tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. that it should not be strongly reachable by the time RetainTrigger.markRetainedIfStronglyReachable is called on the returned RetainTrigger."},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/#properties","title":"Properties","text":"Name Summary hasRetainedObjects [jvm]open override val hasRetainedObjects: BooleanReturns true if any of the tracked objects are currently retained. hasTrackedObjects [jvm]open override val hasTrackedObjects: BooleanReturns true if there are any tracked objects that aren\u2019t currently weakly reachable. retainedObjectCount [jvm]open override val retainedObjectCount: IntReturns the number of retained objects. retainedWeakReferences [jvm]val retainedWeakReferences: List<KeyedWeakReference>Subset of trackedWeakReferences that have been marked as retained. trackedObjectCount [jvm]open override val trackedObjectCount: IntReturns the number of tracked objects that aren\u2019t weakly reachable. trackedWeakReferences [jvm]val trackedWeakReferences: List<KeyedWeakReference>List of KeyedWeakReference that have not been enqueued in the reference queue yet, which means their referent is most likely still strongly reachable."},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/-reference-queue-retained-object-tracker/","title":"reference queue retained object tracker","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/ReferenceQueueRetainedObjectTracker</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/-reference-queue-retained-object-tracker/#referencequeueretainedobjecttracker","title":"ReferenceQueueRetainedObjectTracker","text":"<p>[jvm]\\ constructor(clock: UptimeClock, onObjectRetainedListener: OnObjectRetainedListener)</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/clear-all-objects-tracked/","title":"Clear all objects tracked","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/clearAllObjectsTracked</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/clear-all-objects-tracked/#clearallobjectstracked","title":"clearAllObjectsTracked","text":"<p>[jvm]\\ open override fun clearAllObjectsTracked()</p> <p>Clears all KeyedWeakReference</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/clear-objects-tracked-before/","title":"Clear objects tracked before","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/clearObjectsTrackedBefore</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/clear-objects-tracked-before/#clearobjectstrackedbefore","title":"clearObjectsTrackedBefore","text":"<p>[jvm]\\ open override fun clearObjectsTrackedBefore(uptime: Duration)</p> <p>Clears weak reachability expectations for objects that were created before uptime.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/clear-objects-tracked-before/#parameters","title":"Parameters","text":"<p>jvm</p> uptime A time in the past from UptimeClock.uptime."},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/expect-deletion-on-trigger-for/","title":"Expect deletion on trigger for","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/expectDeletionOnTriggerFor</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/expect-deletion-on-trigger-for/#expectdeletionontriggerfor","title":"expectDeletionOnTriggerFor","text":"<p>[jvm]\\ open override fun expectDeletionOnTriggerFor(target: Any, reason: String): TriggeredDeletableObjectReporter.RetainTrigger</p> <p>Start tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. that it should not be strongly reachable by the time RetainTrigger.markRetainedIfStronglyReachable is called on the returned RetainTrigger.</p> <p>If target stays strongly reachable, it will be considered \"retained\".</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/expect-deletion-on-trigger-for/#parameters","title":"Parameters","text":"<p>jvm</p> target See DeletableObjectReporter.expectDeletionFor reason See DeletableObjectReporter.expectDeletionFor"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/has-retained-objects/","title":"Has retained objects","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/hasRetainedObjects</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/has-retained-objects/#hasretainedobjects","title":"hasRetainedObjects","text":"<p>[jvm]\\ open override val hasRetainedObjects: Boolean</p> <p>Returns true if any of the tracked objects are currently retained.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/has-tracked-objects/","title":"Has tracked objects","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/hasTrackedObjects</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/has-tracked-objects/#hastrackedobjects","title":"hasTrackedObjects","text":"<p>[jvm]\\ open override val hasTrackedObjects: Boolean</p> <p>Returns true if there are any tracked objects that aren\u2019t currently weakly reachable.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/retained-object-count/","title":"Retained object count","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/retainedObjectCount</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/retained-object-count/#retainedobjectcount","title":"retainedObjectCount","text":"<p>[jvm]\\ open override val retainedObjectCount: Int</p> <p>Returns the number of retained objects.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/retained-weak-references/","title":"Retained weak references","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/retainedWeakReferences</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/retained-weak-references/#retainedweakreferences","title":"retainedWeakReferences","text":"<p>[jvm]\\ val retainedWeakReferences: List<KeyedWeakReference></p> <p>Subset of trackedWeakReferences that have been marked as retained.</p> <p>DO NOT CALL java.lang.ref.Reference.get on the returned references, otherwise you will end up creating local references to the objects, preventing them from becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/tracked-object-count/","title":"Tracked object count","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/trackedObjectCount</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/tracked-object-count/#trackedobjectcount","title":"trackedObjectCount","text":"<p>[jvm]\\ open override val trackedObjectCount: Int</p> <p>Returns the number of tracked objects that aren\u2019t weakly reachable.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/tracked-weak-references/","title":"Tracked weak references","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/trackedWeakReferences</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/tracked-weak-references/#trackedweakreferences","title":"trackedWeakReferences","text":"<p>[jvm]\\ val trackedWeakReferences: List<KeyedWeakReference></p> <p>List of KeyedWeakReference that have not been enqueued in the reference queue yet, which means their referent is most likely still strongly reachable.</p> <p>DO NOT CALL java.lang.ref.Reference.get on the returned references, otherwise you will end up creating local references to the objects, preventing them from be becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>"},{"location":"api/leakcanary/-remote-work-manager-heap-analyzer/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RemoteWorkManagerHeapAnalyzer</p>"},{"location":"api/leakcanary/-remote-work-manager-heap-analyzer/#remoteworkmanagerheapanalyzer","title":"RemoteWorkManagerHeapAnalyzer","text":"<p>[androidJvm]\\ object RemoteWorkManagerHeapAnalyzer : EventListener</p> <p>When receiving a HeapDump event, starts a WorkManager worker that performs heap analysis in a dedicated :leakcanary process</p>"},{"location":"api/leakcanary/-remote-work-manager-heap-analyzer/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-remote-work-manager-heap-analyzer/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/RemoteWorkManagerHeapAnalyzer/onEvent</p>"},{"location":"api/leakcanary/-remote-work-manager-heap-analyzer/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RepositoryRootHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/#repositoryrootheapdumpdirectoryprovider","title":"RepositoryRootHeapDumpDirectoryProvider","text":"<p>[jvm]\\ class RepositoryRootHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/#constructors","title":"Constructors","text":"RepositoryRootHeapDumpDirectoryProvider [jvm]constructor(heapDumpDirectoryName: String)"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/#functions","title":"Functions","text":"Name Summary heapDumpDirectory [jvm]open override fun heapDumpDirectory(): File"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/-repository-root-heap-dump-directory-provider/","title":"repository root heap dump directory provider","text":"<p>//leakcanary-repo/leakcanary/RepositoryRootHeapDumpDirectoryProvider/RepositoryRootHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/-repository-root-heap-dump-directory-provider/#repositoryrootheapdumpdirectoryprovider","title":"RepositoryRootHeapDumpDirectoryProvider","text":"<p>[jvm]\\ constructor(heapDumpDirectoryName: String)</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/heap-dump-directory/","title":"Heap dump directory","text":"<p>//leakcanary-repo/leakcanary/RepositoryRootHeapDumpDirectoryProvider/heapDumpDirectory</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/heap-dump-directory/#heapdumpdirectory","title":"heapDumpDirectory","text":"<p>[jvm]\\ open override fun heapDumpDirectory(): File</p>"},{"location":"api/leakcanary/-retained-object-tracker/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker</p>"},{"location":"api/leakcanary/-retained-object-tracker/#retainedobjecttracker","title":"RetainedObjectTracker","text":"<p>interface RetainedObjectTracker</p> <p>Helper util for tracking retained objects.</p> <p>A retained object is an object that is expected to be deleted but stays strongly reachable, preventing it from being garbage collected.</p> <ul> <li>A target object is \"tracked\" after being reported to an associated DeletableObjectReporter or TriggeredDeletableObjectReporter.</li> <li>If at any point in time that target object becomes weakly reachable, then RetainedObjectTracker will stop tracking that object.</li> </ul>"},{"location":"api/leakcanary/-retained-object-tracker/#inheritors","title":"Inheritors","text":"ReferenceQueueRetainedObjectTracker"},{"location":"api/leakcanary/-retained-object-tracker/#functions","title":"Functions","text":"Name Summary clearAllObjectsTracked [jvm]abstract fun clearAllObjectsTracked()Clears weak reachability expectations for all tracked objects. clearObjectsTrackedBefore [jvm]abstract fun clearObjectsTrackedBefore(uptime: Duration)Clears weak reachability expectations for objects that were created before uptime."},{"location":"api/leakcanary/-retained-object-tracker/#properties","title":"Properties","text":"Name Summary hasRetainedObjects [jvm]abstract val hasRetainedObjects: BooleanReturns true if any of the tracked objects are currently retained. hasTrackedObjects [jvm]abstract val hasTrackedObjects: BooleanReturns true if there are any tracked objects that aren\u2019t currently weakly reachable. retainedObjectCount [jvm]abstract val retainedObjectCount: IntReturns the number of retained objects. trackedObjectCount [jvm]abstract val trackedObjectCount: IntReturns the number of tracked objects that aren\u2019t weakly reachable."},{"location":"api/leakcanary/-retained-object-tracker/clear-all-objects-tracked/","title":"Clear all objects tracked","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/clearAllObjectsTracked</p>"},{"location":"api/leakcanary/-retained-object-tracker/clear-all-objects-tracked/#clearallobjectstracked","title":"clearAllObjectsTracked","text":"<p>[jvm]\\ abstract fun clearAllObjectsTracked()</p> <p>Clears weak reachability expectations for all tracked objects.</p>"},{"location":"api/leakcanary/-retained-object-tracker/clear-objects-tracked-before/","title":"Clear objects tracked before","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/clearObjectsTrackedBefore</p>"},{"location":"api/leakcanary/-retained-object-tracker/clear-objects-tracked-before/#clearobjectstrackedbefore","title":"clearObjectsTrackedBefore","text":"<p>[jvm]\\ abstract fun clearObjectsTrackedBefore(uptime: Duration)</p> <p>Clears weak reachability expectations for objects that were created before uptime.</p>"},{"location":"api/leakcanary/-retained-object-tracker/clear-objects-tracked-before/#parameters","title":"Parameters","text":"<p>jvm</p> uptime A time in the past from UptimeClock.uptime."},{"location":"api/leakcanary/-retained-object-tracker/has-retained-objects/","title":"Has retained objects","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/hasRetainedObjects</p>"},{"location":"api/leakcanary/-retained-object-tracker/has-retained-objects/#hasretainedobjects","title":"hasRetainedObjects","text":"<p>[jvm]\\ abstract val hasRetainedObjects: Boolean</p> <p>Returns true if any of the tracked objects are currently retained.</p>"},{"location":"api/leakcanary/-retained-object-tracker/has-tracked-objects/","title":"Has tracked objects","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/hasTrackedObjects</p>"},{"location":"api/leakcanary/-retained-object-tracker/has-tracked-objects/#hastrackedobjects","title":"hasTrackedObjects","text":"<p>[jvm]\\ abstract val hasTrackedObjects: Boolean</p> <p>Returns true if there are any tracked objects that aren\u2019t currently weakly reachable.</p>"},{"location":"api/leakcanary/-retained-object-tracker/retained-object-count/","title":"Retained object count","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/retainedObjectCount</p>"},{"location":"api/leakcanary/-retained-object-tracker/retained-object-count/#retainedobjectcount","title":"retainedObjectCount","text":"<p>[jvm]\\ abstract val retainedObjectCount: Int</p> <p>Returns the number of retained objects.</p>"},{"location":"api/leakcanary/-retained-object-tracker/tracked-object-count/","title":"Tracked object count","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/trackedObjectCount</p>"},{"location":"api/leakcanary/-retained-object-tracker/tracked-object-count/#trackedobjectcount","title":"trackedObjectCount","text":"<p>[jvm]\\ abstract val trackedObjectCount: Int</p> <p>Returns the number of tracked objects that aren\u2019t weakly reachable.</p>"},{"location":"api/leakcanary/-root-view-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher</p>"},{"location":"api/leakcanary/-root-view-watcher/#rootviewwatcher","title":"RootViewWatcher","text":"<p>[androidJvm]\\ class RootViewWatcher(deletableObjectReporter: DeletableObjectReporter, rootViewFilter: RootViewWatcher.Filter = WindowTypeFilter(watchDismissedDialogs = false)) : InstallableWatcher</p> <p>Expects root views to become weakly reachable soon after they are removed from the window manager.</p>"},{"location":"api/leakcanary/-root-view-watcher/#constructors","title":"Constructors","text":"RootViewWatcher [androidJvm]constructor(reachabilityWatcher: ReachabilityWatcher)constructor(deletableObjectReporter: DeletableObjectReporter, rootViewFilter: RootViewWatcher.Filter = WindowTypeFilter(watchDismissedDialogs = false))"},{"location":"api/leakcanary/-root-view-watcher/#types","title":"Types","text":"Name Summary Filter [androidJvm]fun interface Filter WindowTypeFilter [androidJvm]class WindowTypeFilter(watchDismissedDialogs: Boolean) : RootViewWatcher.Filter"},{"location":"api/leakcanary/-root-view-watcher/#functions","title":"Functions","text":"Name Summary install [androidJvm]open override fun install() uninstall [androidJvm]open override fun uninstall()"},{"location":"api/leakcanary/-root-view-watcher/-root-view-watcher/","title":"root view watcher","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/RootViewWatcher</p>"},{"location":"api/leakcanary/-root-view-watcher/-root-view-watcher/#rootviewwatcher","title":"RootViewWatcher","text":"<p>[androidJvm]\\ constructor(reachabilityWatcher: ReachabilityWatcher)</p> <p>constructor(deletableObjectReporter: DeletableObjectReporter, rootViewFilter: RootViewWatcher.Filter = WindowTypeFilter(watchDismissedDialogs = false))</p>"},{"location":"api/leakcanary/-root-view-watcher/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/install</p>"},{"location":"api/leakcanary/-root-view-watcher/install/#install","title":"install","text":"<p>[androidJvm]\\ open override fun install()</p>"},{"location":"api/leakcanary/-root-view-watcher/uninstall/","title":"Uninstall","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/uninstall</p>"},{"location":"api/leakcanary/-root-view-watcher/uninstall/#uninstall","title":"uninstall","text":"<p>[androidJvm]\\ open override fun uninstall()</p>"},{"location":"api/leakcanary/-root-view-watcher/-filter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/Filter</p>"},{"location":"api/leakcanary/-root-view-watcher/-filter/#filter","title":"Filter","text":"<p>fun interface Filter</p>"},{"location":"api/leakcanary/-root-view-watcher/-filter/#inheritors","title":"Inheritors","text":"WindowTypeFilter"},{"location":"api/leakcanary/-root-view-watcher/-filter/#functions","title":"Functions","text":"Name Summary shouldExpectDeletionOnDetached [androidJvm]abstract fun shouldExpectDeletionOnDetached(rootView: View): Boolean"},{"location":"api/leakcanary/-root-view-watcher/-filter/should-expect-deletion-on-detached/","title":"Should expect deletion on detached","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/Filter/shouldExpectDeletionOnDetached</p>"},{"location":"api/leakcanary/-root-view-watcher/-filter/should-expect-deletion-on-detached/#shouldexpectdeletionondetached","title":"shouldExpectDeletionOnDetached","text":"<p>[androidJvm]\\ abstract fun shouldExpectDeletionOnDetached(rootView: View): Boolean</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/WindowTypeFilter</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/#windowtypefilter","title":"WindowTypeFilter","text":"<p>[androidJvm]\\ class WindowTypeFilter(watchDismissedDialogs: Boolean) : RootViewWatcher.Filter</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/#constructors","title":"Constructors","text":"WindowTypeFilter [androidJvm]constructor(watchDismissedDialogs: Boolean)"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/#functions","title":"Functions","text":"Name Summary shouldExpectDeletionOnDetached [androidJvm]open override fun shouldExpectDeletionOnDetached(rootView: View): Boolean"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/-window-type-filter/","title":"window type filter","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/WindowTypeFilter/WindowTypeFilter</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/-window-type-filter/#windowtypefilter","title":"WindowTypeFilter","text":"<p>[androidJvm]\\ constructor(watchDismissedDialogs: Boolean)</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/should-expect-deletion-on-detached/","title":"Should expect deletion on detached","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/WindowTypeFilter/shouldExpectDeletionOnDetached</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/should-expect-deletion-on-detached/#shouldexpectdeletionondetached","title":"shouldExpectDeletionOnDetached","text":"<p>[androidJvm]\\ open override fun shouldExpectDeletionOnDetached(rootView: View): Boolean</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/SaveResourceIdsInterceptor</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/#saveresourceidsinterceptor","title":"SaveResourceIdsInterceptor","text":"<p>[androidJvm]\\ class SaveResourceIdsInterceptor(resources: Resources) : HeapAnalysisInterceptor</p> <p>Interceptor that saves the names of R.id.* entries and their associated int values to a static field that can then be read from the heap dump.</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/#constructors","title":"Constructors","text":"SaveResourceIdsInterceptor [androidJvm]constructor(resources: Resources)"},{"location":"api/leakcanary/-save-resource-ids-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-save-resource-ids-interceptor/-save-resource-ids-interceptor/","title":"save resource ids interceptor","text":"<p>//leakcanary-repo/leakcanary/SaveResourceIdsInterceptor/SaveResourceIdsInterceptor</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/-save-resource-ids-interceptor/#saveresourceidsinterceptor","title":"SaveResourceIdsInterceptor","text":"<p>[androidJvm]\\ constructor(resources: Resources)</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/SaveResourceIdsInterceptor/intercept</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-screen-off-trigger/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ScreenOffTrigger</p>"},{"location":"api/leakcanary/-screen-off-trigger/#screenofftrigger","title":"ScreenOffTrigger","text":"<p>[androidJvm]\\ class ScreenOffTrigger(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })</p>"},{"location":"api/leakcanary/-screen-off-trigger/#constructors","title":"Constructors","text":"ScreenOffTrigger [androidJvm]constructor(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })"},{"location":"api/leakcanary/-screen-off-trigger/#functions","title":"Functions","text":"Name Summary start [androidJvm]fun start() stop [androidJvm]fun stop()"},{"location":"api/leakcanary/-screen-off-trigger/-screen-off-trigger/","title":"screen off trigger","text":"<p>//leakcanary-repo/leakcanary/ScreenOffTrigger/ScreenOffTrigger</p>"},{"location":"api/leakcanary/-screen-off-trigger/-screen-off-trigger/#screenofftrigger","title":"ScreenOffTrigger","text":"<p>[androidJvm]\\ constructor(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })</p>"},{"location":"api/leakcanary/-screen-off-trigger/start/","title":"Start","text":"<p>//leakcanary-repo/leakcanary/ScreenOffTrigger/start</p>"},{"location":"api/leakcanary/-screen-off-trigger/start/#start","title":"start","text":"<p>[androidJvm]\\ fun start()</p>"},{"location":"api/leakcanary/-screen-off-trigger/stop/","title":"Stop","text":"<p>//leakcanary-repo/leakcanary/ScreenOffTrigger/stop</p>"},{"location":"api/leakcanary/-screen-off-trigger/stop/#stop","title":"stop","text":"<p>[androidJvm]\\ fun stop()</p>"},{"location":"api/leakcanary/-service-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ServiceWatcher</p>"},{"location":"api/leakcanary/-service-watcher/#servicewatcher","title":"ServiceWatcher","text":"<p>[androidJvm]\\ class ServiceWatcher(deletableObjectReporter: DeletableObjectReporter) : InstallableWatcher</p> <p>Expects services to become weakly reachable soon after they receive the Service.onDestroy callback.</p>"},{"location":"api/leakcanary/-service-watcher/#constructors","title":"Constructors","text":"ServiceWatcher [androidJvm]constructor(reachabilityWatcher: ReachabilityWatcher)constructor(deletableObjectReporter: DeletableObjectReporter)"},{"location":"api/leakcanary/-service-watcher/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-service-watcher/#functions","title":"Functions","text":"Name Summary install [androidJvm]open override fun install() uninstall [androidJvm]open override fun uninstall()"},{"location":"api/leakcanary/-service-watcher/-service-watcher/","title":"service watcher","text":"<p>//leakcanary-repo/leakcanary/ServiceWatcher/ServiceWatcher</p>"},{"location":"api/leakcanary/-service-watcher/-service-watcher/#servicewatcher","title":"ServiceWatcher","text":"<p>[androidJvm]\\ constructor(reachabilityWatcher: ReachabilityWatcher)</p> <p>constructor(deletableObjectReporter: DeletableObjectReporter)</p>"},{"location":"api/leakcanary/-service-watcher/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/ServiceWatcher/install</p>"},{"location":"api/leakcanary/-service-watcher/install/#install","title":"install","text":"<p>[androidJvm]\\ open override fun install()</p>"},{"location":"api/leakcanary/-service-watcher/uninstall/","title":"Uninstall","text":"<p>//leakcanary-repo/leakcanary/ServiceWatcher/uninstall</p>"},{"location":"api/leakcanary/-service-watcher/uninstall/#uninstall","title":"uninstall","text":"<p>[androidJvm]\\ open override fun uninstall()</p>"},{"location":"api/leakcanary/-service-watcher/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ServiceWatcher/Companion</p>"},{"location":"api/leakcanary/-service-watcher/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-skip-leak-detection/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/SkipLeakDetection</p>"},{"location":"api/leakcanary/-skip-leak-detection/#skipleakdetection","title":"SkipLeakDetection","text":"<p>[androidJvm]\\ @Target(allowedTargets = [AnnotationTarget.CLASS, AnnotationTarget.FUNCTION])</p> <p>annotation class SkipLeakDetection(val message: String, val assertionTags: String)</p> <p>Annotation for skipping leak detection in a UI test that calls LeakAssertions.assertNoLeaks. This annotation is useful to skip a leak detection in a test until the leaks are fixed.</p> <p>The check is performed by shouldSkipTest which is called by AndroidDetectLeaksAssert, which requires that the TestDescriptionHolder rule be applied and evaluating when LeakAssertions.assertNoLeaks is called.</p> <p>message should contain an explanation of why leak detection is skipped, e.g. a reference to a filed issue.</p> <p>The optional assertionTags allows finer grained filtering based on the tag value passed to LeakAssertions.assertNoLeaks. If assertionTags is empty, then the test will skip leak detection entirely. If assertionTags is not empty, then the test will skip leak detection for any call to LeakAssertions.assertNoLeaks with a tag value contained in assertionTags.</p>"},{"location":"api/leakcanary/-skip-leak-detection/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-skip-leak-detection/#properties","title":"Properties","text":"Name Summary assertionTags [androidJvm]val assertionTags: Array<out String> message [androidJvm]val message: String"},{"location":"api/leakcanary/-skip-leak-detection/assertion-tags/","title":"Assertion tags","text":"<p>//leakcanary-repo/leakcanary/SkipLeakDetection/assertionTags</p>"},{"location":"api/leakcanary/-skip-leak-detection/assertion-tags/#assertiontags","title":"assertionTags","text":"<p>[androidJvm]\\ val assertionTags: Array<out String></p>"},{"location":"api/leakcanary/-skip-leak-detection/message/","title":"Message","text":"<p>//leakcanary-repo/leakcanary/SkipLeakDetection/message</p>"},{"location":"api/leakcanary/-skip-leak-detection/message/#message","title":"message","text":"<p>[androidJvm]\\ val message: String</p>"},{"location":"api/leakcanary/-skip-leak-detection/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/SkipLeakDetection/Companion</p>"},{"location":"api/leakcanary/-skip-leak-detection/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-skip-leak-detection/-companion/#functions","title":"Functions","text":"Name Summary shouldSkipTest [androidJvm]fun shouldSkipTest(testDescription: Description, assertionTag: String): Booleanfun shouldSkipTest(testName: String, skipAnnotation: SkipLeakDetection?, assertionTag: String): Boolean"},{"location":"api/leakcanary/-skip-leak-detection/-companion/should-skip-test/","title":"Should skip test","text":"<p>//leakcanary-repo/leakcanary/SkipLeakDetection/Companion/shouldSkipTest</p>"},{"location":"api/leakcanary/-skip-leak-detection/-companion/should-skip-test/#shouldskiptest","title":"shouldSkipTest","text":"<p>[androidJvm]\\ fun shouldSkipTest(testDescription: Description, assertionTag: String): Boolean</p> <p>fun shouldSkipTest(testName: String, skipAnnotation: SkipLeakDetection?, assertionTag: String): Boolean</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TargetContextHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/#targetcontextheapdumpdirectoryprovider","title":"TargetContextHeapDumpDirectoryProvider","text":"<p>[androidJvm]\\ class TargetContextHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/#constructors","title":"Constructors","text":"TargetContextHeapDumpDirectoryProvider [androidJvm]constructor(heapDumpDirectoryName: String)"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/#functions","title":"Functions","text":"Name Summary heapDumpDirectory [androidJvm]open override fun heapDumpDirectory(): File"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/-target-context-heap-dump-directory-provider/","title":"target context heap dump directory provider","text":"<p>//leakcanary-repo/leakcanary/TargetContextHeapDumpDirectoryProvider/TargetContextHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/-target-context-heap-dump-directory-provider/#targetcontextheapdumpdirectoryprovider","title":"TargetContextHeapDumpDirectoryProvider","text":"<p>[androidJvm]\\ constructor(heapDumpDirectoryName: String)</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/heap-dump-directory/","title":"Heap dump directory","text":"<p>//leakcanary-repo/leakcanary/TargetContextHeapDumpDirectoryProvider/heapDumpDirectory</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/heap-dump-directory/#heapdumpdirectory","title":"heapDumpDirectory","text":"<p>[androidJvm]\\ open override fun heapDumpDirectory(): File</p>"},{"location":"api/leakcanary/-temp-heap-dump-file-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TempHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-temp-heap-dump-file-provider/#tempheapdumpfileprovider","title":"TempHeapDumpFileProvider","text":"<p>[jvm]\\ object TempHeapDumpFileProvider : HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-temp-heap-dump-file-provider/#functions","title":"Functions","text":"Name Summary newHeapDumpFile [jvm]open override fun newHeapDumpFile(): FileReturns a File that can be passed to a HeapDumper to dump the heap."},{"location":"api/leakcanary/-temp-heap-dump-file-provider/new-heap-dump-file/","title":"New heap dump file","text":"<p>//leakcanary-repo/leakcanary/TempHeapDumpFileProvider/newHeapDumpFile</p>"},{"location":"api/leakcanary/-temp-heap-dump-file-provider/new-heap-dump-file/#newheapdumpfile","title":"newHeapDumpFile","text":"<p>[jvm]\\ open override fun newHeapDumpFile(): File</p> <p>Returns a File that can be passed to a HeapDumper to dump the heap.</p>"},{"location":"api/leakcanary/-test-description-holder/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestDescriptionHolder</p>"},{"location":"api/leakcanary/-test-description-holder/#testdescriptionholder","title":"TestDescriptionHolder","text":"<p>[jvm]\\ object TestDescriptionHolder : TestRule</p> <p>A TestRule that holds onto the test Description in a thread local while evaluating, making it possible to retrieve that test Description from the test thread via testDescription.</p> <p>This rule is automatically applied by DetectLeaksAfterTestSuccess.</p>"},{"location":"api/leakcanary/-test-description-holder/#functions","title":"Functions","text":"Name Summary apply [jvm]open override fun apply(base: Statement, description: Description): Statement isEvaluating [jvm]fun isEvaluating(): Boolean wrap [jvm]fun wrap(base: Statement, description: Description): Statement"},{"location":"api/leakcanary/-test-description-holder/#properties","title":"Properties","text":"Name Summary testDescription [jvm]val testDescription: Description"},{"location":"api/leakcanary/-test-description-holder/apply/","title":"Apply","text":"<p>//leakcanary-repo/leakcanary/TestDescriptionHolder/apply</p>"},{"location":"api/leakcanary/-test-description-holder/apply/#apply","title":"apply","text":"<p>[jvm]\\ open override fun apply(base: Statement, description: Description): Statement</p>"},{"location":"api/leakcanary/-test-description-holder/is-evaluating/","title":"Is evaluating","text":"<p>//leakcanary-repo/leakcanary/TestDescriptionHolder/isEvaluating</p>"},{"location":"api/leakcanary/-test-description-holder/is-evaluating/#isevaluating","title":"isEvaluating","text":"<p>[jvm]\\ fun isEvaluating(): Boolean</p>"},{"location":"api/leakcanary/-test-description-holder/test-description/","title":"Test description","text":"<p>//leakcanary-repo/leakcanary/TestDescriptionHolder/testDescription</p>"},{"location":"api/leakcanary/-test-description-holder/test-description/#testdescription","title":"testDescription","text":"<p>[jvm]\\ val testDescription: Description</p>"},{"location":"api/leakcanary/-test-description-holder/wrap/","title":"Wrap","text":"<p>//leakcanary-repo/leakcanary/TestDescriptionHolder/wrap</p>"},{"location":"api/leakcanary/-test-description-holder/wrap/#wrap","title":"wrap","text":"<p>[jvm]\\ fun wrap(base: Statement, description: Description): Statement</p>"},{"location":"api/leakcanary/-test-name/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestName</p>"},{"location":"api/leakcanary/-test-name/#testname","title":"TestName","text":"<p>interface TestName</p>"},{"location":"api/leakcanary/-test-name/#inheritors","title":"Inheritors","text":"FromTestDescription FromStackTraceElement"},{"location":"api/leakcanary/-test-name/#types","title":"Types","text":"Name Summary FromStackTraceElement [jvm]class FromStackTraceElement(testStackElement: StackTraceElement) : TestName FromTestDescription [jvm]class FromTestDescription(testDescription: Description) : TestName"},{"location":"api/leakcanary/-test-name/#properties","title":"Properties","text":"Name Summary className [jvm]abstract val className: String classSimpleName [jvm]abstract val classSimpleName: String methodName [jvm]abstract val methodName: String"},{"location":"api/leakcanary/-test-name/class-name/","title":"Class name","text":"<p>//leakcanary-repo/leakcanary/TestName/className</p>"},{"location":"api/leakcanary/-test-name/class-name/#classname","title":"className","text":"<p>[jvm]\\ abstract val className: String</p>"},{"location":"api/leakcanary/-test-name/class-simple-name/","title":"Class simple name","text":"<p>//leakcanary-repo/leakcanary/TestName/classSimpleName</p>"},{"location":"api/leakcanary/-test-name/class-simple-name/#classsimplename","title":"classSimpleName","text":"<p>[jvm]\\ abstract val classSimpleName: String</p>"},{"location":"api/leakcanary/-test-name/method-name/","title":"Method name","text":"<p>//leakcanary-repo/leakcanary/TestName/methodName</p>"},{"location":"api/leakcanary/-test-name/method-name/#methodname","title":"methodName","text":"<p>[jvm]\\ abstract val methodName: String</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestName/FromStackTraceElement</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/#fromstacktraceelement","title":"FromStackTraceElement","text":"<p>[jvm]\\ class FromStackTraceElement(testStackElement: StackTraceElement) : TestName</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/#constructors","title":"Constructors","text":"FromStackTraceElement [jvm]constructor(testStackElement: StackTraceElement)"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/#properties","title":"Properties","text":"Name Summary className [jvm]open override val className: String classSimpleName [jvm]open override val classSimpleName: String methodName [jvm]open override val methodName: String"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/-from-stack-trace-element/","title":"from stack trace element","text":"<p>//leakcanary-repo/leakcanary/TestName/FromStackTraceElement/FromStackTraceElement</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/-from-stack-trace-element/#fromstacktraceelement","title":"FromStackTraceElement","text":"<p>[jvm]\\ constructor(testStackElement: StackTraceElement)</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/class-name/","title":"Class name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromStackTraceElement/className</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/class-name/#classname","title":"className","text":"<p>[jvm]\\ open override val className: String</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/class-simple-name/","title":"Class simple name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromStackTraceElement/classSimpleName</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/class-simple-name/#classsimplename","title":"classSimpleName","text":"<p>[jvm]\\ open override val classSimpleName: String</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/method-name/","title":"Method name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromStackTraceElement/methodName</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/method-name/#methodname","title":"methodName","text":"<p>[jvm]\\ open override val methodName: String</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestName/FromTestDescription</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/#fromtestdescription","title":"FromTestDescription","text":"<p>[jvm]\\ class FromTestDescription(testDescription: Description) : TestName</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/#constructors","title":"Constructors","text":"FromTestDescription [jvm]constructor(testDescription: Description)"},{"location":"api/leakcanary/-test-name/-from-test-description/#properties","title":"Properties","text":"Name Summary className [jvm]open override val className: String classSimpleName [jvm]open override val classSimpleName: String methodName [jvm]open override val methodName: String"},{"location":"api/leakcanary/-test-name/-from-test-description/-from-test-description/","title":"from test description","text":"<p>//leakcanary-repo/leakcanary/TestName/FromTestDescription/FromTestDescription</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/-from-test-description/#fromtestdescription","title":"FromTestDescription","text":"<p>[jvm]\\ constructor(testDescription: Description)</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/class-name/","title":"Class name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromTestDescription/className</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/class-name/#classname","title":"className","text":"<p>[jvm]\\ open override val className: String</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/class-simple-name/","title":"Class simple name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromTestDescription/classSimpleName</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/class-simple-name/#classsimplename","title":"classSimpleName","text":"<p>[jvm]\\ open override val classSimpleName: String</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/method-name/","title":"Method name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromTestDescription/methodName</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/method-name/#methodname","title":"methodName","text":"<p>[jvm]\\ open override val methodName: String</p>"},{"location":"api/leakcanary/-test-name-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestNameProvider</p>"},{"location":"api/leakcanary/-test-name-provider/#testnameprovider","title":"TestNameProvider","text":"<p>[jvm]\\ object TestNameProvider</p>"},{"location":"api/leakcanary/-test-name-provider/#functions","title":"Functions","text":"Name Summary currentTestName [jvm]fun currentTestName(): TestName?"},{"location":"api/leakcanary/-test-name-provider/current-test-name/","title":"Current test name","text":"<p>//leakcanary-repo/leakcanary/TestNameProvider/currentTestName</p>"},{"location":"api/leakcanary/-test-name-provider/current-test-name/#currenttestname","title":"currentTestName","text":"<p>[jvm]\\ fun currentTestName(): TestName?</p>"},{"location":"api/leakcanary/-toast-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ToastEventListener</p>"},{"location":"api/leakcanary/-toast-event-listener/#toasteventlistener","title":"ToastEventListener","text":"<p>[androidJvm]\\ object ToastEventListener : EventListener</p>"},{"location":"api/leakcanary/-toast-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-toast-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/ToastEventListener/onEvent</p>"},{"location":"api/leakcanary/-toast-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-tracked-object-reachability/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TrackedObjectReachability</p>"},{"location":"api/leakcanary/-tracked-object-reachability/#trackedobjectreachability","title":"TrackedObjectReachability","text":"<p>interface TrackedObjectReachability</p>"},{"location":"api/leakcanary/-tracked-object-reachability/#inheritors","title":"Inheritors","text":"RetainTrigger"},{"location":"api/leakcanary/-tracked-object-reachability/#properties","title":"Properties","text":"Name Summary isDeletable [jvm]open val isDeletable: BooleanWhether this object is eligible for automatic garbage collection. isRetained [jvm]abstract val isRetained: Booleantrue if the track object has been marked as retained and is currently strongly reachable. isStronglyReachable [jvm]abstract val isStronglyReachable: Booleantrue if the tracked object is currently strongly reachable."},{"location":"api/leakcanary/-tracked-object-reachability/is-deletable/","title":"Is deletable","text":"<p>//leakcanary-repo/leakcanary/TrackedObjectReachability/isDeletable</p>"},{"location":"api/leakcanary/-tracked-object-reachability/is-deletable/#isdeletable","title":"isDeletable","text":"<p>[jvm]\\ open val isDeletable: Boolean</p> <p>Whether this object is eligible for automatic garbage collection.</p>"},{"location":"api/leakcanary/-tracked-object-reachability/is-retained/","title":"Is retained","text":"<p>//leakcanary-repo/leakcanary/TrackedObjectReachability/isRetained</p>"},{"location":"api/leakcanary/-tracked-object-reachability/is-retained/#isretained","title":"isRetained","text":"<p>[jvm]\\ abstract val isRetained: Boolean</p> <p>true if the track object has been marked as retained and is currently strongly reachable.</p>"},{"location":"api/leakcanary/-tracked-object-reachability/is-strongly-reachable/","title":"Is strongly reachable","text":"<p>//leakcanary-repo/leakcanary/TrackedObjectReachability/isStronglyReachable</p>"},{"location":"api/leakcanary/-tracked-object-reachability/is-strongly-reachable/#isstronglyreachable","title":"isStronglyReachable","text":"<p>[jvm]\\ abstract val isStronglyReachable: Boolean</p> <p>true if the tracked object is currently strongly reachable.</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TriggeredDeletableObjectReporter</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/#triggereddeletableobjectreporter","title":"TriggeredDeletableObjectReporter","text":"<p>interface TriggeredDeletableObjectReporter</p> <p>Tracks deletion of target objects, marking them retained on trigger.</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/#inheritors","title":"Inheritors","text":"ReferenceQueueRetainedObjectTracker"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/#types","title":"Types","text":"Name Summary RetainTrigger [jvm]interface RetainTrigger : TrackedObjectReachability"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/#functions","title":"Functions","text":"Name Summary expectDeletionOnTriggerFor [jvm]abstract fun expectDeletionOnTriggerFor(target: Any, reason: String): TriggeredDeletableObjectReporter.RetainTriggerStart tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. that it should not be strongly reachable by the time RetainTrigger.markRetainedIfStronglyReachable is called on the returned RetainTrigger."},{"location":"api/leakcanary/-triggered-deletable-object-reporter/expect-deletion-on-trigger-for/","title":"Expect deletion on trigger for","text":"<p>//leakcanary-repo/leakcanary/TriggeredDeletableObjectReporter/expectDeletionOnTriggerFor</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/expect-deletion-on-trigger-for/#expectdeletionontriggerfor","title":"expectDeletionOnTriggerFor","text":"<p>[jvm]\\ abstract fun expectDeletionOnTriggerFor(target: Any, reason: String): TriggeredDeletableObjectReporter.RetainTrigger</p> <p>Start tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. that it should not be strongly reachable by the time RetainTrigger.markRetainedIfStronglyReachable is called on the returned RetainTrigger.</p> <p>If target stays strongly reachable, it will be considered \"retained\".</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/expect-deletion-on-trigger-for/#parameters","title":"Parameters","text":"<p>jvm</p> target See DeletableObjectReporter.expectDeletionFor reason See DeletableObjectReporter.expectDeletionFor"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TriggeredDeletableObjectReporter/RetainTrigger</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/#retaintrigger","title":"RetainTrigger","text":"<p>[jvm]\\ interface RetainTrigger : TrackedObjectReachability</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/#functions","title":"Functions","text":"Name Summary markRetainedIfStronglyReachable [jvm]abstract fun markRetainedIfStronglyReachable()Marks the tracked object as \"retained\" if it is still strongly reachable."},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/#properties","title":"Properties","text":"Name Summary isDeletable [jvm]open val isDeletable: BooleanWhether this object is eligible for automatic garbage collection. isRetained [jvm]abstract val isRetained: Booleantrue if the track object has been marked as retained and is currently strongly reachable. isStronglyReachable [jvm]abstract val isStronglyReachable: Booleantrue if the tracked object is currently strongly reachable."},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/mark-retained-if-strongly-reachable/","title":"Mark retained if strongly reachable","text":"<p>//leakcanary-repo/leakcanary/TriggeredDeletableObjectReporter/RetainTrigger/markRetainedIfStronglyReachable</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/mark-retained-if-strongly-reachable/#markretainedifstronglyreachable","title":"markRetainedIfStronglyReachable","text":"<p>[jvm]\\ abstract fun markRetainedIfStronglyReachable()</p> <p>Marks the tracked object as \"retained\" if it is still strongly reachable.</p>"},{"location":"api/leakcanary/-tv-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TvEventListener</p>"},{"location":"api/leakcanary/-tv-event-listener/#tveventlistener","title":"TvEventListener","text":"<p>[androidJvm]\\ object TvEventListener : EventListener</p>"},{"location":"api/leakcanary/-tv-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-tv-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/TvEventListener/onEvent</p>"},{"location":"api/leakcanary/-tv-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellFileDeleter</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/#uiautomatorshellfiledeleter","title":"UiAutomatorShellFileDeleter","text":"<p>[androidJvm]\\ object UiAutomatorShellFileDeleter</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/#functions","title":"Functions","text":"Name Summary deleteFileUsingShell [androidJvm]fun deleteFileUsingShell(file: File)"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/delete-file-using-shell/","title":"Delete file using shell","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellFileDeleter/deleteFileUsingShell</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/delete-file-using-shell/#deletefileusingshell","title":"deleteFileUsingShell","text":"<p>[androidJvm]\\ fun deleteFileUsingShell(file: File)</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/delete/","title":"Delete","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellFileDeleter/delete</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/delete/#delete","title":"delete","text":"<p>[androidJvm]\\ open override fun delete(file: File)</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellHeapDumper</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/#uiautomatorshellheapdumper","title":"UiAutomatorShellHeapDumper","text":"<p>[androidJvm]\\ class UiAutomatorShellHeapDumper(withGc: Boolean, dumpedAppPackageName: String) : HeapDumper</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/#constructors","title":"Constructors","text":"UiAutomatorShellHeapDumper [androidJvm]constructor(withGc: Boolean, dumpedAppPackageName: String)"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [androidJvm]open override fun dumpHeap(heapDumpFile: File) withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/-ui-automator-shell-heap-dumper/","title":"ui automator shell heap dumper","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellHeapDumper/UiAutomatorShellHeapDumper</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/-ui-automator-shell-heap-dumper/#uiautomatorshellheapdumper","title":"UiAutomatorShellHeapDumper","text":"<p>[androidJvm]\\ constructor(withGc: Boolean, dumpedAppPackageName: String)</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellHeapDumper/dumpHeap</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[androidJvm]\\ open override fun dumpHeap(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-uptime-clock/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/UptimeClock</p>"},{"location":"api/leakcanary/-uptime-clock/#uptimeclock","title":"UptimeClock","text":"<p>[jvm]\\ fun interface UptimeClock</p> <p>An interface to abstract the clock to get the system uptime.</p>"},{"location":"api/leakcanary/-uptime-clock/#functions","title":"Functions","text":"Name Summary uptime [jvm]abstract fun uptime(): DurationOn JVMs this should return System.nanoTime as a Duration."},{"location":"api/leakcanary/-uptime-clock/uptime/","title":"Uptime","text":"<p>//leakcanary-repo/leakcanary/UptimeClock/uptime</p>"},{"location":"api/leakcanary/-uptime-clock/uptime/#uptime","title":"uptime","text":"<p>[jvm]\\ abstract fun uptime(): Duration</p> <p>On JVMs this should return System.nanoTime as a Duration.</p> <p>On Android VMs, this should return either System.nanoTime on Android 11 (when the method was annotated with @CriticalNative) or android.os.SystemClock.uptimeMillis() before Android 11.</p>"},{"location":"api/leakcanary/-view-location-holder-leak-fix/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ViewLocationHolderLeakFix</p>"},{"location":"api/leakcanary/-view-location-holder-leak-fix/#viewlocationholderleakfix","title":"ViewLocationHolderLeakFix","text":"<p>object ViewLocationHolderLeakFix</p>"},{"location":"api/leakcanary/-view-location-holder-leak-fix/#see-also","title":"See also","text":"AndroidLeakFixes.VIEW_LOCATION_HOLDER ."},{"location":"api/leakcanary/-view-location-holder-leak-fix/#functions","title":"Functions","text":"Name Summary clearStaticPool [androidJvm]fun clearStaticPool(application: Application)Clears the ViewGroup.ViewLocationHolder.sPool static pool."},{"location":"api/leakcanary/-view-location-holder-leak-fix/clear-static-pool/","title":"Clear static pool","text":"<p>//leakcanary-repo/leakcanary/ViewLocationHolderLeakFix/clearStaticPool</p>"},{"location":"api/leakcanary/-view-location-holder-leak-fix/clear-static-pool/#clearstaticpool","title":"clearStaticPool","text":"<p>[androidJvm]\\ fun clearStaticPool(application: Application)</p> <p>Clears the ViewGroup.ViewLocationHolder.sPool static pool.</p>"},{"location":"api/leakcanary/-work-manager-heap-analyzer/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/WorkManagerHeapAnalyzer</p>"},{"location":"api/leakcanary/-work-manager-heap-analyzer/#workmanagerheapanalyzer","title":"WorkManagerHeapAnalyzer","text":"<p>[androidJvm]\\ object WorkManagerHeapAnalyzer : EventListener</p> <p>When receiving a HeapDump event, starts a WorkManager worker that performs heap analysis.</p>"},{"location":"api/leakcanary/-work-manager-heap-analyzer/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-work-manager-heap-analyzer/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/WorkManagerHeapAnalyzer/onEvent</p>"},{"location":"api/leakcanary/-work-manager-heap-analyzer/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/shark/","title":"Shark API","text":"<p>//leakcanary-repo/shark</p>"},{"location":"api/shark/#package-level-declarations","title":"Package-level declarations","text":""},{"location":"api/shark/#types","title":"Types","text":"Name Summary ActualMatchingReferenceReaderFactory [jvm]class ActualMatchingReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject> Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, and not creating any virtual reference. AnalyzeCommand [jvm]class AnalyzeCommand : CliktCommand AndroidBuildMirror [jvm]class AndroidBuildMirror(val manufacturer: String, val sdkInt: Int, val id: String)Caches values from the android.os.Build class in the heap dump. Retrieve a cached instances via fromHeapGraph. AndroidMetadataExtractor [jvm]object AndroidMetadataExtractor : MetadataExtractor AndroidNativeSizeMapper [jvm]class AndroidNativeSizeMapper(graph: HeapGraph) AndroidObjectGrowthReferenceMatchers [jvm]enum AndroidObjectGrowthReferenceMatchers : Enum<AndroidObjectGrowthReferenceMatchers> , ReferenceMatcher.ListBuilder AndroidObjectInspectors [jvm]enum AndroidObjectInspectors : Enum<AndroidObjectInspectors> , ObjectInspectorA set of default ObjectInspectors that knows about common AOSP and library classes. AndroidObjectSizeCalculator [jvm]class AndroidObjectSizeCalculator(graph: HeapGraph) : DominatorTree.ObjectSizeCalculator AndroidReferenceMatchers [jvm]enum AndroidReferenceMatchers : Enum<AndroidReferenceMatchers> , ReferenceMatcher.ListBuilderAndroidReferenceMatchers values add ReferenceMatcher instances to a global list via their add method. A ReferenceMatcher is either a IgnoredReferenceMatcher or a LibraryLeakReferenceMatcher. AndroidReferenceReaderFactory [jvm]class AndroidReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject> Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, creating additional virtual instance reference based on known Android classes. AndroidReferenceReaders [jvm]enum AndroidReferenceReaders : Enum<AndroidReferenceReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactory AndroidResourceIdNames [jvm]class AndroidResourceIdNames AndroidServices [jvm]object AndroidServices ApacheHarmonyInstanceRefReaders [jvm]enum ApacheHarmonyInstanceRefReaders : Enum<ApacheHarmonyInstanceRefReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactoryDefines VirtualInstanceReferenceReader factories for common Apache Harmony data structures. ApplicationLeak [jvm]data class ApplicationLeak(val leakTraces: List<LeakTrace>) : LeakA leak found by HeapAnalyzer in your application. AppSingletonInspector [jvm]class AppSingletonInspector(singletonClasses: String) : ObjectInspectorInspector that automatically marks instances of the provided class names as not leaking because they\u2019re app wide singletons. ByteArraySourceProvider [jvm]class ByteArraySourceProvider(byteArray: ByteArray) : DualSourceProvider ByteSize [jvm]@JvmInlinevalue class ByteSize(val inWholeBytes: Long) : Comparable<ByteSize> Inspired by https://github.com/saket/file-size as well as Kotlin\u2019s Duration API. ChainingInstanceReferenceReader [jvm]class ChainingInstanceReferenceReader(virtualRefReaders: List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader>, flatteningInstanceReader: FlatteningPartitionedInstanceReferenceReader?, fieldRefReader: FieldInstanceReferenceReader) : ReferenceReader<HeapObject.HeapInstance> A ReferenceReader that first delegates expanding to virtualRefReaders in order until one matches (or none), and then always proceeds with fieldRefReader. This means any synthetic ref will be on the shortest path, but we still explore the entire data structure so that we correctly track which objects have been visited and correctly compute dominators and retained size. ClassReferenceReader [jvm]class ClassReferenceReader(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ReferenceReader<HeapObject.HeapClass> CloseableHeapGraph [jvm]interface CloseableHeapGraph : HeapGraph, CloseableA HeapGraph that should be closed after being used. ConstantMemoryMetricsDualSourceProvider [jvm]class ConstantMemoryMetricsDualSourceProvider(realSourceProvider: DualSourceProvider) : DualSourceProviderCaptures IO read metrics without using much memory. DecoratedPath [jvm]class DecoratedPath(delegate: Path) : Path DeobfuscateHprofCommand [jvm]class DeobfuscateHprofCommand : CliktCommand Dominators [jvm]class Dominators(val dominatorNodes: Map<Long, ObjectDominators.DominatorNode>) : Serializable DominatorTree [jvm]class DominatorTree(expectedElements: Int = 4) DualSourceProvider [jvm]interface DualSourceProvider : StreamingSourceProvider, RandomAccessSourceProviderBoth a StreamingSourceProvider and a RandomAccessSourceProvider DumpProcessCommand [jvm]class DumpProcessCommand : CliktCommand FieldInstanceReferenceReader [jvm]class FieldInstanceReferenceReader(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ReferenceReader<HeapObject.HeapInstance> Expands instance fields that hold non null references. FileSourceProvider [jvm]class FileSourceProvider(file: File) : DualSourceProvider FilteringLeakingObjectFinder [jvm]class FilteringLeakingObjectFinder(filters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>) : LeakingObjectFinderFinds the objects that are leaking by scanning all objects in the heap dump and delegating the decision to a list of FilteringLeakingObjectFinder.LeakingObjectFilter FindLeakPaths [jvm]class FindLeakPaths FirstHeapTraversal [jvm]class FirstHeapTraversal(val shortestPathTree: ShortestPathObjectNode, previousTraversal: InitialState) : HeapTraversalOutput FlatteningPartitionedInstanceReferenceReader [jvm]class FlatteningPartitionedInstanceReferenceReader(graph: HeapGraph, instanceReferenceReader: FieldInstanceReferenceReader)FlatteningPartitionedInstanceReferenceReader provides a synthetic and stable representation of a data structure that maps how we think about that data structure instead of how it is internally implemented. You can think of it as surfacing additional direct references to entries that the data structure holds. VirtualInstanceReferenceReader implementations scan references based on known patterns rather than through generic traversals. As a result, they do not surface references and objects that are part of the data structure implementations, such as internal arrays or linked lists. This is a problem because the same traversal is also used to compute retained size, so we need to accounts for all reachable objects. GcRoot [jvm]sealed class GcRootA GcRoot as identified by HprofRecord.HeapDumpRecord.GcRootRecord in the heap dump. GcRootProvider [jvm]fun interface GcRootProvider GcRootReference [jvm]class GcRootReference(val gcRoot: GcRoot, val isLowPriority: Boolean, val matchedLibraryLeak: LibraryLeakReferenceMatcher?) GraphContext [jvm]class GraphContextIn memory store that can be used to store objects in a given HeapGraph instance. This is a simple MutableMap of String to Any, but with unsafe generics access. GrowingObjectNodes [jvm]typealias GrowingObjectNodes = List<ShortestPathObjectNode> HeapAnalysis [jvm]sealed class HeapAnalysis : SerializableThe result of an analysis performed by HeapAnalyzer, either a HeapAnalysisSuccess or a HeapAnalysisFailure. This class is serializable however there are no guarantees of forward compatibility. HeapAnalysisException [jvm]class HeapAnalysisException(cause: Throwable) : RuntimeException HeapAnalysisFailure [jvm]data class HeapAnalysisFailure(val heapDumpFile: File, val createdAtTimeMillis: Long, val dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: Long, val exception: HeapAnalysisException) : HeapAnalysisThe analysis performed by HeapAnalyzer did not complete successfully. HeapAnalysisSuccess [jvm]data class HeapAnalysisSuccess(val heapDumpFile: File, val createdAtTimeMillis: Long, val dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: Long, val metadata: Map<String, String>, val applicationLeaks: List<ApplicationLeak>, val libraryLeaks: List<LibraryLeak>, val unreachableObjects: List<LeakTraceObject>) : HeapAnalysisThe result of a successful heap analysis performed by HeapAnalyzer. HeapAnalyzer [jvm]class HeapAnalyzer(listener: OnAnalysisProgressListener)Analyzes heap dumps to look for leaks. HeapDiff [jvm]class HeapDiff(val traversalCount: Int, val shortestPathTree: ShortestPathObjectNode, val growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput) : HeapTraversalOutput HeapDumpRule [jvm]class HeapDumpRule : ExternalResource HeapField [jvm]class HeapField(val declaringClass: HeapObject.HeapClass, val name: String, val value: HeapValue)Represents a static field or an instance field. HeapGraph [jvm]interface HeapGraphEnables navigation through the heap graph of objects. HeapGraphProvider [jvm]fun interface HeapGraphProvider HeapGrowthCommand [jvm]class HeapGrowthCommand : CliktCommand HeapObject [jvm]sealed class HeapObjectAn object in the heap dump. HeapTraversalInput [jvm]interface HeapTraversalInput HeapTraversalOutput [jvm]interface HeapTraversalOutput : HeapTraversalInput HeapValue [jvm]class HeapValue(val graph: HeapGraph, val holder: ValueHolder)Represents a value in the heap dump, which can be an object reference or a primitive type. HprofDeobfuscator [jvm]class HprofDeobfuscatorConverts a Hprof file to another file with deobfuscated class and field names. HprofHeader [jvm]data class HprofHeader(val heapDumpTimestamp: Long = System.currentTimeMillis(), val version: HprofVersion = HprofVersion.ANDROID, val identifierByteSize: Int = 4)Represents the header metadata of a Hprof file. HprofHeapGraph [jvm]class HprofHeapGraph : CloseableHeapGraphA HeapGraph that reads from an Hprof file indexed by HprofIndex. HprofIndex [jvm]class HprofIndexAn index on a Hprof file. See openHeapGraph. HprofPrimitiveArrayStripper [jvm]class HprofPrimitiveArrayStripperConverts a Hprof file to another file with all primitive arrays replaced with arrays of zeroes, which can be useful to remove PII. Char arrays are handled slightly differently because 0 would be the null character so instead these become arrays of \u2018?\u2019. HprofRecord [jvm]sealed class HprofRecordA Hprof record. These data structure map 1:1 with how records are written in hprof files. HprofRecordReader [jvm]class HprofRecordReaderReads hprof content from an Okio BufferedSource. HprofRecordTag [jvm]enum HprofRecordTag : Enum<HprofRecordTag> HprofVersion [jvm]enum HprofVersion : Enum<HprofVersion> Supported hprof versions HprofWriter [jvm]class HprofWriter : CloseableGenerates Hprof files. HprofWriterHelper [jvm]class HprofWriterHelper(writer: HprofWriter) : Closeable IgnoredReferenceMatcher [jvm]class IgnoredReferenceMatcher(val pattern: ReferencePattern, val patternApplies: (HeapGraph) -> Boolean = ALWAYS) : ReferenceMatcherIgnoredReferenceMatcher should be used to match references that cannot ever create leaks. The shortest path finder will never go through matching references. InitialState [jvm]class InitialState(val scenarioLoopsPerGraph: Int = DEFAULT_SCENARIO_LOOPS_PER_GRAPH) : HeapTraversalInput InteractiveCommand [jvm]class InteractiveCommand : CliktCommand JavaLocalReferenceReader [jvm]class JavaLocalReferenceReader(val graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ChainingInstanceReferenceReader.VirtualInstanceReferenceReader JdkReferenceMatchers [jvm]enum JdkReferenceMatchers : Enum<JdkReferenceMatchers> , ReferenceMatcher.ListBuilder JvmObjectGrowthReferenceMatchers [jvm]enum JvmObjectGrowthReferenceMatchers : Enum<JvmObjectGrowthReferenceMatchers> , ReferenceMatcher.ListBuilder JvmTestHeapDumper [jvm]object JvmTestHeapDumper KeyedWeakReferenceFinder [jvm]object KeyedWeakReferenceFinder : LeakingObjectFinderFinds all objects tracked by a KeyedWeakReference, ie all objects that were passed to ObjectWatcher.watch. Leak [jvm]sealed class Leak : SerializableA leak found by HeapAnalyzer, either an ApplicationLeak or a LibraryLeak. LeakingObjectFinder [jvm]fun interface LeakingObjectFinderFinds the objects that are leaking, for which Shark will compute leak traces. LeaksAndUnreachableObjects [jvm]data class LeaksAndUnreachableObjects(val applicationLeaks: List<ApplicationLeak>, val libraryLeaks: List<LibraryLeak>, val unreachableObjects: List<LeakTraceObject>) LeakTrace [jvm]data class LeakTrace(val gcRootType: LeakTrace.GcRootType, val referencePath: List<LeakTraceReference>, val leakingObject: LeakTraceObject) : SerializableThe best strong reference path from a GC root to the leaking object. \"Best\" here means the shortest prioritized path. A large number of distinct paths can generally be found leading to a leaking object. Shark prioritizes paths that don\u2019t go through known LibraryLeakReferenceMatcher (because those are known to create leaks so it\u2019s more interesting to find other paths causing leaks), then it prioritize paths that don\u2019t go through java local gc roots (because those are harder to reason about). Taking those priorities into account, finding the shortest path means there are less LeakTraceReference that can be suspected to cause the leak. LeakTraceObject [jvm]data class LeakTraceObject(val type: LeakTraceObject.ObjectType, val className: String, val labels: Set<String>, val leakingStatus: LeakTraceObject.LeakingStatus, val leakingStatusReason: String, val retainedHeapByteSize: Int?, val retainedObjectCount: Int?) : Serializable LeakTracer [jvm]fun interface LeakTracer LeakTraceReference [jvm]data class LeakTraceReference(val originObject: LeakTraceObject, val referenceType: LeakTraceReference.ReferenceType, val owningClassName: String, val referenceName: String) : SerializableA LeakTraceReference represents an origin LeakTraceObject and either a reference from that object to the LeakTraceObject in the next LeakTraceReference in LeakTrace.referencePath, or to LeakTrace.leakingObject if this is the last LeakTraceReference in LeakTrace.referencePath. LibraryLeak [jvm]data class LibraryLeak(val leakTraces: List<LeakTrace>, val pattern: ReferencePattern, val description: String) : LeakA leak found by HeapAnalyzer, where the only path to the leaking object required going through a reference matched by pattern, as provided to a LibraryLeakReferenceMatcher instance. This is a known leak in library code that is beyond your control. LibraryLeakReferenceMatcher [jvm]data class LibraryLeakReferenceMatcher(val pattern: ReferencePattern, val description: String = \"\", val patternApplies: (HeapGraph) -> Boolean = ALWAYS) : ReferenceMatcherLibraryLeakReferenceMatcher should be used to match references in library code that are known to create leaks and are beyond your control. The shortest path finder will only go through matching references after it has exhausted references that don\u2019t match, prioritizing finding an application leak over a known library leak. Library leaks will be reported as LibraryLeak instead of ApplicationLeak. MatchingGcRootProvider [jvm]class MatchingGcRootProvider(referenceMatchers: List<ReferenceMatcher>) : GcRootProviderTODO Extracted from PathFinder, this should eventually be part of public API surface and we should likely also revisit the gc root type filtering which happens during heap parsing, as that\u2019s not really a concern for the heap parser and more for path finding. There are probably memory concerns as well there though. We could: MetadataExtractor [jvm]fun interface MetadataExtractorExtracts metadata from a hprof to be reported in HeapAnalysisSuccess.metadata. Neo4JCommand [jvm]class Neo4JCommand : CliktCommandExample commands: ObjectArrayReferenceReader [jvm]class ObjectArrayReferenceReader : ReferenceReader<HeapObject.HeapObjectArray> ObjectDominators [jvm]class ObjectDominatorsExposes high level APIs to compute and render a dominator tree. This class needs to be public to be used by other LeakCanary modules but is internal and its API might change at any moment. ObjectGrowthDetector [jvm]class ObjectGrowthDetector(gcRootProvider: GcRootProvider, referenceReaderFactory: ReferenceReader.Factory<HeapObject>)Looks for objects that have grown in outgoing references in a new heap dump compared to a previous heap dump by diffing heap traversals. ObjectInspector [jvm]fun interface ObjectInspectorProvides LeakCanary with insights about objects (classes, instances and arrays) found in the heap. inspect will be called for each object that LeakCanary wants to know more about. The implementation can then use the provided ObjectReporter to provide insights for that object. ObjectInspectors [jvm]enum ObjectInspectors : Enum<ObjectInspectors> , ObjectInspectorA set of default ObjectInspectors that knows about common JDK objects. ObjectReporter [jvm]class ObjectReporter(val heapObject: HeapObject)Enables ObjectInspector implementations to provide insights on heapObject, which is an object (class, instance or array) found in the heap. OnAnalysisProgressListener [jvm]fun interface OnAnalysisProgressListenerReports progress from the HeapAnalyzer as they occur, as Step values. OnHprofRecordListener [jvm]fun interface OnHprofRecordListenerListener passed in to StreamingRecordReaderAdapter.readRecords, gets notified for each HprofRecord found in the heap dump which types is in the set of the recordTypes parameter passed to StreamingRecordReaderAdapter.readRecords. OnHprofRecordTagListener [jvm]fun interface OnHprofRecordTagListenerListener passed in to StreamingHprofReader.readRecords, gets notified for each HprofRecordTag found in the heap dump. OpenJdkInstanceRefReaders [jvm]enum OpenJdkInstanceRefReaders : Enum<OpenJdkInstanceRefReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactoryDefines VirtualInstanceReferenceReader factories for common OpenJDK data structures. OpenJdkReferenceReaderFactory [jvm]class OpenJdkReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject> PathFindingResults [jvm]class PathFindingResults(val pathsToLeakingObjects: List<ReferencePathNode>, val dominatorTree: DominatorTree?) PrimitiveType [jvm]enum PrimitiveType : Enum<PrimitiveType> A primitive type in the prof. PrioritizingShortestPathFinder [jvm]class PrioritizingShortestPathFinder : ShortestPathFinderNot thread safe. ProguardMapping [jvm]class ProguardMapping ProguardMappingHelper [jvm]class ProguardMappingHelper(proguardMapping: ProguardMapping) ProguardMappingReader [jvm]class ProguardMappingReader(proguardMappingInputStream: InputStream) RandomAccessHprofReader [jvm]class RandomAccessHprofReader : CloseableReads records in a Hprof source, one at a time with a specific position and size. Call openReaderFor to obtain a new instance. RandomAccessSource [jvm]interface RandomAccessSource : Closeable RandomAccessSourceProvider [jvm]fun interface RandomAccessSourceProviderCan open RandomAccessSource instances. RealLeakTracerFactory [jvm]class RealLeakTracerFactory(shortestPathFinderFactory: ShortestPathFinder.Factory, objectInspectors: List<ObjectInspector>, listener: RealLeakTracerFactory.Event.Listener) : LeakTracer.Factory Reference [jvm]data class Reference(val valueObjectId: Long, val isLowPriority: Boolean, val isLeafObject: Boolean = false, val lazyDetailsResolver: Reference.LazyDetails.Resolver)TODO Review as public API. ReferenceLocationType [jvm]enum ReferenceLocationType : Enum<ReferenceLocationType> TODO This is quite similar to the leaktrace equivalent ReferenceMatcher [jvm]sealed class ReferenceMatcherUsed to pattern match known patterns of references in the heap, either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher), which lowers their traversal priority when exploring the heap. ReferencePattern [jvm]sealed class ReferencePattern : SerializableA pattern that will match references for a given ReferenceMatcher. ReferenceReader [jvm]fun interface ReferenceReader<T : HeapObject> RepeatingHeapGraphObjectGrowthDetector [jvm]class RepeatingHeapGraphObjectGrowthDetector(objectGrowthDetector: ObjectGrowthDetector, completionListener: RepeatingHeapGraphObjectGrowthDetector.CompletionListener = CompletionListener { }) RepeatingScenarioObjectGrowthDetector [jvm]class RepeatingScenarioObjectGrowthDetector(heapGraphProvider: HeapGraphProvider, repeatingHeapGraphDetector: RepeatingHeapGraphObjectGrowthDetector) Retained [jvm]@JvmInlinevalue class Retained SharkCliCommand [jvm]class SharkCliCommand : CliktCommand SharkLog [jvm]object SharkLogCentral Logger for all Shark artifacts. Set logger to change where these logs go. ShortestPathFinder [jvm]fun interface ShortestPathFinder ShortestPathObjectNode [jvm]class ShortestPathObjectNode(val name: String, val parent: ShortestPathObjectNode?) StreamingHprofReader [jvm]class StreamingHprofReaderReads the entire content of a Hprof source in one fell swoop. Call readerFor to obtain a new instance. StreamingRecordReaderAdapter [jvm]class StreamingRecordReaderAdapter(streamingHprofReader: StreamingHprofReader)Wraps a StreamingHprofReader to provide a higher level API that streams HprofRecord instances. StreamingSourceProvider [jvm]fun interface StreamingSourceProviderCan open Source instances. StripHprofCommand [jvm]class StripHprofCommand : CliktCommand ThrowingCancelableFileSourceProvider [jvm]class ThrowingCancelableFileSourceProvider(file: File, throwIfCanceled: Runnable) : DualSourceProviderA DualSourceProvider that invokes throwIfCanceled before every read, allowing cancellation of IO based work built on top by throwing an exception. ValueHolder [jvm]sealed class ValueHolderA value in the heap dump, which can be a ReferenceHolder or a primitive type. VirtualizingMatchingReferenceReaderFactory [jvm]class VirtualizingMatchingReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>, virtualRefReadersFactory: ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.ChainFactory) : ReferenceReader.Factory<HeapObject> Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, creating additional virtual instance reference based on the list of VirtualInstanceReferenceReader created by virtualRefReadersFactory."},{"location":"api/shark/#functions","title":"Functions","text":"Name Summary asHprofBytes [jvm]fun List<HprofRecord>.asHprofBytes(): DualSourceProvider create [jvm]fun ProguardMapping.create(block: ProguardMappingHelper.() -> Unit): ProguardMapping dump [jvm]fun dump(hprofHeader: HprofHeader = HprofHeader(), block: HprofWriterHelper.() -> Unit): DualSourceProvider dump [jvm]fun File.dump(block: HprofWriterHelper.() -> Unit) dumpToBytes [jvm]fun dumpToBytes(hprofHeader: HprofHeader = HprofHeader(), block: HprofWriterHelper.() -> Unit): ByteArray forAndroidHeap [jvm]fun ObjectGrowthDetector.Companion.forAndroidHeap(referenceMatchers: List<ReferenceMatcher> = AndroidObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector forJvmHeap [jvm]fun ObjectGrowthDetector.Companion.forJvmHeap(referenceMatchers: List<ReferenceMatcher> = JvmObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector ignored [jvm]fun ReferencePattern.ignored(patternApplies: (HeapGraph) -> Boolean = ALWAYS): IgnoredReferenceMatcher leak [jvm]fun ReferencePattern.leak(description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS): LibraryLeakReferenceMatcher main [jvm]fun main(args: Array<String>) Retained [jvm]inline fun Retained(heapSize: ByteSize, objectCount: Int): RetainedConstructors can\u2019t be inlined so we used a function instead."},{"location":"api/shark/#properties","title":"Properties","text":"Name Summary bytes [jvm]val Int.bytes: ByteSizeval Long.bytes: ByteSize BYTES_PER_GB [jvm]const val BYTES_PER_GB: Long BYTES_PER_KB [jvm]const val BYTES_PER_KB: Long BYTES_PER_MB [jvm]const val BYTES_PER_MB: Long gigabytes [jvm]val Int.gigabytes: ByteSizeval Long.gigabytes: ByteSize hexIdentityHashCode [jvm]val HeapObject.HeapInstance.hexIdentityHashCode: String?The system identity hashCode represented as hex, or null if it couldn\u2019t be found. This is the string identifier you see when calling Object.toString() at runtime on a class that does not override its hashCode() method, e.g. com.example.MyThing@6bd57cf identityHashCode [jvm]val HeapObject.HeapInstance.identityHashCode: Int?The system identity hash code, or null if it couldn\u2019t be found. kilobytes [jvm]val Int.kilobytes: ByteSizeval Long.kilobytes: ByteSize megabytes [jvm]val Int.megabytes: ByteSizeval Long.megabytes: ByteSize UNKNOWN_RETAINED [jvm]val UNKNOWN_RETAINED: Retained ZERO_BYTES [jvm]val ZERO_BYTES: ByteSize ZERO_RETAINED [jvm]val ZERO_RETAINED: Retained"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-g-b/","title":"b y t e s p e r g b","text":"<p>//leakcanary-repo/shark/BYTES_PER_GB</p>"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-g-b/#bytes_per_gb","title":"BYTES_PER_GB","text":"<p>[jvm]\\ const val BYTES_PER_GB: Long</p>"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-k-b/","title":"b y t e s p e r k b","text":"<p>//leakcanary-repo/shark/BYTES_PER_KB</p>"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-k-b/#bytes_per_kb","title":"BYTES_PER_KB","text":"<p>[jvm]\\ const val BYTES_PER_KB: Long</p>"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-m-b/","title":"b y t e s p e r m b","text":"<p>//leakcanary-repo/shark/BYTES_PER_MB</p>"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-m-b/#bytes_per_mb","title":"BYTES_PER_MB","text":"<p>[jvm]\\ const val BYTES_PER_MB: Long</p>"},{"location":"api/shark/-retained/","title":"retained","text":"<p>//leakcanary-repo/shark/Retained</p>"},{"location":"api/shark/-retained/#retained","title":"Retained","text":"<p>[jvm]\\ inline fun Retained(heapSize: ByteSize, objectCount: Int): Retained</p> <p>Constructors can\u2019t be inlined so we used a function instead.</p>"},{"location":"api/shark/-u-n-k-n-o-w-n_-r-e-t-a-i-n-e-d/","title":"u n k n o w n r e t a i n e d","text":"<p>//leakcanary-repo/shark/UNKNOWN_RETAINED</p>"},{"location":"api/shark/-u-n-k-n-o-w-n_-r-e-t-a-i-n-e-d/#unknown_retained","title":"UNKNOWN_RETAINED","text":"<p>[jvm]\\ val UNKNOWN_RETAINED: Retained</p>"},{"location":"api/shark/-z-e-r-o_-b-y-t-e-s/","title":"z e r o b y t e s","text":"<p>//leakcanary-repo/shark/ZERO_BYTES</p>"},{"location":"api/shark/-z-e-r-o_-b-y-t-e-s/#zero_bytes","title":"ZERO_BYTES","text":"<p>[jvm]\\ val ZERO_BYTES: ByteSize</p>"},{"location":"api/shark/-z-e-r-o_-r-e-t-a-i-n-e-d/","title":"z e r o r e t a i n e d","text":"<p>//leakcanary-repo/shark/ZERO_RETAINED</p>"},{"location":"api/shark/-z-e-r-o_-r-e-t-a-i-n-e-d/#zero_retained","title":"ZERO_RETAINED","text":"<p>[jvm]\\ val ZERO_RETAINED: Retained</p>"},{"location":"api/shark/as-hprof-bytes/","title":"As hprof bytes","text":"<p>//leakcanary-repo/shark/asHprofBytes</p>"},{"location":"api/shark/as-hprof-bytes/#ashprofbytes","title":"asHprofBytes","text":"<p>[jvm]\\ fun List<HprofRecord>.asHprofBytes(): DualSourceProvider</p>"},{"location":"api/shark/bytes/","title":"Bytes","text":"<p>//leakcanary-repo/shark/bytes</p>"},{"location":"api/shark/bytes/#bytes","title":"bytes","text":"<p>[jvm]\\ val Long.bytes: ByteSize</p> <p>val Int.bytes: ByteSize</p>"},{"location":"api/shark/create/","title":"Create","text":"<p>//leakcanary-repo/shark/create</p>"},{"location":"api/shark/create/#create","title":"create","text":"<p>[jvm]\\ fun ProguardMapping.create(block: ProguardMappingHelper.() -> Unit): ProguardMapping</p>"},{"location":"api/shark/dump-to-bytes/","title":"Dump to bytes","text":"<p>//leakcanary-repo/shark/dumpToBytes</p>"},{"location":"api/shark/dump-to-bytes/#dumptobytes","title":"dumpToBytes","text":"<p>[jvm]\\ fun dumpToBytes(hprofHeader: HprofHeader = HprofHeader(), block: HprofWriterHelper.() -> Unit): ByteArray</p>"},{"location":"api/shark/dump/","title":"Dump","text":"<p>//leakcanary-repo/shark/dump</p>"},{"location":"api/shark/dump/#dump","title":"dump","text":"<p>[jvm]\\ fun File.dump(block: HprofWriterHelper.() -> Unit)</p> <p>fun dump(hprofHeader: HprofHeader = HprofHeader(), block: HprofWriterHelper.() -> Unit): DualSourceProvider</p>"},{"location":"api/shark/for-android-heap/","title":"For android heap","text":"<p>//leakcanary-repo/shark/forAndroidHeap</p>"},{"location":"api/shark/for-android-heap/#forandroidheap","title":"forAndroidHeap","text":"<p>[jvm]\\ fun ObjectGrowthDetector.Companion.forAndroidHeap(referenceMatchers: List<ReferenceMatcher> = AndroidObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector</p>"},{"location":"api/shark/for-jvm-heap/","title":"For jvm heap","text":"<p>//leakcanary-repo/shark/forJvmHeap</p>"},{"location":"api/shark/for-jvm-heap/#forjvmheap","title":"forJvmHeap","text":"<p>[jvm]\\ fun ObjectGrowthDetector.Companion.forJvmHeap(referenceMatchers: List<ReferenceMatcher> = JvmObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector</p>"},{"location":"api/shark/gigabytes/","title":"Gigabytes","text":"<p>//leakcanary-repo/shark/gigabytes</p>"},{"location":"api/shark/gigabytes/#gigabytes","title":"gigabytes","text":"<p>[jvm]\\ val Long.gigabytes: ByteSize</p> <p>val Int.gigabytes: ByteSize</p>"},{"location":"api/shark/hex-identity-hash-code/","title":"Hex identity hash code","text":"<p>//leakcanary-repo/shark/hexIdentityHashCode</p>"},{"location":"api/shark/hex-identity-hash-code/#hexidentityhashcode","title":"hexIdentityHashCode","text":"<p>[jvm]\\ val HeapObject.HeapInstance.hexIdentityHashCode: String?</p> <p>The system identity hashCode represented as hex, or null if it couldn\u2019t be found. This is the string identifier you see when calling Object.toString() at runtime on a class that does not override its hashCode() method, e.g. com.example.MyThing@6bd57cf</p>"},{"location":"api/shark/identity-hash-code/","title":"Identity hash code","text":"<p>//leakcanary-repo/shark/identityHashCode</p>"},{"location":"api/shark/identity-hash-code/#identityhashcode","title":"identityHashCode","text":"<p>[jvm]\\ val HeapObject.HeapInstance.identityHashCode: Int?</p> <p>The system identity hash code, or null if it couldn\u2019t be found.</p> <p>Based on the Object.identityHashCode implementation in AOSP.</p> <p>Backing field shadow$monitor was added in API 24. https://cs.android.com/android/_/android/platform/libcore/+ /de626ec8a109ea18283d96c720cc57e2f32f67fa:ojluni/src/main/java/java/lang/Object.java; dlc=ba7cc9f5357c323a1006119a20ce025fd4c57fd2</p>"},{"location":"api/shark/ignored/","title":"Ignored","text":"<p>//leakcanary-repo/shark/ignored</p>"},{"location":"api/shark/ignored/#ignored","title":"ignored","text":"<p>[jvm]\\ fun ReferencePattern.ignored(patternApplies: (HeapGraph) -> Boolean = ALWAYS): IgnoredReferenceMatcher</p>"},{"location":"api/shark/kilobytes/","title":"Kilobytes","text":"<p>//leakcanary-repo/shark/kilobytes</p>"},{"location":"api/shark/kilobytes/#kilobytes","title":"kilobytes","text":"<p>[jvm]\\ val Long.kilobytes: ByteSize</p> <p>val Int.kilobytes: ByteSize</p>"},{"location":"api/shark/leak/","title":"Leak","text":"<p>//leakcanary-repo/shark/leak</p>"},{"location":"api/shark/leak/#leak","title":"leak","text":"<p>[jvm]\\ fun ReferencePattern.leak(description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS): LibraryLeakReferenceMatcher</p>"},{"location":"api/shark/main/","title":"Main","text":"<p>//leakcanary-repo/shark/main</p>"},{"location":"api/shark/main/#main","title":"main","text":"<p>[jvm]\\ fun main(args: Array<String>)</p>"},{"location":"api/shark/megabytes/","title":"Megabytes","text":"<p>//leakcanary-repo/shark/megabytes</p>"},{"location":"api/shark/megabytes/#megabytes","title":"megabytes","text":"<p>[jvm]\\ val Long.megabytes: ByteSize</p> <p>val Int.megabytes: ByteSize</p>"},{"location":"api/shark/repeating-heap-graph/","title":"Repeating heap graph","text":"<p>//leakcanary-repo/shark/repeatingHeapGraph</p>"},{"location":"api/shark/repeating-heap-graph/#repeatingheapgraph","title":"repeatingHeapGraph","text":"<p>[jvm]\\ fun ObjectGrowthDetector.repeatingHeapGraph(): RepeatingHeapGraphObjectGrowthDetector</p>"},{"location":"api/shark/repeating-heap-graph/#see-also","title":"See also","text":"RepeatingHeapGraphObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/shark/repeating-scenario/","title":"Repeating scenario","text":"<p>//leakcanary-repo/shark/repeatingScenario</p>"},{"location":"api/shark/repeating-scenario/#repeatingscenario","title":"repeatingScenario","text":"<p>[jvm]\\ fun ObjectGrowthDetector.repeatingScenario(heapGraphProvider: HeapGraphProvider, maxHeapDumps: Int = RepeatingScenarioObjectGrowthDetector.DEFAULT_MAX_HEAP_DUMPS, scenarioLoopsPerDump: Int = RepeatingScenarioObjectGrowthDetector.DEFAULT_SCENARIO_LOOPS_PER_DUMP): RepeatingScenarioObjectGrowthDetector</p>"},{"location":"api/shark/repeating-scenario/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects ."},{"location":"api/shark/-actual-matching-reference-reader-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/ActualMatchingReferenceReaderFactory</p>"},{"location":"api/shark/-actual-matching-reference-reader-factory/#actualmatchingreferencereaderfactory","title":"ActualMatchingReferenceReaderFactory","text":"<p>[jvm]\\ class ActualMatchingReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject> </p> <p>Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, and not creating any virtual reference.</p>"},{"location":"api/shark/-actual-matching-reference-reader-factory/#constructors","title":"Constructors","text":"ActualMatchingReferenceReaderFactory [jvm]constructor(referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-actual-matching-reference-reader-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject>"},{"location":"api/shark/-actual-matching-reference-reader-factory/-actual-matching-reference-reader-factory/","title":"actual matching reference reader factory","text":"<p>//leakcanary-repo/shark/ActualMatchingReferenceReaderFactory/ActualMatchingReferenceReaderFactory</p>"},{"location":"api/shark/-actual-matching-reference-reader-factory/-actual-matching-reference-reader-factory/#actualmatchingreferencereaderfactory","title":"ActualMatchingReferenceReaderFactory","text":"<p>[jvm]\\ constructor(referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-actual-matching-reference-reader-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/ActualMatchingReferenceReaderFactory/createFor</p>"},{"location":"api/shark/-actual-matching-reference-reader-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject></p>"},{"location":"api/shark/-analyze-command/","title":"Index","text":"<p>//leakcanary-repo/shark/AnalyzeCommand</p>"},{"location":"api/shark/-analyze-command/#analyzecommand","title":"AnalyzeCommand","text":"<p>[jvm]\\ class AnalyzeCommand : CliktCommand</p>"},{"location":"api/shark/-analyze-command/#constructors","title":"Constructors","text":"AnalyzeCommand [jvm]constructor()"},{"location":"api/shark/-analyze-command/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-analyze-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-analyze-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-analyze-command/-analyze-command/","title":"analyze command","text":"<p>//leakcanary-repo/shark/AnalyzeCommand/AnalyzeCommand</p>"},{"location":"api/shark/-analyze-command/-analyze-command/#analyzecommand","title":"AnalyzeCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-analyze-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/AnalyzeCommand/run</p>"},{"location":"api/shark/-analyze-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-analyze-command/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AnalyzeCommand/Companion</p>"},{"location":"api/shark/-analyze-command/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-analyze-command/-companion/#functions","title":"Functions","text":"Name Summary analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?)"},{"location":"api/shark/-analyze-command/-companion/analyze/","title":"Analyze","text":"<p>//leakcanary-repo/shark/AnalyzeCommand/Companion/analyze</p>"},{"location":"api/shark/-analyze-command/-companion/analyze/#analyze","title":"analyze","text":"<p>[jvm]\\ fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?)</p>"},{"location":"api/shark/-android-build-mirror/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror</p>"},{"location":"api/shark/-android-build-mirror/#androidbuildmirror","title":"AndroidBuildMirror","text":"<p>[jvm]\\ class AndroidBuildMirror(val manufacturer: String, val sdkInt: Int, val id: String)</p> <p>Caches values from the android.os.Build class in the heap dump. Retrieve a cached instances via fromHeapGraph.</p>"},{"location":"api/shark/-android-build-mirror/#constructors","title":"Constructors","text":"AndroidBuildMirror [jvm]constructor(manufacturer: String, sdkInt: Int, id: String)"},{"location":"api/shark/-android-build-mirror/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-build-mirror/#properties","title":"Properties","text":"Name Summary id [jvm]val id: StringValue of android.os.Build.ID manufacturer [jvm]val manufacturer: StringValue of android.os.Build.MANUFACTURER sdkInt [jvm]val sdkInt: IntValue of android.os.Build.VERSION.SDK_INT"},{"location":"api/shark/-android-build-mirror/-android-build-mirror/","title":"android build mirror","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/AndroidBuildMirror</p>"},{"location":"api/shark/-android-build-mirror/-android-build-mirror/#androidbuildmirror","title":"AndroidBuildMirror","text":"<p>[jvm]\\ constructor(manufacturer: String, sdkInt: Int, id: String)</p>"},{"location":"api/shark/-android-build-mirror/id/","title":"Id","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/id</p>"},{"location":"api/shark/-android-build-mirror/id/#id","title":"id","text":"<p>[jvm]\\ val id: String</p> <p>Value of android.os.Build.ID</p>"},{"location":"api/shark/-android-build-mirror/manufacturer/","title":"Manufacturer","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/manufacturer</p>"},{"location":"api/shark/-android-build-mirror/manufacturer/#manufacturer","title":"manufacturer","text":"<p>[jvm]\\ val manufacturer: String</p> <p>Value of android.os.Build.MANUFACTURER</p>"},{"location":"api/shark/-android-build-mirror/sdk-int/","title":"Sdk int","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/sdkInt</p>"},{"location":"api/shark/-android-build-mirror/sdk-int/#sdkint","title":"sdkInt","text":"<p>[jvm]\\ val sdkInt: Int</p> <p>Value of android.os.Build.VERSION.SDK_INT</p>"},{"location":"api/shark/-android-build-mirror/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/Companion</p>"},{"location":"api/shark/-android-build-mirror/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-build-mirror/-companion/#functions","title":"Functions","text":"Name Summary applyIf [jvm]fun applyIf(patternApplies: AndroidBuildMirror.() -> Boolean): (HeapGraph) -> Boolean fromHeapGraph [jvm]fun fromHeapGraph(graph: HeapGraph): AndroidBuildMirror"},{"location":"api/shark/-android-build-mirror/-companion/apply-if/","title":"Apply if","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/Companion/applyIf</p>"},{"location":"api/shark/-android-build-mirror/-companion/apply-if/#applyif","title":"applyIf","text":"<p>[jvm]\\ fun applyIf(patternApplies: AndroidBuildMirror.() -> Boolean): (HeapGraph) -> Boolean</p>"},{"location":"api/shark/-android-build-mirror/-companion/from-heap-graph/","title":"From heap graph","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/Companion/fromHeapGraph</p>"},{"location":"api/shark/-android-build-mirror/-companion/from-heap-graph/#fromheapgraph","title":"fromHeapGraph","text":"<p>[jvm]\\ fun fromHeapGraph(graph: HeapGraph): AndroidBuildMirror</p>"},{"location":"api/shark/-android-build-mirror/-companion/from-heap-graph/#see-also","title":"See also","text":"AndroidBuildMirror"},{"location":"api/shark/-android-metadata-extractor/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidMetadataExtractor</p>"},{"location":"api/shark/-android-metadata-extractor/#androidmetadataextractor","title":"AndroidMetadataExtractor","text":"<p>[jvm]\\ object AndroidMetadataExtractor : MetadataExtractor</p>"},{"location":"api/shark/-android-metadata-extractor/#functions","title":"Functions","text":"Name Summary extractMetadata [jvm]open override fun extractMetadata(graph: HeapGraph): Map<String, String>"},{"location":"api/shark/-android-metadata-extractor/extract-metadata/","title":"Extract metadata","text":"<p>//leakcanary-repo/shark/AndroidMetadataExtractor/extractMetadata</p>"},{"location":"api/shark/-android-metadata-extractor/extract-metadata/#extractmetadata","title":"extractMetadata","text":"<p>[jvm]\\ open override fun extractMetadata(graph: HeapGraph): Map<String, String></p>"},{"location":"api/shark/-android-native-size-mapper/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidNativeSizeMapper</p>"},{"location":"api/shark/-android-native-size-mapper/#androidnativesizemapper","title":"AndroidNativeSizeMapper","text":"<p>[jvm]\\ class AndroidNativeSizeMapper(graph: HeapGraph)</p>"},{"location":"api/shark/-android-native-size-mapper/#constructors","title":"Constructors","text":"AndroidNativeSizeMapper [jvm]constructor(graph: HeapGraph)"},{"location":"api/shark/-android-native-size-mapper/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-native-size-mapper/#functions","title":"Functions","text":"Name Summary mapNativeSizes [jvm]fun mapNativeSizes(): Map<Long, Int>Returns a map of Object id to native size as tracked by NativeAllocationRegistry$CleanerThunk"},{"location":"api/shark/-android-native-size-mapper/-android-native-size-mapper/","title":"android native size mapper","text":"<p>//leakcanary-repo/shark/AndroidNativeSizeMapper/AndroidNativeSizeMapper</p>"},{"location":"api/shark/-android-native-size-mapper/-android-native-size-mapper/#androidnativesizemapper","title":"AndroidNativeSizeMapper","text":"<p>[jvm]\\ constructor(graph: HeapGraph)</p>"},{"location":"api/shark/-android-native-size-mapper/map-native-sizes/","title":"Map native sizes","text":"<p>//leakcanary-repo/shark/AndroidNativeSizeMapper/mapNativeSizes</p>"},{"location":"api/shark/-android-native-size-mapper/map-native-sizes/#mapnativesizes","title":"mapNativeSizes","text":"<p>[jvm]\\ fun mapNativeSizes(): Map<Long, Int></p> <p>Returns a map of Object id to native size as tracked by NativeAllocationRegistry$CleanerThunk</p>"},{"location":"api/shark/-android-native-size-mapper/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidNativeSizeMapper/Companion</p>"},{"location":"api/shark/-android-native-size-mapper/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-native-size-mapper/-companion/#functions","title":"Functions","text":"Name Summary mapNativeSizes [jvm]fun mapNativeSizes(heapGraph: HeapGraph): Map<Long, Int>"},{"location":"api/shark/-android-native-size-mapper/-companion/map-native-sizes/","title":"Map native sizes","text":"<p>//leakcanary-repo/shark/AndroidNativeSizeMapper/Companion/mapNativeSizes</p>"},{"location":"api/shark/-android-native-size-mapper/-companion/map-native-sizes/#mapnativesizes","title":"mapNativeSizes","text":"<p>[jvm]\\ fun mapNativeSizes(heapGraph: HeapGraph): Map<Long, Int></p>"},{"location":"api/shark/-android-object-growth-reference-matchers/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/#androidobjectgrowthreferencematchers","title":"AndroidObjectGrowthReferenceMatchers","text":"<p>[jvm]\\ enum AndroidObjectGrowthReferenceMatchers : Enum<AndroidObjectGrowthReferenceMatchers> , ReferenceMatcher.ListBuilder</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/#entries","title":"Entries","text":"ANDROID_LEAK_DETECTION_IGNORED_MATCHERS [jvm]ANDROID_LEAK_DETECTION_IGNORED_MATCHERS HEAP_TRAVERSAL [jvm]HEAP_TRAVERSAL STRICT_MODE_VIOLATION_TIME [jvm]STRICT_MODE_VIOLATION_TIME COMPOSE_TEST_CONTEXT_STATES [jvm]COMPOSE_TEST_CONTEXT_STATES RESOURCES_THEME_REFS [jvm]RESOURCES_THEME_REFS VIEW_ROOT_IMPL_W_VIEW_ANCESTOR [jvm]VIEW_ROOT_IMPL_W_VIEW_ANCESTOR BINDER_PROXY [jvm]BINDER_PROXY"},{"location":"api/shark/-android-object-growth-reference-matchers/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-object-growth-reference-matchers/#functions","title":"Functions","text":"Name Summary add [jvm]abstract fun add(references: MutableList<ReferenceMatcher>) valueOf [jvm]fun valueOf(value: String): AndroidObjectGrowthReferenceMatchersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<AndroidObjectGrowthReferenceMatchers>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-android-object-growth-reference-matchers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/valueOf</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): AndroidObjectGrowthReferenceMatchers</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-android-object-growth-reference-matchers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/values</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<AndroidObjectGrowthReferenceMatchers></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/ANDROID_LEAK_DETECTION_IGNORED_MATCHERS</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#android_leak_detection_ignored_matchers","title":"ANDROID_LEAK_DETECTION_IGNORED_MATCHERS","text":"<p>[jvm]\\ ANDROID_LEAK_DETECTION_IGNORED_MATCHERS</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/ANDROID_LEAK_DETECTION_IGNORED_MATCHERS/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/BINDER_PROXY</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/#binder_proxy","title":"BINDER_PROXY","text":"<p>[jvm]\\ BINDER_PROXY</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/BINDER_PROXY/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/COMPOSE_TEST_CONTEXT_STATES</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/#compose_test_context_states","title":"COMPOSE_TEST_CONTEXT_STATES","text":"<p>[jvm]\\ COMPOSE_TEST_CONTEXT_STATES</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/COMPOSE_TEST_CONTEXT_STATES/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/Companion</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-companion/#properties","title":"Properties","text":"Name Summary defaults [jvm]val defaults: List<ReferenceMatcher>"},{"location":"api/shark/-android-object-growth-reference-matchers/-companion/defaults/","title":"Defaults","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/Companion/defaults</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-companion/defaults/#defaults","title":"defaults","text":"<p>[jvm]\\ val defaults: List<ReferenceMatcher></p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/HEAP_TRAVERSAL</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#heap_traversal","title":"HEAP_TRAVERSAL","text":"<p>[jvm]\\ HEAP_TRAVERSAL</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/HEAP_TRAVERSAL/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/RESOURCES_THEME_REFS</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/#resources_theme_refs","title":"RESOURCES_THEME_REFS","text":"<p>[jvm]\\ RESOURCES_THEME_REFS</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/RESOURCES_THEME_REFS/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/STRICT_MODE_VIOLATION_TIME</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/#strict_mode_violation_time","title":"STRICT_MODE_VIOLATION_TIME","text":"<p>[jvm]\\ STRICT_MODE_VIOLATION_TIME</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/STRICT_MODE_VIOLATION_TIME/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/VIEW_ROOT_IMPL_W_VIEW_ANCESTOR</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/#view_root_impl_w_view_ancestor","title":"VIEW_ROOT_IMPL_W_VIEW_ANCESTOR","text":"<p>[jvm]\\ VIEW_ROOT_IMPL_W_VIEW_ANCESTOR</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/VIEW_ROOT_IMPL_W_VIEW_ANCESTOR/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-inspectors/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors</p>"},{"location":"api/shark/-android-object-inspectors/#androidobjectinspectors","title":"AndroidObjectInspectors","text":"<p>[jvm]\\ enum AndroidObjectInspectors : Enum<AndroidObjectInspectors> , ObjectInspector</p> <p>A set of default ObjectInspectors that knows about common AOSP and library classes.</p> <p>These are heuristics based on our experience and knowledge of AOSP and various library internals. We only make a decision if we\u2019re reasonably sure the state of an object is unlikely to be the result of a programmer mistake.</p> <p>For example, no matter how many mistakes we make in our code, the value of Activity.mDestroy will not be influenced by those mistakes.</p> <p>Most developers should use the entire set of default ObjectInspector by calling appDefaults, unless there\u2019s a bug and you temporarily want to remove an inspector.</p>"},{"location":"api/shark/-android-object-inspectors/#entries","title":"Entries","text":"VIEW [jvm]VIEW EDITOR [jvm]EDITOR ACTIVITY [jvm]ACTIVITY SERVICE [jvm]SERVICE CONTEXT_FIELD [jvm]CONTEXT_FIELD CONTEXT_WRAPPER [jvm]CONTEXT_WRAPPER APPLICATION_PACKAGE_MANAGER [jvm]APPLICATION_PACKAGE_MANAGER CONTEXT_IMPL [jvm]CONTEXT_IMPL DIALOG [jvm]DIALOG ACTIVITY_THREAD [jvm]ACTIVITY_THREAD APPLICATION [jvm]APPLICATION INPUT_METHOD_MANAGER [jvm]INPUT_METHOD_MANAGER FRAGMENT [jvm]FRAGMENT SUPPORT_FRAGMENT [jvm]SUPPORT_FRAGMENT ANDROIDX_FRAGMENT [jvm]ANDROIDX_FRAGMENT MESSAGE_QUEUE [jvm]MESSAGE_QUEUE LOADED_APK [jvm]LOADED_APK MORTAR_PRESENTER [jvm]MORTAR_PRESENTER MORTAR_SCOPE [jvm]MORTAR_SCOPE COORDINATOR [jvm]COORDINATOR MAIN_THREAD [jvm]MAIN_THREAD VIEW_ROOT_IMPL [jvm]VIEW_ROOT_IMPL WINDOW [jvm]WINDOW MESSAGE [jvm]MESSAGE TOAST [jvm]TOAST RECOMPOSER [jvm]RECOMPOSER COMPOSITION_IMPL [jvm]COMPOSITION_IMPL ANIMATOR [jvm]ANIMATOR OBJECT_ANIMATOR [jvm]OBJECT_ANIMATOR LIFECYCLE_REGISTRY [jvm]LIFECYCLE_REGISTRY STUB [jvm]STUB"},{"location":"api/shark/-android-object-inspectors/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-object-inspectors/#functions","title":"Functions","text":"Name Summary inspect [jvm]abstract fun inspect(reporter: ObjectReporter) valueOf [jvm]fun valueOf(value: String): AndroidObjectInspectorsReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<AndroidObjectInspectors>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-android-object-inspectors/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/valueOf</p>"},{"location":"api/shark/-android-object-inspectors/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): AndroidObjectInspectors</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-android-object-inspectors/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-android-object-inspectors/values/","title":"Values","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/values</p>"},{"location":"api/shark/-android-object-inspectors/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<AndroidObjectInspectors></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ACTIVITY</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/#activity","title":"ACTIVITY","text":"<p>[jvm]\\ ACTIVITY</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ACTIVITY/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ACTIVITY_THREAD</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/#activity_thread","title":"ACTIVITY_THREAD","text":"<p>[jvm]\\ ACTIVITY_THREAD</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ACTIVITY_THREAD/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ANDROIDX_FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/#androidx_fragment","title":"ANDROIDX_FRAGMENT","text":"<p>[jvm]\\ ANDROIDX_FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ANDROIDX_FRAGMENT/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ANIMATOR</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/#animator","title":"ANIMATOR","text":"<p>[jvm]\\ ANIMATOR</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ANIMATOR/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/APPLICATION</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/#application","title":"APPLICATION","text":"<p>[jvm]\\ APPLICATION</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/APPLICATION/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/APPLICATION_PACKAGE_MANAGER</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/#application_package_manager","title":"APPLICATION_PACKAGE_MANAGER","text":"<p>[jvm]\\ APPLICATION_PACKAGE_MANAGER</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/APPLICATION_PACKAGE_MANAGER/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/COMPOSITION_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/#composition_impl","title":"COMPOSITION_IMPL","text":"<p>[jvm]\\ COMPOSITION_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/COMPOSITION_IMPL/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_FIELD</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/#context_field","title":"CONTEXT_FIELD","text":"<p>[jvm]\\ CONTEXT_FIELD</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_FIELD/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/#context_impl","title":"CONTEXT_IMPL","text":"<p>[jvm]\\ CONTEXT_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_IMPL/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_WRAPPER</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/#context_wrapper","title":"CONTEXT_WRAPPER","text":"<p>[jvm]\\ CONTEXT_WRAPPER</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_WRAPPER/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/COORDINATOR</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/#coordinator","title":"COORDINATOR","text":"<p>[jvm]\\ COORDINATOR</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/COORDINATOR/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/Companion</p>"},{"location":"api/shark/-android-object-inspectors/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-object-inspectors/-companion/#functions","title":"Functions","text":"Name Summary createLeakingObjectFilters [jvm]fun createLeakingObjectFilters(inspectors: Set<AndroidObjectInspectors>): List<FilteringLeakingObjectFinder.LeakingObjectFilter>Creates a list of LeakingObjectFilter based on the passed in AndroidObjectInspectors."},{"location":"api/shark/-android-object-inspectors/-companion/#properties","title":"Properties","text":"Name Summary appDefaults [jvm]val appDefaults: List<ObjectInspector> appLeakingObjectFilters [jvm]val appLeakingObjectFilters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>Returns a list of LeakingObjectFilter suitable for apps."},{"location":"api/shark/-android-object-inspectors/-companion/app-defaults/","title":"App defaults","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/Companion/appDefaults</p>"},{"location":"api/shark/-android-object-inspectors/-companion/app-defaults/#appdefaults","title":"appDefaults","text":"<p>[jvm]\\ val appDefaults: List<ObjectInspector></p>"},{"location":"api/shark/-android-object-inspectors/-companion/app-defaults/#see-also","title":"See also","text":"AndroidObjectInspectors"},{"location":"api/shark/-android-object-inspectors/-companion/app-leaking-object-filters/","title":"App leaking object filters","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/Companion/appLeakingObjectFilters</p>"},{"location":"api/shark/-android-object-inspectors/-companion/app-leaking-object-filters/#appleakingobjectfilters","title":"appLeakingObjectFilters","text":"<p>[jvm]\\ val appLeakingObjectFilters: List<FilteringLeakingObjectFinder.LeakingObjectFilter></p> <p>Returns a list of LeakingObjectFilter suitable for apps.</p>"},{"location":"api/shark/-android-object-inspectors/-companion/create-leaking-object-filters/","title":"Create leaking object filters","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/Companion/createLeakingObjectFilters</p>"},{"location":"api/shark/-android-object-inspectors/-companion/create-leaking-object-filters/#createleakingobjectfilters","title":"createLeakingObjectFilters","text":"<p>[jvm]\\ fun createLeakingObjectFilters(inspectors: Set<AndroidObjectInspectors>): List<FilteringLeakingObjectFinder.LeakingObjectFilter></p> <p>Creates a list of LeakingObjectFilter based on the passed in AndroidObjectInspectors.</p>"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/DIALOG</p>"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/#dialog","title":"DIALOG","text":"<p>[jvm]\\ DIALOG</p>"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/DIALOG/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/EDITOR</p>"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/#editor","title":"EDITOR","text":"<p>[jvm]\\ EDITOR</p>"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/EDITOR/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/#fragment","title":"FRAGMENT","text":"<p>[jvm]\\ FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/FRAGMENT/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/INPUT_METHOD_MANAGER</p>"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/#input_method_manager","title":"INPUT_METHOD_MANAGER","text":"<p>[jvm]\\ INPUT_METHOD_MANAGER</p>"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/INPUT_METHOD_MANAGER/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/LIFECYCLE_REGISTRY</p>"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/#lifecycle_registry","title":"LIFECYCLE_REGISTRY","text":"<p>[jvm]\\ LIFECYCLE_REGISTRY</p>"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/LIFECYCLE_REGISTRY/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/LOADED_APK</p>"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/#loaded_apk","title":"LOADED_APK","text":"<p>[jvm]\\ LOADED_APK</p>"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/LOADED_APK/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MAIN_THREAD</p>"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/#main_thread","title":"MAIN_THREAD","text":"<p>[jvm]\\ MAIN_THREAD</p>"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MAIN_THREAD/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MESSAGE</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/#message","title":"MESSAGE","text":"<p>[jvm]\\ MESSAGE</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MESSAGE/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MESSAGE_QUEUE</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/#message_queue","title":"MESSAGE_QUEUE","text":"<p>[jvm]\\ MESSAGE_QUEUE</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MESSAGE_QUEUE/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MORTAR_PRESENTER</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/#mortar_presenter","title":"MORTAR_PRESENTER","text":"<p>[jvm]\\ MORTAR_PRESENTER</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MORTAR_PRESENTER/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MORTAR_SCOPE</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/#mortar_scope","title":"MORTAR_SCOPE","text":"<p>[jvm]\\ MORTAR_SCOPE</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MORTAR_SCOPE/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/OBJECT_ANIMATOR</p>"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/#object_animator","title":"OBJECT_ANIMATOR","text":"<p>[jvm]\\ OBJECT_ANIMATOR</p>"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/OBJECT_ANIMATOR/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/RECOMPOSER</p>"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/#recomposer","title":"RECOMPOSER","text":"<p>[jvm]\\ RECOMPOSER</p>"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/RECOMPOSER/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/SERVICE</p>"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/#service","title":"SERVICE","text":"<p>[jvm]\\ SERVICE</p>"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/SERVICE/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/STUB</p>"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/#stub","title":"STUB","text":"<p>[jvm]\\ STUB</p>"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/STUB/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/SUPPORT_FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/#support_fragment","title":"SUPPORT_FRAGMENT","text":"<p>[jvm]\\ SUPPORT_FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/SUPPORT_FRAGMENT/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/TOAST</p>"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/#toast","title":"TOAST","text":"<p>[jvm]\\ TOAST</p>"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/TOAST/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/VIEW</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/#view","title":"VIEW","text":"<p>[jvm]\\ VIEW</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/VIEW/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/VIEW_ROOT_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/#view_root_impl","title":"VIEW_ROOT_IMPL","text":"<p>[jvm]\\ VIEW_ROOT_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/VIEW_ROOT_IMPL/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/WINDOW</p>"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/#window","title":"WINDOW","text":"<p>[jvm]\\ WINDOW</p>"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/WINDOW/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-size-calculator/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectSizeCalculator</p>"},{"location":"api/shark/-android-object-size-calculator/#androidobjectsizecalculator","title":"AndroidObjectSizeCalculator","text":"<p>[jvm]\\ class AndroidObjectSizeCalculator(graph: HeapGraph) : DominatorTree.ObjectSizeCalculator</p>"},{"location":"api/shark/-android-object-size-calculator/#constructors","title":"Constructors","text":"AndroidObjectSizeCalculator [jvm]constructor(graph: HeapGraph)"},{"location":"api/shark/-android-object-size-calculator/#functions","title":"Functions","text":"Name Summary computeSize [jvm]open override fun computeSize(objectId: Long): Int"},{"location":"api/shark/-android-object-size-calculator/-android-object-size-calculator/","title":"android object size calculator","text":"<p>//leakcanary-repo/shark/AndroidObjectSizeCalculator/AndroidObjectSizeCalculator</p>"},{"location":"api/shark/-android-object-size-calculator/-android-object-size-calculator/#androidobjectsizecalculator","title":"AndroidObjectSizeCalculator","text":"<p>[jvm]\\ constructor(graph: HeapGraph)</p>"},{"location":"api/shark/-android-object-size-calculator/compute-size/","title":"Compute size","text":"<p>//leakcanary-repo/shark/AndroidObjectSizeCalculator/computeSize</p>"},{"location":"api/shark/-android-object-size-calculator/compute-size/#computesize","title":"computeSize","text":"<p>[jvm]\\ open override fun computeSize(objectId: Long): Int</p>"},{"location":"api/shark/-android-reference-matchers/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers</p>"},{"location":"api/shark/-android-reference-matchers/#androidreferencematchers","title":"AndroidReferenceMatchers","text":"<p>[jvm]\\ enum AndroidReferenceMatchers : Enum<AndroidReferenceMatchers> , ReferenceMatcher.ListBuilder</p> <p>AndroidReferenceMatchers values add ReferenceMatcher instances to a global list via their add method. A ReferenceMatcher is either a IgnoredReferenceMatcher or a LibraryLeakReferenceMatcher.</p> <p>AndroidReferenceMatchers is used to build the list of known references that cannot ever create leaks (via IgnoredReferenceMatcher) as well as the list of known leaks in the Android Framework and\u00a0in manufacturer specific Android implementations.</p> <p>This class is a work in progress. You can help by reporting leak traces that seem to be caused by the Android SDK, here: https://github.com/square/leakcanary/issues/new</p> <p>We filter on SDK versions and Manufacturers because many of those leaks are specific to a given manufacturer implementation, they usually share their builds across multiple models, and the leaks eventually get fixed in newer versions.</p> <p>Most app developers should use appDefaults. However, you can also use a subset of AndroidReferenceMatchers by creating an EnumSet that matches your needs and calling buildKnownReferences.</p>"},{"location":"api/shark/-android-reference-matchers/#entries","title":"Entries","text":"PERMISSION_CONTROLLER_MANAGER [jvm]PERMISSION_CONTROLLER_MANAGER IREQUEST_FINISH_CALLBACK [jvm]IREQUEST_FINISH_CALLBACK ACTIVITY_THREAD__M_NEW_ACTIVITIES [jvm]ACTIVITY_THREAD__M_NEW_ACTIVITIESSee AndroidReferenceReaders.ACTIVITY_THREAD__NEW_ACTIVITIES for more context SPAN_CONTROLLER [jvm]SPAN_CONTROLLER MEDIA_SESSION_LEGACY_HELPER__SINSTANCE [jvm]MEDIA_SESSION_LEGACY_HELPER__SINSTANCE TEXT_LINE__SCACHED [jvm]TEXT_LINE__SCACHED BLOCKING_QUEUE [jvm]BLOCKING_QUEUE INPUT_METHOD_MANAGER_IS_TERRIBLE [jvm]INPUT_METHOD_MANAGER_IS_TERRIBLE INPUT_MANAGER__M_LATE_INIT_CONTEXT [jvm]INPUT_MANAGER__M_LATE_INIT_CONTEXT LAYOUT_TRANSITION [jvm]LAYOUT_TRANSITION SPELL_CHECKER_SESSION [jvm]SPELL_CHECKER_SESSION SPELL_CHECKER [jvm]SPELL_CHECKER ACTIVITY_CHOOSE_MODEL [jvm]ACTIVITY_CHOOSE_MODEL MEDIA_PROJECTION_CALLBACK [jvm]MEDIA_PROJECTION_CALLBACK SPEECH_RECOGNIZER [jvm]SPEECH_RECOGNIZER ACCOUNT_MANAGER__AMS_TASK__RESPONSE [jvm]ACCOUNT_MANAGER__AMS_TASK__RESPONSE MEDIA_SCANNER_CONNECTION [jvm]MEDIA_SCANNER_CONNECTION USER_MANAGER__SINSTANCE [jvm]USER_MANAGER__SINSTANCE APP_WIDGET_HOST_CALLBACKS [jvm]APP_WIDGET_HOST_CALLBACKS AUDIO_MANAGER [jvm]AUDIO_MANAGER EDITTEXT_BLINK_MESSAGEQUEUE [jvm]EDITTEXT_BLINK_MESSAGEQUEUE CONNECTIVITY_MANAGER__SINSTANCE [jvm]CONNECTIVITY_MANAGER__SINSTANCE ACCESSIBILITY_NODE_INFO__MORIGINALTEXT [jvm]ACCESSIBILITY_NODE_INFO__MORIGINALTEXT ASSIST_STRUCTURE [jvm]ASSIST_STRUCTURE ACCESSIBILITY_ITERATORS [jvm]ACCESSIBILITY_ITERATORS BIOMETRIC_PROMPT [jvm]BIOMETRIC_PROMPT MAGNIFIER [jvm]MAGNIFIER BACKDROP_FRAME_RENDERER__MDECORVIEW [jvm]BACKDROP_FRAME_RENDERER__MDECORVIEW VIEWLOCATIONHOLDER_ROOT [jvm]VIEWLOCATIONHOLDER_ROOT ACCESSIBILITY_NODE_ID_MANAGER [jvm]ACCESSIBILITY_NODE_ID_MANAGER TEXT_TO_SPEECH [jvm]TEXT_TO_SPEECH CONTROLLED_INPUT_CONNECTION_WRAPPER [jvm]CONTROLLED_INPUT_CONNECTION_WRAPPER TOAST_TN [jvm]TOAST_TN APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY [jvm]APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY COMPANION_DEVICE_SERVICE__STUB [jvm]COMPANION_DEVICE_SERVICE__STUB RENDER_NODE_ANIMATOR [jvm]RENDER_NODE_ANIMATOR PLAYER_BASE [jvm]PLAYER_BASE WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB [jvm]WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB CONNECTIVITY_MANAGER_CALLBACK_HANDLER [jvm]CONNECTIVITY_MANAGER_CALLBACK_HANDLER HOST_ADPU_SERVICE_MSG_HANDLER [jvm]HOST_ADPU_SERVICE_MSG_HANDLER APP_OPS_MANAGER__CALLBACK_STUB [jvm]APP_OPS_MANAGER__CALLBACK_STUB VIEW_GROUP__M_PRE_SORTED_CHILDREN [jvm]VIEW_GROUP__M_PRE_SORTED_CHILDREN VIEW_GROUP__M_CURRENT_DRAG_CHILD [jvm]VIEW_GROUP__M_CURRENT_DRAG_CHILD VIEW_TOOLTIP_CALLBACK [jvm]VIEW_TOOLTIP_CALLBACK ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW [jvm]ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW ANIMATION_HANDLER__ANIMATOR_REQUESTORS [jvm]ANIMATION_HANDLER__ANIMATOR_REQUESTORS FLIPPER__APPLICATION_DESCRIPTOR [jvm]FLIPPER__APPLICATION_DESCRIPTOR AW_CONTENTS__A0 [jvm]AW_CONTENTS__A0 AW_CONTENTS_POSTED_CALLBACK [jvm]AW_CONTENTS_POSTED_CALLBACK JOB_SERVICE [jvm]JOB_SERVICE DREAM_SERVICE [jvm]DREAM_SERVICE UI_MODE_MANAGER [jvm]UI_MODE_MANAGER SPEN_GESTURE_MANAGER [jvm]SPEN_GESTURE_MANAGER CLIPBOARD_UI_MANAGER__SINSTANCE [jvm]CLIPBOARD_UI_MANAGER__SINSTANCE SEM_CLIPBOARD_MANAGER__MCONTEXT [jvm]SEM_CLIPBOARD_MANAGER__MCONTEXT CLIPBOARD_EX_MANAGER [jvm]CLIPBOARD_EX_MANAGER SEM_EMERGENCY_MANAGER__MCONTEXT [jvm]SEM_EMERGENCY_MANAGER__MCONTEXT SEM_PERSONA_MANAGER [jvm]SEM_PERSONA_MANAGER SEM_APP_ICON_SOLUTION [jvm]SEM_APP_ICON_SOLUTION AW_RESOURCE__SRESOURCES [jvm]AW_RESOURCE__SRESOURCES TEXT_VIEW__MLAST_HOVERED_VIEW [jvm]TEXT_VIEW__MLAST_HOVERED_VIEW PERSONA_MANAGER [jvm]PERSONA_MANAGER RESOURCES__MCONTEXT [jvm]RESOURCES__MCONTEXT VIEW_CONFIGURATION__MCONTEXT [jvm]VIEW_CONFIGURATION__MCONTEXT AUDIO_MANAGER__MCONTEXT_STATIC [jvm]AUDIO_MANAGER__MCONTEXT_STATIC ACTIVITY_MANAGER_MCONTEXT [jvm]ACTIVITY_MANAGER_MCONTEXT STATIC_MTARGET_VIEW [jvm]STATIC_MTARGET_VIEW MULTI_WINDOW_DECOR_SUPPORT__MWINDOW [jvm]MULTI_WINDOW_DECOR_SUPPORT__MWINDOW IMM_CURRENT_INPUT_CONNECTION [jvm]IMM_CURRENT_INPUT_CONNECTION GESTURE_BOOST_MANAGER [jvm]GESTURE_BOOST_MANAGER BUBBLE_POPUP_HELPER__SHELPER [jvm]BUBBLE_POPUP_HELPER__SHELPER LGCONTEXT__MCONTEXT [jvm]LGCONTEXT__MCONTEXT SMART_COVER_MANAGER [jvm]SMART_COVER_MANAGER IMM_LAST_FOCUS_VIEW [jvm]IMM_LAST_FOCUS_VIEW MAPPER_CLIENT [jvm]MAPPER_CLIENT SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL [jvm]SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL INSTRUMENTATION_RECOMMEND_ACTIVITY [jvm]INSTRUMENTATION_RECOMMEND_ACTIVITY DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER [jvm]DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER EXTENDED_STATUS_BAR_MANAGER [jvm]EXTENDED_STATUS_BAR_MANAGER OEM_SCENE_CALL_BLOCKER [jvm]OEM_SCENE_CALL_BLOCKER PERF_MONITOR_LAST_CALLBACK [jvm]PERF_MONITOR_LAST_CALLBACK RAZER_TEXT_KEY_LISTENER__MCONTEXT [jvm]RAZER_TEXT_KEY_LISTENER__MCONTEXT XIAMI__RESOURCES_IMPL [jvm]XIAMI__RESOURCES_IMPL REFERENCES [jvm]REFERENCES FINALIZER_WATCHDOG_DAEMON [jvm]FINALIZER_WATCHDOG_DAEMON MAIN [jvm]MAIN LEAK_CANARY_THREAD [jvm]LEAK_CANARY_THREAD LEAK_CANARY_HEAP_DUMPER [jvm]LEAK_CANARY_HEAP_DUMPER LEAK_CANARY_INTERNAL [jvm]LEAK_CANARY_INTERNAL EVENT_RECEIVER__MMESSAGE_QUEUE [jvm]EVENT_RECEIVER__MMESSAGE_QUEUE"},{"location":"api/shark/-android-reference-matchers/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-reference-matchers/#functions","title":"Functions","text":"Name Summary add [jvm]abstract fun add(references: MutableList<ReferenceMatcher>) valueOf [jvm]fun valueOf(value: String): AndroidReferenceMatchersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<AndroidReferenceMatchers>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-android-reference-matchers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/valueOf</p>"},{"location":"api/shark/-android-reference-matchers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): AndroidReferenceMatchers</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-android-reference-matchers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-android-reference-matchers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/values</p>"},{"location":"api/shark/-android-reference-matchers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<AndroidReferenceMatchers></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_ITERATORS</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/#accessibility_iterators","title":"ACCESSIBILITY_ITERATORS","text":"<p>[jvm]\\ ACCESSIBILITY_ITERATORS</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_ITERATORS/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_NODE_ID_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/#accessibility_node_id_manager","title":"ACCESSIBILITY_NODE_ID_MANAGER","text":"<p>[jvm]\\ ACCESSIBILITY_NODE_ID_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_NODE_ID_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_NODE_INFO__MORIGINALTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/#accessibility_node_info__moriginaltext","title":"ACCESSIBILITY_NODE_INFO__MORIGINALTEXT","text":"<p>[jvm]\\ ACCESSIBILITY_NODE_INFO__MORIGINALTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_NODE_INFO__MORIGINALTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCOUNT_MANAGER__AMS_TASK__RESPONSE</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/#account_manager__ams_task__response","title":"ACCOUNT_MANAGER__AMS_TASK__RESPONSE","text":"<p>[jvm]\\ ACCOUNT_MANAGER__AMS_TASK__RESPONSE</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCOUNT_MANAGER__AMS_TASK__RESPONSE/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_CHOOSE_MODEL</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/#activity_choose_model","title":"ACTIVITY_CHOOSE_MODEL","text":"<p>[jvm]\\ ACTIVITY_CHOOSE_MODEL</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_CHOOSE_MODEL/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_MANAGER_MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/#activity_manager_mcontext","title":"ACTIVITY_MANAGER_MCONTEXT","text":"<p>[jvm]\\ ACTIVITY_MANAGER_MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_MANAGER_MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_THREAD__M_NEW_ACTIVITIES</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/#activity_thread__m_new_activities","title":"ACTIVITY_THREAD__M_NEW_ACTIVITIES","text":"<p>[jvm]\\ ACTIVITY_THREAD__M_NEW_ACTIVITIES</p> <p>See AndroidReferenceReaders.ACTIVITY_THREAD__NEW_ACTIVITIES for more context</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_THREAD__M_NEW_ACTIVITIES/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/#activity_transition_state__m_exiting_to_view","title":"ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW","text":"<p>[jvm]\\ ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ANIMATION_HANDLER__ANIMATOR_REQUESTORS</p>"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/#animation_handler__animator_requestors","title":"ANIMATION_HANDLER__ANIMATOR_REQUESTORS","text":"<p>[jvm]\\ ANIMATION_HANDLER__ANIMATOR_REQUESTORS</p>"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ANIMATION_HANDLER__ANIMATOR_REQUESTORS/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/#application_package_manager__has_system_feature_query","title":"APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY","text":"<p>[jvm]\\ APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APP_OPS_MANAGER__CALLBACK_STUB</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/#app_ops_manager__callback_stub","title":"APP_OPS_MANAGER__CALLBACK_STUB","text":"<p>[jvm]\\ APP_OPS_MANAGER__CALLBACK_STUB</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APP_OPS_MANAGER__CALLBACK_STUB/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APP_WIDGET_HOST_CALLBACKS</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/#app_widget_host_callbacks","title":"APP_WIDGET_HOST_CALLBACKS","text":"<p>[jvm]\\ APP_WIDGET_HOST_CALLBACKS</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APP_WIDGET_HOST_CALLBACKS/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ASSIST_STRUCTURE</p>"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/#assist_structure","title":"ASSIST_STRUCTURE","text":"<p>[jvm]\\ ASSIST_STRUCTURE</p>"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ASSIST_STRUCTURE/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AUDIO_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/#audio_manager","title":"AUDIO_MANAGER","text":"<p>[jvm]\\ AUDIO_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AUDIO_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AUDIO_MANAGER__MCONTEXT_STATIC</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/#audio_manager__mcontext_static","title":"AUDIO_MANAGER__MCONTEXT_STATIC","text":"<p>[jvm]\\ AUDIO_MANAGER__MCONTEXT_STATIC</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AUDIO_MANAGER__MCONTEXT_STATIC/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_CONTENTS_POSTED_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/#aw_contents_posted_callback","title":"AW_CONTENTS_POSTED_CALLBACK","text":"<p>[jvm]\\ AW_CONTENTS_POSTED_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_CONTENTS_POSTED_CALLBACK/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_CONTENTS__A0</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/#aw_contents__a0","title":"AW_CONTENTS__A0","text":"<p>[jvm]\\ AW_CONTENTS__A0</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_CONTENTS__A0/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_RESOURCE__SRESOURCES</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/#aw_resource__sresources","title":"AW_RESOURCE__SRESOURCES","text":"<p>[jvm]\\ AW_RESOURCE__SRESOURCES</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_RESOURCE__SRESOURCES/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BACKDROP_FRAME_RENDERER__MDECORVIEW</p>"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/#backdrop_frame_renderer__mdecorview","title":"BACKDROP_FRAME_RENDERER__MDECORVIEW","text":"<p>[jvm]\\ BACKDROP_FRAME_RENDERER__MDECORVIEW</p>"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BACKDROP_FRAME_RENDERER__MDECORVIEW/add</p>"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BIOMETRIC_PROMPT</p>"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/#biometric_prompt","title":"BIOMETRIC_PROMPT","text":"<p>[jvm]\\ BIOMETRIC_PROMPT</p>"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BIOMETRIC_PROMPT/add</p>"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BLOCKING_QUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/#blocking_queue","title":"BLOCKING_QUEUE","text":"<p>[jvm]\\ BLOCKING_QUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BLOCKING_QUEUE/add</p>"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BUBBLE_POPUP_HELPER__SHELPER</p>"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/#bubble_popup_helper__shelper","title":"BUBBLE_POPUP_HELPER__SHELPER","text":"<p>[jvm]\\ BUBBLE_POPUP_HELPER__SHELPER</p>"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BUBBLE_POPUP_HELPER__SHELPER/add</p>"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CLIPBOARD_EX_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/#clipboard_ex_manager","title":"CLIPBOARD_EX_MANAGER","text":"<p>[jvm]\\ CLIPBOARD_EX_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CLIPBOARD_EX_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CLIPBOARD_UI_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#clipboard_ui_manager__sinstance","title":"CLIPBOARD_UI_MANAGER__SINSTANCE","text":"<p>[jvm]\\ CLIPBOARD_UI_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CLIPBOARD_UI_MANAGER__SINSTANCE/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/COMPANION_DEVICE_SERVICE__STUB</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/#companion_device_service__stub","title":"COMPANION_DEVICE_SERVICE__STUB","text":"<p>[jvm]\\ COMPANION_DEVICE_SERVICE__STUB</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/COMPANION_DEVICE_SERVICE__STUB/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONNECTIVITY_MANAGER_CALLBACK_HANDLER</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/#connectivity_manager_callback_handler","title":"CONNECTIVITY_MANAGER_CALLBACK_HANDLER","text":"<p>[jvm]\\ CONNECTIVITY_MANAGER_CALLBACK_HANDLER</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONNECTIVITY_MANAGER_CALLBACK_HANDLER/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONNECTIVITY_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#connectivity_manager__sinstance","title":"CONNECTIVITY_MANAGER__SINSTANCE","text":"<p>[jvm]\\ CONNECTIVITY_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONNECTIVITY_MANAGER__SINSTANCE/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONTROLLED_INPUT_CONNECTION_WRAPPER</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/#controlled_input_connection_wrapper","title":"CONTROLLED_INPUT_CONNECTION_WRAPPER","text":"<p>[jvm]\\ CONTROLLED_INPUT_CONNECTION_WRAPPER</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONTROLLED_INPUT_CONNECTION_WRAPPER/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion</p>"},{"location":"api/shark/-android-reference-matchers/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-reference-matchers/-companion/#properties","title":"Properties","text":"Name Summary appDefaults [jvm]@JvmStaticval appDefaults: List<ReferenceMatcher> HMD_GLOBAL [jvm]const val HMD_GLOBAL: String HUAWEI [jvm]const val HUAWEI: String ignoredReferencesOnly [jvm]@JvmStaticval ignoredReferencesOnly: List<ReferenceMatcher>Returns a list of ReferenceMatcher that only contains IgnoredReferenceMatcher and no LibraryLeakReferenceMatcher. INFINIX [jvm]const val INFINIX: String LENOVO [jvm]const val LENOVO: String LG [jvm]const val LG: String MEIZU [jvm]const val MEIZU: String MOTOROLA [jvm]const val MOTOROLA: String NVIDIA [jvm]const val NVIDIA: String ONE_PLUS [jvm]const val ONE_PLUS: String RAZER [jvm]const val RAZER: String REALME [jvm]const val REALME: String SAMSUNG [jvm]const val SAMSUNG: String SHARP [jvm]const val SHARP: String TES [jvm]const val TES: String VIVO [jvm]const val VIVO: String XIAOMI [jvm]const val XIAOMI: String"},{"location":"api/shark/-android-reference-matchers/-companion/-h-m-d_-g-l-o-b-a-l/","title":"h m d g l o b a l","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/HMD_GLOBAL</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-h-m-d_-g-l-o-b-a-l/#hmd_global","title":"HMD_GLOBAL","text":"<p>[jvm]\\ const val HMD_GLOBAL: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-h-u-a-w-e-i/","title":"h u a w e i","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/HUAWEI</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-h-u-a-w-e-i/#huawei","title":"HUAWEI","text":"<p>[jvm]\\ const val HUAWEI: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-i-n-f-i-n-i-x/","title":"i n f i n i x","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/INFINIX</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-i-n-f-i-n-i-x/#infinix","title":"INFINIX","text":"<p>[jvm]\\ const val INFINIX: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-l-e-n-o-v-o/","title":"l e n o v o","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/LENOVO</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-l-e-n-o-v-o/#lenovo","title":"LENOVO","text":"<p>[jvm]\\ const val LENOVO: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-l-g/","title":"l g","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/LG</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-l-g/#lg","title":"LG","text":"<p>[jvm]\\ const val LG: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-m-e-i-z-u/","title":"m e i z u","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/MEIZU</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-m-e-i-z-u/#meizu","title":"MEIZU","text":"<p>[jvm]\\ const val MEIZU: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-m-o-t-o-r-o-l-a/","title":"m o t o r o l a","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/MOTOROLA</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-m-o-t-o-r-o-l-a/#motorola","title":"MOTOROLA","text":"<p>[jvm]\\ const val MOTOROLA: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-n-v-i-d-i-a/","title":"n v i d i a","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/NVIDIA</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-n-v-i-d-i-a/#nvidia","title":"NVIDIA","text":"<p>[jvm]\\ const val NVIDIA: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-o-n-e_-p-l-u-s/","title":"o n e p l u s","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/ONE_PLUS</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-o-n-e_-p-l-u-s/#one_plus","title":"ONE_PLUS","text":"<p>[jvm]\\ const val ONE_PLUS: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-r-a-z-e-r/","title":"r a z e r","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/RAZER</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-r-a-z-e-r/#razer","title":"RAZER","text":"<p>[jvm]\\ const val RAZER: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-r-e-a-l-m-e/","title":"r e a l m e","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/REALME</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-r-e-a-l-m-e/#realme","title":"REALME","text":"<p>[jvm]\\ const val REALME: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-s-a-m-s-u-n-g/","title":"s a m s u n g","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/SAMSUNG</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-s-a-m-s-u-n-g/#samsung","title":"SAMSUNG","text":"<p>[jvm]\\ const val SAMSUNG: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-s-h-a-r-p/","title":"s h a r p","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/SHARP</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-s-h-a-r-p/#sharp","title":"SHARP","text":"<p>[jvm]\\ const val SHARP: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-t-e-s/","title":"t e s","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/TES</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-t-e-s/#tes","title":"TES","text":"<p>[jvm]\\ const val TES: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-v-i-v-o/","title":"v i v o","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/VIVO</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-v-i-v-o/#vivo","title":"VIVO","text":"<p>[jvm]\\ const val VIVO: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-x-i-a-o-m-i/","title":"x i a o m i","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/XIAOMI</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-x-i-a-o-m-i/#xiaomi","title":"XIAOMI","text":"<p>[jvm]\\ const val XIAOMI: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/app-defaults/","title":"App defaults","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/appDefaults</p>"},{"location":"api/shark/-android-reference-matchers/-companion/app-defaults/#appdefaults","title":"appDefaults","text":"<p>[jvm]\\</p> <p>@JvmStatic</p> <p>val appDefaults: List<ReferenceMatcher></p>"},{"location":"api/shark/-android-reference-matchers/-companion/app-defaults/#see-also","title":"See also","text":"AndroidReferenceMatchers"},{"location":"api/shark/-android-reference-matchers/-companion/ignored-references-only/","title":"Ignored references only","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/ignoredReferencesOnly</p>"},{"location":"api/shark/-android-reference-matchers/-companion/ignored-references-only/#ignoredreferencesonly","title":"ignoredReferencesOnly","text":"<p>[jvm]\\</p> <p>@JvmStatic</p> <p>val ignoredReferencesOnly: List<ReferenceMatcher></p> <p>Returns a list of ReferenceMatcher that only contains IgnoredReferenceMatcher and no LibraryLeakReferenceMatcher.</p>"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER</p>"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/#device_policy_manager__settings_observer","title":"DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER","text":"<p>[jvm]\\ DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER</p>"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER/add</p>"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/DREAM_SERVICE</p>"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/#dream_service","title":"DREAM_SERVICE","text":"<p>[jvm]\\ DREAM_SERVICE</p>"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/DREAM_SERVICE/add</p>"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EDITTEXT_BLINK_MESSAGEQUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/#edittext_blink_messagequeue","title":"EDITTEXT_BLINK_MESSAGEQUEUE","text":"<p>[jvm]\\ EDITTEXT_BLINK_MESSAGEQUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EDITTEXT_BLINK_MESSAGEQUEUE/add</p>"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EVENT_RECEIVER__MMESSAGE_QUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/#event_receiver__mmessage_queue","title":"EVENT_RECEIVER__MMESSAGE_QUEUE","text":"<p>[jvm]\\ EVENT_RECEIVER__MMESSAGE_QUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EVENT_RECEIVER__MMESSAGE_QUEUE/add</p>"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EXTENDED_STATUS_BAR_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/#extended_status_bar_manager","title":"EXTENDED_STATUS_BAR_MANAGER","text":"<p>[jvm]\\ EXTENDED_STATUS_BAR_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EXTENDED_STATUS_BAR_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/FINALIZER_WATCHDOG_DAEMON</p>"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#finalizer_watchdog_daemon","title":"FINALIZER_WATCHDOG_DAEMON","text":"<p>[jvm]\\ FINALIZER_WATCHDOG_DAEMON</p>"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/FINALIZER_WATCHDOG_DAEMON/add</p>"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/FLIPPER__APPLICATION_DESCRIPTOR</p>"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/#flipper__application_descriptor","title":"FLIPPER__APPLICATION_DESCRIPTOR","text":"<p>[jvm]\\ FLIPPER__APPLICATION_DESCRIPTOR</p>"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/FLIPPER__APPLICATION_DESCRIPTOR/add</p>"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/GESTURE_BOOST_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/#gesture_boost_manager","title":"GESTURE_BOOST_MANAGER","text":"<p>[jvm]\\ GESTURE_BOOST_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/GESTURE_BOOST_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/HOST_ADPU_SERVICE_MSG_HANDLER</p>"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/#host_adpu_service_msg_handler","title":"HOST_ADPU_SERVICE_MSG_HANDLER","text":"<p>[jvm]\\ HOST_ADPU_SERVICE_MSG_HANDLER</p>"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/HOST_ADPU_SERVICE_MSG_HANDLER/add</p>"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IMM_CURRENT_INPUT_CONNECTION</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/#imm_current_input_connection","title":"IMM_CURRENT_INPUT_CONNECTION","text":"<p>[jvm]\\ IMM_CURRENT_INPUT_CONNECTION</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IMM_CURRENT_INPUT_CONNECTION/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IMM_LAST_FOCUS_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/#imm_last_focus_view","title":"IMM_LAST_FOCUS_VIEW","text":"<p>[jvm]\\ IMM_LAST_FOCUS_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IMM_LAST_FOCUS_VIEW/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INPUT_MANAGER__M_LATE_INIT_CONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/#input_manager__m_late_init_context","title":"INPUT_MANAGER__M_LATE_INIT_CONTEXT","text":"<p>[jvm]\\ INPUT_MANAGER__M_LATE_INIT_CONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INPUT_MANAGER__M_LATE_INIT_CONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INPUT_METHOD_MANAGER_IS_TERRIBLE</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/#input_method_manager_is_terrible","title":"INPUT_METHOD_MANAGER_IS_TERRIBLE","text":"<p>[jvm]\\ INPUT_METHOD_MANAGER_IS_TERRIBLE</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INPUT_METHOD_MANAGER_IS_TERRIBLE/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INSTRUMENTATION_RECOMMEND_ACTIVITY</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/#instrumentation_recommend_activity","title":"INSTRUMENTATION_RECOMMEND_ACTIVITY","text":"<p>[jvm]\\ INSTRUMENTATION_RECOMMEND_ACTIVITY</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INSTRUMENTATION_RECOMMEND_ACTIVITY/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IREQUEST_FINISH_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/#irequest_finish_callback","title":"IREQUEST_FINISH_CALLBACK","text":"<p>[jvm]\\ IREQUEST_FINISH_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IREQUEST_FINISH_CALLBACK/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/JOB_SERVICE</p>"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/#job_service","title":"JOB_SERVICE","text":"<p>[jvm]\\ JOB_SERVICE</p>"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/JOB_SERVICE/add</p>"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LAYOUT_TRANSITION</p>"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/#layout_transition","title":"LAYOUT_TRANSITION","text":"<p>[jvm]\\ LAYOUT_TRANSITION</p>"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LAYOUT_TRANSITION/add</p>"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_HEAP_DUMPER</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/#leak_canary_heap_dumper","title":"LEAK_CANARY_HEAP_DUMPER","text":"<p>[jvm]\\ LEAK_CANARY_HEAP_DUMPER</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_HEAP_DUMPER/add</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_INTERNAL</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/#leak_canary_internal","title":"LEAK_CANARY_INTERNAL","text":"<p>[jvm]\\ LEAK_CANARY_INTERNAL</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_INTERNAL/add</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_THREAD</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/#leak_canary_thread","title":"LEAK_CANARY_THREAD","text":"<p>[jvm]\\ LEAK_CANARY_THREAD</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_THREAD/add</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LGCONTEXT__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/#lgcontext__mcontext","title":"LGCONTEXT__MCONTEXT","text":"<p>[jvm]\\ LGCONTEXT__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LGCONTEXT__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAGNIFIER</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/#magnifier","title":"MAGNIFIER","text":"<p>[jvm]\\ MAGNIFIER</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAGNIFIER/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAIN</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/#main","title":"MAIN","text":"<p>[jvm]\\ MAIN</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAIN/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAPPER_CLIENT</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/#mapper_client","title":"MAPPER_CLIENT","text":"<p>[jvm]\\ MAPPER_CLIENT</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAPPER_CLIENT/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_PROJECTION_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/#media_projection_callback","title":"MEDIA_PROJECTION_CALLBACK","text":"<p>[jvm]\\ MEDIA_PROJECTION_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_PROJECTION_CALLBACK/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_SCANNER_CONNECTION</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/#media_scanner_connection","title":"MEDIA_SCANNER_CONNECTION","text":"<p>[jvm]\\ MEDIA_SCANNER_CONNECTION</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_SCANNER_CONNECTION/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_SESSION_LEGACY_HELPER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/#media_session_legacy_helper__sinstance","title":"MEDIA_SESSION_LEGACY_HELPER__SINSTANCE","text":"<p>[jvm]\\ MEDIA_SESSION_LEGACY_HELPER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_SESSION_LEGACY_HELPER__SINSTANCE/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MULTI_WINDOW_DECOR_SUPPORT__MWINDOW</p>"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/#multi_window_decor_support__mwindow","title":"MULTI_WINDOW_DECOR_SUPPORT__MWINDOW","text":"<p>[jvm]\\ MULTI_WINDOW_DECOR_SUPPORT__MWINDOW</p>"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MULTI_WINDOW_DECOR_SUPPORT__MWINDOW/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/OEM_SCENE_CALL_BLOCKER</p>"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/#oem_scene_call_blocker","title":"OEM_SCENE_CALL_BLOCKER","text":"<p>[jvm]\\ OEM_SCENE_CALL_BLOCKER</p>"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/OEM_SCENE_CALL_BLOCKER/add</p>"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERF_MONITOR_LAST_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/#perf_monitor_last_callback","title":"PERF_MONITOR_LAST_CALLBACK","text":"<p>[jvm]\\ PERF_MONITOR_LAST_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERF_MONITOR_LAST_CALLBACK/add</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERMISSION_CONTROLLER_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/#permission_controller_manager","title":"PERMISSION_CONTROLLER_MANAGER","text":"<p>[jvm]\\ PERMISSION_CONTROLLER_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERMISSION_CONTROLLER_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERSONA_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#persona_manager","title":"PERSONA_MANAGER","text":"<p>[jvm]\\ PERSONA_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERSONA_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PLAYER_BASE</p>"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/#player_base","title":"PLAYER_BASE","text":"<p>[jvm]\\ PLAYER_BASE</p>"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PLAYER_BASE/add</p>"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RAZER_TEXT_KEY_LISTENER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/#razer_text_key_listener__mcontext","title":"RAZER_TEXT_KEY_LISTENER__MCONTEXT","text":"<p>[jvm]\\ RAZER_TEXT_KEY_LISTENER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RAZER_TEXT_KEY_LISTENER__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/REFERENCES</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#references","title":"REFERENCES","text":"<p>[jvm]\\ REFERENCES</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/REFERENCES/add</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RENDER_NODE_ANIMATOR</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/#render_node_animator","title":"RENDER_NODE_ANIMATOR","text":"<p>[jvm]\\ RENDER_NODE_ANIMATOR</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RENDER_NODE_ANIMATOR/add</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RESOURCES__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/#resources__mcontext","title":"RESOURCES__MCONTEXT","text":"<p>[jvm]\\ RESOURCES__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RESOURCES__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_APP_ICON_SOLUTION</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/#sem_app_icon_solution","title":"SEM_APP_ICON_SOLUTION","text":"<p>[jvm]\\ SEM_APP_ICON_SOLUTION</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_APP_ICON_SOLUTION/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_CLIPBOARD_MANAGER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#sem_clipboard_manager__mcontext","title":"SEM_CLIPBOARD_MANAGER__MCONTEXT","text":"<p>[jvm]\\ SEM_CLIPBOARD_MANAGER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_CLIPBOARD_MANAGER__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_EMERGENCY_MANAGER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#sem_emergency_manager__mcontext","title":"SEM_EMERGENCY_MANAGER__MCONTEXT","text":"<p>[jvm]\\ SEM_EMERGENCY_MANAGER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_EMERGENCY_MANAGER__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_PERSONA_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#sem_persona_manager","title":"SEM_PERSONA_MANAGER","text":"<p>[jvm]\\ SEM_PERSONA_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_PERSONA_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SMART_COVER_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/#smart_cover_manager","title":"SMART_COVER_MANAGER","text":"<p>[jvm]\\ SMART_COVER_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SMART_COVER_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPAN_CONTROLLER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/#span_controller","title":"SPAN_CONTROLLER","text":"<p>[jvm]\\ SPAN_CONTROLLER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPAN_CONTROLLER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPEECH_RECOGNIZER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/#speech_recognizer","title":"SPEECH_RECOGNIZER","text":"<p>[jvm]\\ SPEECH_RECOGNIZER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPEECH_RECOGNIZER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPELL_CHECKER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/#spell_checker","title":"SPELL_CHECKER","text":"<p>[jvm]\\ SPELL_CHECKER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPELL_CHECKER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPELL_CHECKER_SESSION</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/#spell_checker_session","title":"SPELL_CHECKER_SESSION","text":"<p>[jvm]\\ SPELL_CHECKER_SESSION</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPELL_CHECKER_SESSION/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPEN_GESTURE_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/#spen_gesture_manager","title":"SPEN_GESTURE_MANAGER","text":"<p>[jvm]\\ SPEN_GESTURE_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPEN_GESTURE_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/STATIC_MTARGET_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/#static_mtarget_view","title":"STATIC_MTARGET_VIEW","text":"<p>[jvm]\\ STATIC_MTARGET_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/STATIC_MTARGET_VIEW/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL</p>"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/#system_sensor_manager__mappcontextimpl","title":"SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL","text":"<p>[jvm]\\ SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL</p>"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_LINE__SCACHED</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/#text_line__scached","title":"TEXT_LINE__SCACHED","text":"<p>[jvm]\\ TEXT_LINE__SCACHED</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_LINE__SCACHED/add</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_TO_SPEECH</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/#text_to_speech","title":"TEXT_TO_SPEECH","text":"<p>[jvm]\\ TEXT_TO_SPEECH</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_TO_SPEECH/add</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_VIEW__MLAST_HOVERED_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/#text_view__mlast_hovered_view","title":"TEXT_VIEW__MLAST_HOVERED_VIEW","text":"<p>[jvm]\\ TEXT_VIEW__MLAST_HOVERED_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_VIEW__MLAST_HOVERED_VIEW/add</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TOAST_TN</p>"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/#toast_tn","title":"TOAST_TN","text":"<p>[jvm]\\ TOAST_TN</p>"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TOAST_TN/add</p>"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/UI_MODE_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/#ui_mode_manager","title":"UI_MODE_MANAGER","text":"<p>[jvm]\\ UI_MODE_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/UI_MODE_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/USER_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#user_manager__sinstance","title":"USER_MANAGER__SINSTANCE","text":"<p>[jvm]\\ USER_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/USER_MANAGER__SINSTANCE/add</p>"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEWLOCATIONHOLDER_ROOT</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/#viewlocationholder_root","title":"VIEWLOCATIONHOLDER_ROOT","text":"<p>[jvm]\\ VIEWLOCATIONHOLDER_ROOT</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEWLOCATIONHOLDER_ROOT/add</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_CONFIGURATION__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/#view_configuration__mcontext","title":"VIEW_CONFIGURATION__MCONTEXT","text":"<p>[jvm]\\ VIEW_CONFIGURATION__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_CONFIGURATION__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_GROUP__M_CURRENT_DRAG_CHILD</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/#view_group__m_current_drag_child","title":"VIEW_GROUP__M_CURRENT_DRAG_CHILD","text":"<p>[jvm]\\ VIEW_GROUP__M_CURRENT_DRAG_CHILD</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_GROUP__M_CURRENT_DRAG_CHILD/add</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_GROUP__M_PRE_SORTED_CHILDREN</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/#view_group__m_pre_sorted_children","title":"VIEW_GROUP__M_PRE_SORTED_CHILDREN","text":"<p>[jvm]\\ VIEW_GROUP__M_PRE_SORTED_CHILDREN</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_GROUP__M_PRE_SORTED_CHILDREN/add</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_TOOLTIP_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/#view_tooltip_callback","title":"VIEW_TOOLTIP_CALLBACK","text":"<p>[jvm]\\ VIEW_TOOLTIP_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_TOOLTIP_CALLBACK/add</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB</p>"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/#window_on_back_invoked_dispatcher__stub","title":"WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB","text":"<p>[jvm]\\ WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB</p>"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB/add</p>"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/XIAMI__RESOURCES_IMPL</p>"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/#xiami__resources_impl","title":"XIAMI__RESOURCES_IMPL","text":"<p>[jvm]\\ XIAMI__RESOURCES_IMPL</p>"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/XIAMI__RESOURCES_IMPL/add</p>"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-reader-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaderFactory</p>"},{"location":"api/shark/-android-reference-reader-factory/#androidreferencereaderfactory","title":"AndroidReferenceReaderFactory","text":"<p>[jvm]\\ class AndroidReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject> </p> <p>Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, creating additional virtual instance reference based on known Android classes.</p>"},{"location":"api/shark/-android-reference-reader-factory/#constructors","title":"Constructors","text":"AndroidReferenceReaderFactory [jvm]constructor(referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-reader-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject>"},{"location":"api/shark/-android-reference-reader-factory/-android-reference-reader-factory/","title":"android reference reader factory","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaderFactory/AndroidReferenceReaderFactory</p>"},{"location":"api/shark/-android-reference-reader-factory/-android-reference-reader-factory/#androidreferencereaderfactory","title":"AndroidReferenceReaderFactory","text":"<p>[jvm]\\ constructor(referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-reader-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaderFactory/createFor</p>"},{"location":"api/shark/-android-reference-reader-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject></p>"},{"location":"api/shark/-android-reference-readers/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders</p>"},{"location":"api/shark/-android-reference-readers/#androidreferencereaders","title":"AndroidReferenceReaders","text":"<p>[jvm]\\ enum AndroidReferenceReaders : Enum<AndroidReferenceReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactory</p>"},{"location":"api/shark/-android-reference-readers/#entries","title":"Entries","text":"ACTIVITY_THREAD__NEW_ACTIVITIES [jvm]ACTIVITY_THREAD__NEW_ACTIVITIESActivityThread.mNewActivity is a linked list of ActivityClientRecord that keeps track of activities after they were resumed, until the main thread is idle. This is used to report analytics to system_server about how long it took for the main thread to settle after resuming an activity. Unfortunately, if the main thread never becomes idle, all these new activities leak in memory. MESSAGE_QUEUE [jvm]MESSAGE_QUEUE ANIMATOR_WEAK_REF_SUCKS [jvm]ANIMATOR_WEAK_REF_SUCKS SAFE_ITERABLE_MAP [jvm]SAFE_ITERABLE_MAP ARRAY_SET [jvm]ARRAY_SET"},{"location":"api/shark/-android-reference-readers/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-reference-readers/#functions","title":"Functions","text":"Name Summary create [jvm]abstract fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader? valueOf [jvm]fun valueOf(value: String): AndroidReferenceReadersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<AndroidReferenceReaders>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-android-reference-readers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/valueOf</p>"},{"location":"api/shark/-android-reference-readers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): AndroidReferenceReaders</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-android-reference-readers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-android-reference-readers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/values</p>"},{"location":"api/shark/-android-reference-readers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<AndroidReferenceReaders></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ACTIVITY_THREAD__NEW_ACTIVITIES</p>"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/#activity_thread__new_activities","title":"ACTIVITY_THREAD__NEW_ACTIVITIES","text":"<p>[jvm]\\ ACTIVITY_THREAD__NEW_ACTIVITIES</p> <p>ActivityThread.mNewActivity is a linked list of ActivityClientRecord that keeps track of activities after they were resumed, until the main thread is idle. This is used to report analytics to system_server about how long it took for the main thread to settle after resuming an activity. Unfortunately, if the main thread never becomes idle, all these new activities leak in memory.</p> <p>We\u2019d normally catch these with a pattern in AndroidReferenceMatchers, and we do have AndroidReferenceMatchers.ACTIVITY_THREAD__M_NEW_ACTIVITIES to do that, however this matching only works if none of the activities alive are waiting for idle. If any activity alive is still waiting for idle (which all the alive activities would be if they main thread is never idle) then ActivityThread.mActivities will reference an ActivityClientRecord through an ArrayMap and because ActivityClientRecord are reused that instance will also have its nextIdle fields set, so we\u2019re effectively traversing the ActivityThread.mNewActivity from a completely different and unexpected entry point.</p> <p>To fix that problem of broken pattern matching, we emit the mNewActivities field when finding an ActivityThread instance, and because custom ref readers have priority over the default instance field reader, we\u2019re guaranteed that mNewActivities is enqueued before mActivities. Unfortunately, that also means we can\u2019t rely on AndroidReferenceMatchers as those aren\u2019t used here, so we recreate our own LibraryLeakReferenceMatcher.</p> <p>We want to traverse mNewActivities before mActivities so we can\u2019t set isLowPriority to true like we would for normal path tagged as source of leak. So we will prioritize going through all activities in mNewActivities, some of which aren\u2019t destroyed yet (and therefore not leaking). Going through those paths of non leaking activities, we might find other leaks though. This would result in us tagging unrelated leaks as part of the mNewActivities leak. To prevent this, we traverse ActivityThread.mNewActivities as a linked list through ActivityClientRecord.nextIdle as a linked list, but we emit only ActivityClientRecord.activity fields if such activities are destroyed, which means any live activity in ActivityThread.mNewActivities will be discovered through the normal field navigation process and should go through ActivityThread.mActivities.</p>"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/create/","title":"Create","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ACTIVITY_THREAD__NEW_ACTIVITIES/create</p>"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ANIMATOR_WEAK_REF_SUCKS</p>"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/#animator_weak_ref_sucks","title":"ANIMATOR_WEAK_REF_SUCKS","text":"<p>[jvm]\\ ANIMATOR_WEAK_REF_SUCKS</p>"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/create/","title":"Create","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ANIMATOR_WEAK_REF_SUCKS/create</p>"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ARRAY_SET</p>"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/#array_set","title":"ARRAY_SET","text":"<p>[jvm]\\ ARRAY_SET</p>"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ARRAY_SET/create</p>"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-android-reference-readers/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/Companion</p>"},{"location":"api/shark/-android-reference-readers/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/MESSAGE_QUEUE</p>"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/#message_queue","title":"MESSAGE_QUEUE","text":"<p>[jvm]\\ MESSAGE_QUEUE</p>"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/create/","title":"Create","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/MESSAGE_QUEUE/create</p>"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/SAFE_ITERABLE_MAP</p>"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/#safe_iterable_map","title":"SAFE_ITERABLE_MAP","text":"<p>[jvm]\\ SAFE_ITERABLE_MAP</p>"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/SAFE_ITERABLE_MAP/create</p>"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-android-resource-id-names/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidResourceIdNames</p>"},{"location":"api/shark/-android-resource-id-names/#androidresourceidnames","title":"AndroidResourceIdNames","text":"<p>[jvm]\\ class AndroidResourceIdNames</p>"},{"location":"api/shark/-android-resource-id-names/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-resource-id-names/#functions","title":"Functions","text":"Name Summary get [jvm]operator fun get(id: Int): String?"},{"location":"api/shark/-android-resource-id-names/get/","title":"Get","text":"<p>//leakcanary-repo/shark/AndroidResourceIdNames/get</p>"},{"location":"api/shark/-android-resource-id-names/get/#get","title":"get","text":"<p>[jvm]\\ operator fun get(id: Int): String?</p>"},{"location":"api/shark/-android-resource-id-names/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidResourceIdNames/Companion</p>"},{"location":"api/shark/-android-resource-id-names/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-resource-id-names/-companion/#functions","title":"Functions","text":"Name Summary readFromHeap [jvm]fun readFromHeap(graph: HeapGraph): AndroidResourceIdNames? saveToMemory [jvm]@Synchronizedfun saveToMemory(getResourceTypeName: (Int) -> String?, getResourceEntryName: (Int) -> String?)"},{"location":"api/shark/-android-resource-id-names/-companion/read-from-heap/","title":"Read from heap","text":"<p>//leakcanary-repo/shark/AndroidResourceIdNames/Companion/readFromHeap</p>"},{"location":"api/shark/-android-resource-id-names/-companion/read-from-heap/#readfromheap","title":"readFromHeap","text":"<p>[jvm]\\ fun readFromHeap(graph: HeapGraph): AndroidResourceIdNames?</p>"},{"location":"api/shark/-android-resource-id-names/-companion/save-to-memory/","title":"Save to memory","text":"<p>//leakcanary-repo/shark/AndroidResourceIdNames/Companion/saveToMemory</p>"},{"location":"api/shark/-android-resource-id-names/-companion/save-to-memory/#savetomemory","title":"saveToMemory","text":"<p>[jvm]\\</p> <p>@Synchronized</p> <p>fun saveToMemory(getResourceTypeName: (Int) -> String?, getResourceEntryName: (Int) -> String?)</p>"},{"location":"api/shark/-android-resource-id-names/-companion/save-to-memory/#parameters","title":"Parameters","text":"<p>jvm</p> getResourceTypeName a function that delegates to Android Resources.getResourceTypeName but returns null when the name isn\u2019t found instead of throwing an exception. getResourceEntryName a function that delegates to Android Resources.getResourceEntryName but returns null when the name isn\u2019t found instead of throwing an exception."},{"location":"api/shark/-android-services/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidServices</p>"},{"location":"api/shark/-android-services/#androidservices","title":"AndroidServices","text":"<p>[jvm]\\ object AndroidServices</p>"},{"location":"api/shark/-android-services/#properties","title":"Properties","text":"Name Summary aliveAndroidServiceObjectIds [jvm]val HeapGraph.aliveAndroidServiceObjectIds: List<Long>"},{"location":"api/shark/-android-services/alive-android-service-object-ids/","title":"Alive android service object ids","text":"<p>//leakcanary-repo/shark/AndroidServices/aliveAndroidServiceObjectIds</p>"},{"location":"api/shark/-android-services/alive-android-service-object-ids/#aliveandroidserviceobjectids","title":"aliveAndroidServiceObjectIds","text":"<p>[jvm]\\ val HeapGraph.aliveAndroidServiceObjectIds: List<Long></p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/#apacheharmonyinstancerefreaders","title":"ApacheHarmonyInstanceRefReaders","text":"<p>[jvm]\\ enum ApacheHarmonyInstanceRefReaders : Enum<ApacheHarmonyInstanceRefReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactory</p> <p>Defines VirtualInstanceReferenceReader factories for common Apache Harmony data structures.</p> <p>Note: the expanders target the direct classes and don\u2019t target subclasses, as these might include additional out going references that would be missed.</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/#entries","title":"Entries","text":"LINKED_LIST [jvm]LINKED_LIST ARRAY_LIST [jvm]ARRAY_LIST COPY_ON_WRITE_ARRAY_LIST [jvm]COPY_ON_WRITE_ARRAY_LIST HASH_MAP [jvm]HASH_MAPHandles HashMap & LinkedHashMap WEAK_HASH_MAP [jvm]WEAK_HASH_MAP HASH_SET [jvm]HASH_SETHandles HashSet & LinkedHashSet"},{"location":"api/shark/-apache-harmony-instance-ref-readers/#functions","title":"Functions","text":"Name Summary create [jvm]abstract fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader? valueOf [jvm]fun valueOf(value: String): ApacheHarmonyInstanceRefReadersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<ApacheHarmonyInstanceRefReaders>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-apache-harmony-instance-ref-readers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/valueOf</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): ApacheHarmonyInstanceRefReaders</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-apache-harmony-instance-ref-readers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/values</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<ApacheHarmonyInstanceRefReaders></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/ARRAY_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#array_list","title":"ARRAY_LIST","text":"<p>[jvm]\\ ARRAY_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/ARRAY_LIST/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/COPY_ON_WRITE_ARRAY_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#copy_on_write_array_list","title":"COPY_ON_WRITE_ARRAY_LIST","text":"<p>[jvm]\\ COPY_ON_WRITE_ARRAY_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/COPY_ON_WRITE_ARRAY_LIST/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/HASH_MAP</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/#hash_map","title":"HASH_MAP","text":"<p>[jvm]\\ HASH_MAP</p> <p>Handles HashMap & LinkedHashMap</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/HASH_MAP/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/HASH_SET</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/#hash_set","title":"HASH_SET","text":"<p>[jvm]\\ HASH_SET</p> <p>Handles HashSet & LinkedHashSet</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/HASH_SET/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/LINKED_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#linked_list","title":"LINKED_LIST","text":"<p>[jvm]\\ LINKED_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/LINKED_LIST/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/WEAK_HASH_MAP</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#weak_hash_map","title":"WEAK_HASH_MAP","text":"<p>[jvm]\\ WEAK_HASH_MAP</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/WEAK_HASH_MAP/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-app-singleton-inspector/","title":"Index","text":"<p>//leakcanary-repo/shark/AppSingletonInspector</p>"},{"location":"api/shark/-app-singleton-inspector/#appsingletoninspector","title":"AppSingletonInspector","text":"<p>[jvm]\\ class AppSingletonInspector(singletonClasses: String) : ObjectInspector</p> <p>Inspector that automatically marks instances of the provided class names as not leaking because they\u2019re app wide singletons.</p>"},{"location":"api/shark/-app-singleton-inspector/#constructors","title":"Constructors","text":"AppSingletonInspector [jvm]constructor(vararg singletonClasses: String)"},{"location":"api/shark/-app-singleton-inspector/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-app-singleton-inspector/-app-singleton-inspector/","title":"app singleton inspector","text":"<p>//leakcanary-repo/shark/AppSingletonInspector/AppSingletonInspector</p>"},{"location":"api/shark/-app-singleton-inspector/-app-singleton-inspector/#appsingletoninspector","title":"AppSingletonInspector","text":"<p>[jvm]\\ constructor(vararg singletonClasses: String)</p>"},{"location":"api/shark/-app-singleton-inspector/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AppSingletonInspector/inspect</p>"},{"location":"api/shark/-app-singleton-inspector/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-app-singleton-inspector/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-application-leak/","title":"Index","text":"<p>//leakcanary-repo/shark/ApplicationLeak</p>"},{"location":"api/shark/-application-leak/#applicationleak","title":"ApplicationLeak","text":"<p>[jvm]\\ data class ApplicationLeak(val leakTraces: List<LeakTrace>) : Leak</p> <p>A leak found by HeapAnalyzer in your application.</p>"},{"location":"api/shark/-application-leak/#constructors","title":"Constructors","text":"ApplicationLeak [jvm]constructor(leakTraces: List<LeakTrace>)"},{"location":"api/shark/-application-leak/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-application-leak/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-application-leak/#properties","title":"Properties","text":"Name Summary leakTraces [jvm]open override val leakTraces: List<LeakTrace>Group of leak traces which share the same leak signature. shortDescription [jvm]open override val shortDescription: String signature [jvm]open override val signature: StringA unique SHA1 hash that represents this group of leak traces. totalRetainedHeapByteSize [jvm]val totalRetainedHeapByteSize: Int?Sum of LeakTrace.retainedHeapByteSize for all elements in leakTraces. Null if the retained heap size was not computed. totalRetainedObjectCount [jvm]val totalRetainedObjectCount: Int?Sum of LeakTrace.retainedObjectCount for all elements in leakTraces. Null if the retained heap size was not computed."},{"location":"api/shark/-application-leak/-application-leak/","title":"application leak","text":"<p>//leakcanary-repo/shark/ApplicationLeak/ApplicationLeak</p>"},{"location":"api/shark/-application-leak/-application-leak/#applicationleak","title":"ApplicationLeak","text":"<p>[jvm]\\ constructor(leakTraces: List<LeakTrace>)</p>"},{"location":"api/shark/-application-leak/leak-traces/","title":"Leak traces","text":"<p>//leakcanary-repo/shark/ApplicationLeak/leakTraces</p>"},{"location":"api/shark/-application-leak/leak-traces/#leaktraces","title":"leakTraces","text":"<p>[jvm]\\ open override val leakTraces: List<LeakTrace></p> <p>Group of leak traces which share the same leak signature.</p>"},{"location":"api/shark/-application-leak/short-description/","title":"Short description","text":"<p>//leakcanary-repo/shark/ApplicationLeak/shortDescription</p>"},{"location":"api/shark/-application-leak/short-description/#shortdescription","title":"shortDescription","text":"<p>[jvm]\\ open override val shortDescription: String</p>"},{"location":"api/shark/-application-leak/signature/","title":"Signature","text":"<p>//leakcanary-repo/shark/ApplicationLeak/signature</p>"},{"location":"api/shark/-application-leak/signature/#signature","title":"signature","text":"<p>[jvm]\\ open override val signature: String</p> <p>A unique SHA1 hash that represents this group of leak traces.</p> <p>For ApplicationLeak this is based on LeakTrace.signature and for LibraryLeak this is based on LibraryLeak.pattern.</p>"},{"location":"api/shark/-application-leak/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/ApplicationLeak/toString</p>"},{"location":"api/shark/-application-leak/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-application-leak/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ApplicationLeak/Companion</p>"},{"location":"api/shark/-application-leak/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-byte-array-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/ByteArraySourceProvider</p>"},{"location":"api/shark/-byte-array-source-provider/#bytearraysourceprovider","title":"ByteArraySourceProvider","text":"<p>[jvm]\\ class ByteArraySourceProvider(byteArray: ByteArray) : DualSourceProvider</p>"},{"location":"api/shark/-byte-array-source-provider/#constructors","title":"Constructors","text":"ByteArraySourceProvider [jvm]constructor(byteArray: ByteArray)"},{"location":"api/shark/-byte-array-source-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph openRandomAccessSource [jvm]open override fun openRandomAccessSource(): RandomAccessSource openStreamingSource [jvm]open override fun openStreamingSource(): BufferedSource"},{"location":"api/shark/-byte-array-source-provider/-byte-array-source-provider/","title":"byte array source provider","text":"<p>//leakcanary-repo/shark/ByteArraySourceProvider/ByteArraySourceProvider</p>"},{"location":"api/shark/-byte-array-source-provider/-byte-array-source-provider/#bytearraysourceprovider","title":"ByteArraySourceProvider","text":"<p>[jvm]\\ constructor(byteArray: ByteArray)</p>"},{"location":"api/shark/-byte-array-source-provider/open-random-access-source/","title":"Open random access source","text":"<p>//leakcanary-repo/shark/ByteArraySourceProvider/openRandomAccessSource</p>"},{"location":"api/shark/-byte-array-source-provider/open-random-access-source/#openrandomaccesssource","title":"openRandomAccessSource","text":"<p>[jvm]\\ open override fun openRandomAccessSource(): RandomAccessSource</p>"},{"location":"api/shark/-byte-array-source-provider/open-streaming-source/","title":"Open streaming source","text":"<p>//leakcanary-repo/shark/ByteArraySourceProvider/openStreamingSource</p>"},{"location":"api/shark/-byte-array-source-provider/open-streaming-source/#openstreamingsource","title":"openStreamingSource","text":"<p>[jvm]\\ open override fun openStreamingSource(): BufferedSource</p>"},{"location":"api/shark/-byte-size/","title":"Index","text":"<p>//leakcanary-repo/shark/ByteSize</p>"},{"location":"api/shark/-byte-size/#bytesize","title":"ByteSize","text":"<p>[jvm]\\ @JvmInline</p> <p>value class ByteSize(val inWholeBytes: Long) : Comparable<ByteSize> </p> <p>Inspired by https://github.com/saket/file-size as well as Kotlin\u2019s Duration API.</p>"},{"location":"api/shark/-byte-size/#constructors","title":"Constructors","text":"ByteSize [jvm]constructor(inWholeBytes: Long)"},{"location":"api/shark/-byte-size/#functions","title":"Functions","text":"Name Summary compareTo [jvm]open operator override fun compareTo(other: ByteSize): Int div [jvm]inline operator fun div(other: ByteSize): ByteSize minus [jvm]inline operator fun minus(other: ByteSize): ByteSize plus [jvm]inline operator fun plus(other: ByteSize): ByteSize times [jvm]inline operator fun times(other: ByteSize): ByteSize toString [jvm]open override fun toString(): String"},{"location":"api/shark/-byte-size/#properties","title":"Properties","text":"Name Summary inWholeBytes [jvm]val inWholeBytes: Long inWholeGigabytes [jvm]val inWholeGigabytes: Long inWholeKilobytes [jvm]val inWholeKilobytes: Long inWholeMegabytes [jvm]val inWholeMegabytes: Long"},{"location":"api/shark/-byte-size/-byte-size/","title":"byte size","text":"<p>//leakcanary-repo/shark/ByteSize/ByteSize</p>"},{"location":"api/shark/-byte-size/-byte-size/#bytesize","title":"ByteSize","text":"<p>[jvm]\\ constructor(inWholeBytes: Long)</p>"},{"location":"api/shark/-byte-size/compare-to/","title":"Compare to","text":"<p>//leakcanary-repo/shark/ByteSize/compareTo</p>"},{"location":"api/shark/-byte-size/compare-to/#compareto","title":"compareTo","text":"<p>[jvm]\\ open operator override fun compareTo(other: ByteSize): Int</p>"},{"location":"api/shark/-byte-size/div/","title":"Div","text":"<p>//leakcanary-repo/shark/ByteSize/div</p>"},{"location":"api/shark/-byte-size/div/#div","title":"div","text":"<p>[jvm]\\ inline operator fun div(other: ByteSize): ByteSize</p>"},{"location":"api/shark/-byte-size/in-whole-bytes/","title":"In whole bytes","text":"<p>//leakcanary-repo/shark/ByteSize/inWholeBytes</p>"},{"location":"api/shark/-byte-size/in-whole-bytes/#inwholebytes","title":"inWholeBytes","text":"<p>[jvm]\\ val inWholeBytes: Long</p>"},{"location":"api/shark/-byte-size/in-whole-gigabytes/","title":"In whole gigabytes","text":"<p>//leakcanary-repo/shark/ByteSize/inWholeGigabytes</p>"},{"location":"api/shark/-byte-size/in-whole-gigabytes/#inwholegigabytes","title":"inWholeGigabytes","text":"<p>[jvm]\\ val inWholeGigabytes: Long</p>"},{"location":"api/shark/-byte-size/in-whole-kilobytes/","title":"In whole kilobytes","text":"<p>//leakcanary-repo/shark/ByteSize/inWholeKilobytes</p>"},{"location":"api/shark/-byte-size/in-whole-kilobytes/#inwholekilobytes","title":"inWholeKilobytes","text":"<p>[jvm]\\ val inWholeKilobytes: Long</p>"},{"location":"api/shark/-byte-size/in-whole-megabytes/","title":"In whole megabytes","text":"<p>//leakcanary-repo/shark/ByteSize/inWholeMegabytes</p>"},{"location":"api/shark/-byte-size/in-whole-megabytes/#inwholemegabytes","title":"inWholeMegabytes","text":"<p>[jvm]\\ val inWholeMegabytes: Long</p>"},{"location":"api/shark/-byte-size/minus/","title":"Minus","text":"<p>//leakcanary-repo/shark/ByteSize/minus</p>"},{"location":"api/shark/-byte-size/minus/#minus","title":"minus","text":"<p>[jvm]\\ inline operator fun minus(other: ByteSize): ByteSize</p>"},{"location":"api/shark/-byte-size/plus/","title":"Plus","text":"<p>//leakcanary-repo/shark/ByteSize/plus</p>"},{"location":"api/shark/-byte-size/plus/#plus","title":"plus","text":"<p>[jvm]\\ inline operator fun plus(other: ByteSize): ByteSize</p>"},{"location":"api/shark/-byte-size/times/","title":"Times","text":"<p>//leakcanary-repo/shark/ByteSize/times</p>"},{"location":"api/shark/-byte-size/times/#times","title":"times","text":"<p>[jvm]\\ inline operator fun times(other: ByteSize): ByteSize</p>"},{"location":"api/shark/-byte-size/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/ByteSize/toString</p>"},{"location":"api/shark/-byte-size/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-byte-size/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ByteSize/Companion</p>"},{"location":"api/shark/-byte-size/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-byte-size/-companion/#properties","title":"Properties","text":"Name Summary bytes [jvm]val Int.bytes: ByteSizeval Long.bytes: ByteSize BYTES_PER_GB [jvm]const val BYTES_PER_GB: Long BYTES_PER_KB [jvm]const val BYTES_PER_KB: Long BYTES_PER_MB [jvm]const val BYTES_PER_MB: Long gigabytes [jvm]val Int.gigabytes: ByteSizeval Long.gigabytes: ByteSize kilobytes [jvm]val Int.kilobytes: ByteSizeval Long.kilobytes: ByteSize megabytes [jvm]val Int.megabytes: ByteSizeval Long.megabytes: ByteSize ZERO [jvm]val ZERO: ByteSize"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-g-b/","title":"b y t e s p e r g b","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/BYTES_PER_GB</p>"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-g-b/#bytes_per_gb","title":"BYTES_PER_GB","text":"<p>[jvm]\\ const val BYTES_PER_GB: Long</p>"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-k-b/","title":"b y t e s p e r k b","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/BYTES_PER_KB</p>"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-k-b/#bytes_per_kb","title":"BYTES_PER_KB","text":"<p>[jvm]\\ const val BYTES_PER_KB: Long</p>"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-m-b/","title":"b y t e s p e r m b","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/BYTES_PER_MB</p>"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-m-b/#bytes_per_mb","title":"BYTES_PER_MB","text":"<p>[jvm]\\ const val BYTES_PER_MB: Long</p>"},{"location":"api/shark/-byte-size/-companion/-z-e-r-o/","title":"z e r o","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/ZERO</p>"},{"location":"api/shark/-byte-size/-companion/-z-e-r-o/#zero","title":"ZERO","text":"<p>[jvm]\\ val ZERO: ByteSize</p>"},{"location":"api/shark/-byte-size/-companion/bytes/","title":"Bytes","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/bytes</p>"},{"location":"api/shark/-byte-size/-companion/bytes/#bytes","title":"bytes","text":"<p>[jvm]\\ val Long.bytes: ByteSize</p> <p>val Int.bytes: ByteSize</p>"},{"location":"api/shark/-byte-size/-companion/gigabytes/","title":"Gigabytes","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/gigabytes</p>"},{"location":"api/shark/-byte-size/-companion/gigabytes/#gigabytes","title":"gigabytes","text":"<p>[jvm]\\ val Long.gigabytes: ByteSize</p> <p>val Int.gigabytes: ByteSize</p>"},{"location":"api/shark/-byte-size/-companion/kilobytes/","title":"Kilobytes","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/kilobytes</p>"},{"location":"api/shark/-byte-size/-companion/kilobytes/#kilobytes","title":"kilobytes","text":"<p>[jvm]\\ val Long.kilobytes: ByteSize</p> <p>val Int.kilobytes: ByteSize</p>"},{"location":"api/shark/-byte-size/-companion/megabytes/","title":"Megabytes","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/megabytes</p>"},{"location":"api/shark/-byte-size/-companion/megabytes/#megabytes","title":"megabytes","text":"<p>[jvm]\\ val Long.megabytes: ByteSize</p> <p>val Int.megabytes: ByteSize</p>"},{"location":"api/shark/-chaining-instance-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader</p>"},{"location":"api/shark/-chaining-instance-reference-reader/#chaininginstancereferencereader","title":"ChainingInstanceReferenceReader","text":"<p>[jvm]\\ class ChainingInstanceReferenceReader(virtualRefReaders: List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader>, flatteningInstanceReader: FlatteningPartitionedInstanceReferenceReader?, fieldRefReader: FieldInstanceReferenceReader) : ReferenceReader<HeapObject.HeapInstance> </p> <p>A ReferenceReader that first delegates expanding to virtualRefReaders in order until one matches (or none), and then always proceeds with fieldRefReader. This means any synthetic ref will be on the shortest path, but we still explore the entire data structure so that we correctly track which objects have been visited and correctly compute dominators and retained size.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/#constructors","title":"Constructors","text":"ChainingInstanceReferenceReader [jvm]constructor(virtualRefReaders: List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader>, flatteningInstanceReader: FlatteningPartitionedInstanceReferenceReader?, fieldRefReader: FieldInstanceReferenceReader)"},{"location":"api/shark/-chaining-instance-reference-reader/#types","title":"Types","text":"Name Summary VirtualInstanceReferenceReader [jvm]interface VirtualInstanceReferenceReader : ReferenceReader<HeapObject.HeapInstance> Same as ReferenceReader but read is only invoked when matches returns true. matches should return false if this VirtualInstanceReferenceReader implementation isn\u2019t able to expand the provided instance, in which case ChainingInstanceReferenceReader will delegate to the next VirtualInstanceReferenceReader implementation."},{"location":"api/shark/-chaining-instance-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]open override fun read(source: HeapObject.HeapInstance): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-chaining-instance-reference-reader/-chaining-instance-reference-reader/","title":"chaining instance reference reader","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/ChainingInstanceReferenceReader</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-chaining-instance-reference-reader/#chaininginstancereferencereader","title":"ChainingInstanceReferenceReader","text":"<p>[jvm]\\ constructor(virtualRefReaders: List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader>, flatteningInstanceReader: FlatteningPartitionedInstanceReferenceReader?, fieldRefReader: FieldInstanceReferenceReader)</p>"},{"location":"api/shark/-chaining-instance-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/read</p>"},{"location":"api/shark/-chaining-instance-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ open override fun read(source: HeapObject.HeapInstance): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/#virtualinstancereferencereader","title":"VirtualInstanceReferenceReader","text":"<p>interface VirtualInstanceReferenceReader : ReferenceReader<HeapObject.HeapInstance> </p> <p>Same as ReferenceReader but read is only invoked when matches returns true. matches should return false if this VirtualInstanceReferenceReader implementation isn\u2019t able to expand the provided instance, in which case ChainingInstanceReferenceReader will delegate to the next VirtualInstanceReferenceReader implementation.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/#inheritors","title":"Inheritors","text":"JavaLocalReferenceReader"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/#types","title":"Types","text":"Name Summary ChainFactory [jvm]fun interface ChainFactoryCreates a list of VirtualInstanceReferenceReader where the content of the list depends on the classes in the heap graph and their implementation. This is a chain as VirtualInstanceReferenceReader elements in the list will process references in order in ChainingInstanceReferenceReader. OptionalFactory [jvm]fun interface OptionalFactoryMay create a new VirtualInstanceReferenceReader, depending on what\u2019s in the heap graph. OptionalFactory implementations might return a different ReferenceReader depending on which version of a class is present in the heap dump, or they might return null if that class is missing."},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/#functions","title":"Functions","text":"Name Summary matches [jvm]abstract fun matches(instance: HeapObject.HeapInstance): Boolean read [jvm]abstract fun read(source: HeapObject.HeapInstance): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/#properties","title":"Properties","text":"Name Summary readsCutSet [jvm]abstract val readsCutSet: Booleanhttps://en.wikipedia.org/wiki/Cut_(graph_theory) A cut is a partition of the vertices of a graph into two disjoint subsets. Any cut determines a cut-set, the set of edges that have one endpoint in each subset of the partition. These edges are said to cross the cut."},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/matches/","title":"Matches","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/matches</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/matches/#matches","title":"matches","text":"<p>[jvm]\\ abstract fun matches(instance: HeapObject.HeapInstance): Boolean</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/reads-cut-set/","title":"Reads cut set","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/readsCutSet</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/reads-cut-set/#readscutset","title":"readsCutSet","text":"<p>[jvm]\\ abstract val readsCutSet: Boolean</p> <p>https://en.wikipedia.org/wiki/Cut_(graph_theory) A cut is a partition of the vertices of a graph into two disjoint subsets. Any cut determines a cut-set, the set of edges that have one endpoint in each subset of the partition. These edges are said to cross the cut.</p> <p>If true, the references returned by read will include the cut-set, which means any other object reacheable from the source instance but not returned by read has no outgoing edge to the rest of the graph. In other words, the internals of the data structure cannot reach beyond the data structure itself.</p> <p>When this is true then ChainingInstanceReferenceReader can leverage FlatteningPartitionedInstanceReferenceReader.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-chain-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/ChainFactory</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-chain-factory/#chainfactory","title":"ChainFactory","text":"<p>[jvm]\\ fun interface ChainFactory</p> <p>Creates a list of VirtualInstanceReferenceReader where the content of the list depends on the classes in the heap graph and their implementation. This is a chain as VirtualInstanceReferenceReader elements in the list will process references in order in ChainingInstanceReferenceReader.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-chain-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]abstract fun createFor(graph: HeapGraph): List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-chain-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/ChainFactory/createFor</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-chain-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ abstract fun createFor(graph: HeapGraph): List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader></p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/OptionalFactory</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/#optionalfactory","title":"OptionalFactory","text":"<p>fun interface OptionalFactory</p> <p>May create a new VirtualInstanceReferenceReader, depending on what\u2019s in the heap graph. OptionalFactory implementations might return a different ReferenceReader depending on which version of a class is present in the heap dump, or they might return null if that class is missing.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/#inheritors","title":"Inheritors","text":"AndroidReferenceReaders ApacheHarmonyInstanceRefReaders OpenJdkInstanceRefReaders"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/#functions","title":"Functions","text":"Name Summary create [jvm]abstract fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/OptionalFactory/create</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/create/#create","title":"create","text":"<p>[jvm]\\ abstract fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-class-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/ClassReferenceReader</p>"},{"location":"api/shark/-class-reference-reader/#classreferencereader","title":"ClassReferenceReader","text":"<p>[jvm]\\ class ClassReferenceReader(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ReferenceReader<HeapObject.HeapClass></p>"},{"location":"api/shark/-class-reference-reader/#constructors","title":"Constructors","text":"ClassReferenceReader [jvm]constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-class-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]open override fun read(source: HeapObject.HeapClass): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-class-reference-reader/-class-reference-reader/","title":"class reference reader","text":"<p>//leakcanary-repo/shark/ClassReferenceReader/ClassReferenceReader</p>"},{"location":"api/shark/-class-reference-reader/-class-reference-reader/#classreferencereader","title":"ClassReferenceReader","text":"<p>[jvm]\\ constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-class-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/ClassReferenceReader/read</p>"},{"location":"api/shark/-class-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ open override fun read(source: HeapObject.HeapClass): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-closeable-heap-graph/","title":"Index","text":"<p>//leakcanary-repo/shark/CloseableHeapGraph</p>"},{"location":"api/shark/-closeable-heap-graph/#closeableheapgraph","title":"CloseableHeapGraph","text":"<p>interface CloseableHeapGraph : HeapGraph, Closeable</p> <p>A HeapGraph that should be closed after being used.</p>"},{"location":"api/shark/-closeable-heap-graph/#inheritors","title":"Inheritors","text":"HprofHeapGraph"},{"location":"api/shark/-closeable-heap-graph/#functions","title":"Functions","text":"Name Summary close [jvm]abstract override fun close() findClassByName [jvm]abstract fun findClassByName(className: String): HeapObject.HeapClass?Returns the HeapClass corresponding to the provided className, or null if the class cannot be found. findHeapDumpIndex [jvm]abstract fun findHeapDumpIndex(objectId: Long): IntReturns the 1-based index in the heap dump of the object corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByHeapDumpIndex [jvm]abstract fun findObjectByHeapDumpIndex(heapDumpIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided heapDumpIndex, and throws IllegalArgumentException if heapDumpIndex is less than 1 or more than objectCount. findObjectById [jvm]abstract fun findObjectById(objectId: Long): HeapObjectReturns the HeapObject corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByIdOrNull [jvm]abstract fun findObjectByIdOrNull(objectId: Long): HeapObject?Returns the HeapObject corresponding to the provided objectId or null if it cannot be found. findObjectByIndex [jvm]abstract fun findObjectByIndex(objectIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided objectIndex, and throws IllegalArgumentException if objectIndex is less than 0 or more than objectCount - 1. objectExists [jvm]abstract fun objectExists(objectId: Long): BooleanReturns true if the provided objectId exists in the heap dump."},{"location":"api/shark/-closeable-heap-graph/#properties","title":"Properties","text":"Name Summary aliveAndroidServiceObjectIds [jvm]val HeapGraph.aliveAndroidServiceObjectIds: List<Long> classCount [jvm]abstract val classCount: Int classes [jvm]abstract val classes: Sequence<HeapObject.HeapClass>Sequence of all classes in the heap dump. context [jvm]abstract val context: GraphContextIn memory store that can be used to store objects this HeapGraph instance. gcRoots [jvm]abstract val gcRoots: List<GcRoot>All GC roots which type matches types known to this heap graph and which point to non null references. You can retrieve the object that a GC Root points to by calling findObjectById with GcRoot.id, however you need to first check that objectExists returns true because GC roots can point to objects that don\u2019t exist in the heap dump. identifierByteSize [jvm]abstract val identifierByteSize: Int instanceCount [jvm]abstract val instanceCount: Int instances [jvm]abstract val instances: Sequence<HeapObject.HeapInstance>Sequence of all instances in the heap dump. objectArrayCount [jvm]abstract val objectArrayCount: Int objectArrays [jvm]abstract val objectArrays: Sequence<HeapObject.HeapObjectArray>Sequence of all object arrays in the heap dump. objectCount [jvm]abstract val objectCount: Int objects [jvm]abstract val objects: Sequence<HeapObject>Sequence of all objects in the heap dump. primitiveArrayCount [jvm]abstract val primitiveArrayCount: Int primitiveArrays [jvm]abstract val primitiveArrays: Sequence<HeapObject.HeapPrimitiveArray>Sequence of all primitive arrays in the heap dump."},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/#constantmemorymetricsdualsourceprovider","title":"ConstantMemoryMetricsDualSourceProvider","text":"<p>[jvm]\\ class ConstantMemoryMetricsDualSourceProvider(realSourceProvider: DualSourceProvider) : DualSourceProvider</p> <p>Captures IO read metrics without using much memory.</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/#constructors","title":"Constructors","text":"ConstantMemoryMetricsDualSourceProvider [jvm]constructor(realSourceProvider: DualSourceProvider)"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph openRandomAccessSource [jvm]open override fun openRandomAccessSource(): RandomAccessSource openStreamingSource [jvm]open override fun openStreamingSource(): BufferedSource"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/#properties","title":"Properties","text":"Name Summary byteTravelRange [jvm]val byteTravelRange: Long randomAccessByteReads [jvm]var randomAccessByteReads: Long randomAccessByteTravel [jvm]var randomAccessByteTravel: Long randomAccessReadCount [jvm]var randomAccessReadCount: Long"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/-constant-memory-metrics-dual-source-provider/","title":"constant memory metrics dual source provider","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/ConstantMemoryMetricsDualSourceProvider</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/-constant-memory-metrics-dual-source-provider/#constantmemorymetricsdualsourceprovider","title":"ConstantMemoryMetricsDualSourceProvider","text":"<p>[jvm]\\ constructor(realSourceProvider: DualSourceProvider)</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/byte-travel-range/","title":"Byte travel range","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/byteTravelRange</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/byte-travel-range/#bytetravelrange","title":"byteTravelRange","text":"<p>[jvm]\\ val byteTravelRange: Long</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/open-random-access-source/","title":"Open random access source","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/openRandomAccessSource</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/open-random-access-source/#openrandomaccesssource","title":"openRandomAccessSource","text":"<p>[jvm]\\ open override fun openRandomAccessSource(): RandomAccessSource</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/open-streaming-source/","title":"Open streaming source","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/openStreamingSource</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/open-streaming-source/#openstreamingsource","title":"openStreamingSource","text":"<p>[jvm]\\ open override fun openStreamingSource(): BufferedSource</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-byte-reads/","title":"Random access byte reads","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/randomAccessByteReads</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-byte-reads/#randomaccessbytereads","title":"randomAccessByteReads","text":"<p>[jvm]\\ var randomAccessByteReads: Long</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-byte-travel/","title":"Random access byte travel","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/randomAccessByteTravel</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-byte-travel/#randomaccessbytetravel","title":"randomAccessByteTravel","text":"<p>[jvm]\\ var randomAccessByteTravel: Long</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-read-count/","title":"Random access read count","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/randomAccessReadCount</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-read-count/#randomaccessreadcount","title":"randomAccessReadCount","text":"<p>[jvm]\\ var randomAccessReadCount: Long</p>"},{"location":"api/shark/-decorated-path/","title":"Index","text":"<p>//leakcanary-repo/shark/DecoratedPath</p>"},{"location":"api/shark/-decorated-path/#decoratedpath","title":"DecoratedPath","text":"<p>[jvm]\\ class DecoratedPath(delegate: Path) : Path</p>"},{"location":"api/shark/-decorated-path/#constructors","title":"Constructors","text":"DecoratedPath [jvm]constructor(delegate: Path)"},{"location":"api/shark/-decorated-path/#functions","title":"Functions","text":"Name Summary endNode [jvm]open override fun endNode(): Node forEach [jvm]open fun forEach(p0: Consumer<in Entity>) iterator [jvm]open operator override fun iterator(): MutableIterator<Entity> lastRelationship [jvm]open override fun lastRelationship(): Relationship length [jvm]open override fun length(): Int nodes [jvm]open override fun nodes(): MutableIterable<Node> relationships [jvm]open override fun relationships(): Iterable<Relationship> reverseNodes [jvm]open override fun reverseNodes(): MutableIterable<Node> reverseRelationships [jvm]open override fun reverseRelationships(): Iterable<Relationship> spliterator [jvm]open fun spliterator(): Spliterator<Entity> startNode [jvm]open override fun startNode(): Node"},{"location":"api/shark/-decorated-path/-decorated-path/","title":"decorated path","text":"<p>//leakcanary-repo/shark/DecoratedPath/DecoratedPath</p>"},{"location":"api/shark/-decorated-path/-decorated-path/#decoratedpath","title":"DecoratedPath","text":"<p>[jvm]\\ constructor(delegate: Path)</p>"},{"location":"api/shark/-decorated-path/iterator/","title":"Iterator","text":"<p>//leakcanary-repo/shark/DecoratedPath/iterator</p>"},{"location":"api/shark/-decorated-path/iterator/#iterator","title":"iterator","text":"<p>[jvm]\\ open operator override fun iterator(): MutableIterator<Entity></p>"},{"location":"api/shark/-decorated-path/relationships/","title":"Relationships","text":"<p>//leakcanary-repo/shark/DecoratedPath/relationships</p>"},{"location":"api/shark/-decorated-path/relationships/#relationships","title":"relationships","text":"<p>[jvm]\\ open override fun relationships(): Iterable<Relationship></p>"},{"location":"api/shark/-decorated-path/reverse-relationships/","title":"Reverse relationships","text":"<p>//leakcanary-repo/shark/DecoratedPath/reverseRelationships</p>"},{"location":"api/shark/-decorated-path/reverse-relationships/#reverserelationships","title":"reverseRelationships","text":"<p>[jvm]\\ open override fun reverseRelationships(): Iterable<Relationship></p>"},{"location":"api/shark/-deobfuscate-hprof-command/","title":"Index","text":"<p>//leakcanary-repo/shark/DeobfuscateHprofCommand</p>"},{"location":"api/shark/-deobfuscate-hprof-command/#deobfuscatehprofcommand","title":"DeobfuscateHprofCommand","text":"<p>[jvm]\\ class DeobfuscateHprofCommand : CliktCommand</p>"},{"location":"api/shark/-deobfuscate-hprof-command/#constructors","title":"Constructors","text":"DeobfuscateHprofCommand [jvm]constructor()"},{"location":"api/shark/-deobfuscate-hprof-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-deobfuscate-hprof-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-deobfuscate-hprof-command/-deobfuscate-hprof-command/","title":"deobfuscate hprof command","text":"<p>//leakcanary-repo/shark/DeobfuscateHprofCommand/DeobfuscateHprofCommand</p>"},{"location":"api/shark/-deobfuscate-hprof-command/-deobfuscate-hprof-command/#deobfuscatehprofcommand","title":"DeobfuscateHprofCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-deobfuscate-hprof-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/DeobfuscateHprofCommand/run</p>"},{"location":"api/shark/-deobfuscate-hprof-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-dominator-tree/","title":"Index","text":"<p>//leakcanary-repo/shark/DominatorTree</p>"},{"location":"api/shark/-dominator-tree/#dominatortree","title":"DominatorTree","text":"<p>[jvm]\\ class DominatorTree(expectedElements: Int = 4)</p>"},{"location":"api/shark/-dominator-tree/#constructors","title":"Constructors","text":"DominatorTree [jvm]constructor(expectedElements: Int = 4)"},{"location":"api/shark/-dominator-tree/#types","title":"Types","text":"Name Summary ObjectSizeCalculator [jvm]fun interface ObjectSizeCalculator"},{"location":"api/shark/-dominator-tree/#functions","title":"Functions","text":"Name Summary buildFullDominatorTree [jvm]fun buildFullDominatorTree(objectSizeCalculator: DominatorTree.ObjectSizeCalculator): Map<Long, ObjectDominators.DominatorNode> computeRetainedSizes [jvm]fun computeRetainedSizes(retainedObjectIds: LongSet, objectSizeCalculator: DominatorTree.ObjectSizeCalculator): LongLongMapComputes the size retained by retainedObjectIds using the dominator tree built using updateDominated. The shallow size of each object is provided by objectSizeCalculator. contains [jvm]operator fun contains(objectId: Long): Boolean get [jvm]operator fun get(dominatedObjectId: Long): LongReturns the dominator object id or ValueHolder.NULL_REFERENCE if dominatedObjectId is the root dominator. updateDominated [jvm]fun updateDominated(objectId: Long, parentObjectId: Long): BooleanRecords that objectId can be reached through parentObjectId, updating the dominator for objectId to be either parentObjectId if objectId has no known dominator and otherwise to the Lowest Common Dominator between parentObjectId and the previously determined dominator for objectId. updateDominatedAsRoot [jvm]fun updateDominatedAsRoot(objectId: Long): BooleanRecords that objectId is a root."},{"location":"api/shark/-dominator-tree/-dominator-tree/","title":"dominator tree","text":"<p>//leakcanary-repo/shark/DominatorTree/DominatorTree</p>"},{"location":"api/shark/-dominator-tree/-dominator-tree/#dominatortree","title":"DominatorTree","text":"<p>[jvm]\\ constructor(expectedElements: Int = 4)</p>"},{"location":"api/shark/-dominator-tree/build-full-dominator-tree/","title":"Build full dominator tree","text":"<p>//leakcanary-repo/shark/DominatorTree/buildFullDominatorTree</p>"},{"location":"api/shark/-dominator-tree/build-full-dominator-tree/#buildfulldominatortree","title":"buildFullDominatorTree","text":"<p>[jvm]\\ fun buildFullDominatorTree(objectSizeCalculator: DominatorTree.ObjectSizeCalculator): Map<Long, ObjectDominators.DominatorNode></p>"},{"location":"api/shark/-dominator-tree/compute-retained-sizes/","title":"Compute retained sizes","text":"<p>//leakcanary-repo/shark/DominatorTree/computeRetainedSizes</p>"},{"location":"api/shark/-dominator-tree/compute-retained-sizes/#computeretainedsizes","title":"computeRetainedSizes","text":"<p>[jvm]\\ fun computeRetainedSizes(retainedObjectIds: LongSet, objectSizeCalculator: DominatorTree.ObjectSizeCalculator): LongLongMap</p> <p>Computes the size retained by retainedObjectIds using the dominator tree built using updateDominated. The shallow size of each object is provided by objectSizeCalculator.</p>"},{"location":"api/shark/-dominator-tree/compute-retained-sizes/#return","title":"Return","text":"<p>a map of object id to retained size.</p>"},{"location":"api/shark/-dominator-tree/contains/","title":"Contains","text":"<p>//leakcanary-repo/shark/DominatorTree/contains</p>"},{"location":"api/shark/-dominator-tree/contains/#contains","title":"contains","text":"<p>[jvm]\\ operator fun contains(objectId: Long): Boolean</p>"},{"location":"api/shark/-dominator-tree/get/","title":"Get","text":"<p>//leakcanary-repo/shark/DominatorTree/get</p>"},{"location":"api/shark/-dominator-tree/get/#get","title":"get","text":"<p>[jvm]\\ operator fun get(dominatedObjectId: Long): Long</p> <p>Returns the dominator object id or ValueHolder.NULL_REFERENCE if dominatedObjectId is the root dominator.</p>"},{"location":"api/shark/-dominator-tree/update-dominated-as-root/","title":"Update dominated as root","text":"<p>//leakcanary-repo/shark/DominatorTree/updateDominatedAsRoot</p>"},{"location":"api/shark/-dominator-tree/update-dominated-as-root/#updatedominatedasroot","title":"updateDominatedAsRoot","text":"<p>[jvm]\\ fun updateDominatedAsRoot(objectId: Long): Boolean</p> <p>Records that objectId is a root.</p>"},{"location":"api/shark/-dominator-tree/update-dominated/","title":"Update dominated","text":"<p>//leakcanary-repo/shark/DominatorTree/updateDominated</p>"},{"location":"api/shark/-dominator-tree/update-dominated/#updatedominated","title":"updateDominated","text":"<p>[jvm]\\ fun updateDominated(objectId: Long, parentObjectId: Long): Boolean</p> <p>Records that objectId can be reached through parentObjectId, updating the dominator for objectId to be either parentObjectId if objectId has no known dominator and otherwise to the Lowest Common Dominator between parentObjectId and the previously determined dominator for objectId.</p> <p>parentObjectId should already have been added via updateDominatedAsRoot. Failing to do that will throw IllegalStateException on future calls.</p> <p>This implementation is optimized with the assumption that the graph is visited as a breadth first search, so when objectId already has a known dominator then its dominator path is shorter than the dominator path of parentObjectId.</p>"},{"location":"api/shark/-dominator-tree/update-dominated/#return","title":"Return","text":"<p>true if objectId already had a known dominator, false otherwise.</p>"},{"location":"api/shark/-dominator-tree/-object-size-calculator/","title":"Index","text":"<p>//leakcanary-repo/shark/DominatorTree/ObjectSizeCalculator</p>"},{"location":"api/shark/-dominator-tree/-object-size-calculator/#objectsizecalculator","title":"ObjectSizeCalculator","text":"<p>fun interface ObjectSizeCalculator</p>"},{"location":"api/shark/-dominator-tree/-object-size-calculator/#inheritors","title":"Inheritors","text":"AndroidObjectSizeCalculator"},{"location":"api/shark/-dominator-tree/-object-size-calculator/#functions","title":"Functions","text":"Name Summary computeSize [jvm]abstract fun computeSize(objectId: Long): Int"},{"location":"api/shark/-dominator-tree/-object-size-calculator/compute-size/","title":"Compute size","text":"<p>//leakcanary-repo/shark/DominatorTree/ObjectSizeCalculator/computeSize</p>"},{"location":"api/shark/-dominator-tree/-object-size-calculator/compute-size/#computesize","title":"computeSize","text":"<p>[jvm]\\ abstract fun computeSize(objectId: Long): Int</p>"},{"location":"api/shark/-dominators/","title":"Index","text":"<p>//leakcanary-repo/shark/Dominators</p>"},{"location":"api/shark/-dominators/#dominators","title":"Dominators","text":"<p>[jvm]\\ class Dominators(val dominatorNodes: Map<Long, ObjectDominators.DominatorNode>) : Serializable</p>"},{"location":"api/shark/-dominators/#constructors","title":"Constructors","text":"Dominators [jvm]constructor(dominatorNodes: Map<Long, ObjectDominators.DominatorNode>)"},{"location":"api/shark/-dominators/#properties","title":"Properties","text":"Name Summary dominatorNodes [jvm]val dominatorNodes: Map<Long, ObjectDominators.DominatorNode>"},{"location":"api/shark/-dominators/-dominators/","title":"dominators","text":"<p>//leakcanary-repo/shark/Dominators/Dominators</p>"},{"location":"api/shark/-dominators/-dominators/#dominators","title":"Dominators","text":"<p>[jvm]\\ constructor(dominatorNodes: Map<Long, ObjectDominators.DominatorNode>)</p>"},{"location":"api/shark/-dominators/dominator-nodes/","title":"Dominator nodes","text":"<p>//leakcanary-repo/shark/Dominators/dominatorNodes</p>"},{"location":"api/shark/-dominators/dominator-nodes/#dominatornodes","title":"dominatorNodes","text":"<p>[jvm]\\ val dominatorNodes: Map<Long, ObjectDominators.DominatorNode></p>"},{"location":"api/shark/-dual-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/DualSourceProvider</p>"},{"location":"api/shark/-dual-source-provider/#dualsourceprovider","title":"DualSourceProvider","text":"<p>interface DualSourceProvider : StreamingSourceProvider, RandomAccessSourceProvider</p> <p>Both a StreamingSourceProvider and a RandomAccessSourceProvider</p>"},{"location":"api/shark/-dual-source-provider/#inheritors","title":"Inheritors","text":"ByteArraySourceProvider ConstantMemoryMetricsDualSourceProvider FileSourceProvider ThrowingCancelableFileSourceProvider"},{"location":"api/shark/-dual-source-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph openRandomAccessSource [jvm]abstract fun openRandomAccessSource(): RandomAccessSource openStreamingSource [jvm]abstract fun openStreamingSource(): BufferedSource"},{"location":"api/shark/-dump-process-command/","title":"Index","text":"<p>//leakcanary-repo/shark/DumpProcessCommand</p>"},{"location":"api/shark/-dump-process-command/#dumpprocesscommand","title":"DumpProcessCommand","text":"<p>[jvm]\\ class DumpProcessCommand : CliktCommand</p>"},{"location":"api/shark/-dump-process-command/#constructors","title":"Constructors","text":"DumpProcessCommand [jvm]constructor()"},{"location":"api/shark/-dump-process-command/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-dump-process-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-dump-process-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-dump-process-command/-dump-process-command/","title":"dump process command","text":"<p>//leakcanary-repo/shark/DumpProcessCommand/DumpProcessCommand</p>"},{"location":"api/shark/-dump-process-command/-dump-process-command/#dumpprocesscommand","title":"DumpProcessCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-dump-process-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/DumpProcessCommand/run</p>"},{"location":"api/shark/-dump-process-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-dump-process-command/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/DumpProcessCommand/Companion</p>"},{"location":"api/shark/-dump-process-command/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-dump-process-command/-companion/#functions","title":"Functions","text":"Name Summary dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File"},{"location":"api/shark/-dump-process-command/-companion/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/shark/DumpProcessCommand/Companion/dumpHeap</p>"},{"location":"api/shark/-dump-process-command/-companion/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File</p>"},{"location":"api/shark/-field-instance-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/FieldInstanceReferenceReader</p>"},{"location":"api/shark/-field-instance-reference-reader/#fieldinstancereferencereader","title":"FieldInstanceReferenceReader","text":"<p>[jvm]\\ class FieldInstanceReferenceReader(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ReferenceReader<HeapObject.HeapInstance> </p> <p>Expands instance fields that hold non null references.</p>"},{"location":"api/shark/-field-instance-reference-reader/#constructors","title":"Constructors","text":"FieldInstanceReferenceReader [jvm]constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-field-instance-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]open override fun read(source: HeapObject.HeapInstance): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-field-instance-reference-reader/-field-instance-reference-reader/","title":"field instance reference reader","text":"<p>//leakcanary-repo/shark/FieldInstanceReferenceReader/FieldInstanceReferenceReader</p>"},{"location":"api/shark/-field-instance-reference-reader/-field-instance-reference-reader/#fieldinstancereferencereader","title":"FieldInstanceReferenceReader","text":"<p>[jvm]\\ constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-field-instance-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/FieldInstanceReferenceReader/read</p>"},{"location":"api/shark/-field-instance-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ open override fun read(source: HeapObject.HeapInstance): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-file-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/FileSourceProvider</p>"},{"location":"api/shark/-file-source-provider/#filesourceprovider","title":"FileSourceProvider","text":"<p>[jvm]\\ class FileSourceProvider(file: File) : DualSourceProvider</p>"},{"location":"api/shark/-file-source-provider/#constructors","title":"Constructors","text":"FileSourceProvider [jvm]constructor(file: File)"},{"location":"api/shark/-file-source-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph openRandomAccessSource [jvm]open override fun openRandomAccessSource(): RandomAccessSource openStreamingSource [jvm]open override fun openStreamingSource(): BufferedSource"},{"location":"api/shark/-file-source-provider/-file-source-provider/","title":"file source provider","text":"<p>//leakcanary-repo/shark/FileSourceProvider/FileSourceProvider</p>"},{"location":"api/shark/-file-source-provider/-file-source-provider/#filesourceprovider","title":"FileSourceProvider","text":"<p>[jvm]\\ constructor(file: File)</p>"},{"location":"api/shark/-file-source-provider/open-random-access-source/","title":"Open random access source","text":"<p>//leakcanary-repo/shark/FileSourceProvider/openRandomAccessSource</p>"},{"location":"api/shark/-file-source-provider/open-random-access-source/#openrandomaccesssource","title":"openRandomAccessSource","text":"<p>[jvm]\\ open override fun openRandomAccessSource(): RandomAccessSource</p>"},{"location":"api/shark/-file-source-provider/open-streaming-source/","title":"Open streaming source","text":"<p>//leakcanary-repo/shark/FileSourceProvider/openStreamingSource</p>"},{"location":"api/shark/-file-source-provider/open-streaming-source/#openstreamingsource","title":"openStreamingSource","text":"<p>[jvm]\\ open override fun openStreamingSource(): BufferedSource</p>"},{"location":"api/shark/-filtering-leaking-object-finder/","title":"Index","text":"<p>//leakcanary-repo/shark/FilteringLeakingObjectFinder</p>"},{"location":"api/shark/-filtering-leaking-object-finder/#filteringleakingobjectfinder","title":"FilteringLeakingObjectFinder","text":"<p>[jvm]\\ class FilteringLeakingObjectFinder(filters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>) : LeakingObjectFinder</p> <p>Finds the objects that are leaking by scanning all objects in the heap dump and delegating the decision to a list of FilteringLeakingObjectFinder.LeakingObjectFilter</p>"},{"location":"api/shark/-filtering-leaking-object-finder/#constructors","title":"Constructors","text":"FilteringLeakingObjectFinder [jvm]constructor(filters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>)"},{"location":"api/shark/-filtering-leaking-object-finder/#types","title":"Types","text":"Name Summary LeakingObjectFilter [jvm]fun interface LeakingObjectFilterFilter to be passed to the FilteringLeakingObjectFinder constructor."},{"location":"api/shark/-filtering-leaking-object-finder/#functions","title":"Functions","text":"Name Summary findLeakingObjectIds [jvm]open override fun findLeakingObjectIds(graph: HeapGraph): Set<Long>For a given heap graph, returns a set of object ids for the objects that are leaking."},{"location":"api/shark/-filtering-leaking-object-finder/-filtering-leaking-object-finder/","title":"filtering leaking object finder","text":"<p>//leakcanary-repo/shark/FilteringLeakingObjectFinder/FilteringLeakingObjectFinder</p>"},{"location":"api/shark/-filtering-leaking-object-finder/-filtering-leaking-object-finder/#filteringleakingobjectfinder","title":"FilteringLeakingObjectFinder","text":"<p>[jvm]\\ constructor(filters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>)</p>"},{"location":"api/shark/-filtering-leaking-object-finder/find-leaking-object-ids/","title":"Find leaking object ids","text":"<p>//leakcanary-repo/shark/FilteringLeakingObjectFinder/findLeakingObjectIds</p>"},{"location":"api/shark/-filtering-leaking-object-finder/find-leaking-object-ids/#findleakingobjectids","title":"findLeakingObjectIds","text":"<p>[jvm]\\ open override fun findLeakingObjectIds(graph: HeapGraph): Set<Long></p> <p>For a given heap graph, returns a set of object ids for the objects that are leaking.</p>"},{"location":"api/shark/-filtering-leaking-object-finder/-leaking-object-filter/","title":"Index","text":"<p>//leakcanary-repo/shark/FilteringLeakingObjectFinder/LeakingObjectFilter</p>"},{"location":"api/shark/-filtering-leaking-object-finder/-leaking-object-filter/#leakingobjectfilter","title":"LeakingObjectFilter","text":"<p>[jvm]\\ fun interface LeakingObjectFilter</p> <p>Filter to be passed to the FilteringLeakingObjectFinder constructor.</p>"},{"location":"api/shark/-filtering-leaking-object-finder/-leaking-object-filter/#functions","title":"Functions","text":"Name Summary isLeakingObject [jvm]abstract fun isLeakingObject(heapObject: HeapObject): BooleanReturns whether the passed in heapObject is leaking. This should only return true when we\u2019re 100% sure the passed in heapObject should not be in memory anymore."},{"location":"api/shark/-filtering-leaking-object-finder/-leaking-object-filter/is-leaking-object/","title":"Is leaking object","text":"<p>//leakcanary-repo/shark/FilteringLeakingObjectFinder/LeakingObjectFilter/isLeakingObject</p>"},{"location":"api/shark/-filtering-leaking-object-finder/-leaking-object-filter/is-leaking-object/#isleakingobject","title":"isLeakingObject","text":"<p>[jvm]\\ abstract fun isLeakingObject(heapObject: HeapObject): Boolean</p> <p>Returns whether the passed in heapObject is leaking. This should only return true when we\u2019re 100% sure the passed in heapObject should not be in memory anymore.</p>"},{"location":"api/shark/-find-leak-paths/","title":"Index","text":"<p>//leakcanary-repo/shark/FindLeakPaths</p>"},{"location":"api/shark/-find-leak-paths/#findleakpaths","title":"FindLeakPaths","text":"<p>[jvm]\\ class FindLeakPaths</p>"},{"location":"api/shark/-find-leak-paths/#constructors","title":"Constructors","text":"FindLeakPaths [jvm]constructor()"},{"location":"api/shark/-find-leak-paths/#functions","title":"Functions","text":"Name Summary leakPaths [jvm]fun leakPaths(): List<Path>"},{"location":"api/shark/-find-leak-paths/#properties","title":"Properties","text":"Name Summary transaction [jvm]lateinit var transaction: Transaction"},{"location":"api/shark/-find-leak-paths/-find-leak-paths/","title":"find leak paths","text":"<p>//leakcanary-repo/shark/FindLeakPaths/FindLeakPaths</p>"},{"location":"api/shark/-find-leak-paths/-find-leak-paths/#findleakpaths","title":"FindLeakPaths","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-find-leak-paths/leak-paths/","title":"Leak paths","text":"<p>//leakcanary-repo/shark/FindLeakPaths/leakPaths</p>"},{"location":"api/shark/-find-leak-paths/leak-paths/#leakpaths","title":"leakPaths","text":"<p>[jvm]\\ fun leakPaths(): List<Path></p>"},{"location":"api/shark/-find-leak-paths/transaction/","title":"Transaction","text":"<p>//leakcanary-repo/shark/FindLeakPaths/transaction</p>"},{"location":"api/shark/-find-leak-paths/transaction/#transaction","title":"transaction","text":"<p>[jvm]\\ lateinit var transaction: Transaction</p>"},{"location":"api/shark/-first-heap-traversal/","title":"Index","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal</p>"},{"location":"api/shark/-first-heap-traversal/#firstheaptraversal","title":"FirstHeapTraversal","text":"<p>[jvm]\\ class FirstHeapTraversal(val shortestPathTree: ShortestPathObjectNode, previousTraversal: InitialState) : HeapTraversalOutput</p>"},{"location":"api/shark/-first-heap-traversal/#constructors","title":"Constructors","text":"FirstHeapTraversal [jvm]constructor(shortestPathTree: ShortestPathObjectNode, previousTraversal: InitialState)"},{"location":"api/shark/-first-heap-traversal/#properties","title":"Properties","text":"Name Summary scenarioLoopsPerGraph [jvm]open override val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. shortestPathTree [jvm]open override val shortestPathTree: ShortestPathObjectNodeA representation of the heap as a tree of shortest path from roots to each object in the heap, where: traversalCount [jvm]open override val traversalCount: Int = 1"},{"location":"api/shark/-first-heap-traversal/-first-heap-traversal/","title":"first heap traversal","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal/FirstHeapTraversal</p>"},{"location":"api/shark/-first-heap-traversal/-first-heap-traversal/#firstheaptraversal","title":"FirstHeapTraversal","text":"<p>[jvm]\\ constructor(shortestPathTree: ShortestPathObjectNode, previousTraversal: InitialState)</p>"},{"location":"api/shark/-first-heap-traversal/heap-graph-count/","title":"Heap graph count","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal/heapGraphCount</p>"},{"location":"api/shark/-first-heap-traversal/heap-graph-count/#heapgraphcount","title":"heapGraphCount","text":"<p>[jvm]\\ open override val heapGraphCount: Int?</p> <p>The expected max number of traversals, or null if unknown.</p>"},{"location":"api/shark/-first-heap-traversal/scenario-loops-per-graph/","title":"Scenario loops per graph","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal/scenarioLoopsPerGraph</p>"},{"location":"api/shark/-first-heap-traversal/scenario-loops-per-graph/#scenarioloopspergraph","title":"scenarioLoopsPerGraph","text":"<p>[jvm]\\ open override val scenarioLoopsPerGraph: Int</p> <p>How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal.</p>"},{"location":"api/shark/-first-heap-traversal/shortest-path-tree/","title":"Shortest path tree","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal/shortestPathTree</p>"},{"location":"api/shark/-first-heap-traversal/shortest-path-tree/#shortestpathtree","title":"shortestPathTree","text":"<p>[jvm]\\ open override val shortestPathTree: ShortestPathObjectNode</p> <p>A representation of the heap as a tree of shortest path from roots to each object in the heap, where:</p> <ul> <li>object identity is lost</li> <li>objects are grouped by identical path into a single node</li> <li> <p>Path element names are determined using the node & edge name to reach them (e.g. class name</p> </li> <li> <p>field name) as well as the class name of the reached object.</p> </li> </ul>"},{"location":"api/shark/-first-heap-traversal/traversal-count/","title":"Traversal count","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal/traversalCount</p>"},{"location":"api/shark/-first-heap-traversal/traversal-count/#traversalcount","title":"traversalCount","text":"<p>[jvm]\\ open override val traversalCount: Int = 1</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/FlatteningPartitionedInstanceReferenceReader</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/#flatteningpartitionedinstancereferencereader","title":"FlatteningPartitionedInstanceReferenceReader","text":"<p>[jvm]\\ class FlatteningPartitionedInstanceReferenceReader(graph: HeapGraph, instanceReferenceReader: FieldInstanceReferenceReader)</p> <p>FlatteningPartitionedInstanceReferenceReader provides a synthetic and stable representation of a data structure that maps how we think about that data structure instead of how it is internally implemented. You can think of it as surfacing additional direct references to entries that the data structure holds. VirtualInstanceReferenceReader implementations scan references based on known patterns rather than through generic traversals. As a result, they do not surface references and objects that are part of the data structure implementations, such as internal arrays or linked lists. This is a problem because the same traversal is also used to compute retained size, so we need to accounts for all reachable objects.</p> <p>One possible solution is to feed an instance to a FieldInstanceReferenceReader after its already been processed by a VirtualInstanceReferenceReader. The FieldInstanceReferenceReader will surface internal objects actually referenced by the source instance and from there the internals will be fed back into the traversal. This has two downsides: first, we will re read the exact same objects significantly later (with a DFS newly discovered objects are put back to the end of the queue) by which time the objects are likely evicted from the cache and need to be read again (additional IO). Second, when doing heap diffs to surface objects that grow, the internals of data structures (arrays, linked list) will grow somewhere further down the path from the data structure itself, so on top of the data structure already being surfaced as a growing objects, the internal objects will also be surfaced as a distinct location of object growth, creating noise in the result.</p> <p>FlatteningPartitionedInstanceReferenceReader exists to fix both of the issues mentioned in the previous paragraph. It performs a local graph traversal and returns all internal objects directly and indirectly dominated by a data structure as if they were all direct child of that data structure, removing the need for a an additional processing step with FieldInstanceReferenceReader. Because the graph traversal is local, with a dedicated small queue, we benefit from the in memory cache and avoid double IO reads of objects. And because these internal objects are all surfaced as direct children of the source instance, they\u2019ll never appear to grow, removing noise in the result.</p> <p>FlatteningPartitionedInstanceReferenceReader wraps a VirtualInstanceReferenceReader itself dedicated to a data structure that has no out edges beyond the one returned by the VirtualInstanceReferenceReader. Once the VirtualInstanceReferenceReader is done emitting all the out edges it knows about, FlatteningPartitionedInstanceReferenceReader will then explore instances and object arrays in the rest of the local graph using instanceReferenceReader and objectArrayReferenceReader, starting from the source, and emit all found nodes as virtual direct children of source. FlatteningPartitionedInstanceReferenceReader communicates to its consumers that the inner nodes should not be reloaded and explored by setting Reference.isLeafObject to true.</p> <p>Note: FlatteningPartitionedInstanceReferenceReader should only be used together with a VirtualInstanceReferenceReader that identifies all inner out edges of the data structure, as FlatteningPartitionedInstanceReferenceReader keeps track of those edges and knows to not follow them. If we missed an out edge, the inner traversal would then keep going and end up traversing the rest of the graph and presenting the entirety of the rest of the graph as directly referenced by the source instance. VirtualInstanceReferenceReader that can be used with FlatteningPartitionedInstanceReferenceReader return true from VirtualInstanceReferenceReader.readsCutSet.</p> <p>FlatteningPartitionedInstanceReferenceReader makes the assumption that there\u2019s no need to explore any class found as those would have already be found through classloaders.</p> <p>A side effect of the flattening is that a path involving indirect internal objects will look a bit strange, as the class for the owner of the reference will still be the real one, but the reference will be directly attached to the data structure which doesn\u2019t have that class in its class hierarchy.</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/#constructors","title":"Constructors","text":"FlatteningPartitionedInstanceReferenceReader [jvm]constructor(graph: HeapGraph, instanceReferenceReader: FieldInstanceReferenceReader)"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]fun read(virtualInstanceReader: ChainingInstanceReferenceReader.VirtualInstanceReferenceReader, source: HeapObject.HeapInstance): Sequence<Reference>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/-flattening-partitioned-instance-reference-reader/","title":"flattening partitioned instance reference reader","text":"<p>//leakcanary-repo/shark/FlatteningPartitionedInstanceReferenceReader/FlatteningPartitionedInstanceReferenceReader</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/-flattening-partitioned-instance-reference-reader/#flatteningpartitionedinstancereferencereader","title":"FlatteningPartitionedInstanceReferenceReader","text":"<p>[jvm]\\ constructor(graph: HeapGraph, instanceReferenceReader: FieldInstanceReferenceReader)</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/FlatteningPartitionedInstanceReferenceReader/read</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ fun read(virtualInstanceReader: ChainingInstanceReferenceReader.VirtualInstanceReferenceReader, source: HeapObject.HeapInstance): Sequence<Reference></p>"},{"location":"api/shark/-gc-root/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot</p>"},{"location":"api/shark/-gc-root/#gcroot","title":"GcRoot","text":"<p>sealed class GcRoot</p> <p>A GcRoot as identified by HprofRecord.HeapDumpRecord.GcRootRecord in the heap dump.</p>"},{"location":"api/shark/-gc-root/#inheritors","title":"Inheritors","text":"Unknown JniGlobal JniLocal JavaFrame NativeStack StickyClass ThreadBlock MonitorUsed ThreadObject ReferenceCleanup VmInternal JniMonitor InternedString Finalizing Debugger Unreachable"},{"location":"api/shark/-gc-root/#types","title":"Types","text":"Name Summary Debugger [jvm]class Debugger(val id: Long) : GcRootAn object held by a connected debugger Finalizing [jvm]class Finalizing(val id: Long) : GcRootAn object that is in a queue, waiting for a finalizer to run. InternedString [jvm]class InternedString(val id: Long) : GcRootAn interned string, see java.lang.String.intern. JavaFrame [jvm]class JavaFrame(val id: Long, val threadSerialNumber: Int, val frameNumber: Int) : GcRootA java local variable JniGlobal [jvm]class JniGlobal(val id: Long, val jniGlobalRefId: Long) : GcRootA global variable in native code. JniLocal [jvm]class JniLocal(val id: Long, val threadSerialNumber: Int, val frameNumber: Int) : GcRootA local variable in native code. JniMonitor [jvm]class JniMonitor(val id: Long, val stackTraceSerialNumber: Int, val stackDepth: Int) : GcRootIt\u2019s unclear what this is, documentation welcome. MonitorUsed [jvm]class MonitorUsed(val id: Long) : GcRootEverything that called the wait() or notify() methods, or that is synchronized. NativeStack [jvm]class NativeStack(val id: Long, val threadSerialNumber: Int) : GcRootInput or output parameters in native code ReferenceCleanup [jvm]class ReferenceCleanup(val id: Long) : GcRootIt\u2019s unclear what this is, documentation welcome. StickyClass [jvm]class StickyClass(val id: Long) : GcRootA system class ThreadBlock [jvm]class ThreadBlock(val id: Long, val threadSerialNumber: Int) : GcRoot ThreadObject [jvm]class ThreadObject(val id: Long, val threadSerialNumber: Int, val stackTraceSerialNumber: Int) : GcRootA thread. Unknown [jvm]class Unknown(val id: Long) : GcRootAn unknown gc root. Unreachable [jvm]class Unreachable(val id: Long) : GcRootAn object that is unreachable from any other root, but not a root itself. VmInternal [jvm]class VmInternal(val id: Long) : GcRootIt\u2019s unclear what this is, documentation welcome."},{"location":"api/shark/-gc-root/#properties","title":"Properties","text":"Name Summary id [jvm]abstract val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/id</p>"},{"location":"api/shark/-gc-root/id/#id","title":"id","text":"<p>[jvm]\\ abstract val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-debugger/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/Debugger</p>"},{"location":"api/shark/-gc-root/-debugger/#debugger","title":"Debugger","text":"<p>[jvm]\\ class Debugger(val id: Long) : GcRoot</p> <p>An object held by a connected debugger</p>"},{"location":"api/shark/-gc-root/-debugger/#constructors","title":"Constructors","text":"Debugger [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-debugger/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-debugger/-debugger/","title":"debugger","text":"<p>//leakcanary-repo/shark/GcRoot/Debugger/Debugger</p>"},{"location":"api/shark/-gc-root/-debugger/-debugger/#debugger","title":"Debugger","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-debugger/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/Debugger/id</p>"},{"location":"api/shark/-gc-root/-debugger/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-finalizing/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/Finalizing</p>"},{"location":"api/shark/-gc-root/-finalizing/#finalizing","title":"Finalizing","text":"<p>[jvm]\\ class Finalizing(val id: Long) : GcRoot</p> <p>An object that is in a queue, waiting for a finalizer to run.</p>"},{"location":"api/shark/-gc-root/-finalizing/#constructors","title":"Constructors","text":"Finalizing [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-finalizing/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-finalizing/-finalizing/","title":"finalizing","text":"<p>//leakcanary-repo/shark/GcRoot/Finalizing/Finalizing</p>"},{"location":"api/shark/-gc-root/-finalizing/-finalizing/#finalizing","title":"Finalizing","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-finalizing/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/Finalizing/id</p>"},{"location":"api/shark/-gc-root/-finalizing/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-interned-string/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/InternedString</p>"},{"location":"api/shark/-gc-root/-interned-string/#internedstring","title":"InternedString","text":"<p>[jvm]\\ class InternedString(val id: Long) : GcRoot</p> <p>An interned string, see java.lang.String.intern.</p>"},{"location":"api/shark/-gc-root/-interned-string/#constructors","title":"Constructors","text":"InternedString [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-interned-string/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-interned-string/-interned-string/","title":"interned string","text":"<p>//leakcanary-repo/shark/GcRoot/InternedString/InternedString</p>"},{"location":"api/shark/-gc-root/-interned-string/-interned-string/#internedstring","title":"InternedString","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-interned-string/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/InternedString/id</p>"},{"location":"api/shark/-gc-root/-interned-string/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-java-frame/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/JavaFrame</p>"},{"location":"api/shark/-gc-root/-java-frame/#javaframe","title":"JavaFrame","text":"<p>[jvm]\\ class JavaFrame(val id: Long, val threadSerialNumber: Int, val frameNumber: Int) : GcRoot</p> <p>A java local variable</p>"},{"location":"api/shark/-gc-root/-java-frame/#constructors","title":"Constructors","text":"JavaFrame [jvm]constructor(id: Long, threadSerialNumber: Int, frameNumber: Int)"},{"location":"api/shark/-gc-root/-java-frame/#properties","title":"Properties","text":"Name Summary frameNumber [jvm]val frameNumber: Intframe number in stack trace (-1 for empty) id [jvm]open override val id: LongThe object id of the object that this gc root references. threadSerialNumber [jvm]val threadSerialNumber: IntCorresponds to ThreadObject.threadSerialNumber"},{"location":"api/shark/-gc-root/-java-frame/-java-frame/","title":"java frame","text":"<p>//leakcanary-repo/shark/GcRoot/JavaFrame/JavaFrame</p>"},{"location":"api/shark/-gc-root/-java-frame/-java-frame/#javaframe","title":"JavaFrame","text":"<p>[jvm]\\ constructor(id: Long, threadSerialNumber: Int, frameNumber: Int)</p>"},{"location":"api/shark/-gc-root/-java-frame/frame-number/","title":"Frame number","text":"<p>//leakcanary-repo/shark/GcRoot/JavaFrame/frameNumber</p>"},{"location":"api/shark/-gc-root/-java-frame/frame-number/#framenumber","title":"frameNumber","text":"<p>[jvm]\\ val frameNumber: Int</p> <p>frame number in stack trace (-1 for empty)</p>"},{"location":"api/shark/-gc-root/-java-frame/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/JavaFrame/id</p>"},{"location":"api/shark/-gc-root/-java-frame/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-java-frame/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/GcRoot/JavaFrame/threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-java-frame/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p> <p>Corresponds to ThreadObject.threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-jni-global/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/JniGlobal</p>"},{"location":"api/shark/-gc-root/-jni-global/#jniglobal","title":"JniGlobal","text":"<p>[jvm]\\ class JniGlobal(val id: Long, val jniGlobalRefId: Long) : GcRoot</p> <p>A global variable in native code.</p>"},{"location":"api/shark/-gc-root/-jni-global/#constructors","title":"Constructors","text":"JniGlobal [jvm]constructor(id: Long, jniGlobalRefId: Long)"},{"location":"api/shark/-gc-root/-jni-global/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references. jniGlobalRefId [jvm]val jniGlobalRefId: Long"},{"location":"api/shark/-gc-root/-jni-global/-jni-global/","title":"jni global","text":"<p>//leakcanary-repo/shark/GcRoot/JniGlobal/JniGlobal</p>"},{"location":"api/shark/-gc-root/-jni-global/-jni-global/#jniglobal","title":"JniGlobal","text":"<p>[jvm]\\ constructor(id: Long, jniGlobalRefId: Long)</p>"},{"location":"api/shark/-gc-root/-jni-global/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/JniGlobal/id</p>"},{"location":"api/shark/-gc-root/-jni-global/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-jni-global/jni-global-ref-id/","title":"Jni global ref id","text":"<p>//leakcanary-repo/shark/GcRoot/JniGlobal/jniGlobalRefId</p>"},{"location":"api/shark/-gc-root/-jni-global/jni-global-ref-id/#jniglobalrefid","title":"jniGlobalRefId","text":"<p>[jvm]\\ val jniGlobalRefId: Long</p>"},{"location":"api/shark/-gc-root/-jni-local/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/JniLocal</p>"},{"location":"api/shark/-gc-root/-jni-local/#jnilocal","title":"JniLocal","text":"<p>[jvm]\\ class JniLocal(val id: Long, val threadSerialNumber: Int, val frameNumber: Int) : GcRoot</p> <p>A local variable in native code.</p>"},{"location":"api/shark/-gc-root/-jni-local/#constructors","title":"Constructors","text":"JniLocal [jvm]constructor(id: Long, threadSerialNumber: Int, frameNumber: Int)"},{"location":"api/shark/-gc-root/-jni-local/#properties","title":"Properties","text":"Name Summary frameNumber [jvm]val frameNumber: Intframe number in stack trace (-1 for empty) id [jvm]open override val id: LongThe object id of the object that this gc root references. threadSerialNumber [jvm]val threadSerialNumber: IntCorresponds to ThreadObject.threadSerialNumber"},{"location":"api/shark/-gc-root/-jni-local/-jni-local/","title":"jni local","text":"<p>//leakcanary-repo/shark/GcRoot/JniLocal/JniLocal</p>"},{"location":"api/shark/-gc-root/-jni-local/-jni-local/#jnilocal","title":"JniLocal","text":"<p>[jvm]\\ constructor(id: Long, threadSerialNumber: Int, frameNumber: Int)</p>"},{"location":"api/shark/-gc-root/-jni-local/frame-number/","title":"Frame number","text":"<p>//leakcanary-repo/shark/GcRoot/JniLocal/frameNumber</p>"},{"location":"api/shark/-gc-root/-jni-local/frame-number/#framenumber","title":"frameNumber","text":"<p>[jvm]\\ val frameNumber: Int</p> <p>frame number in stack trace (-1 for empty)</p>"},{"location":"api/shark/-gc-root/-jni-local/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/JniLocal/id</p>"},{"location":"api/shark/-gc-root/-jni-local/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-jni-local/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/GcRoot/JniLocal/threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-jni-local/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p> <p>Corresponds to ThreadObject.threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-jni-monitor/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/JniMonitor</p>"},{"location":"api/shark/-gc-root/-jni-monitor/#jnimonitor","title":"JniMonitor","text":"<p>[jvm]\\ class JniMonitor(val id: Long, val stackTraceSerialNumber: Int, val stackDepth: Int) : GcRoot</p> <p>It\u2019s unclear what this is, documentation welcome.</p>"},{"location":"api/shark/-gc-root/-jni-monitor/#constructors","title":"Constructors","text":"JniMonitor [jvm]constructor(id: Long, stackTraceSerialNumber: Int, stackDepth: Int)"},{"location":"api/shark/-gc-root/-jni-monitor/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references. stackDepth [jvm]val stackDepth: Int stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int"},{"location":"api/shark/-gc-root/-jni-monitor/-jni-monitor/","title":"jni monitor","text":"<p>//leakcanary-repo/shark/GcRoot/JniMonitor/JniMonitor</p>"},{"location":"api/shark/-gc-root/-jni-monitor/-jni-monitor/#jnimonitor","title":"JniMonitor","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, stackDepth: Int)</p>"},{"location":"api/shark/-gc-root/-jni-monitor/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/JniMonitor/id</p>"},{"location":"api/shark/-gc-root/-jni-monitor/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-jni-monitor/stack-depth/","title":"Stack depth","text":"<p>//leakcanary-repo/shark/GcRoot/JniMonitor/stackDepth</p>"},{"location":"api/shark/-gc-root/-jni-monitor/stack-depth/#stackdepth","title":"stackDepth","text":"<p>[jvm]\\ val stackDepth: Int</p>"},{"location":"api/shark/-gc-root/-jni-monitor/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/GcRoot/JniMonitor/stackTraceSerialNumber</p>"},{"location":"api/shark/-gc-root/-jni-monitor/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-gc-root/-monitor-used/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/MonitorUsed</p>"},{"location":"api/shark/-gc-root/-monitor-used/#monitorused","title":"MonitorUsed","text":"<p>[jvm]\\ class MonitorUsed(val id: Long) : GcRoot</p> <p>Everything that called the wait() or notify() methods, or that is synchronized.</p>"},{"location":"api/shark/-gc-root/-monitor-used/#constructors","title":"Constructors","text":"MonitorUsed [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-monitor-used/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-monitor-used/-monitor-used/","title":"monitor used","text":"<p>//leakcanary-repo/shark/GcRoot/MonitorUsed/MonitorUsed</p>"},{"location":"api/shark/-gc-root/-monitor-used/-monitor-used/#monitorused","title":"MonitorUsed","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-monitor-used/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/MonitorUsed/id</p>"},{"location":"api/shark/-gc-root/-monitor-used/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-native-stack/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/NativeStack</p>"},{"location":"api/shark/-gc-root/-native-stack/#nativestack","title":"NativeStack","text":"<p>[jvm]\\ class NativeStack(val id: Long, val threadSerialNumber: Int) : GcRoot</p> <p>Input or output parameters in native code</p>"},{"location":"api/shark/-gc-root/-native-stack/#constructors","title":"Constructors","text":"NativeStack [jvm]constructor(id: Long, threadSerialNumber: Int)"},{"location":"api/shark/-gc-root/-native-stack/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references. threadSerialNumber [jvm]val threadSerialNumber: IntCorresponds to ThreadObject.threadSerialNumber Note: the corresponding thread is sometimes not found, see: https://issuetracker.google.com/issues/122713143"},{"location":"api/shark/-gc-root/-native-stack/-native-stack/","title":"native stack","text":"<p>//leakcanary-repo/shark/GcRoot/NativeStack/NativeStack</p>"},{"location":"api/shark/-gc-root/-native-stack/-native-stack/#nativestack","title":"NativeStack","text":"<p>[jvm]\\ constructor(id: Long, threadSerialNumber: Int)</p>"},{"location":"api/shark/-gc-root/-native-stack/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/NativeStack/id</p>"},{"location":"api/shark/-gc-root/-native-stack/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-native-stack/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/GcRoot/NativeStack/threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-native-stack/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p> <p>Corresponds to ThreadObject.threadSerialNumber Note: the corresponding thread is sometimes not found, see: https://issuetracker.google.com/issues/122713143</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/ReferenceCleanup</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/#referencecleanup","title":"ReferenceCleanup","text":"<p>[jvm]\\ class ReferenceCleanup(val id: Long) : GcRoot</p> <p>It\u2019s unclear what this is, documentation welcome.</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/#constructors","title":"Constructors","text":"ReferenceCleanup [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-reference-cleanup/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-reference-cleanup/-reference-cleanup/","title":"reference cleanup","text":"<p>//leakcanary-repo/shark/GcRoot/ReferenceCleanup/ReferenceCleanup</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/-reference-cleanup/#referencecleanup","title":"ReferenceCleanup","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/ReferenceCleanup/id</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-sticky-class/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/StickyClass</p>"},{"location":"api/shark/-gc-root/-sticky-class/#stickyclass","title":"StickyClass","text":"<p>[jvm]\\ class StickyClass(val id: Long) : GcRoot</p> <p>A system class</p>"},{"location":"api/shark/-gc-root/-sticky-class/#constructors","title":"Constructors","text":"StickyClass [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-sticky-class/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-sticky-class/-sticky-class/","title":"sticky class","text":"<p>//leakcanary-repo/shark/GcRoot/StickyClass/StickyClass</p>"},{"location":"api/shark/-gc-root/-sticky-class/-sticky-class/#stickyclass","title":"StickyClass","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-sticky-class/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/StickyClass/id</p>"},{"location":"api/shark/-gc-root/-sticky-class/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-thread-block/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadBlock</p>"},{"location":"api/shark/-gc-root/-thread-block/#threadblock","title":"ThreadBlock","text":"<p>[jvm]\\ class ThreadBlock(val id: Long, val threadSerialNumber: Int) : GcRoot</p>"},{"location":"api/shark/-gc-root/-thread-block/#constructors","title":"Constructors","text":"ThreadBlock [jvm]constructor(id: Long, threadSerialNumber: Int)"},{"location":"api/shark/-gc-root/-thread-block/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references. threadSerialNumber [jvm]val threadSerialNumber: IntCorresponds to ThreadObject.threadSerialNumber"},{"location":"api/shark/-gc-root/-thread-block/-thread-block/","title":"thread block","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadBlock/ThreadBlock</p>"},{"location":"api/shark/-gc-root/-thread-block/-thread-block/#threadblock","title":"ThreadBlock","text":"<p>[jvm]\\ constructor(id: Long, threadSerialNumber: Int)</p>"},{"location":"api/shark/-gc-root/-thread-block/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadBlock/id</p>"},{"location":"api/shark/-gc-root/-thread-block/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-thread-block/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadBlock/threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-thread-block/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p> <p>Corresponds to ThreadObject.threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-thread-object/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadObject</p>"},{"location":"api/shark/-gc-root/-thread-object/#threadobject","title":"ThreadObject","text":"<p>[jvm]\\ class ThreadObject(val id: Long, val threadSerialNumber: Int, val stackTraceSerialNumber: Int) : GcRoot</p> <p>A thread.</p> <p>Added at https://android.googlesource.com/platform/tools/base/+/c0f0d528c155cab32e372dac77370569a386245c</p>"},{"location":"api/shark/-gc-root/-thread-object/#constructors","title":"Constructors","text":"ThreadObject [jvm]constructor(id: Long, threadSerialNumber: Int, stackTraceSerialNumber: Int)"},{"location":"api/shark/-gc-root/-thread-object/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references. stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int threadSerialNumber [jvm]val threadSerialNumber: Int"},{"location":"api/shark/-gc-root/-thread-object/-thread-object/","title":"thread object","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadObject/ThreadObject</p>"},{"location":"api/shark/-gc-root/-thread-object/-thread-object/#threadobject","title":"ThreadObject","text":"<p>[jvm]\\ constructor(id: Long, threadSerialNumber: Int, stackTraceSerialNumber: Int)</p>"},{"location":"api/shark/-gc-root/-thread-object/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadObject/id</p>"},{"location":"api/shark/-gc-root/-thread-object/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-thread-object/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadObject/stackTraceSerialNumber</p>"},{"location":"api/shark/-gc-root/-thread-object/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-gc-root/-thread-object/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadObject/threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-thread-object/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p>"},{"location":"api/shark/-gc-root/-unknown/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/Unknown</p>"},{"location":"api/shark/-gc-root/-unknown/#unknown","title":"Unknown","text":"<p>[jvm]\\ class Unknown(val id: Long) : GcRoot</p> <p>An unknown gc root.</p>"},{"location":"api/shark/-gc-root/-unknown/#constructors","title":"Constructors","text":"Unknown [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-unknown/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-unknown/-unknown/","title":"unknown","text":"<p>//leakcanary-repo/shark/GcRoot/Unknown/Unknown</p>"},{"location":"api/shark/-gc-root/-unknown/-unknown/#unknown","title":"Unknown","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-unknown/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/Unknown/id</p>"},{"location":"api/shark/-gc-root/-unknown/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-unreachable/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/Unreachable</p>"},{"location":"api/shark/-gc-root/-unreachable/#unreachable","title":"Unreachable","text":"<p>[jvm]\\ class Unreachable(val id: Long) : GcRoot</p> <p>An object that is unreachable from any other root, but not a root itself.</p>"},{"location":"api/shark/-gc-root/-unreachable/#constructors","title":"Constructors","text":"Unreachable [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-unreachable/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-unreachable/-unreachable/","title":"unreachable","text":"<p>//leakcanary-repo/shark/GcRoot/Unreachable/Unreachable</p>"},{"location":"api/shark/-gc-root/-unreachable/-unreachable/#unreachable","title":"Unreachable","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-unreachable/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/Unreachable/id</p>"},{"location":"api/shark/-gc-root/-unreachable/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-vm-internal/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/VmInternal</p>"},{"location":"api/shark/-gc-root/-vm-internal/#vminternal","title":"VmInternal","text":"<p>[jvm]\\ class VmInternal(val id: Long) : GcRoot</p> <p>It\u2019s unclear what this is, documentation welcome.</p>"},{"location":"api/shark/-gc-root/-vm-internal/#constructors","title":"Constructors","text":"VmInternal [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-vm-internal/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-vm-internal/-vm-internal/","title":"vm internal","text":"<p>//leakcanary-repo/shark/GcRoot/VmInternal/VmInternal</p>"},{"location":"api/shark/-gc-root/-vm-internal/-vm-internal/#vminternal","title":"VmInternal","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-vm-internal/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/VmInternal/id</p>"},{"location":"api/shark/-gc-root/-vm-internal/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRootProvider</p>"},{"location":"api/shark/-gc-root-provider/#gcrootprovider","title":"GcRootProvider","text":"<p>fun interface GcRootProvider</p>"},{"location":"api/shark/-gc-root-provider/#inheritors","title":"Inheritors","text":"MatchingGcRootProvider"},{"location":"api/shark/-gc-root-provider/#functions","title":"Functions","text":"Name Summary provideGcRoots [jvm]abstract fun provideGcRoots(graph: HeapGraph): Sequence<GcRootReference>Provides a sequence of GC Roots to traverse the graph from, ideally in a stable order."},{"location":"api/shark/-gc-root-provider/provide-gc-roots/","title":"Provide gc roots","text":"<p>//leakcanary-repo/shark/GcRootProvider/provideGcRoots</p>"},{"location":"api/shark/-gc-root-provider/provide-gc-roots/#providegcroots","title":"provideGcRoots","text":"<p>[jvm]\\ abstract fun provideGcRoots(graph: HeapGraph): Sequence<GcRootReference></p> <p>Provides a sequence of GC Roots to traverse the graph from, ideally in a stable order.</p>"},{"location":"api/shark/-gc-root-reference/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRootReference</p>"},{"location":"api/shark/-gc-root-reference/#gcrootreference","title":"GcRootReference","text":"<p>[jvm]\\ class GcRootReference(val gcRoot: GcRoot, val isLowPriority: Boolean, val matchedLibraryLeak: LibraryLeakReferenceMatcher?)</p>"},{"location":"api/shark/-gc-root-reference/#constructors","title":"Constructors","text":"GcRootReference [jvm]constructor(gcRoot: GcRoot, isLowPriority: Boolean, matchedLibraryLeak: LibraryLeakReferenceMatcher?)"},{"location":"api/shark/-gc-root-reference/#properties","title":"Properties","text":"Name Summary gcRoot [jvm]val gcRoot: GcRoot isLowPriority [jvm]val isLowPriority: Boolean matchedLibraryLeak [jvm]val matchedLibraryLeak: LibraryLeakReferenceMatcher?"},{"location":"api/shark/-gc-root-reference/-gc-root-reference/","title":"gc root reference","text":"<p>//leakcanary-repo/shark/GcRootReference/GcRootReference</p>"},{"location":"api/shark/-gc-root-reference/-gc-root-reference/#gcrootreference","title":"GcRootReference","text":"<p>[jvm]\\ constructor(gcRoot: GcRoot, isLowPriority: Boolean, matchedLibraryLeak: LibraryLeakReferenceMatcher?)</p>"},{"location":"api/shark/-gc-root-reference/gc-root/","title":"Gc root","text":"<p>//leakcanary-repo/shark/GcRootReference/gcRoot</p>"},{"location":"api/shark/-gc-root-reference/gc-root/#gcroot","title":"gcRoot","text":"<p>[jvm]\\ val gcRoot: GcRoot</p>"},{"location":"api/shark/-gc-root-reference/is-low-priority/","title":"Is low priority","text":"<p>//leakcanary-repo/shark/GcRootReference/isLowPriority</p>"},{"location":"api/shark/-gc-root-reference/is-low-priority/#islowpriority","title":"isLowPriority","text":"<p>[jvm]\\ val isLowPriority: Boolean</p>"},{"location":"api/shark/-gc-root-reference/matched-library-leak/","title":"Matched library leak","text":"<p>//leakcanary-repo/shark/GcRootReference/matchedLibraryLeak</p>"},{"location":"api/shark/-gc-root-reference/matched-library-leak/#matchedlibraryleak","title":"matchedLibraryLeak","text":"<p>[jvm]\\ val matchedLibraryLeak: LibraryLeakReferenceMatcher?</p>"},{"location":"api/shark/-graph-context/","title":"Index","text":"<p>//leakcanary-repo/shark/GraphContext</p>"},{"location":"api/shark/-graph-context/#graphcontext","title":"GraphContext","text":"<p>[jvm]\\ class GraphContext</p> <p>In memory store that can be used to store objects in a given HeapGraph instance. This is a simple MutableMap of String to Any, but with unsafe generics access.</p>"},{"location":"api/shark/-graph-context/#constructors","title":"Constructors","text":"GraphContext [jvm]constructor()"},{"location":"api/shark/-graph-context/#functions","title":"Functions","text":"Name Summary contains [jvm]operator fun contains(key: String): Boolean get [jvm]operator fun <T> get(key: String): T? getOrPut [jvm]fun <T> getOrPut(key: String, defaultValue: () -> T): T minusAssign [jvm]operator fun minusAssign(key: String) set [jvm]operator fun <T> set(key: String, value: T)"},{"location":"api/shark/-graph-context/-graph-context/","title":"graph context","text":"<p>//leakcanary-repo/shark/GraphContext/GraphContext</p>"},{"location":"api/shark/-graph-context/-graph-context/#graphcontext","title":"GraphContext","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-graph-context/contains/","title":"Contains","text":"<p>//leakcanary-repo/shark/GraphContext/contains</p>"},{"location":"api/shark/-graph-context/contains/#contains","title":"contains","text":"<p>[jvm]\\ operator fun contains(key: String): Boolean</p>"},{"location":"api/shark/-graph-context/contains/#see-also","title":"See also","text":"MutableMap.containsKey"},{"location":"api/shark/-graph-context/get-or-put/","title":"Get or put","text":"<p>//leakcanary-repo/shark/GraphContext/getOrPut</p>"},{"location":"api/shark/-graph-context/get-or-put/#getorput","title":"getOrPut","text":"<p>[jvm]\\ fun <T> getOrPut(key: String, defaultValue: () -> T): T</p>"},{"location":"api/shark/-graph-context/get-or-put/#see-also","title":"See also","text":"getOrPut"},{"location":"api/shark/-graph-context/get/","title":"Get","text":"<p>//leakcanary-repo/shark/GraphContext/get</p>"},{"location":"api/shark/-graph-context/get/#get","title":"get","text":"<p>[jvm]\\ operator fun <T> get(key: String): T?</p>"},{"location":"api/shark/-graph-context/minus-assign/","title":"Minus assign","text":"<p>//leakcanary-repo/shark/GraphContext/minusAssign</p>"},{"location":"api/shark/-graph-context/minus-assign/#minusassign","title":"minusAssign","text":"<p>[jvm]\\ operator fun minusAssign(key: String)</p>"},{"location":"api/shark/-graph-context/minus-assign/#see-also","title":"See also","text":"MutableMap.remove"},{"location":"api/shark/-graph-context/set/","title":"Set","text":"<p>//leakcanary-repo/shark/GraphContext/set</p>"},{"location":"api/shark/-graph-context/set/#set","title":"set","text":"<p>[jvm]\\ operator fun <T> set(key: String, value: T)</p>"},{"location":"api/shark/-graph-context/set/#see-also","title":"See also","text":"set"},{"location":"api/shark/-heap-analysis/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysis</p>"},{"location":"api/shark/-heap-analysis/#heapanalysis","title":"HeapAnalysis","text":"<p>sealed class HeapAnalysis : Serializable</p> <p>The result of an analysis performed by HeapAnalyzer, either a HeapAnalysisSuccess or a HeapAnalysisFailure. This class is serializable however there are no guarantees of forward compatibility.</p>"},{"location":"api/shark/-heap-analysis/#inheritors","title":"Inheritors","text":"HeapAnalysisFailure HeapAnalysisSuccess"},{"location":"api/shark/-heap-analysis/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-analysis/#properties","title":"Properties","text":"Name Summary analysisDurationMillis [jvm]abstract val analysisDurationMillis: LongTotal time spent analyzing the heap. createdAtTimeMillis [jvm]abstract val createdAtTimeMillis: LongThe System.currentTimeMillis when this HeapAnalysis instance was created. dumpDurationMillis [jvm]abstract val dumpDurationMillis: LongTotal time spent dumping the heap. heapDumpFile [jvm]abstract val heapDumpFile: FileThe hprof file that was analyzed."},{"location":"api/shark/-heap-analysis/analysis-duration-millis/","title":"Analysis duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysis/analysisDurationMillis</p>"},{"location":"api/shark/-heap-analysis/analysis-duration-millis/#analysisdurationmillis","title":"analysisDurationMillis","text":"<p>[jvm]\\ abstract val analysisDurationMillis: Long</p> <p>Total time spent analyzing the heap.</p>"},{"location":"api/shark/-heap-analysis/created-at-time-millis/","title":"Created at time millis","text":"<p>//leakcanary-repo/shark/HeapAnalysis/createdAtTimeMillis</p>"},{"location":"api/shark/-heap-analysis/created-at-time-millis/#createdattimemillis","title":"createdAtTimeMillis","text":"<p>[jvm]\\ abstract val createdAtTimeMillis: Long</p> <p>The System.currentTimeMillis when this HeapAnalysis instance was created.</p>"},{"location":"api/shark/-heap-analysis/dump-duration-millis/","title":"Dump duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysis/dumpDurationMillis</p>"},{"location":"api/shark/-heap-analysis/dump-duration-millis/#dumpdurationmillis","title":"dumpDurationMillis","text":"<p>[jvm]\\ abstract val dumpDurationMillis: Long</p> <p>Total time spent dumping the heap.</p>"},{"location":"api/shark/-heap-analysis/heap-dump-file/","title":"Heap dump file","text":"<p>//leakcanary-repo/shark/HeapAnalysis/heapDumpFile</p>"},{"location":"api/shark/-heap-analysis/heap-dump-file/#heapdumpfile","title":"heapDumpFile","text":"<p>[jvm]\\ abstract val heapDumpFile: File</p> <p>The hprof file that was analyzed.</p>"},{"location":"api/shark/-heap-analysis/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysis/Companion</p>"},{"location":"api/shark/-heap-analysis/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-analysis/-companion/#properties","title":"Properties","text":"Name Summary DUMP_DURATION_UNKNOWN [jvm]const val DUMP_DURATION_UNKNOWN: Long"},{"location":"api/shark/-heap-analysis/-companion/-d-u-m-p_-d-u-r-a-t-i-o-n_-u-n-k-n-o-w-n/","title":"d u m p d u r a t i o n u n k n o w n","text":"<p>//leakcanary-repo/shark/HeapAnalysis/Companion/DUMP_DURATION_UNKNOWN</p>"},{"location":"api/shark/-heap-analysis/-companion/-d-u-m-p_-d-u-r-a-t-i-o-n_-u-n-k-n-o-w-n/#dump_duration_unknown","title":"DUMP_DURATION_UNKNOWN","text":"<p>[jvm]\\ const val DUMP_DURATION_UNKNOWN: Long</p>"},{"location":"api/shark/-heap-analysis-exception/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisException</p>"},{"location":"api/shark/-heap-analysis-exception/#heapanalysisexception","title":"HeapAnalysisException","text":"<p>[jvm]\\ class HeapAnalysisException(cause: Throwable) : RuntimeException</p>"},{"location":"api/shark/-heap-analysis-exception/#constructors","title":"Constructors","text":"HeapAnalysisException [jvm]constructor(cause: Throwable)"},{"location":"api/shark/-heap-analysis-exception/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-analysis-exception/#functions","title":"Functions","text":"Name Summary addSuppressed [jvm]fun addSuppressed(p0: Throwable) fillInStackTrace [jvm]open fun fillInStackTrace(): Throwable getLocalizedMessage [jvm]open fun getLocalizedMessage(): String getStackTrace [jvm]open fun getStackTrace(): Array<StackTraceElement> getSuppressed [jvm]fun getSuppressed(): Array<Throwable> initCause [jvm]open fun initCause(p0: Throwable): Throwable printStackTrace [jvm]open fun printStackTrace()open fun printStackTrace(p0: PrintStream)open fun printStackTrace(p0: PrintWriter) setStackTrace [jvm]open fun setStackTrace(p0: Array<StackTraceElement>) toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-analysis-exception/#properties","title":"Properties","text":"Name Summary cause [jvm]open val cause: Throwable? message [jvm]open val message: String?"},{"location":"api/shark/-heap-analysis-exception/-heap-analysis-exception/","title":"heap analysis exception","text":"<p>//leakcanary-repo/shark/HeapAnalysisException/HeapAnalysisException</p>"},{"location":"api/shark/-heap-analysis-exception/-heap-analysis-exception/#heapanalysisexception","title":"HeapAnalysisException","text":"<p>[jvm]\\ constructor(cause: Throwable)</p>"},{"location":"api/shark/-heap-analysis-exception/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapAnalysisException/toString</p>"},{"location":"api/shark/-heap-analysis-exception/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-analysis-exception/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisException/Companion</p>"},{"location":"api/shark/-heap-analysis-exception/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-analysis-failure/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure</p>"},{"location":"api/shark/-heap-analysis-failure/#heapanalysisfailure","title":"HeapAnalysisFailure","text":"<p>[jvm]\\ data class HeapAnalysisFailure(val heapDumpFile: File, val createdAtTimeMillis: Long, val dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: Long, val exception: HeapAnalysisException) : HeapAnalysis</p> <p>The analysis performed by HeapAnalyzer did not complete successfully.</p>"},{"location":"api/shark/-heap-analysis-failure/#constructors","title":"Constructors","text":"HeapAnalysisFailure [jvm]constructor(heapDumpFile: File, createdAtTimeMillis: Long, dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, analysisDurationMillis: Long, exception: HeapAnalysisException)"},{"location":"api/shark/-heap-analysis-failure/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-analysis-failure/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-analysis-failure/#properties","title":"Properties","text":"Name Summary analysisDurationMillis [jvm]open override val analysisDurationMillis: LongTotal time spent analyzing the heap. createdAtTimeMillis [jvm]open override val createdAtTimeMillis: LongThe System.currentTimeMillis when this HeapAnalysis instance was created. dumpDurationMillis [jvm]open override val dumpDurationMillis: LongTotal time spent dumping the heap. exception [jvm]val exception: HeapAnalysisExceptionAn exception wrapping the actual exception that was thrown. heapDumpFile [jvm]open override val heapDumpFile: FileThe hprof file that was analyzed."},{"location":"api/shark/-heap-analysis-failure/-heap-analysis-failure/","title":"heap analysis failure","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/HeapAnalysisFailure</p>"},{"location":"api/shark/-heap-analysis-failure/-heap-analysis-failure/#heapanalysisfailure","title":"HeapAnalysisFailure","text":"<p>[jvm]\\ constructor(heapDumpFile: File, createdAtTimeMillis: Long, dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, analysisDurationMillis: Long, exception: HeapAnalysisException)</p>"},{"location":"api/shark/-heap-analysis-failure/analysis-duration-millis/","title":"Analysis duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/analysisDurationMillis</p>"},{"location":"api/shark/-heap-analysis-failure/analysis-duration-millis/#analysisdurationmillis","title":"analysisDurationMillis","text":"<p>[jvm]\\ open override val analysisDurationMillis: Long</p> <p>Total time spent analyzing the heap.</p>"},{"location":"api/shark/-heap-analysis-failure/created-at-time-millis/","title":"Created at time millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/createdAtTimeMillis</p>"},{"location":"api/shark/-heap-analysis-failure/created-at-time-millis/#createdattimemillis","title":"createdAtTimeMillis","text":"<p>[jvm]\\ open override val createdAtTimeMillis: Long</p> <p>The System.currentTimeMillis when this HeapAnalysis instance was created.</p>"},{"location":"api/shark/-heap-analysis-failure/dump-duration-millis/","title":"Dump duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/dumpDurationMillis</p>"},{"location":"api/shark/-heap-analysis-failure/dump-duration-millis/#dumpdurationmillis","title":"dumpDurationMillis","text":"<p>[jvm]\\ open override val dumpDurationMillis: Long</p> <p>Total time spent dumping the heap.</p>"},{"location":"api/shark/-heap-analysis-failure/exception/","title":"Exception","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/exception</p>"},{"location":"api/shark/-heap-analysis-failure/exception/#exception","title":"exception","text":"<p>[jvm]\\ val exception: HeapAnalysisException</p> <p>An exception wrapping the actual exception that was thrown.</p>"},{"location":"api/shark/-heap-analysis-failure/heap-dump-file/","title":"Heap dump file","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/heapDumpFile</p>"},{"location":"api/shark/-heap-analysis-failure/heap-dump-file/#heapdumpfile","title":"heapDumpFile","text":"<p>[jvm]\\ open override val heapDumpFile: File</p> <p>The hprof file that was analyzed.</p>"},{"location":"api/shark/-heap-analysis-failure/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/toString</p>"},{"location":"api/shark/-heap-analysis-failure/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-analysis-failure/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/Companion</p>"},{"location":"api/shark/-heap-analysis-failure/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-analysis-success/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess</p>"},{"location":"api/shark/-heap-analysis-success/#heapanalysissuccess","title":"HeapAnalysisSuccess","text":"<p>[jvm]\\ data class HeapAnalysisSuccess(val heapDumpFile: File, val createdAtTimeMillis: Long, val dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: Long, val metadata: Map<String, String>, val applicationLeaks: List<ApplicationLeak>, val libraryLeaks: List<LibraryLeak>, val unreachableObjects: List<LeakTraceObject>) : HeapAnalysis</p> <p>The result of a successful heap analysis performed by HeapAnalyzer.</p>"},{"location":"api/shark/-heap-analysis-success/#constructors","title":"Constructors","text":"HeapAnalysisSuccess [jvm]constructor(heapDumpFile: File, createdAtTimeMillis: Long, dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, analysisDurationMillis: Long, metadata: Map<String, String>, applicationLeaks: List<ApplicationLeak>, libraryLeaks: List<LibraryLeak>, unreachableObjects: List<LeakTraceObject>)"},{"location":"api/shark/-heap-analysis-success/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-analysis-success/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-analysis-success/#properties","title":"Properties","text":"Name Summary allLeaks [jvm]val allLeaks: Sequence<Leak>The list of Leak found in the heap dump by HeapAnalyzer, ie all applicationLeaks and all libraryLeaks in one list. analysisDurationMillis [jvm]open override val analysisDurationMillis: LongTotal time spent analyzing the heap. applicationLeaks [jvm]val applicationLeaks: List<ApplicationLeak>The list of ApplicationLeak found in the heap dump by HeapAnalyzer. assertionTag [androidJvm]val HeapAnalysisSuccess.assertionTag: String? createdAtTimeMillis [jvm]open override val createdAtTimeMillis: LongThe System.currentTimeMillis when this HeapAnalysis instance was created. dumpDurationMillis [jvm]open override val dumpDurationMillis: LongTotal time spent dumping the heap. heapDumpFile [jvm]open override val heapDumpFile: FileThe hprof file that was analyzed. libraryLeaks [jvm]val libraryLeaks: List<LibraryLeak>The list of LibraryLeak found in the heap dump by HeapAnalyzer. metadata [jvm]val metadata: Map<String, String> totalDurationMillis [androidJvm]val HeapAnalysisSuccess.totalDurationMillis: Int? unreachableObjects [jvm]val unreachableObjects: List<LeakTraceObject> waitForRetainedDurationMillis [androidJvm]val HeapAnalysisSuccess.waitForRetainedDurationMillis: Int?"},{"location":"api/shark/-heap-analysis-success/-heap-analysis-success/","title":"heap analysis success","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/HeapAnalysisSuccess</p>"},{"location":"api/shark/-heap-analysis-success/-heap-analysis-success/#heapanalysissuccess","title":"HeapAnalysisSuccess","text":"<p>[jvm]\\ constructor(heapDumpFile: File, createdAtTimeMillis: Long, dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, analysisDurationMillis: Long, metadata: Map<String, String>, applicationLeaks: List<ApplicationLeak>, libraryLeaks: List<LibraryLeak>, unreachableObjects: List<LeakTraceObject>)</p>"},{"location":"api/shark/-heap-analysis-success/all-leaks/","title":"All leaks","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/allLeaks</p>"},{"location":"api/shark/-heap-analysis-success/all-leaks/#allleaks","title":"allLeaks","text":"<p>[jvm]\\ val allLeaks: Sequence<Leak></p> <p>The list of Leak found in the heap dump by HeapAnalyzer, ie all applicationLeaks and all libraryLeaks in one list.</p>"},{"location":"api/shark/-heap-analysis-success/analysis-duration-millis/","title":"Analysis duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/analysisDurationMillis</p>"},{"location":"api/shark/-heap-analysis-success/analysis-duration-millis/#analysisdurationmillis","title":"analysisDurationMillis","text":"<p>[jvm]\\ open override val analysisDurationMillis: Long</p> <p>Total time spent analyzing the heap.</p>"},{"location":"api/shark/-heap-analysis-success/application-leaks/","title":"Application leaks","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/applicationLeaks</p>"},{"location":"api/shark/-heap-analysis-success/application-leaks/#applicationleaks","title":"applicationLeaks","text":"<p>[jvm]\\ val applicationLeaks: List<ApplicationLeak></p> <p>The list of ApplicationLeak found in the heap dump by HeapAnalyzer.</p>"},{"location":"api/shark/-heap-analysis-success/created-at-time-millis/","title":"Created at time millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/createdAtTimeMillis</p>"},{"location":"api/shark/-heap-analysis-success/created-at-time-millis/#createdattimemillis","title":"createdAtTimeMillis","text":"<p>[jvm]\\ open override val createdAtTimeMillis: Long</p> <p>The System.currentTimeMillis when this HeapAnalysis instance was created.</p>"},{"location":"api/shark/-heap-analysis-success/dump-duration-millis/","title":"Dump duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/dumpDurationMillis</p>"},{"location":"api/shark/-heap-analysis-success/dump-duration-millis/#dumpdurationmillis","title":"dumpDurationMillis","text":"<p>[jvm]\\ open override val dumpDurationMillis: Long</p> <p>Total time spent dumping the heap.</p>"},{"location":"api/shark/-heap-analysis-success/heap-dump-file/","title":"Heap dump file","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/heapDumpFile</p>"},{"location":"api/shark/-heap-analysis-success/heap-dump-file/#heapdumpfile","title":"heapDumpFile","text":"<p>[jvm]\\ open override val heapDumpFile: File</p> <p>The hprof file that was analyzed.</p>"},{"location":"api/shark/-heap-analysis-success/library-leaks/","title":"Library leaks","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/libraryLeaks</p>"},{"location":"api/shark/-heap-analysis-success/library-leaks/#libraryleaks","title":"libraryLeaks","text":"<p>[jvm]\\ val libraryLeaks: List<LibraryLeak></p> <p>The list of LibraryLeak found in the heap dump by HeapAnalyzer.</p>"},{"location":"api/shark/-heap-analysis-success/metadata/","title":"Metadata","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/metadata</p>"},{"location":"api/shark/-heap-analysis-success/metadata/#metadata","title":"metadata","text":"<p>[jvm]\\ val metadata: Map<String, String></p>"},{"location":"api/shark/-heap-analysis-success/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/toString</p>"},{"location":"api/shark/-heap-analysis-success/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-analysis-success/unreachable-objects/","title":"Unreachable objects","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/unreachableObjects</p>"},{"location":"api/shark/-heap-analysis-success/unreachable-objects/#unreachableobjects","title":"unreachableObjects","text":"<p>[jvm]\\ val unreachableObjects: List<LeakTraceObject></p>"},{"location":"api/shark/-heap-analysis-success/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/Companion</p>"},{"location":"api/shark/-heap-analysis-success/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-analyzer/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalyzer</p>"},{"location":"api/shark/-heap-analyzer/#heapanalyzer","title":"HeapAnalyzer","text":"<p>[jvm]\\ class HeapAnalyzer(listener: OnAnalysisProgressListener)</p> <p>Analyzes heap dumps to look for leaks.</p>"},{"location":"api/shark/-heap-analyzer/#constructors","title":"Constructors","text":"HeapAnalyzer [jvm]constructor(listener: OnAnalysisProgressListener)"},{"location":"api/shark/-heap-analyzer/#functions","title":"Functions","text":"Name Summary analyze [jvm]fun analyze(heapDumpFile: File, graph: HeapGraph, leakingObjectFinder: LeakingObjectFinder, referenceMatchers: List<ReferenceMatcher> = emptyList(), computeRetainedHeapSize: Boolean = false, objectInspectors: List<ObjectInspector> = emptyList(), metadataExtractor: MetadataExtractor = MetadataExtractor.NO_OP): HeapAnalysisSearches the heap dump for leaking instances and then computes the shortest strong reference path from those instances to the GC roots."},{"location":"api/shark/-heap-analyzer/-heap-analyzer/","title":"heap analyzer","text":"<p>//leakcanary-repo/shark/HeapAnalyzer/HeapAnalyzer</p>"},{"location":"api/shark/-heap-analyzer/-heap-analyzer/#heapanalyzer","title":"HeapAnalyzer","text":"<p>[jvm]\\ constructor(listener: OnAnalysisProgressListener)</p>"},{"location":"api/shark/-heap-analyzer/analyze/","title":"Analyze","text":"<p>//leakcanary-repo/shark/HeapAnalyzer/analyze</p>"},{"location":"api/shark/-heap-analyzer/analyze/#analyze","title":"analyze","text":"<p>[jvm]\\ fun analyze(heapDumpFile: File, graph: HeapGraph, leakingObjectFinder: LeakingObjectFinder, referenceMatchers: List<ReferenceMatcher> = emptyList(), computeRetainedHeapSize: Boolean = false, objectInspectors: List<ObjectInspector> = emptyList(), metadataExtractor: MetadataExtractor = MetadataExtractor.NO_OP): HeapAnalysis</p> <p>Searches the heap dump for leaking instances and then computes the shortest strong reference path from those instances to the GC roots.</p>"},{"location":"api/shark/-heap-diff/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapDiff</p>"},{"location":"api/shark/-heap-diff/#heapdiff","title":"HeapDiff","text":"<p>[jvm]\\ class HeapDiff(val traversalCount: Int, val shortestPathTree: ShortestPathObjectNode, val growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput) : HeapTraversalOutput</p>"},{"location":"api/shark/-heap-diff/#constructors","title":"Constructors","text":"HeapDiff [jvm]constructor(traversalCount: Int, shortestPathTree: ShortestPathObjectNode, growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput)"},{"location":"api/shark/-heap-diff/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-diff/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-diff/#properties","title":"Properties","text":"Name Summary growingObjects [jvm]val growingObjects: GrowingObjectNodesNodes that already existed in the previous traversal, still exist in this shortestPathTree, and have grown compared to the previous traversal. isGrowing [jvm]val isGrowing: Boolean scenarioLoopsPerGraph [jvm]open override val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. shortestPathTree [jvm]open override val shortestPathTree: ShortestPathObjectNodeA representation of the heap as a tree of shortest path from roots to each object in the heap, where: traversalCount [jvm]open override val traversalCount: Int"},{"location":"api/shark/-heap-diff/-heap-diff/","title":"heap diff","text":"<p>//leakcanary-repo/shark/HeapDiff/HeapDiff</p>"},{"location":"api/shark/-heap-diff/-heap-diff/#heapdiff","title":"HeapDiff","text":"<p>[jvm]\\ constructor(traversalCount: Int, shortestPathTree: ShortestPathObjectNode, growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput)</p>"},{"location":"api/shark/-heap-diff/growing-objects/","title":"Growing objects","text":"<p>//leakcanary-repo/shark/HeapDiff/growingObjects</p>"},{"location":"api/shark/-heap-diff/growing-objects/#growingobjects","title":"growingObjects","text":"<p>[jvm]\\ val growingObjects: GrowingObjectNodes</p> <p>Nodes that already existed in the previous traversal, still exist in this shortestPathTree, and have grown compared to the previous traversal.</p>"},{"location":"api/shark/-heap-diff/is-growing/","title":"Is growing","text":"<p>//leakcanary-repo/shark/HeapDiff/isGrowing</p>"},{"location":"api/shark/-heap-diff/is-growing/#isgrowing","title":"isGrowing","text":"<p>[jvm]\\ val isGrowing: Boolean</p>"},{"location":"api/shark/-heap-diff/scenario-loops-per-graph/","title":"Scenario loops per graph","text":"<p>//leakcanary-repo/shark/HeapDiff/scenarioLoopsPerGraph</p>"},{"location":"api/shark/-heap-diff/scenario-loops-per-graph/#scenarioloopspergraph","title":"scenarioLoopsPerGraph","text":"<p>[jvm]\\ open override val scenarioLoopsPerGraph: Int</p> <p>How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal.</p>"},{"location":"api/shark/-heap-diff/shortest-path-tree/","title":"Shortest path tree","text":"<p>//leakcanary-repo/shark/HeapDiff/shortestPathTree</p>"},{"location":"api/shark/-heap-diff/shortest-path-tree/#shortestpathtree","title":"shortestPathTree","text":"<p>[jvm]\\ open override val shortestPathTree: ShortestPathObjectNode</p> <p>A representation of the heap as a tree of shortest path from roots to each object in the heap, where:</p> <ul> <li>object identity is lost</li> <li>objects are grouped by identical path into a single node</li> <li> <p>Path element names are determined using the node & edge name to reach them (e.g. class name</p> </li> <li> <p>field name) as well as the class name of the reached object.</p> </li> </ul>"},{"location":"api/shark/-heap-diff/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapDiff/toString</p>"},{"location":"api/shark/-heap-diff/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-diff/traversal-count/","title":"Traversal count","text":"<p>//leakcanary-repo/shark/HeapDiff/traversalCount</p>"},{"location":"api/shark/-heap-diff/traversal-count/#traversalcount","title":"traversalCount","text":"<p>[jvm]\\ open override val traversalCount: Int</p>"},{"location":"api/shark/-heap-diff/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapDiff/Companion</p>"},{"location":"api/shark/-heap-diff/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-diff/-companion/#functions","title":"Functions","text":"Name Summary repeatingAndroidInProcessScenario [androidJvm]fun HeapDiff.Companion.repeatingAndroidInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = TargetContextHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forAndroidInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = true), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for Android in process tests, such as Espresso tests. repeatingDumpingTestScenario [jvm]fun HeapDiff.Companion.repeatingDumpingTestScenario(objectGrowthDetector: ObjectGrowthDetector, heapDumpDirectoryProvider: HeapDumpDirectoryProvider, heapDumper: HeapDumper, heapDumpStorageStrategy: HeapDumpStorageStrategy): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for junit based automated tests that can dump the heap. repeatingJvmInProcessScenario [jvm]fun HeapDiff.Companion.repeatingJvmInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forJvmHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = RepositoryRootHeapDumpDirectoryProvider( \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forJvmInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = false), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for JVM in process tests. repeatingUiAutomatorScenario [androidJvm]fun HeapDiff.Companion.repeatingUiAutomatorScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName, heapDumpDirectoryProvider: HeapDumpDirectoryProvider = AndroidDeviceTempHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth_$dumpedAppPackageName\" ), heapDumper: HeapDumper = HeapDumper.forUiAutomatorAsShell( withGc = true, dumpedAppPackageName = dumpedAppPackageName ), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose { heapDumpFile -> UiAutomatorShellFileDeleter.deleteFileUsingShell(heapDumpFile) }): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for Android UI Automator tests."},{"location":"api/shark/-heap-dump-rule/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapDumpRule</p>"},{"location":"api/shark/-heap-dump-rule/#heapdumprule","title":"HeapDumpRule","text":"<p>[jvm]\\ class HeapDumpRule : ExternalResource</p>"},{"location":"api/shark/-heap-dump-rule/#constructors","title":"Constructors","text":"HeapDumpRule [jvm]constructor()"},{"location":"api/shark/-heap-dump-rule/#functions","title":"Functions","text":"Name Summary apply [jvm]open override fun apply(p0: Statement, p1: Description): Statement dumpHeap [jvm]fun dumpHeap(): File"},{"location":"api/shark/-heap-dump-rule/-heap-dump-rule/","title":"heap dump rule","text":"<p>//leakcanary-repo/shark/HeapDumpRule/HeapDumpRule</p>"},{"location":"api/shark/-heap-dump-rule/-heap-dump-rule/#heapdumprule","title":"HeapDumpRule","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-heap-dump-rule/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/shark/HeapDumpRule/dumpHeap</p>"},{"location":"api/shark/-heap-dump-rule/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ fun dumpHeap(): File</p>"},{"location":"api/shark/-heap-field/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapField</p>"},{"location":"api/shark/-heap-field/#heapfield","title":"HeapField","text":"<p>[jvm]\\ class HeapField(val declaringClass: HeapObject.HeapClass, val name: String, val value: HeapValue)</p> <p>Represents a static field or an instance field.</p>"},{"location":"api/shark/-heap-field/#constructors","title":"Constructors","text":"HeapField [jvm]constructor(declaringClass: HeapObject.HeapClass, name: String, value: HeapValue)"},{"location":"api/shark/-heap-field/#properties","title":"Properties","text":"Name Summary declaringClass [jvm]val declaringClass: HeapObject.HeapClassThe class this field was declared in. name [jvm]val name: StringName of the field value [jvm]val value: HeapValueValue of the field. Also see shorthands valueAsClass, valueAsInstance, valueAsObjectArray, valueAsPrimitiveArray. valueAsClass [jvm]val valueAsClass: HeapObject.HeapClass?Return a HeapClass is value references a class, and null otherwise. valueAsInstance [jvm]val valueAsInstance: HeapObject.HeapInstance?Return a HeapInstance is value references an instance, and null otherwise. valueAsObjectArray [jvm]val valueAsObjectArray: HeapObject.HeapObjectArray?Return a HeapObjectArray is value references an object array, and null otherwise. valueAsPrimitiveArray [jvm]val valueAsPrimitiveArray: HeapObject.HeapPrimitiveArray?Return a HeapPrimitiveArray is value references a primitive array, and null otherwise."},{"location":"api/shark/-heap-field/-heap-field/","title":"heap field","text":"<p>//leakcanary-repo/shark/HeapField/HeapField</p>"},{"location":"api/shark/-heap-field/-heap-field/#heapfield","title":"HeapField","text":"<p>[jvm]\\ constructor(declaringClass: HeapObject.HeapClass, name: String, value: HeapValue)</p>"},{"location":"api/shark/-heap-field/declaring-class/","title":"Declaring class","text":"<p>//leakcanary-repo/shark/HeapField/declaringClass</p>"},{"location":"api/shark/-heap-field/declaring-class/#declaringclass","title":"declaringClass","text":"<p>[jvm]\\ val declaringClass: HeapObject.HeapClass</p> <p>The class this field was declared in.</p>"},{"location":"api/shark/-heap-field/name/","title":"Name","text":"<p>//leakcanary-repo/shark/HeapField/name</p>"},{"location":"api/shark/-heap-field/name/#name","title":"name","text":"<p>[jvm]\\ val name: String</p> <p>Name of the field</p>"},{"location":"api/shark/-heap-field/value-as-class/","title":"Value as class","text":"<p>//leakcanary-repo/shark/HeapField/valueAsClass</p>"},{"location":"api/shark/-heap-field/value-as-class/#valueasclass","title":"valueAsClass","text":"<p>[jvm]\\ val valueAsClass: HeapObject.HeapClass?</p> <p>Return a HeapClass is value references a class, and null otherwise.</p>"},{"location":"api/shark/-heap-field/value-as-instance/","title":"Value as instance","text":"<p>//leakcanary-repo/shark/HeapField/valueAsInstance</p>"},{"location":"api/shark/-heap-field/value-as-instance/#valueasinstance","title":"valueAsInstance","text":"<p>[jvm]\\ val valueAsInstance: HeapObject.HeapInstance?</p> <p>Return a HeapInstance is value references an instance, and null otherwise.</p>"},{"location":"api/shark/-heap-field/value-as-object-array/","title":"Value as object array","text":"<p>//leakcanary-repo/shark/HeapField/valueAsObjectArray</p>"},{"location":"api/shark/-heap-field/value-as-object-array/#valueasobjectarray","title":"valueAsObjectArray","text":"<p>[jvm]\\ val valueAsObjectArray: HeapObject.HeapObjectArray?</p> <p>Return a HeapObjectArray is value references an object array, and null otherwise.</p>"},{"location":"api/shark/-heap-field/value-as-primitive-array/","title":"Value as primitive array","text":"<p>//leakcanary-repo/shark/HeapField/valueAsPrimitiveArray</p>"},{"location":"api/shark/-heap-field/value-as-primitive-array/#valueasprimitivearray","title":"valueAsPrimitiveArray","text":"<p>[jvm]\\ val valueAsPrimitiveArray: HeapObject.HeapPrimitiveArray?</p> <p>Return a HeapPrimitiveArray is value references a primitive array, and null otherwise.</p>"},{"location":"api/shark/-heap-field/value/","title":"Value","text":"<p>//leakcanary-repo/shark/HeapField/value</p>"},{"location":"api/shark/-heap-field/value/#value","title":"value","text":"<p>[jvm]\\ val value: HeapValue</p> <p>Value of the field. Also see shorthands valueAsClass, valueAsInstance, valueAsObjectArray, valueAsPrimitiveArray.</p>"},{"location":"api/shark/-heap-graph/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapGraph</p>"},{"location":"api/shark/-heap-graph/#heapgraph","title":"HeapGraph","text":"<p>interface HeapGraph</p> <p>Enables navigation through the heap graph of objects.</p>"},{"location":"api/shark/-heap-graph/#inheritors","title":"Inheritors","text":"CloseableHeapGraph"},{"location":"api/shark/-heap-graph/#functions","title":"Functions","text":"Name Summary findClassByName [jvm]abstract fun findClassByName(className: String): HeapObject.HeapClass?Returns the HeapClass corresponding to the provided className, or null if the class cannot be found. findHeapDumpIndex [jvm]abstract fun findHeapDumpIndex(objectId: Long): IntReturns the 1-based index in the heap dump of the object corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByHeapDumpIndex [jvm]abstract fun findObjectByHeapDumpIndex(heapDumpIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided heapDumpIndex, and throws IllegalArgumentException if heapDumpIndex is less than 1 or more than objectCount. findObjectById [jvm]abstract fun findObjectById(objectId: Long): HeapObjectReturns the HeapObject corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByIdOrNull [jvm]abstract fun findObjectByIdOrNull(objectId: Long): HeapObject?Returns the HeapObject corresponding to the provided objectId or null if it cannot be found. findObjectByIndex [jvm]abstract fun findObjectByIndex(objectIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided objectIndex, and throws IllegalArgumentException if objectIndex is less than 0 or more than objectCount - 1. objectExists [jvm]abstract fun objectExists(objectId: Long): BooleanReturns true if the provided objectId exists in the heap dump."},{"location":"api/shark/-heap-graph/#properties","title":"Properties","text":"Name Summary aliveAndroidServiceObjectIds [jvm]val HeapGraph.aliveAndroidServiceObjectIds: List<Long> classCount [jvm]abstract val classCount: Int classes [jvm]abstract val classes: Sequence<HeapObject.HeapClass>Sequence of all classes in the heap dump. context [jvm]abstract val context: GraphContextIn memory store that can be used to store objects this HeapGraph instance. gcRoots [jvm]abstract val gcRoots: List<GcRoot>All GC roots which type matches types known to this heap graph and which point to non null references. You can retrieve the object that a GC Root points to by calling findObjectById with GcRoot.id, however you need to first check that objectExists returns true because GC roots can point to objects that don\u2019t exist in the heap dump. identifierByteSize [jvm]abstract val identifierByteSize: Int instanceCount [jvm]abstract val instanceCount: Int instances [jvm]abstract val instances: Sequence<HeapObject.HeapInstance>Sequence of all instances in the heap dump. objectArrayCount [jvm]abstract val objectArrayCount: Int objectArrays [jvm]abstract val objectArrays: Sequence<HeapObject.HeapObjectArray>Sequence of all object arrays in the heap dump. objectCount [jvm]abstract val objectCount: Int objects [jvm]abstract val objects: Sequence<HeapObject>Sequence of all objects in the heap dump. primitiveArrayCount [jvm]abstract val primitiveArrayCount: Int primitiveArrays [jvm]abstract val primitiveArrays: Sequence<HeapObject.HeapPrimitiveArray>Sequence of all primitive arrays in the heap dump."},{"location":"api/shark/-heap-graph/class-count/","title":"Class count","text":"<p>//leakcanary-repo/shark/HeapGraph/classCount</p>"},{"location":"api/shark/-heap-graph/class-count/#classcount","title":"classCount","text":"<p>[jvm]\\ abstract val classCount: Int</p>"},{"location":"api/shark/-heap-graph/classes/","title":"Classes","text":"<p>//leakcanary-repo/shark/HeapGraph/classes</p>"},{"location":"api/shark/-heap-graph/classes/#classes","title":"classes","text":"<p>[jvm]\\ abstract val classes: Sequence<HeapObject.HeapClass></p> <p>Sequence of all classes in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-heap-graph/context/","title":"Context","text":"<p>//leakcanary-repo/shark/HeapGraph/context</p>"},{"location":"api/shark/-heap-graph/context/#context","title":"context","text":"<p>[jvm]\\ abstract val context: GraphContext</p> <p>In memory store that can be used to store objects this HeapGraph instance.</p>"},{"location":"api/shark/-heap-graph/find-class-by-name/","title":"Find class by name","text":"<p>//leakcanary-repo/shark/HeapGraph/findClassByName</p>"},{"location":"api/shark/-heap-graph/find-class-by-name/#findclassbyname","title":"findClassByName","text":"<p>[jvm]\\ abstract fun findClassByName(className: String): HeapObject.HeapClass?</p> <p>Returns the HeapClass corresponding to the provided className, or null if the class cannot be found.</p>"},{"location":"api/shark/-heap-graph/find-heap-dump-index/","title":"Find heap dump index","text":"<p>//leakcanary-repo/shark/HeapGraph/findHeapDumpIndex</p>"},{"location":"api/shark/-heap-graph/find-heap-dump-index/#findheapdumpindex","title":"findHeapDumpIndex","text":"<p>[jvm]\\ abstract fun findHeapDumpIndex(objectId: Long): Int</p> <p>Returns the 1-based index in the heap dump of the object corresponding to the provided objectId, and throws IllegalArgumentException otherwise.</p> <p>This is the object index that YourKit provides in its Java profiler.</p>"},{"location":"api/shark/-heap-graph/find-object-by-heap-dump-index/","title":"Find object by heap dump index","text":"<p>//leakcanary-repo/shark/HeapGraph/findObjectByHeapDumpIndex</p>"},{"location":"api/shark/-heap-graph/find-object-by-heap-dump-index/#findobjectbyheapdumpindex","title":"findObjectByHeapDumpIndex","text":"<p>[jvm]\\ abstract fun findObjectByHeapDumpIndex(heapDumpIndex: Int): HeapObject</p> <p>Returns the HeapObject corresponding to the provided heapDumpIndex, and throws IllegalArgumentException if heapDumpIndex is less than 1 or more than objectCount.</p> <p>This is the object index that YourKit provides in its Java profiler.</p>"},{"location":"api/shark/-heap-graph/find-object-by-id-or-null/","title":"Find object by id or null","text":"<p>//leakcanary-repo/shark/HeapGraph/findObjectByIdOrNull</p>"},{"location":"api/shark/-heap-graph/find-object-by-id-or-null/#findobjectbyidornull","title":"findObjectByIdOrNull","text":"<p>[jvm]\\ abstract fun findObjectByIdOrNull(objectId: Long): HeapObject?</p> <p>Returns the HeapObject corresponding to the provided objectId or null if it cannot be found.</p>"},{"location":"api/shark/-heap-graph/find-object-by-id/","title":"Find object by id","text":"<p>//leakcanary-repo/shark/HeapGraph/findObjectById</p>"},{"location":"api/shark/-heap-graph/find-object-by-id/#findobjectbyid","title":"findObjectById","text":"<p>[jvm]\\ abstract fun findObjectById(objectId: Long): HeapObject</p> <p>Returns the HeapObject corresponding to the provided objectId, and throws IllegalArgumentException otherwise.</p>"},{"location":"api/shark/-heap-graph/find-object-by-index/","title":"Find object by index","text":"<p>//leakcanary-repo/shark/HeapGraph/findObjectByIndex</p>"},{"location":"api/shark/-heap-graph/find-object-by-index/#findobjectbyindex","title":"findObjectByIndex","text":"<p>[jvm]\\ abstract fun findObjectByIndex(objectIndex: Int): HeapObject</p> <p>Returns the HeapObject corresponding to the provided objectIndex, and throws IllegalArgumentException if objectIndex is less than 0 or more than objectCount - 1.</p>"},{"location":"api/shark/-heap-graph/gc-roots/","title":"Gc roots","text":"<p>//leakcanary-repo/shark/HeapGraph/gcRoots</p>"},{"location":"api/shark/-heap-graph/gc-roots/#gcroots","title":"gcRoots","text":"<p>[jvm]\\ abstract val gcRoots: List<GcRoot></p> <p>All GC roots which type matches types known to this heap graph and which point to non null references. You can retrieve the object that a GC Root points to by calling findObjectById with GcRoot.id, however you need to first check that objectExists returns true because GC roots can point to objects that don\u2019t exist in the heap dump.</p>"},{"location":"api/shark/-heap-graph/identifier-byte-size/","title":"Identifier byte size","text":"<p>//leakcanary-repo/shark/HeapGraph/identifierByteSize</p>"},{"location":"api/shark/-heap-graph/identifier-byte-size/#identifierbytesize","title":"identifierByteSize","text":"<p>[jvm]\\ abstract val identifierByteSize: Int</p>"},{"location":"api/shark/-heap-graph/instance-count/","title":"Instance count","text":"<p>//leakcanary-repo/shark/HeapGraph/instanceCount</p>"},{"location":"api/shark/-heap-graph/instance-count/#instancecount","title":"instanceCount","text":"<p>[jvm]\\ abstract val instanceCount: Int</p>"},{"location":"api/shark/-heap-graph/instances/","title":"Instances","text":"<p>//leakcanary-repo/shark/HeapGraph/instances</p>"},{"location":"api/shark/-heap-graph/instances/#instances","title":"instances","text":"<p>[jvm]\\ abstract val instances: Sequence<HeapObject.HeapInstance></p> <p>Sequence of all instances in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-heap-graph/object-array-count/","title":"Object array count","text":"<p>//leakcanary-repo/shark/HeapGraph/objectArrayCount</p>"},{"location":"api/shark/-heap-graph/object-array-count/#objectarraycount","title":"objectArrayCount","text":"<p>[jvm]\\ abstract val objectArrayCount: Int</p>"},{"location":"api/shark/-heap-graph/object-arrays/","title":"Object arrays","text":"<p>//leakcanary-repo/shark/HeapGraph/objectArrays</p>"},{"location":"api/shark/-heap-graph/object-arrays/#objectarrays","title":"objectArrays","text":"<p>[jvm]\\ abstract val objectArrays: Sequence<HeapObject.HeapObjectArray></p> <p>Sequence of all object arrays in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-heap-graph/object-count/","title":"Object count","text":"<p>//leakcanary-repo/shark/HeapGraph/objectCount</p>"},{"location":"api/shark/-heap-graph/object-count/#objectcount","title":"objectCount","text":"<p>[jvm]\\ abstract val objectCount: Int</p>"},{"location":"api/shark/-heap-graph/object-exists/","title":"Object exists","text":"<p>//leakcanary-repo/shark/HeapGraph/objectExists</p>"},{"location":"api/shark/-heap-graph/object-exists/#objectexists","title":"objectExists","text":"<p>[jvm]\\ abstract fun objectExists(objectId: Long): Boolean</p> <p>Returns true if the provided objectId exists in the heap dump.</p>"},{"location":"api/shark/-heap-graph/objects/","title":"Objects","text":"<p>//leakcanary-repo/shark/HeapGraph/objects</p>"},{"location":"api/shark/-heap-graph/objects/#objects","title":"objects","text":"<p>[jvm]\\ abstract val objects: Sequence<HeapObject></p> <p>Sequence of all objects in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-heap-graph/primitive-array-count/","title":"Primitive array count","text":"<p>//leakcanary-repo/shark/HeapGraph/primitiveArrayCount</p>"},{"location":"api/shark/-heap-graph/primitive-array-count/#primitivearraycount","title":"primitiveArrayCount","text":"<p>[jvm]\\ abstract val primitiveArrayCount: Int</p>"},{"location":"api/shark/-heap-graph/primitive-arrays/","title":"Primitive arrays","text":"<p>//leakcanary-repo/shark/HeapGraph/primitiveArrays</p>"},{"location":"api/shark/-heap-graph/primitive-arrays/#primitivearrays","title":"primitiveArrays","text":"<p>[jvm]\\ abstract val primitiveArrays: Sequence<HeapObject.HeapPrimitiveArray></p> <p>Sequence of all primitive arrays in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-heap-graph-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapGraphProvider</p>"},{"location":"api/shark/-heap-graph-provider/#heapgraphprovider","title":"HeapGraphProvider","text":"<p>fun interface HeapGraphProvider</p>"},{"location":"api/shark/-heap-graph-provider/#types","title":"Types","text":"Name Summary Companion [jvm]object CompanionThis allows external modules to add factory methods for implementations of this interface as extension functions of this companion object."},{"location":"api/shark/-heap-graph-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]abstract fun openHeapGraph(): CloseableHeapGraph"},{"location":"api/shark/-heap-graph-provider/open-heap-graph/","title":"Open heap graph","text":"<p>//leakcanary-repo/shark/HeapGraphProvider/openHeapGraph</p>"},{"location":"api/shark/-heap-graph-provider/open-heap-graph/#openheapgraph","title":"openHeapGraph","text":"<p>[jvm]\\ abstract fun openHeapGraph(): CloseableHeapGraph</p>"},{"location":"api/shark/-heap-graph-provider/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapGraphProvider/Companion</p>"},{"location":"api/shark/-heap-graph-provider/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p> <p>This allows external modules to add factory methods for implementations of this interface as extension functions of this companion object.</p>"},{"location":"api/shark/-heap-growth-command/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapGrowthCommand</p>"},{"location":"api/shark/-heap-growth-command/#heapgrowthcommand","title":"HeapGrowthCommand","text":"<p>[jvm]\\ class HeapGrowthCommand : CliktCommand</p>"},{"location":"api/shark/-heap-growth-command/#constructors","title":"Constructors","text":"HeapGrowthCommand [jvm]constructor()"},{"location":"api/shark/-heap-growth-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-growth-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-heap-growth-command/-heap-growth-command/","title":"heap growth command","text":"<p>//leakcanary-repo/shark/HeapGrowthCommand/HeapGrowthCommand</p>"},{"location":"api/shark/-heap-growth-command/-heap-growth-command/#heapgrowthcommand","title":"HeapGrowthCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-heap-growth-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/HeapGrowthCommand/run</p>"},{"location":"api/shark/-heap-growth-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-heap-growth-traversal/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal</p>"},{"location":"api/shark/-heap-growth-traversal/#heapgrowthtraversal","title":"HeapGrowthTraversal","text":"<p>[jvm]\\ class HeapGrowthTraversal(val traversalCount: Int, val shortestPathTree: ShortestPathObjectNode, val growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput) : HeapTraversalOutput</p>"},{"location":"api/shark/-heap-growth-traversal/#constructors","title":"Constructors","text":"HeapGrowthTraversal [jvm]constructor(traversalCount: Int, shortestPathTree: ShortestPathObjectNode, growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput)"},{"location":"api/shark/-heap-growth-traversal/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-growth-traversal/#properties","title":"Properties","text":"Name Summary growingObjects [jvm]val growingObjects: GrowingObjectNodesNodes that already existed in the previous traversal, still exist in this shortestPathTree, and have grown compared to the previous traversal. isGrowing [jvm]val isGrowing: Boolean scenarioLoopsPerGraph [jvm]open override val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. shortestPathTree [jvm]open override val shortestPathTree: ShortestPathObjectNodeA representation of the heap as a tree of shortest path from roots to each object in the heap, where: traversalCount [jvm]open override val traversalCount: Int"},{"location":"api/shark/-heap-growth-traversal/-heap-growth-traversal/","title":"heap growth traversal","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/HeapGrowthTraversal</p>"},{"location":"api/shark/-heap-growth-traversal/-heap-growth-traversal/#heapgrowthtraversal","title":"HeapGrowthTraversal","text":"<p>[jvm]\\ constructor(traversalCount: Int, shortestPathTree: ShortestPathObjectNode, growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput)</p>"},{"location":"api/shark/-heap-growth-traversal/growing-objects/","title":"Growing objects","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/growingObjects</p>"},{"location":"api/shark/-heap-growth-traversal/growing-objects/#growingobjects","title":"growingObjects","text":"<p>[jvm]\\ val growingObjects: GrowingObjectNodes</p> <p>Nodes that already existed in the previous traversal, still exist in this shortestPathTree, and have grown compared to the previous traversal.</p>"},{"location":"api/shark/-heap-growth-traversal/heap-graph-count/","title":"Heap graph count","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/heapGraphCount</p>"},{"location":"api/shark/-heap-growth-traversal/heap-graph-count/#heapgraphcount","title":"heapGraphCount","text":"<p>[jvm]\\ open override val heapGraphCount: Int?</p> <p>The expected max number of traversals, or null if unknown.</p>"},{"location":"api/shark/-heap-growth-traversal/is-growing/","title":"Is growing","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/isGrowing</p>"},{"location":"api/shark/-heap-growth-traversal/is-growing/#isgrowing","title":"isGrowing","text":"<p>[jvm]\\ val isGrowing: Boolean</p>"},{"location":"api/shark/-heap-growth-traversal/scenario-loops-per-graph/","title":"Scenario loops per graph","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/scenarioLoopsPerGraph</p>"},{"location":"api/shark/-heap-growth-traversal/scenario-loops-per-graph/#scenarioloopspergraph","title":"scenarioLoopsPerGraph","text":"<p>[jvm]\\ open override val scenarioLoopsPerGraph: Int</p> <p>How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal.</p>"},{"location":"api/shark/-heap-growth-traversal/shortest-path-tree/","title":"Shortest path tree","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/shortestPathTree</p>"},{"location":"api/shark/-heap-growth-traversal/shortest-path-tree/#shortestpathtree","title":"shortestPathTree","text":"<p>[jvm]\\ open override val shortestPathTree: ShortestPathObjectNode</p> <p>A representation of the heap as a tree of shortest path from roots to each object in the heap, where:</p> <ul> <li>object identity is lost</li> <li>objects are grouped by identical path into a single node</li> <li> <p>Path element names are determined using the node & edge name to reach them (e.g. class name</p> </li> <li> <p>field name) as well as the class name of the reached object.</p> </li> </ul>"},{"location":"api/shark/-heap-growth-traversal/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/toString</p>"},{"location":"api/shark/-heap-growth-traversal/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-growth-traversal/traversal-count/","title":"Traversal count","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/traversalCount</p>"},{"location":"api/shark/-heap-growth-traversal/traversal-count/#traversalcount","title":"traversalCount","text":"<p>[jvm]\\ open override val traversalCount: Int</p>"},{"location":"api/shark/-heap-object/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject</p>"},{"location":"api/shark/-heap-object/#heapobject","title":"HeapObject","text":"<p>sealed class HeapObject</p> <p>An object in the heap dump.</p>"},{"location":"api/shark/-heap-object/#inheritors","title":"Inheritors","text":"HeapClass HeapInstance HeapObjectArray HeapPrimitiveArray"},{"location":"api/shark/-heap-object/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion HeapClass [jvm]class HeapClass : HeapObjectA class in the heap dump. HeapInstance [jvm]class HeapInstance : HeapObjectAn instance in the heap dump. HeapObjectArray [jvm]class HeapObjectArray : HeapObjectAn object array in the heap dump. HeapPrimitiveArray [jvm]class HeapPrimitiveArray : HeapObjectA primitive array in the heap dump."},{"location":"api/shark/-heap-object/#functions","title":"Functions","text":"Name Summary readRecord [jvm]abstract fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecordReads and returns the underlying ObjectRecord."},{"location":"api/shark/-heap-object/#properties","title":"Properties","text":"Name Summary asClass [jvm]val asClass: HeapObject.HeapClass?This HeapObject as a HeapClass if it is one, or null otherwise asInstance [jvm]val asInstance: HeapObject.HeapInstance?This HeapObject as a HeapInstance if it is one, or null otherwise asObjectArray [jvm]val asObjectArray: HeapObject.HeapObjectArray?This HeapObject as a HeapObjectArray if it is one, or null otherwise asPrimitiveArray [jvm]val asPrimitiveArray: HeapObject.HeapPrimitiveArray?This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise graph [jvm]abstract val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. objectId [jvm]abstract val objectId: LongThe heap identifier of this object. objectIndex [jvm]abstract val objectIndex: IntAn positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays. positiveObjectId [jvm]val positiveObjectId: LongobjectId masked to be a positive unique identifier, as reported in Android Studio. recordSize [jvm]abstract val recordSize: IntThe total byte size for the record of this object in the heap dump."},{"location":"api/shark/-heap-object/as-class/","title":"As class","text":"<p>//leakcanary-repo/shark/HeapObject/asClass</p>"},{"location":"api/shark/-heap-object/as-class/#asclass","title":"asClass","text":"<p>[jvm]\\ val asClass: HeapObject.HeapClass?</p> <p>This HeapObject as a HeapClass if it is one, or null otherwise</p>"},{"location":"api/shark/-heap-object/as-instance/","title":"As instance","text":"<p>//leakcanary-repo/shark/HeapObject/asInstance</p>"},{"location":"api/shark/-heap-object/as-instance/#asinstance","title":"asInstance","text":"<p>[jvm]\\ val asInstance: HeapObject.HeapInstance?</p> <p>This HeapObject as a HeapInstance if it is one, or null otherwise</p>"},{"location":"api/shark/-heap-object/as-object-array/","title":"As object array","text":"<p>//leakcanary-repo/shark/HeapObject/asObjectArray</p>"},{"location":"api/shark/-heap-object/as-object-array/#asobjectarray","title":"asObjectArray","text":"<p>[jvm]\\ val asObjectArray: HeapObject.HeapObjectArray?</p> <p>This HeapObject as a HeapObjectArray if it is one, or null otherwise</p>"},{"location":"api/shark/-heap-object/as-primitive-array/","title":"As primitive array","text":"<p>//leakcanary-repo/shark/HeapObject/asPrimitiveArray</p>"},{"location":"api/shark/-heap-object/as-primitive-array/#asprimitivearray","title":"asPrimitiveArray","text":"<p>[jvm]\\ val asPrimitiveArray: HeapObject.HeapPrimitiveArray?</p> <p>This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise</p>"},{"location":"api/shark/-heap-object/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapObject/graph</p>"},{"location":"api/shark/-heap-object/graph/#graph","title":"graph","text":"<p>[jvm]\\ abstract val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-object/object-id/","title":"Object id","text":"<p>//leakcanary-repo/shark/HeapObject/objectId</p>"},{"location":"api/shark/-heap-object/object-id/#objectid","title":"objectId","text":"<p>[jvm]\\ abstract val objectId: Long</p> <p>The heap identifier of this object.</p>"},{"location":"api/shark/-heap-object/object-index/","title":"Object index","text":"<p>//leakcanary-repo/shark/HeapObject/objectIndex</p>"},{"location":"api/shark/-heap-object/object-index/#objectindex","title":"objectIndex","text":"<p>[jvm]\\ abstract val objectIndex: Int</p> <p>An positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays.</p>"},{"location":"api/shark/-heap-object/positive-object-id/","title":"Positive object id","text":"<p>//leakcanary-repo/shark/HeapObject/positiveObjectId</p>"},{"location":"api/shark/-heap-object/positive-object-id/#positiveobjectid","title":"positiveObjectId","text":"<p>[jvm]\\ val positiveObjectId: Long</p> <p>objectId masked to be a positive unique identifier, as reported in Android Studio.</p>"},{"location":"api/shark/-heap-object/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/HeapObject/readRecord</p>"},{"location":"api/shark/-heap-object/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ abstract fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord</p> <p>Reads and returns the underlying ObjectRecord.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/record-size/","title":"Record size","text":"<p>//leakcanary-repo/shark/HeapObject/recordSize</p>"},{"location":"api/shark/-heap-object/record-size/#recordsize","title":"recordSize","text":"<p>[jvm]\\ abstract val recordSize: Int</p> <p>The total byte size for the record of this object in the heap dump.</p>"},{"location":"api/shark/-heap-object/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject/Companion</p>"},{"location":"api/shark/-heap-object/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-object/-heap-class/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass</p>"},{"location":"api/shark/-heap-object/-heap-class/#heapclass","title":"HeapClass","text":"<p>[jvm]\\ class HeapClass : HeapObject</p> <p>A class in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-class/#functions","title":"Functions","text":"Name Summary get [jvm]operator fun get(fieldName: String): HeapField? instanceFieldName [jvm]fun instanceFieldName(fieldRecord: HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord): StringReturns the name of the field declared in this class for the specified fieldRecord. readFieldsByteSize [jvm]fun readFieldsByteSize(): IntThe total byte size of fields for instances of this class, computed as the sum of the individual size of each field of this class. This does not include the size of fields from superclasses. readRecord [jvm]open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecordReads and returns the underlying ClassDumpRecord. readRecordFields [jvm]fun readRecordFields(): List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord> readRecordStaticFields [jvm]fun readRecordStaticFields(): List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord> readStaticField [jvm]fun readStaticField(fieldName: String): HeapField?Returns a HeapField object that reflects the specified declared field of the class represented by this HeapClass object, or null if this field does not exist. The name parameter specifies the simple name of the desired field. readStaticFields [jvm]fun readStaticFields(): Sequence<HeapField>The static fields of this class, as a sequence of HeapField. subclassOf [jvm]infix fun subclassOf(superclass: HeapObject.HeapClass): BooleanReturns true if superclass is a superclass of this HeapClass. superclassOf [jvm]infix fun superclassOf(subclass: HeapObject.HeapClass): BooleanReturns true if subclass is a sub class of this HeapClass. toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-object/-heap-class/#properties","title":"Properties","text":"Name Summary asClass [jvm]val asClass: HeapObject.HeapClass?This HeapObject as a HeapClass if it is one, or null otherwise asInstance [jvm]val asInstance: HeapObject.HeapInstance?This HeapObject as a HeapInstance if it is one, or null otherwise asObjectArray [jvm]val asObjectArray: HeapObject.HeapObjectArray?This HeapObject as a HeapObjectArray if it is one, or null otherwise asPrimitiveArray [jvm]val asPrimitiveArray: HeapObject.HeapPrimitiveArray?This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise classHierarchy [jvm]val classHierarchy: Sequence<HeapObject.HeapClass>The class hierarchy starting at this class (included) and ending at the Object class (included). directInstances [jvm]val directInstances: Sequence<HeapObject.HeapInstance>All direct instances of this class, ie excluding any instance of subclasses of this class. graph [jvm]open override val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. hasReferenceInstanceFields [jvm]val hasReferenceInstanceFields: Boolean instanceByteSize [jvm]val instanceByteSize: IntThe total byte size of fields for instances of this class, as registered in the class dump. This includes the size of fields from superclasses. instances [jvm]val instances: Sequence<HeapObject.HeapInstance>All instances of this class, including instances of subclasses of this class. isArrayClass [jvm]val isArrayClass: BooleanReturns true if this class is an array class, and false otherwise. isObjectArrayClass [jvm]val isObjectArrayClass: Boolean isPrimitiveArrayClass [jvm]val isPrimitiveArrayClass: Boolean isPrimitiveWrapperClass [jvm]val isPrimitiveWrapperClass: BooleanWhether this is class is a primitive wrapper type name [jvm]val name: StringThe name of this class, identical to Class.getName. If this class is an array class, the name has a suffix of brackets for each dimension of the array, e.g. <code>com.Foo[][]</code> is a class for 2 dimensional arrays of <code>com.Foo</code>. objectArrayInstances [jvm]val objectArrayInstances: Sequence<HeapObject.HeapObjectArray> objectId [jvm]open override val objectId: LongThe heap identifier of this object. objectIndex [jvm]open override val objectIndex: IntAn positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays. positiveObjectId [jvm]val positiveObjectId: LongobjectId masked to be a positive unique identifier, as reported in Android Studio. primitiveArrayInstances [jvm]val primitiveArrayInstances: Sequence<HeapObject.HeapPrimitiveArray>Primitive arrays are one dimensional arrays of a primitive type. N-dimension arrays of primitive types (e.g. int[][]) are object arrays pointing to primitive arrays. recordSize [jvm]open override val recordSize: IntThe total byte size for the record of this object in the heap dump. simpleName [jvm]val simpleName: StringReturns name stripped of any string content before the last period (included). subclasses [jvm]val subclasses: Sequence<HeapObject.HeapClass>All the subclasses (direct and indirect) of this class, in the order they were recorded in the heap dump. superclass [jvm]val superclass: HeapObject.HeapClass?The HeapClass representing the superclass of this HeapClass. If this HeapClass represents either the Object class or a primitive type, then null is returned. If this HeapClass represents an array class then the HeapClass object representing the Object class is returned."},{"location":"api/shark/-heap-object/-heap-class/class-hierarchy/","title":"Class hierarchy","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/classHierarchy</p>"},{"location":"api/shark/-heap-object/-heap-class/class-hierarchy/#classhierarchy","title":"classHierarchy","text":"<p>[jvm]\\ val classHierarchy: Sequence<HeapObject.HeapClass></p> <p>The class hierarchy starting at this class (included) and ending at the Object class (included).</p>"},{"location":"api/shark/-heap-object/-heap-class/direct-instances/","title":"Direct instances","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/directInstances</p>"},{"location":"api/shark/-heap-object/-heap-class/direct-instances/#directinstances","title":"directInstances","text":"<p>[jvm]\\ val directInstances: Sequence<HeapObject.HeapInstance></p> <p>All direct instances of this class, ie excluding any instance of subclasses of this class.</p>"},{"location":"api/shark/-heap-object/-heap-class/get/","title":"Get","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/get</p>"},{"location":"api/shark/-heap-object/-heap-class/get/#get","title":"get","text":"<p>[jvm]\\ operator fun get(fieldName: String): HeapField?</p>"},{"location":"api/shark/-heap-object/-heap-class/get/#see-also","title":"See also","text":"HeapObject.HeapClass.readStaticField"},{"location":"api/shark/-heap-object/-heap-class/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/graph</p>"},{"location":"api/shark/-heap-object/-heap-class/graph/#graph","title":"graph","text":"<p>[jvm]\\ open override val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-object/-heap-class/has-reference-instance-fields/","title":"Has reference instance fields","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/hasReferenceInstanceFields</p>"},{"location":"api/shark/-heap-object/-heap-class/has-reference-instance-fields/#hasreferenceinstancefields","title":"hasReferenceInstanceFields","text":"<p>[jvm]\\ val hasReferenceInstanceFields: Boolean</p>"},{"location":"api/shark/-heap-object/-heap-class/instance-byte-size/","title":"Instance byte size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/instanceByteSize</p>"},{"location":"api/shark/-heap-object/-heap-class/instance-byte-size/#instancebytesize","title":"instanceByteSize","text":"<p>[jvm]\\ val instanceByteSize: Int</p> <p>The total byte size of fields for instances of this class, as registered in the class dump. This includes the size of fields from superclasses.</p>"},{"location":"api/shark/-heap-object/-heap-class/instance-byte-size/#see-also","title":"See also","text":"HeapObject.HeapClass.readFieldsByteSize"},{"location":"api/shark/-heap-object/-heap-class/instance-field-name/","title":"Instance field name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/instanceFieldName</p>"},{"location":"api/shark/-heap-object/-heap-class/instance-field-name/#instancefieldname","title":"instanceFieldName","text":"<p>[jvm]\\ fun instanceFieldName(fieldRecord: HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord): String</p> <p>Returns the name of the field declared in this class for the specified fieldRecord.</p>"},{"location":"api/shark/-heap-object/-heap-class/instances/","title":"Instances","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/instances</p>"},{"location":"api/shark/-heap-object/-heap-class/instances/#instances","title":"instances","text":"<p>[jvm]\\ val instances: Sequence<HeapObject.HeapInstance></p> <p>All instances of this class, including instances of subclasses of this class.</p>"},{"location":"api/shark/-heap-object/-heap-class/is-array-class/","title":"Is array class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/isArrayClass</p>"},{"location":"api/shark/-heap-object/-heap-class/is-array-class/#isarrayclass","title":"isArrayClass","text":"<p>[jvm]\\ val isArrayClass: Boolean</p> <p>Returns true if this class is an array class, and false otherwise.</p>"},{"location":"api/shark/-heap-object/-heap-class/is-object-array-class/","title":"Is object array class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/isObjectArrayClass</p>"},{"location":"api/shark/-heap-object/-heap-class/is-object-array-class/#isobjectarrayclass","title":"isObjectArrayClass","text":"<p>[jvm]\\ val isObjectArrayClass: Boolean</p>"},{"location":"api/shark/-heap-object/-heap-class/is-primitive-array-class/","title":"Is primitive array class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/isPrimitiveArrayClass</p>"},{"location":"api/shark/-heap-object/-heap-class/is-primitive-array-class/#isprimitivearrayclass","title":"isPrimitiveArrayClass","text":"<p>[jvm]\\ val isPrimitiveArrayClass: Boolean</p>"},{"location":"api/shark/-heap-object/-heap-class/is-primitive-wrapper-class/","title":"Is primitive wrapper class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/isPrimitiveWrapperClass</p>"},{"location":"api/shark/-heap-object/-heap-class/is-primitive-wrapper-class/#isprimitivewrapperclass","title":"isPrimitiveWrapperClass","text":"<p>[jvm]\\ val isPrimitiveWrapperClass: Boolean</p> <p>Whether this is class is a primitive wrapper type</p>"},{"location":"api/shark/-heap-object/-heap-class/name/","title":"Name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/name</p>"},{"location":"api/shark/-heap-object/-heap-class/name/#name","title":"name","text":"<p>[jvm]\\ val name: String</p> <p>The name of this class, identical to Class.getName. If this class is an array class, the name has a suffix of brackets for each dimension of the array, e.g. <code>com.Foo[][]</code> is a class for 2 dimensional arrays of <code>com.Foo</code>.</p> <p>The behavior for primitive types changes depending on the VM that dumped the heap. JVM heap dumps don\u2019t have any HeapClass object for primitive types, instead the <code>java.land.Class</code> class has 9 instances (the 8 primitive types and <code>void</code>). Android heap dumps have an HeapClass object for primitive type and the <code>java.land.Class</code> class has no instance.</p> <p>If this is an array class, you can find the component type by removing the brackets at the end, e.g. <code>name.substringBefore('[')</code>. Be careful when doing this for JVM heap dumps though, as if the component type is a primitive type there will not be a HeapClass object for it. This is especially tricky with N dimension primitive type arrays, which are instances of HeapObjectArray (vs single dimension primitive type arrays which are instances of HeapPrimitiveArray).</p>"},{"location":"api/shark/-heap-object/-heap-class/object-array-instances/","title":"Object array instances","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/objectArrayInstances</p>"},{"location":"api/shark/-heap-object/-heap-class/object-array-instances/#objectarrayinstances","title":"objectArrayInstances","text":"<p>[jvm]\\ val objectArrayInstances: Sequence<HeapObject.HeapObjectArray></p>"},{"location":"api/shark/-heap-object/-heap-class/object-id/","title":"Object id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/objectId</p>"},{"location":"api/shark/-heap-object/-heap-class/object-id/#objectid","title":"objectId","text":"<p>[jvm]\\ open override val objectId: Long</p> <p>The heap identifier of this object.</p>"},{"location":"api/shark/-heap-object/-heap-class/object-index/","title":"Object index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/objectIndex</p>"},{"location":"api/shark/-heap-object/-heap-class/object-index/#objectindex","title":"objectIndex","text":"<p>[jvm]\\ open override val objectIndex: Int</p> <p>An positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays.</p>"},{"location":"api/shark/-heap-object/-heap-class/primitive-array-instances/","title":"Primitive array instances","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/primitiveArrayInstances</p>"},{"location":"api/shark/-heap-object/-heap-class/primitive-array-instances/#primitivearrayinstances","title":"primitiveArrayInstances","text":"<p>[jvm]\\ val primitiveArrayInstances: Sequence<HeapObject.HeapPrimitiveArray></p> <p>Primitive arrays are one dimensional arrays of a primitive type. N-dimension arrays of primitive types (e.g. int[][]) are object arrays pointing to primitive arrays.</p>"},{"location":"api/shark/-heap-object/-heap-class/read-fields-byte-size/","title":"Read fields byte size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readFieldsByteSize</p>"},{"location":"api/shark/-heap-object/-heap-class/read-fields-byte-size/#readfieldsbytesize","title":"readFieldsByteSize","text":"<p>[jvm]\\ fun readFieldsByteSize(): Int</p> <p>The total byte size of fields for instances of this class, computed as the sum of the individual size of each field of this class. This does not include the size of fields from superclasses.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-class/read-fields-byte-size/#see-also","title":"See also","text":"HeapObject.HeapClass.instanceByteSize"},{"location":"api/shark/-heap-object/-heap-class/read-record-fields/","title":"Read record fields","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readRecordFields</p>"},{"location":"api/shark/-heap-object/-heap-class/read-record-fields/#readrecordfields","title":"readRecordFields","text":"<p>[jvm]\\ fun readRecordFields(): List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord></p>"},{"location":"api/shark/-heap-object/-heap-class/read-record-static-fields/","title":"Read record static fields","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readRecordStaticFields</p>"},{"location":"api/shark/-heap-object/-heap-class/read-record-static-fields/#readrecordstaticfields","title":"readRecordStaticFields","text":"<p>[jvm]\\ fun readRecordStaticFields(): List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord></p>"},{"location":"api/shark/-heap-object/-heap-class/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readRecord</p>"},{"location":"api/shark/-heap-object/-heap-class/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord</p> <p>Reads and returns the underlying ClassDumpRecord.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-class/read-static-field/","title":"Read static field","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readStaticField</p>"},{"location":"api/shark/-heap-object/-heap-class/read-static-field/#readstaticfield","title":"readStaticField","text":"<p>[jvm]\\ fun readStaticField(fieldName: String): HeapField?</p> <p>Returns a HeapField object that reflects the specified declared field of the class represented by this HeapClass object, or null if this field does not exist. The name parameter specifies the simple name of the desired field.</p> <p>Also available as a convenience operator: get</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-class/read-static-fields/","title":"Read static fields","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readStaticFields</p>"},{"location":"api/shark/-heap-object/-heap-class/read-static-fields/#readstaticfields","title":"readStaticFields","text":"<p>[jvm]\\ fun readStaticFields(): Sequence<HeapField></p> <p>The static fields of this class, as a sequence of HeapField.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-class/record-size/","title":"Record size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/recordSize</p>"},{"location":"api/shark/-heap-object/-heap-class/record-size/#recordsize","title":"recordSize","text":"<p>[jvm]\\ open override val recordSize: Int</p> <p>The total byte size for the record of this object in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-class/simple-name/","title":"Simple name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/simpleName</p>"},{"location":"api/shark/-heap-object/-heap-class/simple-name/#simplename","title":"simpleName","text":"<p>[jvm]\\ val simpleName: String</p> <p>Returns name stripped of any string content before the last period (included).</p>"},{"location":"api/shark/-heap-object/-heap-class/subclass-of/","title":"Subclass of","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/subclassOf</p>"},{"location":"api/shark/-heap-object/-heap-class/subclass-of/#subclassof","title":"subclassOf","text":"<p>[jvm]\\ infix fun subclassOf(superclass: HeapObject.HeapClass): Boolean</p> <p>Returns true if superclass is a superclass of this HeapClass.</p>"},{"location":"api/shark/-heap-object/-heap-class/subclasses/","title":"Subclasses","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/subclasses</p>"},{"location":"api/shark/-heap-object/-heap-class/subclasses/#subclasses","title":"subclasses","text":"<p>[jvm]\\ val subclasses: Sequence<HeapObject.HeapClass></p> <p>All the subclasses (direct and indirect) of this class, in the order they were recorded in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-class/superclass-of/","title":"Superclass of","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/superclassOf</p>"},{"location":"api/shark/-heap-object/-heap-class/superclass-of/#superclassof","title":"superclassOf","text":"<p>[jvm]\\ infix fun superclassOf(subclass: HeapObject.HeapClass): Boolean</p> <p>Returns true if subclass is a sub class of this HeapClass.</p>"},{"location":"api/shark/-heap-object/-heap-class/superclass/","title":"Superclass","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/superclass</p>"},{"location":"api/shark/-heap-object/-heap-class/superclass/#superclass","title":"superclass","text":"<p>[jvm]\\ val superclass: HeapObject.HeapClass?</p> <p>The HeapClass representing the superclass of this HeapClass. If this HeapClass represents either the Object class or a primitive type, then null is returned. If this HeapClass represents an array class then the HeapClass object representing the Object class is returned.</p>"},{"location":"api/shark/-heap-object/-heap-class/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/toString</p>"},{"location":"api/shark/-heap-object/-heap-class/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-object/-heap-instance/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance</p>"},{"location":"api/shark/-heap-object/-heap-instance/#heapinstance","title":"HeapInstance","text":"<p>[jvm]\\ class HeapInstance : HeapObject</p> <p>An instance in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-instance/#functions","title":"Functions","text":"Name Summary get [jvm]operator fun get(declaringClassName: String, fieldName: String): HeapField?operator fun get(declaringClass: KClass<out Any>, fieldName: String): HeapField? instanceOf [jvm]infix fun instanceOf(className: String): BooleanReturns true if this is an instance of the class named className or an instance of a subclass of that class.[jvm]infix fun instanceOf(expectedClass: KClass<*>): Booleaninfix fun instanceOf(expectedClass: HeapObject.HeapClass): BooleanReturns true if this is an instance of expectedClass or an instance of a subclass of that class. readAsJavaString [jvm]fun readAsJavaString(): String?If this HeapInstance is an instance of the String class, returns a String instance with content that matches the string in the heap dump. Otherwise returns null. readField [jvm]fun readField(declaringClassName: String, fieldName: String): HeapField?Returns a HeapField object that reflects the specified declared field of the instance represented by this HeapInstance object, or null if this field does not exist. The declaringClassName specifies the class in which the desired field is declared, and the fieldName parameter specifies the simple name of the desired field.[jvm]fun readField(declaringClass: KClass<out Any>, fieldName: String): HeapField? readFields [jvm]fun readFields(): Sequence<HeapField>The fields of this instance, as a sequence of HeapField. readRecord [jvm]open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.InstanceDumpRecordReads and returns the underlying InstanceDumpRecord. toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-object/-heap-instance/#properties","title":"Properties","text":"Name Summary asClass [jvm]val asClass: HeapObject.HeapClass?This HeapObject as a HeapClass if it is one, or null otherwise asInstance [jvm]val asInstance: HeapObject.HeapInstance?This HeapObject as a HeapInstance if it is one, or null otherwise asObjectArray [jvm]val asObjectArray: HeapObject.HeapObjectArray?This HeapObject as a HeapObjectArray if it is one, or null otherwise asPrimitiveArray [jvm]val asPrimitiveArray: HeapObject.HeapPrimitiveArray?This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise byteSize [jvm]val byteSize: Int graph [jvm]open override val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. hexIdentityHashCode [jvm]val HeapObject.HeapInstance.hexIdentityHashCode: String?The system identity hashCode represented as hex, or null if it couldn\u2019t be found. This is the string identifier you see when calling Object.toString() at runtime on a class that does not override its hashCode() method, e.g. com.example.MyThing@6bd57cf identityHashCode [jvm]val HeapObject.HeapInstance.identityHashCode: Int?The system identity hash code, or null if it couldn\u2019t be found. instanceClass [jvm]val instanceClass: HeapObject.HeapClassThe class of this instance. instanceClassId [jvm]val instanceClassId: LongThe heap identifier of the class of this instance. instanceClassName [jvm]val instanceClassName: StringThe name of the class of this instance, identical to Class.getName. instanceClassSimpleName [jvm]val instanceClassSimpleName: StringReturns instanceClassName stripped of any string content before the last period (included). isPrimitiveWrapper [jvm]val isPrimitiveWrapper: BooleanWhether this is an instance of a primitive wrapper type. objectId [jvm]open override val objectId: LongThe heap identifier of this object. objectIndex [jvm]open override val objectIndex: IntAn positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays. positiveObjectId [jvm]val positiveObjectId: LongobjectId masked to be a positive unique identifier, as reported in Android Studio. recordSize [jvm]open override val recordSize: IntThe total byte size for the record of this object in the heap dump."},{"location":"api/shark/-heap-object/-heap-instance/byte-size/","title":"Byte size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/byteSize</p>"},{"location":"api/shark/-heap-object/-heap-instance/byte-size/#bytesize","title":"byteSize","text":"<p>[jvm]\\ val byteSize: Int</p>"},{"location":"api/shark/-heap-object/-heap-instance/byte-size/#see-also","title":"See also","text":"HeapObject.HeapClass.instanceByteSize"},{"location":"api/shark/-heap-object/-heap-instance/get/","title":"Get","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/get</p>"},{"location":"api/shark/-heap-object/-heap-instance/get/#get","title":"get","text":"<p>[jvm]\\ operator fun get(declaringClass: KClass<out Any>, fieldName: String): HeapField?</p> <p>operator fun get(declaringClassName: String, fieldName: String): HeapField?</p>"},{"location":"api/shark/-heap-object/-heap-instance/get/#see-also","title":"See also","text":"HeapObject.HeapInstance.readField"},{"location":"api/shark/-heap-object/-heap-instance/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/graph</p>"},{"location":"api/shark/-heap-object/-heap-instance/graph/#graph","title":"graph","text":"<p>[jvm]\\ open override val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-id/","title":"Instance class id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/instanceClassId</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-id/#instanceclassid","title":"instanceClassId","text":"<p>[jvm]\\ val instanceClassId: Long</p> <p>The heap identifier of the class of this instance.</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-name/","title":"Instance class name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/instanceClassName</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-name/#instanceclassname","title":"instanceClassName","text":"<p>[jvm]\\ val instanceClassName: String</p> <p>The name of the class of this instance, identical to Class.getName.</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-simple-name/","title":"Instance class simple name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/instanceClassSimpleName</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-simple-name/#instanceclasssimplename","title":"instanceClassSimpleName","text":"<p>[jvm]\\ val instanceClassSimpleName: String</p> <p>Returns instanceClassName stripped of any string content before the last period (included).</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class/","title":"Instance class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/instanceClass</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class/#instanceclass","title":"instanceClass","text":"<p>[jvm]\\ val instanceClass: HeapObject.HeapClass</p> <p>The class of this instance.</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-of/","title":"Instance of","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/instanceOf</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-of/#instanceof","title":"instanceOf","text":"<p>[jvm]\\ infix fun instanceOf(className: String): Boolean</p> <p>Returns true if this is an instance of the class named className or an instance of a subclass of that class.</p> <p>[jvm]\\ infix fun instanceOf(expectedClass: KClass<*>): Boolean</p> <p>infix fun instanceOf(expectedClass: HeapObject.HeapClass): Boolean</p> <p>Returns true if this is an instance of expectedClass or an instance of a subclass of that class.</p>"},{"location":"api/shark/-heap-object/-heap-instance/is-primitive-wrapper/","title":"Is primitive wrapper","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/isPrimitiveWrapper</p>"},{"location":"api/shark/-heap-object/-heap-instance/is-primitive-wrapper/#isprimitivewrapper","title":"isPrimitiveWrapper","text":"<p>[jvm]\\ val isPrimitiveWrapper: Boolean</p> <p>Whether this is an instance of a primitive wrapper type.</p>"},{"location":"api/shark/-heap-object/-heap-instance/object-id/","title":"Object id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/objectId</p>"},{"location":"api/shark/-heap-object/-heap-instance/object-id/#objectid","title":"objectId","text":"<p>[jvm]\\ open override val objectId: Long</p> <p>The heap identifier of this object.</p>"},{"location":"api/shark/-heap-object/-heap-instance/object-index/","title":"Object index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/objectIndex</p>"},{"location":"api/shark/-heap-object/-heap-instance/object-index/#objectindex","title":"objectIndex","text":"<p>[jvm]\\ open override val objectIndex: Int</p> <p>An positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays.</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-as-java-string/","title":"Read as java string","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/readAsJavaString</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-as-java-string/#readasjavastring","title":"readAsJavaString","text":"<p>[jvm]\\ fun readAsJavaString(): String?</p> <p>If this HeapInstance is an instance of the String class, returns a String instance with content that matches the string in the heap dump. Otherwise returns null.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-field/","title":"Read field","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/readField</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-field/#readfield","title":"readField","text":"<p>[jvm]\\ fun readField(declaringClass: KClass<out Any>, fieldName: String): HeapField?</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-field/#see-also","title":"See also","text":"HeapObject.HeapInstance.readField <p>[jvm]\\ fun readField(declaringClassName: String, fieldName: String): HeapField?</p> <p>Returns a HeapField object that reflects the specified declared field of the instance represented by this HeapInstance object, or null if this field does not exist. The declaringClassName specifies the class in which the desired field is declared, and the fieldName parameter specifies the simple name of the desired field.</p> <p>Also available as a convenience operator: get</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-fields/","title":"Read fields","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/readFields</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-fields/#readfields","title":"readFields","text":"<p>[jvm]\\ fun readFields(): Sequence<HeapField></p> <p>The fields of this instance, as a sequence of HeapField.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/readRecord</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.InstanceDumpRecord</p> <p>Reads and returns the underlying InstanceDumpRecord.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-instance/record-size/","title":"Record size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/recordSize</p>"},{"location":"api/shark/-heap-object/-heap-instance/record-size/#recordsize","title":"recordSize","text":"<p>[jvm]\\ open override val recordSize: Int</p> <p>The total byte size for the record of this object in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-instance/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/toString</p>"},{"location":"api/shark/-heap-object/-heap-instance/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-object/-heap-object-array/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray</p>"},{"location":"api/shark/-heap-object/-heap-object-array/#heapobjectarray","title":"HeapObjectArray","text":"<p>[jvm]\\ class HeapObjectArray : HeapObject</p> <p>An object array in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/#functions","title":"Functions","text":"Name Summary readElements [jvm]fun readElements(): Sequence<HeapValue>The elements in this array, as a sequence of HeapValue. readRecord [jvm]open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ObjectArrayDumpRecordReads and returns the underlying ObjectArrayDumpRecord. toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-object/-heap-object-array/#properties","title":"Properties","text":"Name Summary arrayClass [jvm]val arrayClass: HeapObject.HeapClassThe class of this array. arrayClassId [jvm]val arrayClassId: LongThe heap identifier of the class of this array. arrayClassName [jvm]val arrayClassName: StringThe name of the class of this array, identical to Class.getName. arrayClassSimpleName [jvm]val arrayClassSimpleName: StringReturns arrayClassName stripped of any string content before the last period (included). asClass [jvm]val asClass: HeapObject.HeapClass?This HeapObject as a HeapClass if it is one, or null otherwise asInstance [jvm]val asInstance: HeapObject.HeapInstance?This HeapObject as a HeapInstance if it is one, or null otherwise asObjectArray [jvm]val asObjectArray: HeapObject.HeapObjectArray?This HeapObject as a HeapObjectArray if it is one, or null otherwise asPrimitiveArray [jvm]val asPrimitiveArray: HeapObject.HeapPrimitiveArray?This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise byteSize [jvm]val byteSize: IntThe total byte shallow size of elements in this array. graph [jvm]open override val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. objectId [jvm]open override val objectId: LongThe heap identifier of this object. objectIndex [jvm]open override val objectIndex: IntAn positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays. positiveObjectId [jvm]val positiveObjectId: LongobjectId masked to be a positive unique identifier, as reported in Android Studio. recordSize [jvm]open override val recordSize: IntThe total byte size for the record of this object in the heap dump."},{"location":"api/shark/-heap-object/-heap-object-array/array-class-id/","title":"Array class id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/arrayClassId</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class-id/#arrayclassid","title":"arrayClassId","text":"<p>[jvm]\\ val arrayClassId: Long</p> <p>The heap identifier of the class of this array.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class-name/","title":"Array class name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/arrayClassName</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class-name/#arrayclassname","title":"arrayClassName","text":"<p>[jvm]\\ val arrayClassName: String</p> <p>The name of the class of this array, identical to Class.getName.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class-simple-name/","title":"Array class simple name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/arrayClassSimpleName</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class-simple-name/#arrayclasssimplename","title":"arrayClassSimpleName","text":"<p>[jvm]\\ val arrayClassSimpleName: String</p> <p>Returns arrayClassName stripped of any string content before the last period (included).</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class/","title":"Array class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/arrayClass</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class/#arrayclass","title":"arrayClass","text":"<p>[jvm]\\ val arrayClass: HeapObject.HeapClass</p> <p>The class of this array.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/byte-size/","title":"Byte size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/byteSize</p>"},{"location":"api/shark/-heap-object/-heap-object-array/byte-size/#bytesize","title":"byteSize","text":"<p>[jvm]\\ val byteSize: Int</p> <p>The total byte shallow size of elements in this array.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/graph</p>"},{"location":"api/shark/-heap-object/-heap-object-array/graph/#graph","title":"graph","text":"<p>[jvm]\\ open override val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/object-id/","title":"Object id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/objectId</p>"},{"location":"api/shark/-heap-object/-heap-object-array/object-id/#objectid","title":"objectId","text":"<p>[jvm]\\ open override val objectId: Long</p> <p>The heap identifier of this object.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/object-index/","title":"Object index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/objectIndex</p>"},{"location":"api/shark/-heap-object/-heap-object-array/object-index/#objectindex","title":"objectIndex","text":"<p>[jvm]\\ open override val objectIndex: Int</p> <p>An positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/read-elements/","title":"Read elements","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/readElements</p>"},{"location":"api/shark/-heap-object/-heap-object-array/read-elements/#readelements","title":"readElements","text":"<p>[jvm]\\ fun readElements(): Sequence<HeapValue></p> <p>The elements in this array, as a sequence of HeapValue.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/readRecord</p>"},{"location":"api/shark/-heap-object/-heap-object-array/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ObjectArrayDumpRecord</p> <p>Reads and returns the underlying ObjectArrayDumpRecord.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/record-size/","title":"Record size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/recordSize</p>"},{"location":"api/shark/-heap-object/-heap-object-array/record-size/#recordsize","title":"recordSize","text":"<p>[jvm]\\ open override val recordSize: Int</p> <p>The total byte size for the record of this object in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/toString</p>"},{"location":"api/shark/-heap-object/-heap-object-array/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/#heapprimitivearray","title":"HeapPrimitiveArray","text":"<p>[jvm]\\ class HeapPrimitiveArray : HeapObject</p> <p>A primitive array in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/#functions","title":"Functions","text":"Name Summary readRecord [jvm]open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecordReads and returns the underlying PrimitiveArrayDumpRecord. toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-object/-heap-primitive-array/#properties","title":"Properties","text":"Name Summary arrayClass [jvm]val arrayClass: HeapObject.HeapClassThe class of this array. arrayClassName [jvm]val arrayClassName: StringThe name of the class of this array, identical to Class.getName. asClass [jvm]val asClass: HeapObject.HeapClass?This HeapObject as a HeapClass if it is one, or null otherwise asInstance [jvm]val asInstance: HeapObject.HeapInstance?This HeapObject as a HeapInstance if it is one, or null otherwise asObjectArray [jvm]val asObjectArray: HeapObject.HeapObjectArray?This HeapObject as a HeapObjectArray if it is one, or null otherwise asPrimitiveArray [jvm]val asPrimitiveArray: HeapObject.HeapPrimitiveArray?This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise byteSize [jvm]val byteSize: IntThe total byte shallow size of elements in this array. graph [jvm]open override val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. objectId [jvm]open override val objectId: LongThe heap identifier of this object. objectIndex [jvm]open override val objectIndex: IntAn positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays. positiveObjectId [jvm]val positiveObjectId: LongobjectId masked to be a positive unique identifier, as reported in Android Studio. primitiveType [jvm]val primitiveType: PrimitiveTypeThe PrimitiveType of elements in this array. recordSize [jvm]open override val recordSize: IntThe total byte size for the record of this object in the heap dump."},{"location":"api/shark/-heap-object/-heap-primitive-array/array-class-name/","title":"Array class name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/arrayClassName</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/array-class-name/#arrayclassname","title":"arrayClassName","text":"<p>[jvm]\\ val arrayClassName: String</p> <p>The name of the class of this array, identical to Class.getName.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/array-class/","title":"Array class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/arrayClass</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/array-class/#arrayclass","title":"arrayClass","text":"<p>[jvm]\\ val arrayClass: HeapObject.HeapClass</p> <p>The class of this array.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/byte-size/","title":"Byte size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/byteSize</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/byte-size/#bytesize","title":"byteSize","text":"<p>[jvm]\\ val byteSize: Int</p> <p>The total byte shallow size of elements in this array.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/graph</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/graph/#graph","title":"graph","text":"<p>[jvm]\\ open override val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/object-id/","title":"Object id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/objectId</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/object-id/#objectid","title":"objectId","text":"<p>[jvm]\\ open override val objectId: Long</p> <p>The heap identifier of this object.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/object-index/","title":"Object index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/objectIndex</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/object-index/#objectindex","title":"objectIndex","text":"<p>[jvm]\\ open override val objectIndex: Int</p> <p>An positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/primitive-type/","title":"Primitive type","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/primitiveType</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/primitive-type/#primitivetype","title":"primitiveType","text":"<p>[jvm]\\ val primitiveType: PrimitiveType</p> <p>The PrimitiveType of elements in this array.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/readRecord</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p> <p>Reads and returns the underlying PrimitiveArrayDumpRecord.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/record-size/","title":"Record size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/recordSize</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/record-size/#recordsize","title":"recordSize","text":"<p>[jvm]\\ open override val recordSize: Int</p> <p>The total byte size for the record of this object in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/toString</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-traversal-input/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapTraversalInput</p>"},{"location":"api/shark/-heap-traversal-input/#heaptraversalinput","title":"HeapTraversalInput","text":"<p>interface HeapTraversalInput</p>"},{"location":"api/shark/-heap-traversal-input/#inheritors","title":"Inheritors","text":"InitialState HeapTraversalOutput"},{"location":"api/shark/-heap-traversal-input/#properties","title":"Properties","text":"Name Summary scenarioLoopsPerGraph [jvm]abstract val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. traversalCount [jvm]abstract val traversalCount: Int"},{"location":"api/shark/-heap-traversal-input/heap-graph-count/","title":"Heap graph count","text":"<p>//leakcanary-repo/shark/HeapTraversalInput/heapGraphCount</p>"},{"location":"api/shark/-heap-traversal-input/heap-graph-count/#heapgraphcount","title":"heapGraphCount","text":"<p>[jvm]\\ abstract val heapGraphCount: Int?</p> <p>The expected max number of traversals, or null if unknown.</p>"},{"location":"api/shark/-heap-traversal-input/scenario-loops-per-graph/","title":"Scenario loops per graph","text":"<p>//leakcanary-repo/shark/HeapTraversalInput/scenarioLoopsPerGraph</p>"},{"location":"api/shark/-heap-traversal-input/scenario-loops-per-graph/#scenarioloopspergraph","title":"scenarioLoopsPerGraph","text":"<p>[jvm]\\ abstract val scenarioLoopsPerGraph: Int</p> <p>How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal.</p>"},{"location":"api/shark/-heap-traversal-input/traversal-count/","title":"Traversal count","text":"<p>//leakcanary-repo/shark/HeapTraversalInput/traversalCount</p>"},{"location":"api/shark/-heap-traversal-input/traversal-count/#traversalcount","title":"traversalCount","text":"<p>[jvm]\\ abstract val traversalCount: Int</p>"},{"location":"api/shark/-heap-traversal-output/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapTraversalOutput</p>"},{"location":"api/shark/-heap-traversal-output/#heaptraversaloutput","title":"HeapTraversalOutput","text":"<p>interface HeapTraversalOutput : HeapTraversalInput</p>"},{"location":"api/shark/-heap-traversal-output/#inheritors","title":"Inheritors","text":"FirstHeapTraversal HeapDiff"},{"location":"api/shark/-heap-traversal-output/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-traversal-output/#properties","title":"Properties","text":"Name Summary scenarioLoopsPerGraph [jvm]abstract val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. shortestPathTree [jvm]abstract val shortestPathTree: ShortestPathObjectNodeA representation of the heap as a tree of shortest path from roots to each object in the heap, where: traversalCount [jvm]abstract val traversalCount: Int"},{"location":"api/shark/-heap-traversal-output/shortest-path-tree/","title":"Shortest path tree","text":"<p>//leakcanary-repo/shark/HeapTraversalOutput/shortestPathTree</p>"},{"location":"api/shark/-heap-traversal-output/shortest-path-tree/#shortestpathtree","title":"shortestPathTree","text":"<p>[jvm]\\ abstract val shortestPathTree: ShortestPathObjectNode</p> <p>A representation of the heap as a tree of shortest path from roots to each object in the heap, where:</p> <ul> <li>object identity is lost</li> <li>objects are grouped by identical path into a single node</li> <li> <p>Path element names are determined using the node & edge name to reach them (e.g. class name</p> </li> <li> <p>field name) as well as the class name of the reached object.</p> </li> </ul>"},{"location":"api/shark/-heap-traversal-output/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapTraversalOutput/Companion</p>"},{"location":"api/shark/-heap-traversal-output/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-traversal-output/-companion/#properties","title":"Properties","text":"Name Summary ignoredReferences [jvm]val ignoredReferences: List<IgnoredReferenceMatcher>When running a heap growth analysis in the same process as where the scenario runs, we should ignore the part of the graph used to keep track of the tree in the previous iteration of the scenario."},{"location":"api/shark/-heap-traversal-output/-companion/ignored-references/","title":"Ignored references","text":"<p>//leakcanary-repo/shark/HeapTraversalOutput/Companion/ignoredReferences</p>"},{"location":"api/shark/-heap-traversal-output/-companion/ignored-references/#ignoredreferences","title":"ignoredReferences","text":"<p>[jvm]\\ val ignoredReferences: List<IgnoredReferenceMatcher></p> <p>When running a heap growth analysis in the same process as where the scenario runs, we should ignore the part of the graph used to keep track of the tree in the previous iteration of the scenario.</p>"},{"location":"api/shark/-heap-value/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapValue</p>"},{"location":"api/shark/-heap-value/#heapvalue","title":"HeapValue","text":"<p>[jvm]\\ class HeapValue(val graph: HeapGraph, val holder: ValueHolder)</p> <p>Represents a value in the heap dump, which can be an object reference or a primitive type.</p>"},{"location":"api/shark/-heap-value/#constructors","title":"Constructors","text":"HeapValue [jvm]constructor(graph: HeapGraph, holder: ValueHolder)"},{"location":"api/shark/-heap-value/#functions","title":"Functions","text":"Name Summary heapValueAsString [jvm]fun HeapValue.heapValueAsString(): String readAsJavaString [jvm]fun readAsJavaString(): String?If this HeapValue if it represents a non null object reference to an instance of the String class that exists in the heap dump, returns a String instance with content that matches the string in the heap dump. Otherwise returns null."},{"location":"api/shark/-heap-value/#properties","title":"Properties","text":"Name Summary asBoolean [jvm]val asBoolean: Boolean?This HeapValue as a Boolean if it represents one, or null otherwise. asByte [jvm]val asByte: Byte?This HeapValue as a Byte if it represents one, or null otherwise. asChar [jvm]val asChar: Char?This HeapValue as a Char if it represents one, or null otherwise. asDouble [jvm]val asDouble: Double?This HeapValue as a Double if it represents one, or null otherwise. asFloat [jvm]val asFloat: Float?This HeapValue as a Float if it represents one, or null otherwise. asInt [jvm]val asInt: Int?This HeapValue as an Int if it represents one, or null otherwise. asLong [jvm]val asLong: Long?This HeapValue as a Long if it represents one, or null otherwise. asNonNullObjectId [jvm]val asNonNullObjectId: Long?This HeapValue as a Long if it represents a non null object reference, or null otherwise. asObject [jvm]val asObject: HeapObject?The HeapObject referenced by this HeapValue if it represents a non null object reference, or null otherwise. asObjectId [jvm]val asObjectId: Long?This HeapValue as a Long if it represents an object reference, or null otherwise. asShort [jvm]val asShort: Short?This HeapValue as a Short if it represents one, or null otherwise. graph [jvm]val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. holder [jvm]val holder: ValueHolderHolds the actual value that this HeapValue represents. isNonNullReference [jvm]val isNonNullReference: BooleanTrue is this HeapValue represents a non null object reference, false otherwise. isNullReference [jvm]val isNullReference: BooleanTrue is this HeapValue represents a null object reference, false otherwise."},{"location":"api/shark/-heap-value/-heap-value/","title":"heap value","text":"<p>//leakcanary-repo/shark/HeapValue/HeapValue</p>"},{"location":"api/shark/-heap-value/-heap-value/#heapvalue","title":"HeapValue","text":"<p>[jvm]\\ constructor(graph: HeapGraph, holder: ValueHolder)</p>"},{"location":"api/shark/-heap-value/as-boolean/","title":"As boolean","text":"<p>//leakcanary-repo/shark/HeapValue/asBoolean</p>"},{"location":"api/shark/-heap-value/as-boolean/#asboolean","title":"asBoolean","text":"<p>[jvm]\\ val asBoolean: Boolean?</p> <p>This HeapValue as a Boolean if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-byte/","title":"As byte","text":"<p>//leakcanary-repo/shark/HeapValue/asByte</p>"},{"location":"api/shark/-heap-value/as-byte/#asbyte","title":"asByte","text":"<p>[jvm]\\ val asByte: Byte?</p> <p>This HeapValue as a Byte if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-char/","title":"As char","text":"<p>//leakcanary-repo/shark/HeapValue/asChar</p>"},{"location":"api/shark/-heap-value/as-char/#aschar","title":"asChar","text":"<p>[jvm]\\ val asChar: Char?</p> <p>This HeapValue as a Char if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-double/","title":"As double","text":"<p>//leakcanary-repo/shark/HeapValue/asDouble</p>"},{"location":"api/shark/-heap-value/as-double/#asdouble","title":"asDouble","text":"<p>[jvm]\\ val asDouble: Double?</p> <p>This HeapValue as a Double if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-float/","title":"As float","text":"<p>//leakcanary-repo/shark/HeapValue/asFloat</p>"},{"location":"api/shark/-heap-value/as-float/#asfloat","title":"asFloat","text":"<p>[jvm]\\ val asFloat: Float?</p> <p>This HeapValue as a Float if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-int/","title":"As int","text":"<p>//leakcanary-repo/shark/HeapValue/asInt</p>"},{"location":"api/shark/-heap-value/as-int/#asint","title":"asInt","text":"<p>[jvm]\\ val asInt: Int?</p> <p>This HeapValue as an Int if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-long/","title":"As long","text":"<p>//leakcanary-repo/shark/HeapValue/asLong</p>"},{"location":"api/shark/-heap-value/as-long/#aslong","title":"asLong","text":"<p>[jvm]\\ val asLong: Long?</p> <p>This HeapValue as a Long if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-non-null-object-id/","title":"As non null object id","text":"<p>//leakcanary-repo/shark/HeapValue/asNonNullObjectId</p>"},{"location":"api/shark/-heap-value/as-non-null-object-id/#asnonnullobjectid","title":"asNonNullObjectId","text":"<p>[jvm]\\ val asNonNullObjectId: Long?</p> <p>This HeapValue as a Long if it represents a non null object reference, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-object-id/","title":"As object id","text":"<p>//leakcanary-repo/shark/HeapValue/asObjectId</p>"},{"location":"api/shark/-heap-value/as-object-id/#asobjectid","title":"asObjectId","text":"<p>[jvm]\\ val asObjectId: Long?</p> <p>This HeapValue as a Long if it represents an object reference, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-object/","title":"As object","text":"<p>//leakcanary-repo/shark/HeapValue/asObject</p>"},{"location":"api/shark/-heap-value/as-object/#asobject","title":"asObject","text":"<p>[jvm]\\ val asObject: HeapObject?</p> <p>The HeapObject referenced by this HeapValue if it represents a non null object reference, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-short/","title":"As short","text":"<p>//leakcanary-repo/shark/HeapValue/asShort</p>"},{"location":"api/shark/-heap-value/as-short/#asshort","title":"asShort","text":"<p>[jvm]\\ val asShort: Short?</p> <p>This HeapValue as a Short if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapValue/graph</p>"},{"location":"api/shark/-heap-value/graph/#graph","title":"graph","text":"<p>[jvm]\\ val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-value/holder/","title":"Holder","text":"<p>//leakcanary-repo/shark/HeapValue/holder</p>"},{"location":"api/shark/-heap-value/holder/#holder","title":"holder","text":"<p>[jvm]\\ val holder: ValueHolder</p> <p>Holds the actual value that this HeapValue represents.</p>"},{"location":"api/shark/-heap-value/is-non-null-reference/","title":"Is non null reference","text":"<p>//leakcanary-repo/shark/HeapValue/isNonNullReference</p>"},{"location":"api/shark/-heap-value/is-non-null-reference/#isnonnullreference","title":"isNonNullReference","text":"<p>[jvm]\\ val isNonNullReference: Boolean</p> <p>True is this HeapValue represents a non null object reference, false otherwise.</p>"},{"location":"api/shark/-heap-value/is-null-reference/","title":"Is null reference","text":"<p>//leakcanary-repo/shark/HeapValue/isNullReference</p>"},{"location":"api/shark/-heap-value/is-null-reference/#isnullreference","title":"isNullReference","text":"<p>[jvm]\\ val isNullReference: Boolean</p> <p>True is this HeapValue represents a null object reference, false otherwise.</p>"},{"location":"api/shark/-heap-value/read-as-java-string/","title":"Read as java string","text":"<p>//leakcanary-repo/shark/HeapValue/readAsJavaString</p>"},{"location":"api/shark/-heap-value/read-as-java-string/#readasjavastring","title":"readAsJavaString","text":"<p>[jvm]\\ fun readAsJavaString(): String?</p> <p>If this HeapValue if it represents a non null object reference to an instance of the String class that exists in the heap dump, returns a String instance with content that matches the string in the heap dump. Otherwise returns null.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-hprof-deobfuscator/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofDeobfuscator</p>"},{"location":"api/shark/-hprof-deobfuscator/#hprofdeobfuscator","title":"HprofDeobfuscator","text":"<p>[jvm]\\ class HprofDeobfuscator</p> <p>Converts a Hprof file to another file with deobfuscated class and field names.</p>"},{"location":"api/shark/-hprof-deobfuscator/#constructors","title":"Constructors","text":"HprofDeobfuscator [jvm]constructor()"},{"location":"api/shark/-hprof-deobfuscator/#functions","title":"Functions","text":"Name Summary deobfuscate [jvm]fun deobfuscate(proguardMapping: ProguardMapping, inputHprofFile: File, outputHprofFile: File = File( inputHprofFile.parent, inputHprofFile.name.replace( \".hprof\", \"-deobfuscated.hprof\" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + \"-deobfuscated\" })): File"},{"location":"api/shark/-hprof-deobfuscator/-hprof-deobfuscator/","title":"hprof deobfuscator","text":"<p>//leakcanary-repo/shark/HprofDeobfuscator/HprofDeobfuscator</p>"},{"location":"api/shark/-hprof-deobfuscator/-hprof-deobfuscator/#hprofdeobfuscator","title":"HprofDeobfuscator","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-hprof-deobfuscator/deobfuscate/","title":"Deobfuscate","text":"<p>//leakcanary-repo/shark/HprofDeobfuscator/deobfuscate</p>"},{"location":"api/shark/-hprof-deobfuscator/deobfuscate/#deobfuscate","title":"deobfuscate","text":"<p>[jvm]\\ fun deobfuscate(proguardMapping: ProguardMapping, inputHprofFile: File, outputHprofFile: File = File( inputHprofFile.parent, inputHprofFile.name.replace( \".hprof\", \"-deobfuscated.hprof\" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + \"-deobfuscated\" })): File</p>"},{"location":"api/shark/-hprof-deobfuscator/deobfuscate/#see-also","title":"See also","text":"HprofDeobfuscator"},{"location":"api/shark/-hprof-header/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofHeader</p>"},{"location":"api/shark/-hprof-header/#hprofheader","title":"HprofHeader","text":"<p>[jvm]\\ data class HprofHeader(val heapDumpTimestamp: Long = System.currentTimeMillis(), val version: HprofVersion = HprofVersion.ANDROID, val identifierByteSize: Int = 4)</p> <p>Represents the header metadata of a Hprof file.</p>"},{"location":"api/shark/-hprof-header/#constructors","title":"Constructors","text":"HprofHeader [jvm]constructor(heapDumpTimestamp: Long = System.currentTimeMillis(), version: HprofVersion = HprofVersion.ANDROID, identifierByteSize: Int = 4)"},{"location":"api/shark/-hprof-header/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-header/#properties","title":"Properties","text":"Name Summary heapDumpTimestamp [jvm]val heapDumpTimestamp: LongUnix timestamp at which the heap was dumped. identifierByteSize [jvm]val identifierByteSize: Int = 4Size of Hprof identifiers. Identifiers are used to represent UTF8 strings, objects, stack traces, etc. They can have the same size as host pointers or sizeof(void*), but are not required to be. recordsPosition [jvm]val recordsPosition: IntHow many bytes from the beginning of the file can we find the hprof records at. Version string, 0 delimiter (1 byte), identifier byte size int (4 bytes) ,timestamp long (8 bytes) version [jvm]val version: HprofVersionHprof version, which is tied to the runtime where the heap was dumped."},{"location":"api/shark/-hprof-header/-hprof-header/","title":"hprof header","text":"<p>//leakcanary-repo/shark/HprofHeader/HprofHeader</p>"},{"location":"api/shark/-hprof-header/-hprof-header/#hprofheader","title":"HprofHeader","text":"<p>[jvm]\\ constructor(heapDumpTimestamp: Long = System.currentTimeMillis(), version: HprofVersion = HprofVersion.ANDROID, identifierByteSize: Int = 4)</p>"},{"location":"api/shark/-hprof-header/heap-dump-timestamp/","title":"Heap dump timestamp","text":"<p>//leakcanary-repo/shark/HprofHeader/heapDumpTimestamp</p>"},{"location":"api/shark/-hprof-header/heap-dump-timestamp/#heapdumptimestamp","title":"heapDumpTimestamp","text":"<p>[jvm]\\ val heapDumpTimestamp: Long</p> <p>Unix timestamp at which the heap was dumped.</p>"},{"location":"api/shark/-hprof-header/identifier-byte-size/","title":"Identifier byte size","text":"<p>//leakcanary-repo/shark/HprofHeader/identifierByteSize</p>"},{"location":"api/shark/-hprof-header/identifier-byte-size/#identifierbytesize","title":"identifierByteSize","text":"<p>[jvm]\\ val identifierByteSize: Int = 4</p> <p>Size of Hprof identifiers. Identifiers are used to represent UTF8 strings, objects, stack traces, etc. They can have the same size as host pointers or sizeof(void*), but are not required to be.</p>"},{"location":"api/shark/-hprof-header/records-position/","title":"Records position","text":"<p>//leakcanary-repo/shark/HprofHeader/recordsPosition</p>"},{"location":"api/shark/-hprof-header/records-position/#recordsposition","title":"recordsPosition","text":"<p>[jvm]\\ val recordsPosition: Int</p> <p>How many bytes from the beginning of the file can we find the hprof records at. Version string, 0 delimiter (1 byte), identifier byte size int (4 bytes) ,timestamp long (8 bytes)</p>"},{"location":"api/shark/-hprof-header/version/","title":"Version","text":"<p>//leakcanary-repo/shark/HprofHeader/version</p>"},{"location":"api/shark/-hprof-header/version/#version","title":"version","text":"<p>[jvm]\\ val version: HprofVersion</p> <p>Hprof version, which is tied to the runtime where the heap was dumped.</p>"},{"location":"api/shark/-hprof-header/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofHeader/Companion</p>"},{"location":"api/shark/-hprof-header/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-header/-companion/#functions","title":"Functions","text":"Name Summary parseHeaderOf [jvm]fun parseHeaderOf(hprofFile: File): HprofHeaderReads the header of the provided hprofFile and returns it as a HprofHeader[jvm]fun parseHeaderOf(source: BufferedSource): HprofHeaderReads the header of the provided source and returns it as a HprofHeader. This does not close the source."},{"location":"api/shark/-hprof-header/-companion/parse-header-of/","title":"Parse header of","text":"<p>//leakcanary-repo/shark/HprofHeader/Companion/parseHeaderOf</p>"},{"location":"api/shark/-hprof-header/-companion/parse-header-of/#parseheaderof","title":"parseHeaderOf","text":"<p>[jvm]\\ fun parseHeaderOf(hprofFile: File): HprofHeader</p> <p>Reads the header of the provided hprofFile and returns it as a HprofHeader</p> <p>[jvm]\\ fun parseHeaderOf(source: BufferedSource): HprofHeader</p> <p>Reads the header of the provided source and returns it as a HprofHeader. This does not close the source.</p>"},{"location":"api/shark/-hprof-heap-graph/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofHeapGraph</p>"},{"location":"api/shark/-hprof-heap-graph/#hprofheapgraph","title":"HprofHeapGraph","text":"<p>[jvm]\\ class HprofHeapGraph : CloseableHeapGraph</p> <p>A HeapGraph that reads from an Hprof file indexed by HprofIndex.</p>"},{"location":"api/shark/-hprof-heap-graph/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-heap-graph/#functions","title":"Functions","text":"Name Summary close [jvm]open override fun close() findClassByName [jvm]open override fun findClassByName(className: String): HeapObject.HeapClass?Returns the HeapClass corresponding to the provided className, or null if the class cannot be found. findHeapDumpIndex [jvm]open override fun findHeapDumpIndex(objectId: Long): IntReturns the 1-based index in the heap dump of the object corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByHeapDumpIndex [jvm]open override fun findObjectByHeapDumpIndex(heapDumpIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided heapDumpIndex, and throws IllegalArgumentException if heapDumpIndex is less than 1 or more than objectCount. findObjectById [jvm]open override fun findObjectById(objectId: Long): HeapObjectReturns the HeapObject corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByIdOrNull [jvm]open override fun findObjectByIdOrNull(objectId: Long): HeapObject?Returns the HeapObject corresponding to the provided objectId or null if it cannot be found. findObjectByIndex [jvm]open override fun findObjectByIndex(objectIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided objectIndex, and throws IllegalArgumentException if objectIndex is less than 0 or more than objectCount - 1. lruCacheStats [jvm]fun lruCacheStats(): StringThis is only public so that we can publish stats. Accessing this requires casting HeapGraph to HprofHeapGraph so it\u2019s really not a public API. May change at any time! objectExists [jvm]open override fun objectExists(objectId: Long): BooleanReturns true if the provided objectId exists in the heap dump."},{"location":"api/shark/-hprof-heap-graph/#properties","title":"Properties","text":"Name Summary aliveAndroidServiceObjectIds [jvm]val HeapGraph.aliveAndroidServiceObjectIds: List<Long> classCount [jvm]open override val classCount: Int classes [jvm]open override val classes: Sequence<HeapObject.HeapClass>Sequence of all classes in the heap dump. context [jvm]open override val context: GraphContextIn memory store that can be used to store objects this HeapGraph instance. gcRoots [jvm]open override val gcRoots: List<GcRoot>All GC roots which type matches types known to this heap graph and which point to non null references. You can retrieve the object that a GC Root points to by calling findObjectById with GcRoot.id, however you need to first check that objectExists returns true because GC roots can point to objects that don\u2019t exist in the heap dump. identifierByteSize [jvm]open override val identifierByteSize: Int instanceCount [jvm]open override val instanceCount: Int instances [jvm]open override val instances: Sequence<HeapObject.HeapInstance>Sequence of all instances in the heap dump. objectArrayCount [jvm]open override val objectArrayCount: Int objectArrays [jvm]open override val objectArrays: Sequence<HeapObject.HeapObjectArray>Sequence of all object arrays in the heap dump. objectCount [jvm]open override val objectCount: Int objects [jvm]open override val objects: Sequence<HeapObject>Sequence of all objects in the heap dump. primitiveArrayCount [jvm]open override val primitiveArrayCount: Int primitiveArrays [jvm]open override val primitiveArrays: Sequence<HeapObject.HeapPrimitiveArray>Sequence of all primitive arrays in the heap dump."},{"location":"api/shark/-hprof-heap-graph/class-count/","title":"Class count","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/classCount</p>"},{"location":"api/shark/-hprof-heap-graph/class-count/#classcount","title":"classCount","text":"<p>[jvm]\\ open override val classCount: Int</p>"},{"location":"api/shark/-hprof-heap-graph/classes/","title":"Classes","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/classes</p>"},{"location":"api/shark/-hprof-heap-graph/classes/#classes","title":"classes","text":"<p>[jvm]\\ open override val classes: Sequence<HeapObject.HeapClass></p> <p>Sequence of all classes in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-hprof-heap-graph/close/","title":"Close","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/close</p>"},{"location":"api/shark/-hprof-heap-graph/close/#close","title":"close","text":"<p>[jvm]\\ open override fun close()</p>"},{"location":"api/shark/-hprof-heap-graph/context/","title":"Context","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/context</p>"},{"location":"api/shark/-hprof-heap-graph/context/#context","title":"context","text":"<p>[jvm]\\ open override val context: GraphContext</p> <p>In memory store that can be used to store objects this HeapGraph instance.</p>"},{"location":"api/shark/-hprof-heap-graph/find-class-by-name/","title":"Find class by name","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findClassByName</p>"},{"location":"api/shark/-hprof-heap-graph/find-class-by-name/#findclassbyname","title":"findClassByName","text":"<p>[jvm]\\ open override fun findClassByName(className: String): HeapObject.HeapClass?</p> <p>Returns the HeapClass corresponding to the provided className, or null if the class cannot be found.</p>"},{"location":"api/shark/-hprof-heap-graph/find-heap-dump-index/","title":"Find heap dump index","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findHeapDumpIndex</p>"},{"location":"api/shark/-hprof-heap-graph/find-heap-dump-index/#findheapdumpindex","title":"findHeapDumpIndex","text":"<p>[jvm]\\ open override fun findHeapDumpIndex(objectId: Long): Int</p> <p>Returns the 1-based index in the heap dump of the object corresponding to the provided objectId, and throws IllegalArgumentException otherwise.</p> <p>This is the object index that YourKit provides in its Java profiler.</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-heap-dump-index/","title":"Find object by heap dump index","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findObjectByHeapDumpIndex</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-heap-dump-index/#findobjectbyheapdumpindex","title":"findObjectByHeapDumpIndex","text":"<p>[jvm]\\ open override fun findObjectByHeapDumpIndex(heapDumpIndex: Int): HeapObject</p> <p>Returns the HeapObject corresponding to the provided heapDumpIndex, and throws IllegalArgumentException if heapDumpIndex is less than 1 or more than objectCount.</p> <p>This is the object index that YourKit provides in its Java profiler.</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-id-or-null/","title":"Find object by id or null","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findObjectByIdOrNull</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-id-or-null/#findobjectbyidornull","title":"findObjectByIdOrNull","text":"<p>[jvm]\\ open override fun findObjectByIdOrNull(objectId: Long): HeapObject?</p> <p>Returns the HeapObject corresponding to the provided objectId or null if it cannot be found.</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-id/","title":"Find object by id","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findObjectById</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-id/#findobjectbyid","title":"findObjectById","text":"<p>[jvm]\\ open override fun findObjectById(objectId: Long): HeapObject</p> <p>Returns the HeapObject corresponding to the provided objectId, and throws IllegalArgumentException otherwise.</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-index/","title":"Find object by index","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findObjectByIndex</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-index/#findobjectbyindex","title":"findObjectByIndex","text":"<p>[jvm]\\ open override fun findObjectByIndex(objectIndex: Int): HeapObject</p> <p>Returns the HeapObject corresponding to the provided objectIndex, and throws IllegalArgumentException if objectIndex is less than 0 or more than objectCount - 1.</p>"},{"location":"api/shark/-hprof-heap-graph/gc-roots/","title":"Gc roots","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/gcRoots</p>"},{"location":"api/shark/-hprof-heap-graph/gc-roots/#gcroots","title":"gcRoots","text":"<p>[jvm]\\ open override val gcRoots: List<GcRoot></p> <p>All GC roots which type matches types known to this heap graph and which point to non null references. You can retrieve the object that a GC Root points to by calling findObjectById with GcRoot.id, however you need to first check that objectExists returns true because GC roots can point to objects that don\u2019t exist in the heap dump.</p>"},{"location":"api/shark/-hprof-heap-graph/identifier-byte-size/","title":"Identifier byte size","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/identifierByteSize</p>"},{"location":"api/shark/-hprof-heap-graph/identifier-byte-size/#identifierbytesize","title":"identifierByteSize","text":"<p>[jvm]\\ open override val identifierByteSize: Int</p>"},{"location":"api/shark/-hprof-heap-graph/instance-count/","title":"Instance count","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/instanceCount</p>"},{"location":"api/shark/-hprof-heap-graph/instance-count/#instancecount","title":"instanceCount","text":"<p>[jvm]\\ open override val instanceCount: Int</p>"},{"location":"api/shark/-hprof-heap-graph/instances/","title":"Instances","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/instances</p>"},{"location":"api/shark/-hprof-heap-graph/instances/#instances","title":"instances","text":"<p>[jvm]\\ open override val instances: Sequence<HeapObject.HeapInstance></p> <p>Sequence of all instances in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-hprof-heap-graph/lru-cache-stats/","title":"Lru cache stats","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/lruCacheStats</p>"},{"location":"api/shark/-hprof-heap-graph/lru-cache-stats/#lrucachestats","title":"lruCacheStats","text":"<p>[jvm]\\ fun lruCacheStats(): String</p> <p>This is only public so that we can publish stats. Accessing this requires casting HeapGraph to HprofHeapGraph so it\u2019s really not a public API. May change at any time!</p>"},{"location":"api/shark/-hprof-heap-graph/object-array-count/","title":"Object array count","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/objectArrayCount</p>"},{"location":"api/shark/-hprof-heap-graph/object-array-count/#objectarraycount","title":"objectArrayCount","text":"<p>[jvm]\\ open override val objectArrayCount: Int</p>"},{"location":"api/shark/-hprof-heap-graph/object-arrays/","title":"Object arrays","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/objectArrays</p>"},{"location":"api/shark/-hprof-heap-graph/object-arrays/#objectarrays","title":"objectArrays","text":"<p>[jvm]\\ open override val objectArrays: Sequence<HeapObject.HeapObjectArray></p> <p>Sequence of all object arrays in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-hprof-heap-graph/object-count/","title":"Object count","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/objectCount</p>"},{"location":"api/shark/-hprof-heap-graph/object-count/#objectcount","title":"objectCount","text":"<p>[jvm]\\ open override val objectCount: Int</p>"},{"location":"api/shark/-hprof-heap-graph/object-exists/","title":"Object exists","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/objectExists</p>"},{"location":"api/shark/-hprof-heap-graph/object-exists/#objectexists","title":"objectExists","text":"<p>[jvm]\\ open override fun objectExists(objectId: Long): Boolean</p> <p>Returns true if the provided objectId exists in the heap dump.</p>"},{"location":"api/shark/-hprof-heap-graph/objects/","title":"Objects","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/objects</p>"},{"location":"api/shark/-hprof-heap-graph/objects/#objects","title":"objects","text":"<p>[jvm]\\ open override val objects: Sequence<HeapObject></p> <p>Sequence of all objects in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-hprof-heap-graph/primitive-array-count/","title":"Primitive array count","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/primitiveArrayCount</p>"},{"location":"api/shark/-hprof-heap-graph/primitive-array-count/#primitivearraycount","title":"primitiveArrayCount","text":"<p>[jvm]\\ open override val primitiveArrayCount: Int</p>"},{"location":"api/shark/-hprof-heap-graph/primitive-arrays/","title":"Primitive arrays","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/primitiveArrays</p>"},{"location":"api/shark/-hprof-heap-graph/primitive-arrays/#primitivearrays","title":"primitiveArrays","text":"<p>[jvm]\\ open override val primitiveArrays: Sequence<HeapObject.HeapPrimitiveArray></p> <p>Sequence of all primitive arrays in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/Companion</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun File.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraphA facility for opening a CloseableHeapGraph from a File. This first parses the file headers with HprofHeader.parseHeaderOf, then indexes the file content with HprofIndex.indexRecordsOf and then opens a CloseableHeapGraph from the index, which you are responsible for closing after using.[jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph"},{"location":"api/shark/-hprof-heap-graph/-companion/#properties","title":"Properties","text":"Name Summary INTERNAL_LRU_CACHE_SIZE [jvm]var INTERNAL_LRU_CACHE_SIZE: IntThis is not a public API, it\u2019s only public so that we can evaluate the effectiveness of different cache size in tests in a different module."},{"location":"api/shark/-hprof-heap-graph/-companion/-i-n-t-e-r-n-a-l_-l-r-u_-c-a-c-h-e_-s-i-z-e/","title":"i n t e r n a l l r u c a c h e s i z e","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/Companion/INTERNAL_LRU_CACHE_SIZE</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/-i-n-t-e-r-n-a-l_-l-r-u_-c-a-c-h-e_-s-i-z-e/#internal_lru_cache_size","title":"INTERNAL_LRU_CACHE_SIZE","text":"<p>[jvm]\\ var INTERNAL_LRU_CACHE_SIZE: Int</p> <p>This is not a public API, it\u2019s only public so that we can evaluate the effectiveness of different cache size in tests in a different module.</p> <p>LRU cache size of 3000 is a sweet spot to balance hits vs memory usage. This is based on running an instrumented test a bunch of time on a Pixel 2 XL API 28. Hit count was ~120K, miss count ~290K</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/open-heap-graph/","title":"Open heap graph","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/Companion/openHeapGraph</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/open-heap-graph/#openheapgraph","title":"openHeapGraph","text":"<p>[jvm]\\ fun File.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph</p> <p>A facility for opening a CloseableHeapGraph from a File. This first parses the file headers with HprofHeader.parseHeaderOf, then indexes the file content with HprofIndex.indexRecordsOf and then opens a CloseableHeapGraph from the index, which you are responsible for closing after using.</p> <p>[jvm]\\ fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph</p>"},{"location":"api/shark/-hprof-index/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofIndex</p>"},{"location":"api/shark/-hprof-index/#hprofindex","title":"HprofIndex","text":"<p>[jvm]\\ class HprofIndex</p> <p>An index on a Hprof file. See openHeapGraph.</p>"},{"location":"api/shark/-hprof-index/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-index/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun openHeapGraph(): CloseableHeapGraphOpens a CloseableHeapGraph which you can use to navigate the indexed hprof and then close."},{"location":"api/shark/-hprof-index/open-heap-graph/","title":"Open heap graph","text":"<p>//leakcanary-repo/shark/HprofIndex/openHeapGraph</p>"},{"location":"api/shark/-hprof-index/open-heap-graph/#openheapgraph","title":"openHeapGraph","text":"<p>[jvm]\\ fun openHeapGraph(): CloseableHeapGraph</p> <p>Opens a CloseableHeapGraph which you can use to navigate the indexed hprof and then close.</p>"},{"location":"api/shark/-hprof-index/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofIndex/Companion</p>"},{"location":"api/shark/-hprof-index/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-index/-companion/#functions","title":"Functions","text":"Name Summary defaultIndexedGcRootTags [jvm]fun defaultIndexedGcRootTags(): EnumSet<HprofRecordTag> indexRecordsOf [jvm]fun indexRecordsOf(hprofSourceProvider: DualSourceProvider, hprofHeader: HprofHeader, proguardMapping: ProguardMapping? = null, indexedGcRootTags: Set<HprofRecordTag> = defaultIndexedGcRootTags()): HprofIndexCreates an in memory index of an hprof source provided by hprofSourceProvider."},{"location":"api/shark/-hprof-index/-companion/default-indexed-gc-root-tags/","title":"Default indexed gc root tags","text":"<p>//leakcanary-repo/shark/HprofIndex/Companion/defaultIndexedGcRootTags</p>"},{"location":"api/shark/-hprof-index/-companion/default-indexed-gc-root-tags/#defaultindexedgcroottags","title":"defaultIndexedGcRootTags","text":"<p>[jvm]\\ fun defaultIndexedGcRootTags(): EnumSet<HprofRecordTag></p>"},{"location":"api/shark/-hprof-index/-companion/index-records-of/","title":"Index records of","text":"<p>//leakcanary-repo/shark/HprofIndex/Companion/indexRecordsOf</p>"},{"location":"api/shark/-hprof-index/-companion/index-records-of/#indexrecordsof","title":"indexRecordsOf","text":"<p>[jvm]\\ fun indexRecordsOf(hprofSourceProvider: DualSourceProvider, hprofHeader: HprofHeader, proguardMapping: ProguardMapping? = null, indexedGcRootTags: Set<HprofRecordTag> = defaultIndexedGcRootTags()): HprofIndex</p> <p>Creates an in memory index of an hprof source provided by hprofSourceProvider.</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofPrimitiveArrayStripper</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/#hprofprimitivearraystripper","title":"HprofPrimitiveArrayStripper","text":"<p>[jvm]\\ class HprofPrimitiveArrayStripper</p> <p>Converts a Hprof file to another file with all primitive arrays replaced with arrays of zeroes, which can be useful to remove PII. Char arrays are handled slightly differently because 0 would be the null character so instead these become arrays of \u2018?\u2019.</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/#constructors","title":"Constructors","text":"HprofPrimitiveArrayStripper [jvm]constructor()"},{"location":"api/shark/-hprof-primitive-array-stripper/#functions","title":"Functions","text":"Name Summary stripPrimitiveArrays [jvm]fun stripPrimitiveArrays(inputHprofFile: File, outputHprofFile: File = File( inputHprofFile.parent, inputHprofFile.name.replace( \".hprof\", \"-stripped.hprof\" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + \"-stripped\" })): Filefun stripPrimitiveArrays(hprofSourceProvider: StreamingSourceProvider, hprofSink: BufferedSink)"},{"location":"api/shark/-hprof-primitive-array-stripper/-hprof-primitive-array-stripper/","title":"hprof primitive array stripper","text":"<p>//leakcanary-repo/shark/HprofPrimitiveArrayStripper/HprofPrimitiveArrayStripper</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/-hprof-primitive-array-stripper/#hprofprimitivearraystripper","title":"HprofPrimitiveArrayStripper","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/strip-primitive-arrays/","title":"Strip primitive arrays","text":"<p>//leakcanary-repo/shark/HprofPrimitiveArrayStripper/stripPrimitiveArrays</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/strip-primitive-arrays/#stripprimitivearrays","title":"stripPrimitiveArrays","text":"<p>[jvm]\\ fun stripPrimitiveArrays(inputHprofFile: File, outputHprofFile: File = File( inputHprofFile.parent, inputHprofFile.name.replace( \".hprof\", \"-stripped.hprof\" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + \"-stripped\" })): File</p> <p>fun stripPrimitiveArrays(hprofSourceProvider: StreamingSourceProvider, hprofSink: BufferedSink)</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/strip-primitive-arrays/#see-also","title":"See also","text":"HprofPrimitiveArrayStripper"},{"location":"api/shark/-hprof-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord</p>"},{"location":"api/shark/-hprof-record/#hprofrecord","title":"HprofRecord","text":"<p>sealed class HprofRecord</p> <p>A Hprof record. These data structure map 1:1 with how records are written in hprof files.</p>"},{"location":"api/shark/-hprof-record/#inheritors","title":"Inheritors","text":"StringRecord LoadClassRecord UnloadClassRecord HeapDumpEndRecord StackFrameRecord StackTraceRecord HeapDumpRecord"},{"location":"api/shark/-hprof-record/#types","title":"Types","text":"Name Summary HeapDumpEndRecord [jvm]object HeapDumpEndRecord : HprofRecordTerminates a series of heap dump segments. Concatenation of heap dump segments equals a heap dump. HeapDumpRecord [jvm]sealed class HeapDumpRecord : HprofRecord LoadClassRecord [jvm]class LoadClassRecord(val classSerialNumber: Int, val id: Long, val stackTraceSerialNumber: Int, val classNameStringId: Long) : HprofRecord StackFrameRecord [jvm]class StackFrameRecord(val id: Long, val methodNameStringId: Long, val methodSignatureStringId: Long, val sourceFileNameStringId: Long, val classSerialNumber: Int, val lineNumber: Int) : HprofRecord StackTraceRecord [jvm]class StackTraceRecord(val stackTraceSerialNumber: Int, val threadSerialNumber: Int, val stackFrameIds: LongArray) : HprofRecord StringRecord [jvm]class StringRecord(val id: Long, val string: String) : HprofRecord UnloadClassRecord [jvm]class UnloadClassRecord(val classSerialNumber: Int) : HprofRecord"},{"location":"api/shark/-hprof-record/-heap-dump-end-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpEndRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-end-record/#heapdumpendrecord","title":"HeapDumpEndRecord","text":"<p>[jvm]\\ object HeapDumpEndRecord : HprofRecord</p> <p>Terminates a series of heap dump segments. Concatenation of heap dump segments equals a heap dump.</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/#heapdumprecord","title":"HeapDumpRecord","text":"<p>sealed class HeapDumpRecord : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/#inheritors","title":"Inheritors","text":"GcRootRecord ObjectRecord HeapDumpInfoRecord"},{"location":"api/shark/-hprof-record/-heap-dump-record/#types","title":"Types","text":"Name Summary GcRootRecord [jvm]class GcRootRecord(val gcRoot: GcRoot) : HprofRecord.HeapDumpRecord HeapDumpInfoRecord [jvm]class HeapDumpInfoRecord(val heapId: Int, val heapNameStringId: Long) : HprofRecord.HeapDumpRecord ObjectRecord [jvm]sealed class ObjectRecord : HprofRecord.HeapDumpRecord"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/GcRootRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/#gcrootrecord","title":"GcRootRecord","text":"<p>[jvm]\\ class GcRootRecord(val gcRoot: GcRoot) : HprofRecord.HeapDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/#constructors","title":"Constructors","text":"GcRootRecord [jvm]constructor(gcRoot: GcRoot)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/#properties","title":"Properties","text":"Name Summary gcRoot [jvm]val gcRoot: GcRoot"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/-gc-root-record/","title":"gc root record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/GcRootRecord/GcRootRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/-gc-root-record/#gcrootrecord","title":"GcRootRecord","text":"<p>[jvm]\\ constructor(gcRoot: GcRoot)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/gc-root/","title":"Gc root","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/GcRootRecord/gcRoot</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/gc-root/#gcroot","title":"gcRoot","text":"<p>[jvm]\\ val gcRoot: GcRoot</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/HeapDumpInfoRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/#heapdumpinforecord","title":"HeapDumpInfoRecord","text":"<p>[jvm]\\ class HeapDumpInfoRecord(val heapId: Int, val heapNameStringId: Long) : HprofRecord.HeapDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/#constructors","title":"Constructors","text":"HeapDumpInfoRecord [jvm]constructor(heapId: Int, heapNameStringId: Long)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/#properties","title":"Properties","text":"Name Summary heapId [jvm]val heapId: Int heapNameStringId [jvm]val heapNameStringId: Long"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/-heap-dump-info-record/","title":"heap dump info record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/HeapDumpInfoRecord/HeapDumpInfoRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/-heap-dump-info-record/#heapdumpinforecord","title":"HeapDumpInfoRecord","text":"<p>[jvm]\\ constructor(heapId: Int, heapNameStringId: Long)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/heap-id/","title":"Heap id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/HeapDumpInfoRecord/heapId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/heap-id/#heapid","title":"heapId","text":"<p>[jvm]\\ val heapId: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/heap-name-string-id/","title":"Heap name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/HeapDumpInfoRecord/heapNameStringId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/heap-name-string-id/#heapnamestringid","title":"heapNameStringId","text":"<p>[jvm]\\ val heapNameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/#objectrecord","title":"ObjectRecord","text":"<p>sealed class ObjectRecord : HprofRecord.HeapDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/#inheritors","title":"Inheritors","text":"ClassDumpRecord InstanceDumpRecord ObjectArrayDumpRecord PrimitiveArrayDumpRecord"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/#types","title":"Types","text":"Name Summary ClassDumpRecord [jvm]class ClassDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val superclassId: Long, val classLoaderId: Long, val signersId: Long, val protectionDomainId: Long, val instanceSize: Int, val staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord>, val fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord>) : HprofRecord.HeapDumpRecord.ObjectRecord InstanceDumpRecord [jvm]class InstanceDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val classId: Long, val fieldValues: ByteArray) : HprofRecord.HeapDumpRecord.ObjectRecord ObjectArrayDumpRecord [jvm]class ObjectArrayDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val arrayClassId: Long, val elementIds: LongArray) : HprofRecord.HeapDumpRecord.ObjectRecord PrimitiveArrayDumpRecord [jvm]sealed class PrimitiveArrayDumpRecord : HprofRecord.HeapDumpRecord.ObjectRecord"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/#classdumprecord","title":"ClassDumpRecord","text":"<p>[jvm]\\ class ClassDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val superclassId: Long, val classLoaderId: Long, val signersId: Long, val protectionDomainId: Long, val instanceSize: Int, val staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord>, val fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord>) : HprofRecord.HeapDumpRecord.ObjectRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/#constructors","title":"Constructors","text":"ClassDumpRecord [jvm]constructor(id: Long, stackTraceSerialNumber: Int, superclassId: Long, classLoaderId: Long, signersId: Long, protectionDomainId: Long, instanceSize: Int, staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord>, fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord>)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/#types","title":"Types","text":"Name Summary FieldRecord [jvm]data class FieldRecord(val nameStringId: Long, val type: Int) StaticFieldRecord [jvm]data class StaticFieldRecord(val nameStringId: Long, val type: Int, val value: ValueHolder)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/#properties","title":"Properties","text":"Name Summary classLoaderId [jvm]val classLoaderId: Long fields [jvm]val fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord> id [jvm]val id: Long instanceSize [jvm]val instanceSize: Int protectionDomainId [jvm]val protectionDomainId: Long signersId [jvm]val signersId: Long stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int staticFields [jvm]val staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord> superclassId [jvm]val superclassId: Long"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-class-dump-record/","title":"class dump record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/ClassDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-class-dump-record/#classdumprecord","title":"ClassDumpRecord","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, superclassId: Long, classLoaderId: Long, signersId: Long, protectionDomainId: Long, instanceSize: Int, staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord>, fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord>)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/class-loader-id/","title":"Class loader id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/classLoaderId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/class-loader-id/#classloaderid","title":"classLoaderId","text":"<p>[jvm]\\ val classLoaderId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/fields/","title":"Fields","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/fields</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/fields/#fields","title":"fields","text":"<p>[jvm]\\ val fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord></p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/instance-size/","title":"Instance size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/instanceSize</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/instance-size/#instancesize","title":"instanceSize","text":"<p>[jvm]\\ val instanceSize: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/protection-domain-id/","title":"Protection domain id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/protectionDomainId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/protection-domain-id/#protectiondomainid","title":"protectionDomainId","text":"<p>[jvm]\\ val protectionDomainId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/signers-id/","title":"Signers id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/signersId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/signers-id/#signersid","title":"signersId","text":"<p>[jvm]\\ val signersId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/static-fields/","title":"Static fields","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/staticFields</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/static-fields/#staticfields","title":"staticFields","text":"<p>[jvm]\\ val staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord></p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/superclass-id/","title":"Superclass id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/superclassId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/superclass-id/#superclassid","title":"superclassId","text":"<p>[jvm]\\ val superclassId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/FieldRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/#fieldrecord","title":"FieldRecord","text":"<p>[jvm]\\ data class FieldRecord(val nameStringId: Long, val type: Int)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/#constructors","title":"Constructors","text":"FieldRecord [jvm]constructor(nameStringId: Long, type: Int)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/#properties","title":"Properties","text":"Name Summary nameStringId [jvm]val nameStringId: Long type [jvm]val type: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/-field-record/","title":"field record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/FieldRecord/FieldRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/-field-record/#fieldrecord","title":"FieldRecord","text":"<p>[jvm]\\ constructor(nameStringId: Long, type: Int)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/name-string-id/","title":"Name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/FieldRecord/nameStringId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/name-string-id/#namestringid","title":"nameStringId","text":"<p>[jvm]\\ val nameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/type/","title":"Type","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/FieldRecord/type</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/type/#type","title":"type","text":"<p>[jvm]\\ val type: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/StaticFieldRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/#staticfieldrecord","title":"StaticFieldRecord","text":"<p>[jvm]\\ data class StaticFieldRecord(val nameStringId: Long, val type: Int, val value: ValueHolder)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/#constructors","title":"Constructors","text":"StaticFieldRecord [jvm]constructor(nameStringId: Long, type: Int, value: ValueHolder)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/#properties","title":"Properties","text":"Name Summary nameStringId [jvm]val nameStringId: Long type [jvm]val type: Int value [jvm]val value: ValueHolder"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/-static-field-record/","title":"static field record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/StaticFieldRecord/StaticFieldRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/-static-field-record/#staticfieldrecord","title":"StaticFieldRecord","text":"<p>[jvm]\\ constructor(nameStringId: Long, type: Int, value: ValueHolder)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/name-string-id/","title":"Name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/StaticFieldRecord/nameStringId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/name-string-id/#namestringid","title":"nameStringId","text":"<p>[jvm]\\ val nameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/type/","title":"Type","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/StaticFieldRecord/type</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/type/#type","title":"type","text":"<p>[jvm]\\ val type: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/value/","title":"Value","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/StaticFieldRecord/value</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/value/#value","title":"value","text":"<p>[jvm]\\ val value: ValueHolder</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/#instancedumprecord","title":"InstanceDumpRecord","text":"<p>[jvm]\\ class InstanceDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val classId: Long, val fieldValues: ByteArray) : HprofRecord.HeapDumpRecord.ObjectRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/#constructors","title":"Constructors","text":"InstanceDumpRecord [jvm]constructor(id: Long, stackTraceSerialNumber: Int, classId: Long, fieldValues: ByteArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/#properties","title":"Properties","text":"Name Summary classId [jvm]val classId: Long fieldValues [jvm]val fieldValues: ByteArrayInstance field values (this class, followed by super class, etc) id [jvm]val id: Long stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/-instance-dump-record/","title":"instance dump record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord/InstanceDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/-instance-dump-record/#instancedumprecord","title":"InstanceDumpRecord","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, classId: Long, fieldValues: ByteArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/class-id/","title":"Class id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord/classId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/class-id/#classid","title":"classId","text":"<p>[jvm]\\ val classId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/field-values/","title":"Field values","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord/fieldValues</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/field-values/#fieldvalues","title":"fieldValues","text":"<p>[jvm]\\ val fieldValues: ByteArray</p> <p>Instance field values (this class, followed by super class, etc)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/#objectarraydumprecord","title":"ObjectArrayDumpRecord","text":"<p>[jvm]\\ class ObjectArrayDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val arrayClassId: Long, val elementIds: LongArray) : HprofRecord.HeapDumpRecord.ObjectRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/#constructors","title":"Constructors","text":"ObjectArrayDumpRecord [jvm]constructor(id: Long, stackTraceSerialNumber: Int, arrayClassId: Long, elementIds: LongArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/#properties","title":"Properties","text":"Name Summary arrayClassId [jvm]val arrayClassId: Long elementIds [jvm]val elementIds: LongArray id [jvm]val id: Long stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/-object-array-dump-record/","title":"object array dump record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord/ObjectArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/-object-array-dump-record/#objectarraydumprecord","title":"ObjectArrayDumpRecord","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, arrayClassId: Long, elementIds: LongArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/array-class-id/","title":"Array class id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord/arrayClassId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/array-class-id/#arrayclassid","title":"arrayClassId","text":"<p>[jvm]\\ val arrayClassId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/element-ids/","title":"Element ids","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord/elementIds</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/element-ids/#elementids","title":"elementIds","text":"<p>[jvm]\\ val elementIds: LongArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/#primitivearraydumprecord","title":"PrimitiveArrayDumpRecord","text":"<p>sealed class PrimitiveArrayDumpRecord : HprofRecord.HeapDumpRecord.ObjectRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/#inheritors","title":"Inheritors","text":"BooleanArrayDump CharArrayDump FloatArrayDump DoubleArrayDump ByteArrayDump ShortArrayDump IntArrayDump LongArrayDump"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/#types","title":"Types","text":"Name Summary BooleanArrayDump [jvm]class BooleanArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: BooleanArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord ByteArrayDump [jvm]class ByteArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: ByteArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord CharArrayDump [jvm]class CharArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: CharArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord DoubleArrayDump [jvm]class DoubleArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: DoubleArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord FloatArrayDump [jvm]class FloatArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: FloatArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord IntArrayDump [jvm]class IntArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: IntArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord LongArrayDump [jvm]class LongArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: LongArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord ShortArrayDump [jvm]class ShortArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: ShortArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/#properties","title":"Properties","text":"Name Summary id [jvm]abstract val id: Long size [jvm]abstract val size: Int stackTraceSerialNumber [jvm]abstract val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/id/#id","title":"id","text":"<p>[jvm]\\ abstract val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/size/#size","title":"size","text":"<p>[jvm]\\ abstract val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ abstract val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/#booleanarraydump","title":"BooleanArrayDump","text":"<p>[jvm]\\ class BooleanArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: BooleanArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/#constructors","title":"Constructors","text":"BooleanArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: BooleanArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: BooleanArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/-boolean-array-dump/","title":"boolean array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump/BooleanArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/-boolean-array-dump/#booleanarraydump","title":"BooleanArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: BooleanArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: BooleanArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/#bytearraydump","title":"ByteArrayDump","text":"<p>[jvm]\\ class ByteArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: ByteArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/#constructors","title":"Constructors","text":"ByteArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: ByteArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: ByteArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/-byte-array-dump/","title":"byte array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump/ByteArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/-byte-array-dump/#bytearraydump","title":"ByteArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: ByteArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: ByteArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/#chararraydump","title":"CharArrayDump","text":"<p>[jvm]\\ class CharArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: CharArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/#constructors","title":"Constructors","text":"CharArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: CharArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: CharArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/-char-array-dump/","title":"char array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump/CharArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/-char-array-dump/#chararraydump","title":"CharArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: CharArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: CharArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/#doublearraydump","title":"DoubleArrayDump","text":"<p>[jvm]\\ class DoubleArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: DoubleArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/#constructors","title":"Constructors","text":"DoubleArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: DoubleArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: DoubleArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/-double-array-dump/","title":"double array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump/DoubleArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/-double-array-dump/#doublearraydump","title":"DoubleArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: DoubleArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: DoubleArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/#floatarraydump","title":"FloatArrayDump","text":"<p>[jvm]\\ class FloatArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: FloatArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/#constructors","title":"Constructors","text":"FloatArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: FloatArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: FloatArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/-float-array-dump/","title":"float array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump/FloatArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/-float-array-dump/#floatarraydump","title":"FloatArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: FloatArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: FloatArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/#intarraydump","title":"IntArrayDump","text":"<p>[jvm]\\ class IntArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: IntArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/#constructors","title":"Constructors","text":"IntArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: IntArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: IntArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/-int-array-dump/","title":"int array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump/IntArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/-int-array-dump/#intarraydump","title":"IntArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: IntArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: IntArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/#longarraydump","title":"LongArrayDump","text":"<p>[jvm]\\ class LongArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: LongArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/#constructors","title":"Constructors","text":"LongArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: LongArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: LongArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/-long-array-dump/","title":"long array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump/LongArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/-long-array-dump/#longarraydump","title":"LongArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: LongArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: LongArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/#shortarraydump","title":"ShortArrayDump","text":"<p>[jvm]\\ class ShortArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: ShortArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/#constructors","title":"Constructors","text":"ShortArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: ShortArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: ShortArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/-short-array-dump/","title":"short array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump/ShortArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/-short-array-dump/#shortarraydump","title":"ShortArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: ShortArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: ShortArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-load-class-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord</p>"},{"location":"api/shark/-hprof-record/-load-class-record/#loadclassrecord","title":"LoadClassRecord","text":"<p>[jvm]\\ class LoadClassRecord(val classSerialNumber: Int, val id: Long, val stackTraceSerialNumber: Int, val classNameStringId: Long) : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-load-class-record/#constructors","title":"Constructors","text":"LoadClassRecord [jvm]constructor(classSerialNumber: Int, id: Long, stackTraceSerialNumber: Int, classNameStringId: Long)"},{"location":"api/shark/-hprof-record/-load-class-record/#properties","title":"Properties","text":"Name Summary classNameStringId [jvm]val classNameStringId: Long classSerialNumber [jvm]val classSerialNumber: Int id [jvm]val id: Long stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-load-class-record/-load-class-record/","title":"load class record","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord/LoadClassRecord</p>"},{"location":"api/shark/-hprof-record/-load-class-record/-load-class-record/#loadclassrecord","title":"LoadClassRecord","text":"<p>[jvm]\\ constructor(classSerialNumber: Int, id: Long, stackTraceSerialNumber: Int, classNameStringId: Long)</p>"},{"location":"api/shark/-hprof-record/-load-class-record/class-name-string-id/","title":"Class name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord/classNameStringId</p>"},{"location":"api/shark/-hprof-record/-load-class-record/class-name-string-id/#classnamestringid","title":"classNameStringId","text":"<p>[jvm]\\ val classNameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-load-class-record/class-serial-number/","title":"Class serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord/classSerialNumber</p>"},{"location":"api/shark/-hprof-record/-load-class-record/class-serial-number/#classserialnumber","title":"classSerialNumber","text":"<p>[jvm]\\ val classSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-load-class-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord/id</p>"},{"location":"api/shark/-hprof-record/-load-class-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-load-class-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-load-class-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/#stackframerecord","title":"StackFrameRecord","text":"<p>[jvm]\\ class StackFrameRecord(val id: Long, val methodNameStringId: Long, val methodSignatureStringId: Long, val sourceFileNameStringId: Long, val classSerialNumber: Int, val lineNumber: Int) : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/#constructors","title":"Constructors","text":"StackFrameRecord [jvm]constructor(id: Long, methodNameStringId: Long, methodSignatureStringId: Long, sourceFileNameStringId: Long, classSerialNumber: Int, lineNumber: Int)"},{"location":"api/shark/-hprof-record/-stack-frame-record/#properties","title":"Properties","text":"Name Summary classSerialNumber [jvm]val classSerialNumber: Int id [jvm]val id: Long lineNumber [jvm]val lineNumber: Int methodNameStringId [jvm]val methodNameStringId: Long methodSignatureStringId [jvm]val methodSignatureStringId: Long sourceFileNameStringId [jvm]val sourceFileNameStringId: Long"},{"location":"api/shark/-hprof-record/-stack-frame-record/-stack-frame-record/","title":"stack frame record","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/StackFrameRecord</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/-stack-frame-record/#stackframerecord","title":"StackFrameRecord","text":"<p>[jvm]\\ constructor(id: Long, methodNameStringId: Long, methodSignatureStringId: Long, sourceFileNameStringId: Long, classSerialNumber: Int, lineNumber: Int)</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/class-serial-number/","title":"Class serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/classSerialNumber</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/class-serial-number/#classserialnumber","title":"classSerialNumber","text":"<p>[jvm]\\ val classSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/id</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/line-number/","title":"Line number","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/lineNumber</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/line-number/#linenumber","title":"lineNumber","text":"<p>[jvm]\\ val lineNumber: Int</p> <p>0 line number 0 no line information available -1 unknown location -2 compiled method (Not implemented) -3 native method (Not implemented)</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/method-name-string-id/","title":"Method name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/methodNameStringId</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/method-name-string-id/#methodnamestringid","title":"methodNameStringId","text":"<p>[jvm]\\ val methodNameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/method-signature-string-id/","title":"Method signature string id","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/methodSignatureStringId</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/method-signature-string-id/#methodsignaturestringid","title":"methodSignatureStringId","text":"<p>[jvm]\\ val methodSignatureStringId: Long</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/source-file-name-string-id/","title":"Source file name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/sourceFileNameStringId</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/source-file-name-string-id/#sourcefilenamestringid","title":"sourceFileNameStringId","text":"<p>[jvm]\\ val sourceFileNameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/StackTraceRecord</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/#stacktracerecord","title":"StackTraceRecord","text":"<p>[jvm]\\ class StackTraceRecord(val stackTraceSerialNumber: Int, val threadSerialNumber: Int, val stackFrameIds: LongArray) : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/#constructors","title":"Constructors","text":"StackTraceRecord [jvm]constructor(stackTraceSerialNumber: Int, threadSerialNumber: Int, stackFrameIds: LongArray)"},{"location":"api/shark/-hprof-record/-stack-trace-record/#properties","title":"Properties","text":"Name Summary stackFrameIds [jvm]val stackFrameIds: LongArray stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int threadSerialNumber [jvm]val threadSerialNumber: Int"},{"location":"api/shark/-hprof-record/-stack-trace-record/-stack-trace-record/","title":"stack trace record","text":"<p>//leakcanary-repo/shark/HprofRecord/StackTraceRecord/StackTraceRecord</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/-stack-trace-record/#stacktracerecord","title":"StackTraceRecord","text":"<p>[jvm]\\ constructor(stackTraceSerialNumber: Int, threadSerialNumber: Int, stackFrameIds: LongArray)</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/stack-frame-ids/","title":"Stack frame ids","text":"<p>//leakcanary-repo/shark/HprofRecord/StackTraceRecord/stackFrameIds</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/stack-frame-ids/#stackframeids","title":"stackFrameIds","text":"<p>[jvm]\\ val stackFrameIds: LongArray</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/StackTraceRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/StackTraceRecord/threadSerialNumber</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-string-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/StringRecord</p>"},{"location":"api/shark/-hprof-record/-string-record/#stringrecord","title":"StringRecord","text":"<p>[jvm]\\ class StringRecord(val id: Long, val string: String) : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-string-record/#constructors","title":"Constructors","text":"StringRecord [jvm]constructor(id: Long, string: String)"},{"location":"api/shark/-hprof-record/-string-record/#properties","title":"Properties","text":"Name Summary id [jvm]val id: Long string [jvm]val string: String"},{"location":"api/shark/-hprof-record/-string-record/-string-record/","title":"string record","text":"<p>//leakcanary-repo/shark/HprofRecord/StringRecord/StringRecord</p>"},{"location":"api/shark/-hprof-record/-string-record/-string-record/#stringrecord","title":"StringRecord","text":"<p>[jvm]\\ constructor(id: Long, string: String)</p>"},{"location":"api/shark/-hprof-record/-string-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/StringRecord/id</p>"},{"location":"api/shark/-hprof-record/-string-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-string-record/string/","title":"String","text":"<p>//leakcanary-repo/shark/HprofRecord/StringRecord/string</p>"},{"location":"api/shark/-hprof-record/-string-record/string/#string","title":"string","text":"<p>[jvm]\\ val string: String</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/UnloadClassRecord</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/#unloadclassrecord","title":"UnloadClassRecord","text":"<p>[jvm]\\ class UnloadClassRecord(val classSerialNumber: Int) : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/#constructors","title":"Constructors","text":"UnloadClassRecord [jvm]constructor(classSerialNumber: Int)"},{"location":"api/shark/-hprof-record/-unload-class-record/#properties","title":"Properties","text":"Name Summary classSerialNumber [jvm]val classSerialNumber: Int"},{"location":"api/shark/-hprof-record/-unload-class-record/-unload-class-record/","title":"unload class record","text":"<p>//leakcanary-repo/shark/HprofRecord/UnloadClassRecord/UnloadClassRecord</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/-unload-class-record/#unloadclassrecord","title":"UnloadClassRecord","text":"<p>[jvm]\\ constructor(classSerialNumber: Int)</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/class-serial-number/","title":"Class serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/UnloadClassRecord/classSerialNumber</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/class-serial-number/#classserialnumber","title":"classSerialNumber","text":"<p>[jvm]\\ val classSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordReader</p>"},{"location":"api/shark/-hprof-record-reader/#hprofrecordreader","title":"HprofRecordReader","text":"<p>[jvm]\\ class HprofRecordReader</p> <p>Reads hprof content from an Okio BufferedSource.</p> <p>Binary Dump Format reference: http://hg.openjdk.java.net/jdk6/jdk6/jdk/raw-file/tip/src/share /demo/jvmti/hprof/manual.html#mozTocId848088</p> <p>The Android Hprof format differs in some ways from that reference. This parser implementation is largely adapted from https://android.googlesource.com/platform/tools/base/+/studio-master-dev /perflib/src/main/java/com/android/tools/perflib</p> <p>Not thread safe, should be used from a single thread.</p>"},{"location":"api/shark/-hprof-record-reader/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-record-reader/#functions","title":"Functions","text":"Name Summary readBoolean [jvm]fun readBoolean(): Boolean readBooleanArray [jvm]fun readBooleanArray(arrayLength: Int): BooleanArray readByte [jvm]fun readByte(): Byte readByteArray [jvm]fun readByteArray(byteCount: Int): ByteArray readChar [jvm]fun readChar(): Char readCharArray [jvm]fun readCharArray(arrayLength: Int): CharArray readClassDumpRecord [jvm]fun readClassDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecordReads a full class record after a class dump tag. readDebuggerGcRootRecord [jvm]fun readDebuggerGcRootRecord(): GcRoot.Debugger readDouble [jvm]fun readDouble(): Double readDoubleArray [jvm]fun readDoubleArray(arrayLength: Int): DoubleArray readFinalizingGcRootRecord [jvm]fun readFinalizingGcRootRecord(): GcRoot.Finalizing readFloat [jvm]fun readFloat(): Float readFloatArray [jvm]fun readFloatArray(arrayLength: Int): FloatArray readHeapDumpInfoRecord [jvm]fun readHeapDumpInfoRecord(): HprofRecord.HeapDumpRecord.HeapDumpInfoRecord readId [jvm]fun readId(): Long readIdArray [jvm]fun readIdArray(arrayLength: Int): LongArray readInstanceDumpRecord [jvm]fun readInstanceDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.InstanceDumpRecordReads a full instance record after a instance dump tag. readInt [jvm]fun readInt(): Int readIntArray [jvm]fun readIntArray(arrayLength: Int): IntArray readInternedStringGcRootRecord [jvm]fun readInternedStringGcRootRecord(): GcRoot.InternedString readJavaFrameGcRootRecord [jvm]fun readJavaFrameGcRootRecord(): GcRoot.JavaFrame readJniGlobalGcRootRecord [jvm]fun readJniGlobalGcRootRecord(): GcRoot.JniGlobal readJniLocalGcRootRecord [jvm]fun readJniLocalGcRootRecord(): GcRoot.JniLocal readJniMonitorGcRootRecord [jvm]fun readJniMonitorGcRootRecord(): GcRoot.JniMonitor readLoadClassRecord [jvm]fun readLoadClassRecord(): HprofRecord.LoadClassRecord readLong [jvm]fun readLong(): Long readLongArray [jvm]fun readLongArray(arrayLength: Int): LongArray readMonitorUsedGcRootRecord [jvm]fun readMonitorUsedGcRootRecord(): GcRoot.MonitorUsed readNativeStackGcRootRecord [jvm]fun readNativeStackGcRootRecord(): GcRoot.NativeStack readObjectArrayDumpRecord [jvm]fun readObjectArrayDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ObjectArrayDumpRecordReads a full object array record after a object array dump tag. readPrimitiveArrayDumpRecord [jvm]fun readPrimitiveArrayDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecordReads a full primitive array record after a primitive array dump tag. readReferenceCleanupGcRootRecord [jvm]fun readReferenceCleanupGcRootRecord(): GcRoot.ReferenceCleanup readShort [jvm]fun readShort(): Short readShortArray [jvm]fun readShortArray(arrayLength: Int): ShortArray readStackFrameRecord [jvm]fun readStackFrameRecord(): HprofRecord.StackFrameRecord readStackTraceRecord [jvm]fun readStackTraceRecord(): HprofRecord.StackTraceRecord readStickyClassGcRootRecord [jvm]fun readStickyClassGcRootRecord(): GcRoot.StickyClass readString [jvm]fun readString(byteCount: Int, charset: Charset): String readStringRecord [jvm]fun readStringRecord(length: Long): HprofRecord.StringRecord readThreadBlockGcRootRecord [jvm]fun readThreadBlockGcRootRecord(): GcRoot.ThreadBlock readThreadObjectGcRootRecord [jvm]fun readThreadObjectGcRootRecord(): GcRoot.ThreadObject readUnknownGcRootRecord [jvm]fun readUnknownGcRootRecord(): GcRoot.Unknown readUnloadClassRecord [jvm]fun readUnloadClassRecord(): HprofRecord.UnloadClassRecord readUnreachableGcRootRecord [jvm]fun readUnreachableGcRootRecord(): GcRoot.Unreachable readUnsignedByte [jvm]fun readUnsignedByte(): Int readUnsignedInt [jvm]fun readUnsignedInt(): Long readUnsignedShort [jvm]fun readUnsignedShort(): Int readUtf8 [jvm]fun readUtf8(byteCount: Long): String readValue [jvm]fun readValue(type: Int): ValueHolderReads a value in the heap dump, which can be a reference or a primitive type. readVmInternalGcRootRecord [jvm]fun readVmInternalGcRootRecord(): GcRoot.VmInternal sizeOf [jvm]fun sizeOf(type: Int): Int skip [jvm]fun skip(byteCount: Int)fun skip(byteCount: Long) skipClassDumpConstantPool [jvm]fun skipClassDumpConstantPool() skipClassDumpFields [jvm]fun skipClassDumpFields() skipClassDumpHeader [jvm]fun skipClassDumpHeader() skipClassDumpRecord [jvm]fun skipClassDumpRecord() skipClassDumpStaticFields [jvm]fun skipClassDumpStaticFields() skipHeapDumpInfoRecord [jvm]fun skipHeapDumpInfoRecord() skipId [jvm]fun skipId() skipInstanceDumpRecord [jvm]fun skipInstanceDumpRecord() skipObjectArrayDumpRecord [jvm]fun skipObjectArrayDumpRecord() skipPrimitiveArrayDumpRecord [jvm]fun skipPrimitiveArrayDumpRecord()"},{"location":"api/shark/-hprof-record-reader/#properties","title":"Properties","text":"Name Summary bytesRead [jvm]var bytesRead: LongHow many bytes this reader has read from source. Can only increase."},{"location":"api/shark/-hprof-record-reader/bytes-read/","title":"Bytes read","text":"<p>//leakcanary-repo/shark/HprofRecordReader/bytesRead</p>"},{"location":"api/shark/-hprof-record-reader/bytes-read/#bytesread","title":"bytesRead","text":"<p>[jvm]\\ var bytesRead: Long</p> <p>How many bytes this reader has read from source. Can only increase.</p>"},{"location":"api/shark/-hprof-record-reader/read-boolean-array/","title":"Read boolean array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readBooleanArray</p>"},{"location":"api/shark/-hprof-record-reader/read-boolean-array/#readbooleanarray","title":"readBooleanArray","text":"<p>[jvm]\\ fun readBooleanArray(arrayLength: Int): BooleanArray</p>"},{"location":"api/shark/-hprof-record-reader/read-boolean/","title":"Read boolean","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readBoolean</p>"},{"location":"api/shark/-hprof-record-reader/read-boolean/#readboolean","title":"readBoolean","text":"<p>[jvm]\\ fun readBoolean(): Boolean</p>"},{"location":"api/shark/-hprof-record-reader/read-byte-array/","title":"Read byte array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readByteArray</p>"},{"location":"api/shark/-hprof-record-reader/read-byte-array/#readbytearray","title":"readByteArray","text":"<p>[jvm]\\ fun readByteArray(byteCount: Int): ByteArray</p>"},{"location":"api/shark/-hprof-record-reader/read-byte/","title":"Read byte","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readByte</p>"},{"location":"api/shark/-hprof-record-reader/read-byte/#readbyte","title":"readByte","text":"<p>[jvm]\\ fun readByte(): Byte</p>"},{"location":"api/shark/-hprof-record-reader/read-char-array/","title":"Read char array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readCharArray</p>"},{"location":"api/shark/-hprof-record-reader/read-char-array/#readchararray","title":"readCharArray","text":"<p>[jvm]\\ fun readCharArray(arrayLength: Int): CharArray</p>"},{"location":"api/shark/-hprof-record-reader/read-char/","title":"Read char","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readChar</p>"},{"location":"api/shark/-hprof-record-reader/read-char/#readchar","title":"readChar","text":"<p>[jvm]\\ fun readChar(): Char</p>"},{"location":"api/shark/-hprof-record-reader/read-class-dump-record/","title":"Read class dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readClassDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-class-dump-record/#readclassdumprecord","title":"readClassDumpRecord","text":"<p>[jvm]\\ fun readClassDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord</p> <p>Reads a full class record after a class dump tag.</p>"},{"location":"api/shark/-hprof-record-reader/read-debugger-gc-root-record/","title":"Read debugger gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readDebuggerGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-debugger-gc-root-record/#readdebuggergcrootrecord","title":"readDebuggerGcRootRecord","text":"<p>[jvm]\\ fun readDebuggerGcRootRecord(): GcRoot.Debugger</p>"},{"location":"api/shark/-hprof-record-reader/read-double-array/","title":"Read double array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readDoubleArray</p>"},{"location":"api/shark/-hprof-record-reader/read-double-array/#readdoublearray","title":"readDoubleArray","text":"<p>[jvm]\\ fun readDoubleArray(arrayLength: Int): DoubleArray</p>"},{"location":"api/shark/-hprof-record-reader/read-double/","title":"Read double","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readDouble</p>"},{"location":"api/shark/-hprof-record-reader/read-double/#readdouble","title":"readDouble","text":"<p>[jvm]\\ fun readDouble(): Double</p>"},{"location":"api/shark/-hprof-record-reader/read-finalizing-gc-root-record/","title":"Read finalizing gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readFinalizingGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-finalizing-gc-root-record/#readfinalizinggcrootrecord","title":"readFinalizingGcRootRecord","text":"<p>[jvm]\\ fun readFinalizingGcRootRecord(): GcRoot.Finalizing</p>"},{"location":"api/shark/-hprof-record-reader/read-float-array/","title":"Read float array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readFloatArray</p>"},{"location":"api/shark/-hprof-record-reader/read-float-array/#readfloatarray","title":"readFloatArray","text":"<p>[jvm]\\ fun readFloatArray(arrayLength: Int): FloatArray</p>"},{"location":"api/shark/-hprof-record-reader/read-float/","title":"Read float","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readFloat</p>"},{"location":"api/shark/-hprof-record-reader/read-float/#readfloat","title":"readFloat","text":"<p>[jvm]\\ fun readFloat(): Float</p>"},{"location":"api/shark/-hprof-record-reader/read-heap-dump-info-record/","title":"Read heap dump info record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readHeapDumpInfoRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-heap-dump-info-record/#readheapdumpinforecord","title":"readHeapDumpInfoRecord","text":"<p>[jvm]\\ fun readHeapDumpInfoRecord(): HprofRecord.HeapDumpRecord.HeapDumpInfoRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-id-array/","title":"Read id array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readIdArray</p>"},{"location":"api/shark/-hprof-record-reader/read-id-array/#readidarray","title":"readIdArray","text":"<p>[jvm]\\ fun readIdArray(arrayLength: Int): LongArray</p>"},{"location":"api/shark/-hprof-record-reader/read-id/","title":"Read id","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readId</p>"},{"location":"api/shark/-hprof-record-reader/read-id/#readid","title":"readId","text":"<p>[jvm]\\ fun readId(): Long</p>"},{"location":"api/shark/-hprof-record-reader/read-instance-dump-record/","title":"Read instance dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readInstanceDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-instance-dump-record/#readinstancedumprecord","title":"readInstanceDumpRecord","text":"<p>[jvm]\\ fun readInstanceDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.InstanceDumpRecord</p> <p>Reads a full instance record after a instance dump tag.</p>"},{"location":"api/shark/-hprof-record-reader/read-int-array/","title":"Read int array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readIntArray</p>"},{"location":"api/shark/-hprof-record-reader/read-int-array/#readintarray","title":"readIntArray","text":"<p>[jvm]\\ fun readIntArray(arrayLength: Int): IntArray</p>"},{"location":"api/shark/-hprof-record-reader/read-int/","title":"Read int","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readInt</p>"},{"location":"api/shark/-hprof-record-reader/read-int/#readint","title":"readInt","text":"<p>[jvm]\\ fun readInt(): Int</p>"},{"location":"api/shark/-hprof-record-reader/read-interned-string-gc-root-record/","title":"Read interned string gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readInternedStringGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-interned-string-gc-root-record/#readinternedstringgcrootrecord","title":"readInternedStringGcRootRecord","text":"<p>[jvm]\\ fun readInternedStringGcRootRecord(): GcRoot.InternedString</p>"},{"location":"api/shark/-hprof-record-reader/read-java-frame-gc-root-record/","title":"Read java frame gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readJavaFrameGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-java-frame-gc-root-record/#readjavaframegcrootrecord","title":"readJavaFrameGcRootRecord","text":"<p>[jvm]\\ fun readJavaFrameGcRootRecord(): GcRoot.JavaFrame</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-global-gc-root-record/","title":"Read jni global gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readJniGlobalGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-global-gc-root-record/#readjniglobalgcrootrecord","title":"readJniGlobalGcRootRecord","text":"<p>[jvm]\\ fun readJniGlobalGcRootRecord(): GcRoot.JniGlobal</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-local-gc-root-record/","title":"Read jni local gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readJniLocalGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-local-gc-root-record/#readjnilocalgcrootrecord","title":"readJniLocalGcRootRecord","text":"<p>[jvm]\\ fun readJniLocalGcRootRecord(): GcRoot.JniLocal</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-monitor-gc-root-record/","title":"Read jni monitor gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readJniMonitorGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-monitor-gc-root-record/#readjnimonitorgcrootrecord","title":"readJniMonitorGcRootRecord","text":"<p>[jvm]\\ fun readJniMonitorGcRootRecord(): GcRoot.JniMonitor</p>"},{"location":"api/shark/-hprof-record-reader/read-load-class-record/","title":"Read load class record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readLoadClassRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-load-class-record/#readloadclassrecord","title":"readLoadClassRecord","text":"<p>[jvm]\\ fun readLoadClassRecord(): HprofRecord.LoadClassRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-long-array/","title":"Read long array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readLongArray</p>"},{"location":"api/shark/-hprof-record-reader/read-long-array/#readlongarray","title":"readLongArray","text":"<p>[jvm]\\ fun readLongArray(arrayLength: Int): LongArray</p>"},{"location":"api/shark/-hprof-record-reader/read-long/","title":"Read long","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readLong</p>"},{"location":"api/shark/-hprof-record-reader/read-long/#readlong","title":"readLong","text":"<p>[jvm]\\ fun readLong(): Long</p>"},{"location":"api/shark/-hprof-record-reader/read-monitor-used-gc-root-record/","title":"Read monitor used gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readMonitorUsedGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-monitor-used-gc-root-record/#readmonitorusedgcrootrecord","title":"readMonitorUsedGcRootRecord","text":"<p>[jvm]\\ fun readMonitorUsedGcRootRecord(): GcRoot.MonitorUsed</p>"},{"location":"api/shark/-hprof-record-reader/read-native-stack-gc-root-record/","title":"Read native stack gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readNativeStackGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-native-stack-gc-root-record/#readnativestackgcrootrecord","title":"readNativeStackGcRootRecord","text":"<p>[jvm]\\ fun readNativeStackGcRootRecord(): GcRoot.NativeStack</p>"},{"location":"api/shark/-hprof-record-reader/read-object-array-dump-record/","title":"Read object array dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readObjectArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-object-array-dump-record/#readobjectarraydumprecord","title":"readObjectArrayDumpRecord","text":"<p>[jvm]\\ fun readObjectArrayDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ObjectArrayDumpRecord</p> <p>Reads a full object array record after a object array dump tag.</p>"},{"location":"api/shark/-hprof-record-reader/read-primitive-array-dump-record/","title":"Read primitive array dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readPrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-primitive-array-dump-record/#readprimitivearraydumprecord","title":"readPrimitiveArrayDumpRecord","text":"<p>[jvm]\\ fun readPrimitiveArrayDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p> <p>Reads a full primitive array record after a primitive array dump tag.</p>"},{"location":"api/shark/-hprof-record-reader/read-reference-cleanup-gc-root-record/","title":"Read reference cleanup gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readReferenceCleanupGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-reference-cleanup-gc-root-record/#readreferencecleanupgcrootrecord","title":"readReferenceCleanupGcRootRecord","text":"<p>[jvm]\\ fun readReferenceCleanupGcRootRecord(): GcRoot.ReferenceCleanup</p>"},{"location":"api/shark/-hprof-record-reader/read-short-array/","title":"Read short array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readShortArray</p>"},{"location":"api/shark/-hprof-record-reader/read-short-array/#readshortarray","title":"readShortArray","text":"<p>[jvm]\\ fun readShortArray(arrayLength: Int): ShortArray</p>"},{"location":"api/shark/-hprof-record-reader/read-short/","title":"Read short","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readShort</p>"},{"location":"api/shark/-hprof-record-reader/read-short/#readshort","title":"readShort","text":"<p>[jvm]\\ fun readShort(): Short</p>"},{"location":"api/shark/-hprof-record-reader/read-stack-frame-record/","title":"Read stack frame record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readStackFrameRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-stack-frame-record/#readstackframerecord","title":"readStackFrameRecord","text":"<p>[jvm]\\ fun readStackFrameRecord(): HprofRecord.StackFrameRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-stack-trace-record/","title":"Read stack trace record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readStackTraceRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-stack-trace-record/#readstacktracerecord","title":"readStackTraceRecord","text":"<p>[jvm]\\ fun readStackTraceRecord(): HprofRecord.StackTraceRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-sticky-class-gc-root-record/","title":"Read sticky class gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readStickyClassGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-sticky-class-gc-root-record/#readstickyclassgcrootrecord","title":"readStickyClassGcRootRecord","text":"<p>[jvm]\\ fun readStickyClassGcRootRecord(): GcRoot.StickyClass</p>"},{"location":"api/shark/-hprof-record-reader/read-string-record/","title":"Read string record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readStringRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-string-record/#readstringrecord","title":"readStringRecord","text":"<p>[jvm]\\ fun readStringRecord(length: Long): HprofRecord.StringRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-string/","title":"Read string","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readString</p>"},{"location":"api/shark/-hprof-record-reader/read-string/#readstring","title":"readString","text":"<p>[jvm]\\ fun readString(byteCount: Int, charset: Charset): String</p>"},{"location":"api/shark/-hprof-record-reader/read-thread-block-gc-root-record/","title":"Read thread block gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readThreadBlockGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-thread-block-gc-root-record/#readthreadblockgcrootrecord","title":"readThreadBlockGcRootRecord","text":"<p>[jvm]\\ fun readThreadBlockGcRootRecord(): GcRoot.ThreadBlock</p>"},{"location":"api/shark/-hprof-record-reader/read-thread-object-gc-root-record/","title":"Read thread object gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readThreadObjectGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-thread-object-gc-root-record/#readthreadobjectgcrootrecord","title":"readThreadObjectGcRootRecord","text":"<p>[jvm]\\ fun readThreadObjectGcRootRecord(): GcRoot.ThreadObject</p>"},{"location":"api/shark/-hprof-record-reader/read-unknown-gc-root-record/","title":"Read unknown gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnknownGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-unknown-gc-root-record/#readunknowngcrootrecord","title":"readUnknownGcRootRecord","text":"<p>[jvm]\\ fun readUnknownGcRootRecord(): GcRoot.Unknown</p>"},{"location":"api/shark/-hprof-record-reader/read-unload-class-record/","title":"Read unload class record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnloadClassRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-unload-class-record/#readunloadclassrecord","title":"readUnloadClassRecord","text":"<p>[jvm]\\ fun readUnloadClassRecord(): HprofRecord.UnloadClassRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-unreachable-gc-root-record/","title":"Read unreachable gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnreachableGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-unreachable-gc-root-record/#readunreachablegcrootrecord","title":"readUnreachableGcRootRecord","text":"<p>[jvm]\\ fun readUnreachableGcRootRecord(): GcRoot.Unreachable</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-byte/","title":"Read unsigned byte","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnsignedByte</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-byte/#readunsignedbyte","title":"readUnsignedByte","text":"<p>[jvm]\\ fun readUnsignedByte(): Int</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-int/","title":"Read unsigned int","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnsignedInt</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-int/#readunsignedint","title":"readUnsignedInt","text":"<p>[jvm]\\ fun readUnsignedInt(): Long</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-short/","title":"Read unsigned short","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnsignedShort</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-short/#readunsignedshort","title":"readUnsignedShort","text":"<p>[jvm]\\ fun readUnsignedShort(): Int</p>"},{"location":"api/shark/-hprof-record-reader/read-utf8/","title":"Read utf8","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUtf8</p>"},{"location":"api/shark/-hprof-record-reader/read-utf8/#readutf8","title":"readUtf8","text":"<p>[jvm]\\ fun readUtf8(byteCount: Long): String</p>"},{"location":"api/shark/-hprof-record-reader/read-value/","title":"Read value","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readValue</p>"},{"location":"api/shark/-hprof-record-reader/read-value/#readvalue","title":"readValue","text":"<p>[jvm]\\ fun readValue(type: Int): ValueHolder</p> <p>Reads a value in the heap dump, which can be a reference or a primitive type.</p>"},{"location":"api/shark/-hprof-record-reader/read-vm-internal-gc-root-record/","title":"Read vm internal gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readVmInternalGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-vm-internal-gc-root-record/#readvminternalgcrootrecord","title":"readVmInternalGcRootRecord","text":"<p>[jvm]\\ fun readVmInternalGcRootRecord(): GcRoot.VmInternal</p>"},{"location":"api/shark/-hprof-record-reader/size-of/","title":"Size of","text":"<p>//leakcanary-repo/shark/HprofRecordReader/sizeOf</p>"},{"location":"api/shark/-hprof-record-reader/size-of/#sizeof","title":"sizeOf","text":"<p>[jvm]\\ fun sizeOf(type: Int): Int</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-constant-pool/","title":"Skip class dump constant pool","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipClassDumpConstantPool</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-constant-pool/#skipclassdumpconstantpool","title":"skipClassDumpConstantPool","text":"<p>[jvm]\\ fun skipClassDumpConstantPool()</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-fields/","title":"Skip class dump fields","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipClassDumpFields</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-fields/#skipclassdumpfields","title":"skipClassDumpFields","text":"<p>[jvm]\\ fun skipClassDumpFields()</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-header/","title":"Skip class dump header","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipClassDumpHeader</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-header/#skipclassdumpheader","title":"skipClassDumpHeader","text":"<p>[jvm]\\ fun skipClassDumpHeader()</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-record/","title":"Skip class dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipClassDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-record/#skipclassdumprecord","title":"skipClassDumpRecord","text":"<p>[jvm]\\ fun skipClassDumpRecord()</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-static-fields/","title":"Skip class dump static fields","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipClassDumpStaticFields</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-static-fields/#skipclassdumpstaticfields","title":"skipClassDumpStaticFields","text":"<p>[jvm]\\ fun skipClassDumpStaticFields()</p>"},{"location":"api/shark/-hprof-record-reader/skip-heap-dump-info-record/","title":"Skip heap dump info record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipHeapDumpInfoRecord</p>"},{"location":"api/shark/-hprof-record-reader/skip-heap-dump-info-record/#skipheapdumpinforecord","title":"skipHeapDumpInfoRecord","text":"<p>[jvm]\\ fun skipHeapDumpInfoRecord()</p>"},{"location":"api/shark/-hprof-record-reader/skip-id/","title":"Skip id","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipId</p>"},{"location":"api/shark/-hprof-record-reader/skip-id/#skipid","title":"skipId","text":"<p>[jvm]\\ fun skipId()</p>"},{"location":"api/shark/-hprof-record-reader/skip-instance-dump-record/","title":"Skip instance dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipInstanceDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/skip-instance-dump-record/#skipinstancedumprecord","title":"skipInstanceDumpRecord","text":"<p>[jvm]\\ fun skipInstanceDumpRecord()</p>"},{"location":"api/shark/-hprof-record-reader/skip-object-array-dump-record/","title":"Skip object array dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipObjectArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/skip-object-array-dump-record/#skipobjectarraydumprecord","title":"skipObjectArrayDumpRecord","text":"<p>[jvm]\\ fun skipObjectArrayDumpRecord()</p>"},{"location":"api/shark/-hprof-record-reader/skip-primitive-array-dump-record/","title":"Skip primitive array dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipPrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/skip-primitive-array-dump-record/#skipprimitivearraydumprecord","title":"skipPrimitiveArrayDumpRecord","text":"<p>[jvm]\\ fun skipPrimitiveArrayDumpRecord()</p>"},{"location":"api/shark/-hprof-record-reader/skip/","title":"Skip","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skip</p>"},{"location":"api/shark/-hprof-record-reader/skip/#skip","title":"skip","text":"<p>[jvm]\\ fun skip(byteCount: Int)</p> <p>fun skip(byteCount: Long)</p>"},{"location":"api/shark/-hprof-record-reader/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordReader/Companion</p>"},{"location":"api/shark/-hprof-record-reader/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-record-tag/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag</p>"},{"location":"api/shark/-hprof-record-tag/#hprofrecordtag","title":"HprofRecordTag","text":"<p>[jvm]\\ enum HprofRecordTag : Enum<HprofRecordTag></p>"},{"location":"api/shark/-hprof-record-tag/#entries","title":"Entries","text":"STRING_IN_UTF8 [jvm]STRING_IN_UTF8 LOAD_CLASS [jvm]LOAD_CLASS UNLOAD_CLASS [jvm]UNLOAD_CLASS STACK_FRAME [jvm]STACK_FRAME STACK_TRACE [jvm]STACK_TRACE ALLOC_SITES [jvm]ALLOC_SITES HEAP_SUMMARY [jvm]HEAP_SUMMARY START_THREAD [jvm]START_THREAD END_THREAD [jvm]END_THREAD HEAP_DUMP [jvm]HEAP_DUMP HEAP_DUMP_SEGMENT [jvm]HEAP_DUMP_SEGMENT HEAP_DUMP_END [jvm]HEAP_DUMP_END CPU_SAMPLES [jvm]CPU_SAMPLES CONTROL_SETTINGS [jvm]CONTROL_SETTINGS ROOT_UNKNOWN [jvm]ROOT_UNKNOWN ROOT_JNI_GLOBAL [jvm]ROOT_JNI_GLOBAL ROOT_JNI_LOCAL [jvm]ROOT_JNI_LOCAL ROOT_JAVA_FRAME [jvm]ROOT_JAVA_FRAME ROOT_NATIVE_STACK [jvm]ROOT_NATIVE_STACK ROOT_STICKY_CLASS [jvm]ROOT_STICKY_CLASS ROOT_THREAD_BLOCK [jvm]ROOT_THREAD_BLOCK ROOT_MONITOR_USED [jvm]ROOT_MONITOR_USED ROOT_THREAD_OBJECT [jvm]ROOT_THREAD_OBJECT HEAP_DUMP_INFO [jvm]HEAP_DUMP_INFOAndroid format addition ROOT_INTERNED_STRING [jvm]ROOT_INTERNED_STRING ROOT_FINALIZING [jvm]ROOT_FINALIZING ROOT_DEBUGGER [jvm]ROOT_DEBUGGER ROOT_REFERENCE_CLEANUP [jvm]ROOT_REFERENCE_CLEANUP ROOT_VM_INTERNAL [jvm]ROOT_VM_INTERNAL ROOT_JNI_MONITOR [jvm]ROOT_JNI_MONITOR ROOT_UNREACHABLE [jvm]ROOT_UNREACHABLE PRIMITIVE_ARRAY_NODATA [jvm]PRIMITIVE_ARRAY_NODATA CLASS_DUMP [jvm]CLASS_DUMP INSTANCE_DUMP [jvm]INSTANCE_DUMP OBJECT_ARRAY_DUMP [jvm]OBJECT_ARRAY_DUMP PRIMITIVE_ARRAY_DUMP [jvm]PRIMITIVE_ARRAY_DUMP"},{"location":"api/shark/-hprof-record-tag/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-record-tag/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): HprofRecordTagReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<HprofRecordTag>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-hprof-record-tag/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/tag/","title":"Tag","text":"<p>//leakcanary-repo/shark/HprofRecordTag/tag</p>"},{"location":"api/shark/-hprof-record-tag/tag/#tag","title":"tag","text":"<p>[jvm]\\ val tag: Int</p>"},{"location":"api/shark/-hprof-record-tag/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/HprofRecordTag/valueOf</p>"},{"location":"api/shark/-hprof-record-tag/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): HprofRecordTag</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-hprof-record-tag/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-hprof-record-tag/values/","title":"Values","text":"<p>//leakcanary-repo/shark/HprofRecordTag/values</p>"},{"location":"api/shark/-hprof-record-tag/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<HprofRecordTag></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-hprof-record-tag/-a-l-l-o-c_-s-i-t-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ALLOC_SITES</p>"},{"location":"api/shark/-hprof-record-tag/-a-l-l-o-c_-s-i-t-e-s/#alloc_sites","title":"ALLOC_SITES","text":"<p>[jvm]\\ ALLOC_SITES</p>"},{"location":"api/shark/-hprof-record-tag/-a-l-l-o-c_-s-i-t-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-c-l-a-s-s_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/CLASS_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-c-l-a-s-s_-d-u-m-p/#class_dump","title":"CLASS_DUMP","text":"<p>[jvm]\\ CLASS_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-c-l-a-s-s_-d-u-m-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-c-o-n-t-r-o-l_-s-e-t-t-i-n-g-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/CONTROL_SETTINGS</p>"},{"location":"api/shark/-hprof-record-tag/-c-o-n-t-r-o-l_-s-e-t-t-i-n-g-s/#control_settings","title":"CONTROL_SETTINGS","text":"<p>[jvm]\\ CONTROL_SETTINGS</p>"},{"location":"api/shark/-hprof-record-tag/-c-o-n-t-r-o-l_-s-e-t-t-i-n-g-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-c-p-u_-s-a-m-p-l-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/CPU_SAMPLES</p>"},{"location":"api/shark/-hprof-record-tag/-c-p-u_-s-a-m-p-l-e-s/#cpu_samples","title":"CPU_SAMPLES","text":"<p>[jvm]\\ CPU_SAMPLES</p>"},{"location":"api/shark/-hprof-record-tag/-c-p-u_-s-a-m-p-l-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/Companion</p>"},{"location":"api/shark/-hprof-record-tag/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-record-tag/-companion/#properties","title":"Properties","text":"Name Summary rootTags [jvm]val rootTags: EnumSet<HprofRecordTag>"},{"location":"api/shark/-hprof-record-tag/-companion/root-tags/","title":"Root tags","text":"<p>//leakcanary-repo/shark/HprofRecordTag/Companion/rootTags</p>"},{"location":"api/shark/-hprof-record-tag/-companion/root-tags/#roottags","title":"rootTags","text":"<p>[jvm]\\ val rootTags: EnumSet<HprofRecordTag></p>"},{"location":"api/shark/-hprof-record-tag/-e-n-d_-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/END_THREAD</p>"},{"location":"api/shark/-hprof-record-tag/-e-n-d_-t-h-r-e-a-d/#end_thread","title":"END_THREAD","text":"<p>[jvm]\\ END_THREAD</p>"},{"location":"api/shark/-hprof-record-tag/-e-n-d_-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/HEAP_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p/#heap_dump","title":"HEAP_DUMP","text":"<p>[jvm]\\ HEAP_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-e-n-d/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/HEAP_DUMP_END</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-e-n-d/#heap_dump_end","title":"HEAP_DUMP_END","text":"<p>[jvm]\\ HEAP_DUMP_END</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-e-n-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-i-n-f-o/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/HEAP_DUMP_INFO</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-i-n-f-o/#heap_dump_info","title":"HEAP_DUMP_INFO","text":"<p>[jvm]\\ HEAP_DUMP_INFO</p> <p>Android format addition</p> <p>Specifies information about which heap certain objects came from. When a sub-tag of this type appears in a HPROF_HEAP_DUMP or HPROF_HEAP_DUMP_SEGMENT record, entries that follow it will be associated with the specified heap. The HEAP_DUMP_INFO data is reset at the end of the <code>HEAP_DUMP[_SEGMENT]</code>. Multiple HEAP_DUMP_INFO entries may appear in a single <code>HEAP_DUMP[_SEGMENT]</code>.</p> <p>Format: u1: Tag value (0xFE) u4: heap ID ID: heap name string ID</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-i-n-f-o/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-s-e-g-m-e-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/HEAP_DUMP_SEGMENT</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-s-e-g-m-e-n-t/#heap_dump_segment","title":"HEAP_DUMP_SEGMENT","text":"<p>[jvm]\\ HEAP_DUMP_SEGMENT</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-s-e-g-m-e-n-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-s-u-m-m-a-r-y/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/HEAP_SUMMARY</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-s-u-m-m-a-r-y/#heap_summary","title":"HEAP_SUMMARY","text":"<p>[jvm]\\ HEAP_SUMMARY</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-s-u-m-m-a-r-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-i-n-s-t-a-n-c-e_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/INSTANCE_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-i-n-s-t-a-n-c-e_-d-u-m-p/#instance_dump","title":"INSTANCE_DUMP","text":"<p>[jvm]\\ INSTANCE_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-i-n-s-t-a-n-c-e_-d-u-m-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-l-o-a-d_-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/LOAD_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-l-o-a-d_-c-l-a-s-s/#load_class","title":"LOAD_CLASS","text":"<p>[jvm]\\ LOAD_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-l-o-a-d_-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-o-b-j-e-c-t_-a-r-r-a-y_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/OBJECT_ARRAY_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-o-b-j-e-c-t_-a-r-r-a-y_-d-u-m-p/#object_array_dump","title":"OBJECT_ARRAY_DUMP","text":"<p>[jvm]\\ OBJECT_ARRAY_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-o-b-j-e-c-t_-a-r-r-a-y_-d-u-m-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/PRIMITIVE_ARRAY_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-d-u-m-p/#primitive_array_dump","title":"PRIMITIVE_ARRAY_DUMP","text":"<p>[jvm]\\ PRIMITIVE_ARRAY_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-d-u-m-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-n-o-d-a-t-a/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/PRIMITIVE_ARRAY_NODATA</p>"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-n-o-d-a-t-a/#primitive_array_nodata","title":"PRIMITIVE_ARRAY_NODATA","text":"<p>[jvm]\\ PRIMITIVE_ARRAY_NODATA</p>"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-n-o-d-a-t-a/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-d-e-b-u-g-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_DEBUGGER</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-d-e-b-u-g-g-e-r/#root_debugger","title":"ROOT_DEBUGGER","text":"<p>[jvm]\\ ROOT_DEBUGGER</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-d-e-b-u-g-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-f-i-n-a-l-i-z-i-n-g/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_FINALIZING</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-f-i-n-a-l-i-z-i-n-g/#root_finalizing","title":"ROOT_FINALIZING","text":"<p>[jvm]\\ ROOT_FINALIZING</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-f-i-n-a-l-i-z-i-n-g/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-i-n-t-e-r-n-e-d_-s-t-r-i-n-g/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_INTERNED_STRING</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-i-n-t-e-r-n-e-d_-s-t-r-i-n-g/#root_interned_string","title":"ROOT_INTERNED_STRING","text":"<p>[jvm]\\ ROOT_INTERNED_STRING</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-i-n-t-e-r-n-e-d_-s-t-r-i-n-g/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-a-v-a_-f-r-a-m-e/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_JAVA_FRAME</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-a-v-a_-f-r-a-m-e/#root_java_frame","title":"ROOT_JAVA_FRAME","text":"<p>[jvm]\\ ROOT_JAVA_FRAME</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-a-v-a_-f-r-a-m-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-g-l-o-b-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_JNI_GLOBAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-g-l-o-b-a-l/#root_jni_global","title":"ROOT_JNI_GLOBAL","text":"<p>[jvm]\\ ROOT_JNI_GLOBAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-g-l-o-b-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-l-o-c-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_JNI_LOCAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-l-o-c-a-l/#root_jni_local","title":"ROOT_JNI_LOCAL","text":"<p>[jvm]\\ ROOT_JNI_LOCAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-l-o-c-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-m-o-n-i-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_JNI_MONITOR</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-m-o-n-i-t-o-r/#root_jni_monitor","title":"ROOT_JNI_MONITOR","text":"<p>[jvm]\\ ROOT_JNI_MONITOR</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-m-o-n-i-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-m-o-n-i-t-o-r_-u-s-e-d/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_MONITOR_USED</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-m-o-n-i-t-o-r_-u-s-e-d/#root_monitor_used","title":"ROOT_MONITOR_USED","text":"<p>[jvm]\\ ROOT_MONITOR_USED</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-m-o-n-i-t-o-r_-u-s-e-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-n-a-t-i-v-e_-s-t-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_NATIVE_STACK</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-n-a-t-i-v-e_-s-t-a-c-k/#root_native_stack","title":"ROOT_NATIVE_STACK","text":"<p>[jvm]\\ ROOT_NATIVE_STACK</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-n-a-t-i-v-e_-s-t-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-r-e-f-e-r-e-n-c-e_-c-l-e-a-n-u-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_REFERENCE_CLEANUP</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-r-e-f-e-r-e-n-c-e_-c-l-e-a-n-u-p/#root_reference_cleanup","title":"ROOT_REFERENCE_CLEANUP","text":"<p>[jvm]\\ ROOT_REFERENCE_CLEANUP</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-r-e-f-e-r-e-n-c-e_-c-l-e-a-n-u-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-s-t-i-c-k-y_-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_STICKY_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-s-t-i-c-k-y_-c-l-a-s-s/#root_sticky_class","title":"ROOT_STICKY_CLASS","text":"<p>[jvm]\\ ROOT_STICKY_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-s-t-i-c-k-y_-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-b-l-o-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_THREAD_BLOCK</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-b-l-o-c-k/#root_thread_block","title":"ROOT_THREAD_BLOCK","text":"<p>[jvm]\\ ROOT_THREAD_BLOCK</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-b-l-o-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-o-b-j-e-c-t/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_THREAD_OBJECT</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-o-b-j-e-c-t/#root_thread_object","title":"ROOT_THREAD_OBJECT","text":"<p>[jvm]\\ ROOT_THREAD_OBJECT</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-o-b-j-e-c-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-k-n-o-w-n/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_UNKNOWN</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-k-n-o-w-n/#root_unknown","title":"ROOT_UNKNOWN","text":"<p>[jvm]\\ ROOT_UNKNOWN</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-k-n-o-w-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-r-e-a-c-h-a-b-l-e/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_UNREACHABLE</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-r-e-a-c-h-a-b-l-e/#root_unreachable","title":"ROOT_UNREACHABLE","text":"<p>[jvm]\\ ROOT_UNREACHABLE</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-r-e-a-c-h-a-b-l-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-v-m_-i-n-t-e-r-n-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_VM_INTERNAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-v-m_-i-n-t-e-r-n-a-l/#root_vm_internal","title":"ROOT_VM_INTERNAL","text":"<p>[jvm]\\ ROOT_VM_INTERNAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-v-m_-i-n-t-e-r-n-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-f-r-a-m-e/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/STACK_FRAME</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-f-r-a-m-e/#stack_frame","title":"STACK_FRAME","text":"<p>[jvm]\\ STACK_FRAME</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-f-r-a-m-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-t-r-a-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/STACK_TRACE</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-t-r-a-c-e/#stack_trace","title":"STACK_TRACE","text":"<p>[jvm]\\ STACK_TRACE</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-t-r-a-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-s-t-a-r-t_-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/START_THREAD</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-r-t_-t-h-r-e-a-d/#start_thread","title":"START_THREAD","text":"<p>[jvm]\\ START_THREAD</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-r-t_-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-s-t-r-i-n-g_-i-n_-u-t-f8/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/STRING_IN_UTF8</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-r-i-n-g_-i-n_-u-t-f8/#string_in_utf8","title":"STRING_IN_UTF8","text":"<p>[jvm]\\ STRING_IN_UTF8</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-r-i-n-g_-i-n_-u-t-f8/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-u-n-l-o-a-d_-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/UNLOAD_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-u-n-l-o-a-d_-c-l-a-s-s/#unload_class","title":"UNLOAD_CLASS","text":"<p>[jvm]\\ UNLOAD_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-u-n-l-o-a-d_-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-version/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofVersion</p>"},{"location":"api/shark/-hprof-version/#hprofversion","title":"HprofVersion","text":"<p>[jvm]\\ enum HprofVersion : Enum<HprofVersion> </p> <p>Supported hprof versions</p>"},{"location":"api/shark/-hprof-version/#entries","title":"Entries","text":"JDK1_2_BETA3 [jvm]JDK1_2_BETA3 JDK1_2_BETA4 [jvm]JDK1_2_BETA4 JDK_6 [jvm]JDK_6 ANDROID [jvm]ANDROID"},{"location":"api/shark/-hprof-version/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): HprofVersionReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<HprofVersion>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-hprof-version/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int versionString [jvm]val versionString: String"},{"location":"api/shark/-hprof-version/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/HprofVersion/valueOf</p>"},{"location":"api/shark/-hprof-version/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): HprofVersion</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-hprof-version/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-hprof-version/values/","title":"Values","text":"<p>//leakcanary-repo/shark/HprofVersion/values</p>"},{"location":"api/shark/-hprof-version/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<HprofVersion></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-hprof-version/version-string/","title":"Version string","text":"<p>//leakcanary-repo/shark/HprofVersion/versionString</p>"},{"location":"api/shark/-hprof-version/version-string/#versionstring","title":"versionString","text":"<p>[jvm]\\ val versionString: String</p>"},{"location":"api/shark/-hprof-version/-a-n-d-r-o-i-d/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofVersion/ANDROID</p>"},{"location":"api/shark/-hprof-version/-a-n-d-r-o-i-d/#android","title":"ANDROID","text":"<p>[jvm]\\ ANDROID</p>"},{"location":"api/shark/-hprof-version/-a-n-d-r-o-i-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int versionString [jvm]val versionString: String"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a3/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofVersion/JDK1_2_BETA3</p>"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a3/#jdk1_2_beta3","title":"JDK1_2_BETA3","text":"<p>[jvm]\\ JDK1_2_BETA3</p>"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a3/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int versionString [jvm]val versionString: String"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a4/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofVersion/JDK1_2_BETA4</p>"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a4/#jdk1_2_beta4","title":"JDK1_2_BETA4","text":"<p>[jvm]\\ JDK1_2_BETA4</p>"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a4/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int versionString [jvm]val versionString: String"},{"location":"api/shark/-hprof-version/-j-d-k_6/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofVersion/JDK_6</p>"},{"location":"api/shark/-hprof-version/-j-d-k_6/#jdk_6","title":"JDK_6","text":"<p>[jvm]\\ JDK_6</p>"},{"location":"api/shark/-hprof-version/-j-d-k_6/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int versionString [jvm]val versionString: String"},{"location":"api/shark/-hprof-writer/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofWriter</p>"},{"location":"api/shark/-hprof-writer/#hprofwriter","title":"HprofWriter","text":"<p>[jvm]\\ class HprofWriter : Closeable</p> <p>Generates Hprof files.</p> <p>Call openWriterFor to obtain a new instance.</p> <p>Call write to add records and close when you\u2019re done.</p>"},{"location":"api/shark/-hprof-writer/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-writer/#functions","title":"Functions","text":"Name Summary close [jvm]open override fun close()Flushes to disk all HprofRecord.HeapDumpRecord that are currently written to the in memory buffer, then closes the file. valuesToBytes [jvm]fun valuesToBytes(values: List<ValueHolder>): ByteArrayHelper method for creating a ByteArray for InstanceDumpRecord.fieldValues from a list of ValueHolder. write [jvm]fun write(record: HprofRecord)Appends a HprofRecord to the heap dump. If record is a HprofRecord.HeapDumpRecord then it will not be written to an in memory buffer and written to file only when the next a record that is not a HprofRecord.HeapDumpRecord is written or when close is called."},{"location":"api/shark/-hprof-writer/#properties","title":"Properties","text":"Name Summary hprofHeader [jvm]val hprofHeader: HprofHeader"},{"location":"api/shark/-hprof-writer/close/","title":"Close","text":"<p>//leakcanary-repo/shark/HprofWriter/close</p>"},{"location":"api/shark/-hprof-writer/close/#close","title":"close","text":"<p>[jvm]\\ open override fun close()</p> <p>Flushes to disk all HprofRecord.HeapDumpRecord that are currently written to the in memory buffer, then closes the file.</p>"},{"location":"api/shark/-hprof-writer/hprof-header/","title":"Hprof header","text":"<p>//leakcanary-repo/shark/HprofWriter/hprofHeader</p>"},{"location":"api/shark/-hprof-writer/hprof-header/#hprofheader","title":"hprofHeader","text":"<p>[jvm]\\ val hprofHeader: HprofHeader</p>"},{"location":"api/shark/-hprof-writer/values-to-bytes/","title":"Values to bytes","text":"<p>//leakcanary-repo/shark/HprofWriter/valuesToBytes</p>"},{"location":"api/shark/-hprof-writer/values-to-bytes/#valuestobytes","title":"valuesToBytes","text":"<p>[jvm]\\ fun valuesToBytes(values: List<ValueHolder>): ByteArray</p> <p>Helper method for creating a ByteArray for InstanceDumpRecord.fieldValues from a list of ValueHolder.</p>"},{"location":"api/shark/-hprof-writer/write/","title":"Write","text":"<p>//leakcanary-repo/shark/HprofWriter/write</p>"},{"location":"api/shark/-hprof-writer/write/#write","title":"write","text":"<p>[jvm]\\ fun write(record: HprofRecord)</p> <p>Appends a HprofRecord to the heap dump. If record is a HprofRecord.HeapDumpRecord then it will not be written to an in memory buffer and written to file only when the next a record that is not a HprofRecord.HeapDumpRecord is written or when close is called.</p>"},{"location":"api/shark/-hprof-writer/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofWriter/Companion</p>"},{"location":"api/shark/-hprof-writer/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-writer/-companion/#functions","title":"Functions","text":"Name Summary openWriterFor [jvm]fun openWriterFor(hprofFile: File, hprofHeader: HprofHeader = HprofHeader()): HprofWriterfun openWriterFor(hprofSink: BufferedSink, hprofHeader: HprofHeader = HprofHeader()): HprofWriter"},{"location":"api/shark/-hprof-writer/-companion/open-writer-for/","title":"Open writer for","text":"<p>//leakcanary-repo/shark/HprofWriter/Companion/openWriterFor</p>"},{"location":"api/shark/-hprof-writer/-companion/open-writer-for/#openwriterfor","title":"openWriterFor","text":"<p>[jvm]\\ fun openWriterFor(hprofFile: File, hprofHeader: HprofHeader = HprofHeader()): HprofWriter</p> <p>fun openWriterFor(hprofSink: BufferedSink, hprofHeader: HprofHeader = HprofHeader()): HprofWriter</p>"},{"location":"api/shark/-hprof-writer-helper/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofWriterHelper</p>"},{"location":"api/shark/-hprof-writer-helper/#hprofwriterhelper","title":"HprofWriterHelper","text":"<p>[jvm]\\ class HprofWriterHelper(writer: HprofWriter) : Closeable</p>"},{"location":"api/shark/-hprof-writer-helper/#constructors","title":"Constructors","text":"HprofWriterHelper [jvm]constructor(writer: HprofWriter)"},{"location":"api/shark/-hprof-writer-helper/#types","title":"Types","text":"Name Summary ClassDefinition [jvm]inner class ClassDefinition InstanceAndClassDefinition [jvm]inner class InstanceAndClassDefinition"},{"location":"api/shark/-hprof-writer-helper/#functions","title":"Functions","text":"Name Summary arrayClass [jvm]fun arrayClass(className: String): Long clazz [jvm]fun clazz(className: String, superclassId: Long = -1L, staticFields: List<Pair<String, ValueHolder>> = emptyList(), fields: List<Pair<String, KClass<out ValueHolder>>> = emptyList()): Longfun clazz(classNameRecord: HprofRecord.StringRecord, superclassId: Long = -1L, staticFields: List<Pair<Long, ValueHolder>> = emptyList(), fields: List<Pair<Long, KClass<out ValueHolder>>> = emptyList()): Long clazz [jvm]infix fun String.clazz(block: HprofWriterHelper.ClassDefinition.() -> Unit): Long close [jvm]open override fun close() gcRoot [jvm]fun gcRoot(gcRoot: GcRoot) instance [jvm]fun instance(classId: Long, fields: List<ValueHolder> = emptyList()): ValueHolder.ReferenceHolder instance [jvm]infix fun String.instance(block: HprofWriterHelper.InstanceAndClassDefinition.() -> Unit): ValueHolder.ReferenceHolder keyedWeakReference [jvm]fun keyedWeakReference(referentInstanceId: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolder objectArray [jvm]fun objectArray(vararg elements: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolderfun objectArray(classId: Long, array: LongArray): Long objectArrayOf [jvm]fun objectArrayOf(classId: Long, vararg elements: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolder primitiveLongArray [jvm]fun primitiveLongArray(array: LongArray): Long string [jvm]fun string(string: String): ValueHolder.ReferenceHolder stringRecord [jvm]fun stringRecord(name: String): HprofRecord.StringRecord watchedInstance [jvm]infix fun String.watchedInstance(block: HprofWriterHelper.InstanceAndClassDefinition.() -> Unit): ValueHolder.ReferenceHolder"},{"location":"api/shark/-hprof-writer-helper/#properties","title":"Properties","text":"Name Summary charArrayDump [jvm]val String.charArrayDump: ValueHolder.ReferenceHolder objectClassId [jvm]val objectClassId: Long"},{"location":"api/shark/-hprof-writer-helper/-hprof-writer-helper/","title":"hprof writer helper","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/HprofWriterHelper</p>"},{"location":"api/shark/-hprof-writer-helper/-hprof-writer-helper/#hprofwriterhelper","title":"HprofWriterHelper","text":"<p>[jvm]\\ constructor(writer: HprofWriter)</p>"},{"location":"api/shark/-hprof-writer-helper/array-class/","title":"Array class","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/arrayClass</p>"},{"location":"api/shark/-hprof-writer-helper/array-class/#arrayclass","title":"arrayClass","text":"<p>[jvm]\\ fun arrayClass(className: String): Long</p>"},{"location":"api/shark/-hprof-writer-helper/char-array-dump/","title":"Char array dump","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/charArrayDump</p>"},{"location":"api/shark/-hprof-writer-helper/char-array-dump/#chararraydump","title":"charArrayDump","text":"<p>[jvm]\\ val String.charArrayDump: ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/clazz/","title":"Clazz","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/clazz</p>"},{"location":"api/shark/-hprof-writer-helper/clazz/#clazz","title":"clazz","text":"<p>[jvm]\\ fun clazz(className: String, superclassId: Long = -1L, staticFields: List<Pair<String, ValueHolder>> = emptyList(), fields: List<Pair<String, KClass<out ValueHolder>>> = emptyList()): Long</p> <p>fun clazz(classNameRecord: HprofRecord.StringRecord, superclassId: Long = -1L, staticFields: List<Pair<Long, ValueHolder>> = emptyList(), fields: List<Pair<Long, KClass<out ValueHolder>>> = emptyList()): Long</p> <p>infix fun String.clazz(block: HprofWriterHelper.ClassDefinition.() -> Unit): Long</p>"},{"location":"api/shark/-hprof-writer-helper/close/","title":"Close","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/close</p>"},{"location":"api/shark/-hprof-writer-helper/close/#close","title":"close","text":"<p>[jvm]\\ open override fun close()</p>"},{"location":"api/shark/-hprof-writer-helper/gc-root/","title":"Gc root","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/gcRoot</p>"},{"location":"api/shark/-hprof-writer-helper/gc-root/#gcroot","title":"gcRoot","text":"<p>[jvm]\\ fun gcRoot(gcRoot: GcRoot)</p>"},{"location":"api/shark/-hprof-writer-helper/instance/","title":"Instance","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/instance</p>"},{"location":"api/shark/-hprof-writer-helper/instance/#instance","title":"instance","text":"<p>[jvm]\\ fun instance(classId: Long, fields: List<ValueHolder> = emptyList()): ValueHolder.ReferenceHolder</p> <p>infix fun String.instance(block: HprofWriterHelper.InstanceAndClassDefinition.() -> Unit): ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/keyed-weak-reference/","title":"Keyed weak reference","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/keyedWeakReference</p>"},{"location":"api/shark/-hprof-writer-helper/keyed-weak-reference/#keyedweakreference","title":"keyedWeakReference","text":"<p>[jvm]\\ fun keyedWeakReference(referentInstanceId: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/object-array-of/","title":"Object array of","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/objectArrayOf</p>"},{"location":"api/shark/-hprof-writer-helper/object-array-of/#objectarrayof","title":"objectArrayOf","text":"<p>[jvm]\\ fun objectArrayOf(classId: Long, vararg elements: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/object-array/","title":"Object array","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/objectArray</p>"},{"location":"api/shark/-hprof-writer-helper/object-array/#objectarray","title":"objectArray","text":"<p>[jvm]\\ fun objectArray(vararg elements: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolder</p> <p>fun objectArray(classId: Long, array: LongArray): Long</p>"},{"location":"api/shark/-hprof-writer-helper/object-class-id/","title":"Object class id","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/objectClassId</p>"},{"location":"api/shark/-hprof-writer-helper/object-class-id/#objectclassid","title":"objectClassId","text":"<p>[jvm]\\ val objectClassId: Long</p>"},{"location":"api/shark/-hprof-writer-helper/primitive-long-array/","title":"Primitive long array","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/primitiveLongArray</p>"},{"location":"api/shark/-hprof-writer-helper/primitive-long-array/#primitivelongarray","title":"primitiveLongArray","text":"<p>[jvm]\\ fun primitiveLongArray(array: LongArray): Long</p>"},{"location":"api/shark/-hprof-writer-helper/string-record/","title":"String record","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/stringRecord</p>"},{"location":"api/shark/-hprof-writer-helper/string-record/#stringrecord","title":"stringRecord","text":"<p>[jvm]\\ fun stringRecord(name: String): HprofRecord.StringRecord</p>"},{"location":"api/shark/-hprof-writer-helper/string/","title":"String","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/string</p>"},{"location":"api/shark/-hprof-writer-helper/string/#string","title":"string","text":"<p>[jvm]\\ fun string(string: String): ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/watched-instance/","title":"Watched instance","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/watchedInstance</p>"},{"location":"api/shark/-hprof-writer-helper/watched-instance/#watchedinstance","title":"watchedInstance","text":"<p>[jvm]\\ infix fun String.watchedInstance(block: HprofWriterHelper.InstanceAndClassDefinition.() -> Unit): ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/ClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/#classdefinition","title":"ClassDefinition","text":"<p>[jvm]\\ inner class ClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/#constructors","title":"Constructors","text":"ClassDefinition [jvm]constructor()"},{"location":"api/shark/-hprof-writer-helper/-class-definition/#properties","title":"Properties","text":"Name Summary staticField [jvm]val staticField: LinkedHashMap<String, ValueHolder>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/-class-definition/","title":"class definition","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/ClassDefinition/ClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/-class-definition/#classdefinition","title":"ClassDefinition","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/static-field/","title":"Static field","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/ClassDefinition/staticField</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/static-field/#staticfield","title":"staticField","text":"<p>[jvm]\\ val staticField: LinkedHashMap<String, ValueHolder></p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/InstanceAndClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/#instanceandclassdefinition","title":"InstanceAndClassDefinition","text":"<p>[jvm]\\ inner class InstanceAndClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/#constructors","title":"Constructors","text":"InstanceAndClassDefinition [jvm]constructor()"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/#properties","title":"Properties","text":"Name Summary field [jvm]val field: LinkedHashMap<String, ValueHolder> staticField [jvm]val staticField: LinkedHashMap<String, ValueHolder>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/-instance-and-class-definition/","title":"instance and class definition","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/InstanceAndClassDefinition/InstanceAndClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/-instance-and-class-definition/#instanceandclassdefinition","title":"InstanceAndClassDefinition","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/field/","title":"Field","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/InstanceAndClassDefinition/field</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/field/#field","title":"field","text":"<p>[jvm]\\ val field: LinkedHashMap<String, ValueHolder></p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/static-field/","title":"Static field","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/InstanceAndClassDefinition/staticField</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/static-field/#staticfield","title":"staticField","text":"<p>[jvm]\\ val staticField: LinkedHashMap<String, ValueHolder></p>"},{"location":"api/shark/-ignored-reference-matcher/","title":"Index","text":"<p>//leakcanary-repo/shark/IgnoredReferenceMatcher</p>"},{"location":"api/shark/-ignored-reference-matcher/#ignoredreferencematcher","title":"IgnoredReferenceMatcher","text":"<p>[jvm]\\ class IgnoredReferenceMatcher(val pattern: ReferencePattern, val patternApplies: (HeapGraph) -> Boolean = ALWAYS) : ReferenceMatcher</p> <p>IgnoredReferenceMatcher should be used to match references that cannot ever create leaks. The shortest path finder will never go through matching references.</p>"},{"location":"api/shark/-ignored-reference-matcher/#constructors","title":"Constructors","text":"IgnoredReferenceMatcher [jvm]constructor(pattern: ReferencePattern, patternApplies: (HeapGraph) -> Boolean = ALWAYS)"},{"location":"api/shark/-ignored-reference-matcher/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-ignored-reference-matcher/#properties","title":"Properties","text":"Name Summary pattern [jvm]open override val pattern: ReferencePatternThe pattern that references will be matched against. patternApplies [jvm]open override val patternApplies: (HeapGraph) -> BooleanWhether the identified leak may exist in the provided HeapGraph. Defaults to true. If the heap dump comes from a VM that runs a different version of the library that doesn\u2019t have the leak, then this should return false."},{"location":"api/shark/-ignored-reference-matcher/-ignored-reference-matcher/","title":"ignored reference matcher","text":"<p>//leakcanary-repo/shark/IgnoredReferenceMatcher/IgnoredReferenceMatcher</p>"},{"location":"api/shark/-ignored-reference-matcher/-ignored-reference-matcher/#ignoredreferencematcher","title":"IgnoredReferenceMatcher","text":"<p>[jvm]\\ constructor(pattern: ReferencePattern, patternApplies: (HeapGraph) -> Boolean = ALWAYS)</p>"},{"location":"api/shark/-ignored-reference-matcher/pattern-applies/","title":"Pattern applies","text":"<p>//leakcanary-repo/shark/IgnoredReferenceMatcher/patternApplies</p>"},{"location":"api/shark/-ignored-reference-matcher/pattern-applies/#patternapplies","title":"patternApplies","text":"<p>[jvm]\\ open override val patternApplies: (HeapGraph) -> Boolean</p> <p>Whether the identified leak may exist in the provided HeapGraph. Defaults to true. If the heap dump comes from a VM that runs a different version of the library that doesn\u2019t have the leak, then this should return false.</p>"},{"location":"api/shark/-ignored-reference-matcher/pattern/","title":"Pattern","text":"<p>//leakcanary-repo/shark/IgnoredReferenceMatcher/pattern</p>"},{"location":"api/shark/-ignored-reference-matcher/pattern/#pattern","title":"pattern","text":"<p>[jvm]\\ open override val pattern: ReferencePattern</p> <p>The pattern that references will be matched against.</p>"},{"location":"api/shark/-ignored-reference-matcher/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/IgnoredReferenceMatcher/toString</p>"},{"location":"api/shark/-ignored-reference-matcher/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-initial-state/","title":"Index","text":"<p>//leakcanary-repo/shark/InitialState</p>"},{"location":"api/shark/-initial-state/#initialstate","title":"InitialState","text":"<p>[jvm]\\ class InitialState(val scenarioLoopsPerGraph: Int = DEFAULT_SCENARIO_LOOPS_PER_GRAPH) : HeapTraversalInput</p>"},{"location":"api/shark/-initial-state/#constructors","title":"Constructors","text":"InitialState [jvm]constructor(scenarioLoopsPerGraph: Int = DEFAULT_SCENARIO_LOOPS_PER_GRAPH)"},{"location":"api/shark/-initial-state/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-initial-state/#properties","title":"Properties","text":"Name Summary scenarioLoopsPerGraph [jvm]open override val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. traversalCount [jvm]open override val traversalCount: Int = 0"},{"location":"api/shark/-initial-state/-initial-state/","title":"initial state","text":"<p>//leakcanary-repo/shark/InitialState/InitialState</p>"},{"location":"api/shark/-initial-state/-initial-state/#initialstate","title":"InitialState","text":"<p>[jvm]\\ constructor(scenarioLoopsPerGraph: Int = DEFAULT_SCENARIO_LOOPS_PER_GRAPH)</p>"},{"location":"api/shark/-initial-state/heap-graph-count/","title":"Heap graph count","text":"<p>//leakcanary-repo/shark/InitialState/heapGraphCount</p>"},{"location":"api/shark/-initial-state/heap-graph-count/#heapgraphcount","title":"heapGraphCount","text":"<p>[jvm]\\ open override val heapGraphCount: Int? = null</p> <p>The expected max number of traversals, or null if unknown.</p>"},{"location":"api/shark/-initial-state/scenario-loops-per-graph/","title":"Scenario loops per graph","text":"<p>//leakcanary-repo/shark/InitialState/scenarioLoopsPerGraph</p>"},{"location":"api/shark/-initial-state/scenario-loops-per-graph/#scenarioloopspergraph","title":"scenarioLoopsPerGraph","text":"<p>[jvm]\\ open override val scenarioLoopsPerGraph: Int</p> <p>How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal.</p>"},{"location":"api/shark/-initial-state/traversal-count/","title":"Traversal count","text":"<p>//leakcanary-repo/shark/InitialState/traversalCount</p>"},{"location":"api/shark/-initial-state/traversal-count/#traversalcount","title":"traversalCount","text":"<p>[jvm]\\ open override val traversalCount: Int = 0</p>"},{"location":"api/shark/-initial-state/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/InitialState/Companion</p>"},{"location":"api/shark/-initial-state/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-initial-state/-companion/#properties","title":"Properties","text":"Name Summary DEFAULT_SCENARIO_LOOPS_PER_GRAPH [jvm]const val DEFAULT_SCENARIO_LOOPS_PER_GRAPH: Int = 1"},{"location":"api/shark/-initial-state/-companion/-d-e-f-a-u-l-t_-s-c-e-n-a-r-i-o_-l-o-o-p-s_-p-e-r_-g-r-a-p-h/","title":"d e f a u l t s c e n a r i o l o o p s p e r g r a p h","text":"<p>//leakcanary-repo/shark/InitialState/Companion/DEFAULT_SCENARIO_LOOPS_PER_GRAPH</p>"},{"location":"api/shark/-initial-state/-companion/-d-e-f-a-u-l-t_-s-c-e-n-a-r-i-o_-l-o-o-p-s_-p-e-r_-g-r-a-p-h/#default_scenario_loops_per_graph","title":"DEFAULT_SCENARIO_LOOPS_PER_GRAPH","text":"<p>[jvm]\\ const val DEFAULT_SCENARIO_LOOPS_PER_GRAPH: Int = 1</p>"},{"location":"api/shark/-interactive-command/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand</p>"},{"location":"api/shark/-interactive-command/#interactivecommand","title":"InteractiveCommand","text":"<p>[jvm]\\ class InteractiveCommand : CliktCommand</p>"},{"location":"api/shark/-interactive-command/#constructors","title":"Constructors","text":"InteractiveCommand [jvm]constructor()"},{"location":"api/shark/-interactive-command/#types","title":"Types","text":"Name Summary COMMAND [jvm]enum COMMAND : Enum<InteractiveCommand.COMMAND>"},{"location":"api/shark/-interactive-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-interactive-command/-interactive-command/","title":"interactive command","text":"<p>//leakcanary-repo/shark/InteractiveCommand/InteractiveCommand</p>"},{"location":"api/shark/-interactive-command/-interactive-command/#interactivecommand","title":"InteractiveCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-interactive-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/InteractiveCommand/run</p>"},{"location":"api/shark/-interactive-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/#command","title":"COMMAND","text":"<p>[jvm]\\ enum COMMAND : Enum<InteractiveCommand.COMMAND></p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/#entries","title":"Entries","text":"ANALYZE [jvm]ANALYZE CLASS [jvm]CLASS INSTANCE [jvm]INSTANCE ARRAY [jvm]ARRAY PATH_TO_INSTANCE [jvm]PATH_TO_INSTANCE DETAILED_PATH_TO_INSTANCE [jvm]DETAILED_PATH_TO_INSTANCE HELP [jvm]HELP EXIT [jvm]EXIT"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String valueOf [jvm]fun valueOf(value: String): InteractiveCommand.COMMANDReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<InteractiveCommand.COMMAND>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/command-name/","title":"Command name","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/commandName</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/command-name/#commandname","title":"commandName","text":"<p>[jvm]\\ val commandName: String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/help/","title":"Help","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/help</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/help/#help","title":"help","text":"<p>[jvm]\\ val help: String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/pattern-help/","title":"Pattern help","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/patternHelp</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/pattern-help/#patternhelp","title":"patternHelp","text":"<p>[jvm]\\ val patternHelp: String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/pattern/","title":"Pattern","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/pattern</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/pattern/#pattern","title":"pattern","text":"<p>[jvm]\\ val pattern: String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/suffix/","title":"Suffix","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/suffix</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/suffix/#suffix","title":"suffix","text":"<p>[jvm]\\ val suffix: String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/toString</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/valueOf</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): InteractiveCommand.COMMAND</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/values/","title":"Values","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/values</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<InteractiveCommand.COMMAND></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-n-a-l-y-z-e/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/ANALYZE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-n-a-l-y-z-e/#analyze","title":"ANALYZE","text":"<p>[jvm]\\ ANALYZE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-n-a-l-y-z-e/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-n-a-l-y-z-e/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-r-r-a-y/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/ARRAY</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-r-r-a-y/#array","title":"ARRAY","text":"<p>[jvm]\\ ARRAY</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-r-r-a-y/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-r-r-a-y/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/CLASS</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-c-l-a-s-s/#class","title":"CLASS","text":"<p>[jvm]\\ CLASS</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-c-l-a-s-s/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/Companion</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-companion/#functions","title":"Functions","text":"Name Summary matchesCommand [jvm]infix fun String.matchesCommand(command: InteractiveCommand.COMMAND): Boolean"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-companion/matches-command/","title":"Matches command","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/Companion/matchesCommand</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-companion/matches-command/#matchescommand","title":"matchesCommand","text":"<p>[jvm]\\ infix fun String.matchesCommand(command: InteractiveCommand.COMMAND): Boolean</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-d-e-t-a-i-l-e-d_-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/DETAILED_PATH_TO_INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-d-e-t-a-i-l-e-d_-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#detailed_path_to_instance","title":"DETAILED_PATH_TO_INSTANCE","text":"<p>[jvm]\\ DETAILED_PATH_TO_INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-d-e-t-a-i-l-e-d_-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-d-e-t-a-i-l-e-d_-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-e-x-i-t/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/EXIT</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-e-x-i-t/#exit","title":"EXIT","text":"<p>[jvm]\\ EXIT</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-e-x-i-t/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-e-x-i-t/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-h-e-l-p/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/HELP</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-h-e-l-p/#help","title":"HELP","text":"<p>[jvm]\\ HELP</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-h-e-l-p/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-h-e-l-p/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-i-n-s-t-a-n-c-e/#instance","title":"INSTANCE","text":"<p>[jvm]\\ INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/PATH_TO_INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#path_to_instance","title":"PATH_TO_INSTANCE","text":"<p>[jvm]\\ PATH_TO_INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-java-local-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader</p>"},{"location":"api/shark/-java-local-reference-reader/#javalocalreferencereader","title":"JavaLocalReferenceReader","text":"<p>[jvm]\\ class JavaLocalReferenceReader(val graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ChainingInstanceReferenceReader.VirtualInstanceReferenceReader</p>"},{"location":"api/shark/-java-local-reference-reader/#constructors","title":"Constructors","text":"JavaLocalReferenceReader [jvm]constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-java-local-reference-reader/#functions","title":"Functions","text":"Name Summary matches [jvm]open override fun matches(instance: HeapObject.HeapInstance): Boolean read [jvm]open override fun read(source: HeapObject.HeapInstance): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-java-local-reference-reader/#properties","title":"Properties","text":"Name Summary graph [jvm]val graph: HeapGraph readsCutSet [jvm]open override val readsCutSet: Boolean = falsehttps://en.wikipedia.org/wiki/Cut_(graph_theory) A cut is a partition of the vertices of a graph into two disjoint subsets. Any cut determines a cut-set, the set of edges that have one endpoint in each subset of the partition. These edges are said to cross the cut."},{"location":"api/shark/-java-local-reference-reader/-java-local-reference-reader/","title":"java local reference reader","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader/JavaLocalReferenceReader</p>"},{"location":"api/shark/-java-local-reference-reader/-java-local-reference-reader/#javalocalreferencereader","title":"JavaLocalReferenceReader","text":"<p>[jvm]\\ constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-java-local-reference-reader/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader/graph</p>"},{"location":"api/shark/-java-local-reference-reader/graph/#graph","title":"graph","text":"<p>[jvm]\\ val graph: HeapGraph</p>"},{"location":"api/shark/-java-local-reference-reader/matches/","title":"Matches","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader/matches</p>"},{"location":"api/shark/-java-local-reference-reader/matches/#matches","title":"matches","text":"<p>[jvm]\\ open override fun matches(instance: HeapObject.HeapInstance): Boolean</p>"},{"location":"api/shark/-java-local-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader/read</p>"},{"location":"api/shark/-java-local-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ open override fun read(source: HeapObject.HeapInstance): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-java-local-reference-reader/reads-cut-set/","title":"Reads cut set","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader/readsCutSet</p>"},{"location":"api/shark/-java-local-reference-reader/reads-cut-set/#readscutset","title":"readsCutSet","text":"<p>[jvm]\\ open override val readsCutSet: Boolean = false</p> <p>https://en.wikipedia.org/wiki/Cut_(graph_theory) A cut is a partition of the vertices of a graph into two disjoint subsets. Any cut determines a cut-set, the set of edges that have one endpoint in each subset of the partition. These edges are said to cross the cut.</p> <p>If true, the references returned by read will include the cut-set, which means any other object reacheable from the source instance but not returned by read has no outgoing edge to the rest of the graph. In other words, the internals of the data structure cannot reach beyond the data structure itself.</p> <p>When this is true then ChainingInstanceReferenceReader can leverage FlatteningPartitionedInstanceReferenceReader.</p>"},{"location":"api/shark/-jdk-reference-matchers/","title":"Index","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers</p>"},{"location":"api/shark/-jdk-reference-matchers/#jdkreferencematchers","title":"JdkReferenceMatchers","text":"<p>[jvm]\\ enum JdkReferenceMatchers : Enum<JdkReferenceMatchers> , ReferenceMatcher.ListBuilder</p>"},{"location":"api/shark/-jdk-reference-matchers/#entries","title":"Entries","text":"REFERENCES [jvm]REFERENCES FINALIZER_WATCHDOG_DAEMON [jvm]FINALIZER_WATCHDOG_DAEMON MAIN [jvm]MAIN"},{"location":"api/shark/-jdk-reference-matchers/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-jdk-reference-matchers/#functions","title":"Functions","text":"Name Summary add [jvm]abstract fun add(references: MutableList<ReferenceMatcher>) valueOf [jvm]fun valueOf(value: String): JdkReferenceMatchersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<JdkReferenceMatchers>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-jdk-reference-matchers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jdk-reference-matchers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/valueOf</p>"},{"location":"api/shark/-jdk-reference-matchers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): JdkReferenceMatchers</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-jdk-reference-matchers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-jdk-reference-matchers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/values</p>"},{"location":"api/shark/-jdk-reference-matchers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<JdkReferenceMatchers></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-jdk-reference-matchers/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/Companion</p>"},{"location":"api/shark/-jdk-reference-matchers/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-jdk-reference-matchers/-companion/#properties","title":"Properties","text":"Name Summary defaults [jvm]@JvmStaticval defaults: List<ReferenceMatcher>"},{"location":"api/shark/-jdk-reference-matchers/-companion/defaults/","title":"Defaults","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/Companion/defaults</p>"},{"location":"api/shark/-jdk-reference-matchers/-companion/defaults/#defaults","title":"defaults","text":"<p>[jvm]\\</p> <p>@JvmStatic</p> <p>val defaults: List<ReferenceMatcher></p>"},{"location":"api/shark/-jdk-reference-matchers/-companion/defaults/#see-also","title":"See also","text":"AndroidReferenceMatchers"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/FINALIZER_WATCHDOG_DAEMON</p>"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#finalizer_watchdog_daemon","title":"FINALIZER_WATCHDOG_DAEMON","text":"<p>[jvm]\\ FINALIZER_WATCHDOG_DAEMON</p>"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/FINALIZER_WATCHDOG_DAEMON/add</p>"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/","title":"Index","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/MAIN</p>"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/#main","title":"MAIN","text":"<p>[jvm]\\ MAIN</p>"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/MAIN/add</p>"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/REFERENCES</p>"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#references","title":"REFERENCES","text":"<p>[jvm]\\ REFERENCES</p>"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/REFERENCES/add</p>"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/#jvmobjectgrowthreferencematchers","title":"JvmObjectGrowthReferenceMatchers","text":"<p>[jvm]\\ enum JvmObjectGrowthReferenceMatchers : Enum<JvmObjectGrowthReferenceMatchers> , ReferenceMatcher.ListBuilder</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/#entries","title":"Entries","text":"JVM_LEAK_DETECTION_IGNORED_MATCHERS [jvm]JVM_LEAK_DETECTION_IGNORED_MATCHERS HEAP_TRAVERSAL [jvm]HEAP_TRAVERSAL PARALLEL_LOCK_MAP [jvm]PARALLEL_LOCK_MAP"},{"location":"api/shark/-jvm-object-growth-reference-matchers/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-jvm-object-growth-reference-matchers/#functions","title":"Functions","text":"Name Summary add [jvm]abstract fun add(references: MutableList<ReferenceMatcher>) valueOf [jvm]fun valueOf(value: String): JvmObjectGrowthReferenceMatchersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<JvmObjectGrowthReferenceMatchers>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-jvm-object-growth-reference-matchers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jvm-object-growth-reference-matchers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/valueOf</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): JvmObjectGrowthReferenceMatchers</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-jvm-object-growth-reference-matchers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/values</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<JvmObjectGrowthReferenceMatchers></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/Companion</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-companion/#properties","title":"Properties","text":"Name Summary defaults [jvm]val defaults: List<ReferenceMatcher>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-companion/defaults/","title":"Defaults","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/Companion/defaults</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-companion/defaults/#defaults","title":"defaults","text":"<p>[jvm]\\ val defaults: List<ReferenceMatcher></p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/HEAP_TRAVERSAL</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#heap_traversal","title":"HEAP_TRAVERSAL","text":"<p>[jvm]\\ HEAP_TRAVERSAL</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/HEAP_TRAVERSAL/add</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/JVM_LEAK_DETECTION_IGNORED_MATCHERS</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#jvm_leak_detection_ignored_matchers","title":"JVM_LEAK_DETECTION_IGNORED_MATCHERS","text":"<p>[jvm]\\ JVM_LEAK_DETECTION_IGNORED_MATCHERS</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/JVM_LEAK_DETECTION_IGNORED_MATCHERS/add</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/PARALLEL_LOCK_MAP</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/#parallel_lock_map","title":"PARALLEL_LOCK_MAP","text":"<p>[jvm]\\ PARALLEL_LOCK_MAP</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/PARALLEL_LOCK_MAP/add</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jvm-test-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmTestHeapDumper</p>"},{"location":"api/shark/-jvm-test-heap-dumper/#jvmtestheapdumper","title":"JvmTestHeapDumper","text":"<p>[jvm]\\ object JvmTestHeapDumper</p>"},{"location":"api/shark/-jvm-test-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [jvm]fun dumpHeap(fileName: String)"},{"location":"api/shark/-jvm-test-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/shark/JvmTestHeapDumper/dumpHeap</p>"},{"location":"api/shark/-jvm-test-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ fun dumpHeap(fileName: String)</p>"},{"location":"api/shark/-keyed-weak-reference-finder/","title":"Index","text":"<p>//leakcanary-repo/shark/KeyedWeakReferenceFinder</p>"},{"location":"api/shark/-keyed-weak-reference-finder/#keyedweakreferencefinder","title":"KeyedWeakReferenceFinder","text":"<p>[jvm]\\ object KeyedWeakReferenceFinder : LeakingObjectFinder</p> <p>Finds all objects tracked by a KeyedWeakReference, ie all objects that were passed to ObjectWatcher.watch.</p>"},{"location":"api/shark/-keyed-weak-reference-finder/#functions","title":"Functions","text":"Name Summary findLeakingObjectIds [jvm]open override fun findLeakingObjectIds(graph: HeapGraph): Set<Long>For a given heap graph, returns a set of object ids for the objects that are leaking. heapDumpUptimeMillis [jvm]fun heapDumpUptimeMillis(graph: HeapGraph): Long?"},{"location":"api/shark/-keyed-weak-reference-finder/find-leaking-object-ids/","title":"Find leaking object ids","text":"<p>//leakcanary-repo/shark/KeyedWeakReferenceFinder/findLeakingObjectIds</p>"},{"location":"api/shark/-keyed-weak-reference-finder/find-leaking-object-ids/#findleakingobjectids","title":"findLeakingObjectIds","text":"<p>[jvm]\\ open override fun findLeakingObjectIds(graph: HeapGraph): Set<Long></p> <p>For a given heap graph, returns a set of object ids for the objects that are leaking.</p>"},{"location":"api/shark/-keyed-weak-reference-finder/heap-dump-uptime-millis/","title":"Heap dump uptime millis","text":"<p>//leakcanary-repo/shark/KeyedWeakReferenceFinder/heapDumpUptimeMillis</p>"},{"location":"api/shark/-keyed-weak-reference-finder/heap-dump-uptime-millis/#heapdumpuptimemillis","title":"heapDumpUptimeMillis","text":"<p>[jvm]\\ fun heapDumpUptimeMillis(graph: HeapGraph): Long?</p>"},{"location":"api/shark/-leak/","title":"Index","text":"<p>//leakcanary-repo/shark/Leak</p>"},{"location":"api/shark/-leak/#leak","title":"Leak","text":"<p>sealed class Leak : Serializable</p> <p>A leak found by HeapAnalyzer, either an ApplicationLeak or a LibraryLeak.</p>"},{"location":"api/shark/-leak/#inheritors","title":"Inheritors","text":"LibraryLeak ApplicationLeak"},{"location":"api/shark/-leak/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-leak/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-leak/#properties","title":"Properties","text":"Name Summary leakTraces [jvm]abstract val leakTraces: List<LeakTrace>Group of leak traces which share the same leak signature. shortDescription [jvm]abstract val shortDescription: String signature [jvm]abstract val signature: StringA unique SHA1 hash that represents this group of leak traces. totalRetainedHeapByteSize [jvm]val totalRetainedHeapByteSize: Int?Sum of LeakTrace.retainedHeapByteSize for all elements in leakTraces. Null if the retained heap size was not computed. totalRetainedObjectCount [jvm]val totalRetainedObjectCount: Int?Sum of LeakTrace.retainedObjectCount for all elements in leakTraces. Null if the retained heap size was not computed."},{"location":"api/shark/-leak/leak-traces/","title":"Leak traces","text":"<p>//leakcanary-repo/shark/Leak/leakTraces</p>"},{"location":"api/shark/-leak/leak-traces/#leaktraces","title":"leakTraces","text":"<p>[jvm]\\ abstract val leakTraces: List<LeakTrace></p> <p>Group of leak traces which share the same leak signature.</p>"},{"location":"api/shark/-leak/short-description/","title":"Short description","text":"<p>//leakcanary-repo/shark/Leak/shortDescription</p>"},{"location":"api/shark/-leak/short-description/#shortdescription","title":"shortDescription","text":"<p>[jvm]\\ abstract val shortDescription: String</p>"},{"location":"api/shark/-leak/signature/","title":"Signature","text":"<p>//leakcanary-repo/shark/Leak/signature</p>"},{"location":"api/shark/-leak/signature/#signature","title":"signature","text":"<p>[jvm]\\ abstract val signature: String</p> <p>A unique SHA1 hash that represents this group of leak traces.</p> <p>For ApplicationLeak this is based on LeakTrace.signature and for LibraryLeak this is based on LibraryLeak.pattern.</p>"},{"location":"api/shark/-leak/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/Leak/toString</p>"},{"location":"api/shark/-leak/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-leak/total-retained-heap-byte-size/","title":"Total retained heap byte size","text":"<p>//leakcanary-repo/shark/Leak/totalRetainedHeapByteSize</p>"},{"location":"api/shark/-leak/total-retained-heap-byte-size/#totalretainedheapbytesize","title":"totalRetainedHeapByteSize","text":"<p>[jvm]\\ val totalRetainedHeapByteSize: Int?</p> <p>Sum of LeakTrace.retainedHeapByteSize for all elements in leakTraces. Null if the retained heap size was not computed.</p>"},{"location":"api/shark/-leak/total-retained-object-count/","title":"Total retained object count","text":"<p>//leakcanary-repo/shark/Leak/totalRetainedObjectCount</p>"},{"location":"api/shark/-leak/total-retained-object-count/#totalretainedobjectcount","title":"totalRetainedObjectCount","text":"<p>[jvm]\\ val totalRetainedObjectCount: Int?</p> <p>Sum of LeakTrace.retainedObjectCount for all elements in leakTraces. Null if the retained heap size was not computed.</p>"},{"location":"api/shark/-leak/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/Leak/Companion</p>"},{"location":"api/shark/-leak/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-leak-trace/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace</p>"},{"location":"api/shark/-leak-trace/#leaktrace","title":"LeakTrace","text":"<p>[jvm]\\ data class LeakTrace(val gcRootType: LeakTrace.GcRootType, val referencePath: List<LeakTraceReference>, val leakingObject: LeakTraceObject) : Serializable</p> <p>The best strong reference path from a GC root to the leaking object. \"Best\" here means the shortest prioritized path. A large number of distinct paths can generally be found leading to a leaking object. Shark prioritizes paths that don\u2019t go through known LibraryLeakReferenceMatcher (because those are known to create leaks so it\u2019s more interesting to find other paths causing leaks), then it prioritize paths that don\u2019t go through java local gc roots (because those are harder to reason about). Taking those priorities into account, finding the shortest path means there are less LeakTraceReference that can be suspected to cause the leak.</p>"},{"location":"api/shark/-leak-trace/#constructors","title":"Constructors","text":"LeakTrace [jvm]constructor(gcRootType: LeakTrace.GcRootType, referencePath: List<LeakTraceReference>, leakingObject: LeakTraceObject)"},{"location":"api/shark/-leak-trace/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion GcRootType [jvm]enum GcRootType : Enum<LeakTrace.GcRootType>"},{"location":"api/shark/-leak-trace/#functions","title":"Functions","text":"Name Summary referencePathElementIsSuspect [jvm]fun referencePathElementIsSuspect(index: Int): BooleanReturns true if the referencePath element at the provided index contains a reference that is suspected to cause the leak, ie if index is greater than or equal to the index of the LeakTraceReference of the last non leaking object and strictly lower than the index of the LeakTraceReference of the first leaking object. toSimplePathString [jvm]fun toSimplePathString(): String toString [jvm]open override fun toString(): String"},{"location":"api/shark/-leak-trace/#properties","title":"Properties","text":"Name Summary gcRootType [jvm]val gcRootType: LeakTrace.GcRootTypeThe Garbage Collection root that references the LeakTraceReference.originObject in the first LeakTraceReference of referencePath. leakingObject [jvm]val leakingObject: LeakTraceObject referencePath [jvm]val referencePath: List<LeakTraceReference> retainedHeapByteSize [jvm]val retainedHeapByteSize: Int?The minimum number of bytes which would be freed if the leak was fixed. Null if the retained heap size was not computed. retainedObjectCount [jvm]val retainedObjectCount: Int?The minimum number of objects which would be unreachable if the leak was fixed. Null if the retained heap size was not computed. signature [jvm]val signature: StringA SHA1 hash that represents this leak trace. This can be useful to group together similar leak traces. suspectReferenceSubpath [jvm]val suspectReferenceSubpath: Sequence<LeakTraceReference>A part of referencePath that contains the references suspected to cause the leak. Starts at the last non leaking object and ends before the first leaking object."},{"location":"api/shark/-leak-trace/-leak-trace/","title":"leak trace","text":"<p>//leakcanary-repo/shark/LeakTrace/LeakTrace</p>"},{"location":"api/shark/-leak-trace/-leak-trace/#leaktrace","title":"LeakTrace","text":"<p>[jvm]\\ constructor(gcRootType: LeakTrace.GcRootType, referencePath: List<LeakTraceReference>, leakingObject: LeakTraceObject)</p>"},{"location":"api/shark/-leak-trace/gc-root-type/","title":"Gc root type","text":"<p>//leakcanary-repo/shark/LeakTrace/gcRootType</p>"},{"location":"api/shark/-leak-trace/gc-root-type/#gcroottype","title":"gcRootType","text":"<p>[jvm]\\ val gcRootType: LeakTrace.GcRootType</p> <p>The Garbage Collection root that references the LeakTraceReference.originObject in the first LeakTraceReference of referencePath.</p>"},{"location":"api/shark/-leak-trace/leaking-object/","title":"Leaking object","text":"<p>//leakcanary-repo/shark/LeakTrace/leakingObject</p>"},{"location":"api/shark/-leak-trace/leaking-object/#leakingobject","title":"leakingObject","text":"<p>[jvm]\\ val leakingObject: LeakTraceObject</p>"},{"location":"api/shark/-leak-trace/reference-path-element-is-suspect/","title":"Reference path element is suspect","text":"<p>//leakcanary-repo/shark/LeakTrace/referencePathElementIsSuspect</p>"},{"location":"api/shark/-leak-trace/reference-path-element-is-suspect/#referencepathelementissuspect","title":"referencePathElementIsSuspect","text":"<p>[jvm]\\ fun referencePathElementIsSuspect(index: Int): Boolean</p> <p>Returns true if the referencePath element at the provided index contains a reference that is suspected to cause the leak, ie if index is greater than or equal to the index of the LeakTraceReference of the last non leaking object and strictly lower than the index of the LeakTraceReference of the first leaking object.</p>"},{"location":"api/shark/-leak-trace/reference-path/","title":"Reference path","text":"<p>//leakcanary-repo/shark/LeakTrace/referencePath</p>"},{"location":"api/shark/-leak-trace/reference-path/#referencepath","title":"referencePath","text":"<p>[jvm]\\ val referencePath: List<LeakTraceReference></p>"},{"location":"api/shark/-leak-trace/retained-heap-byte-size/","title":"Retained heap byte size","text":"<p>//leakcanary-repo/shark/LeakTrace/retainedHeapByteSize</p>"},{"location":"api/shark/-leak-trace/retained-heap-byte-size/#retainedheapbytesize","title":"retainedHeapByteSize","text":"<p>[jvm]\\ val retainedHeapByteSize: Int?</p> <p>The minimum number of bytes which would be freed if the leak was fixed. Null if the retained heap size was not computed.</p>"},{"location":"api/shark/-leak-trace/retained-object-count/","title":"Retained object count","text":"<p>//leakcanary-repo/shark/LeakTrace/retainedObjectCount</p>"},{"location":"api/shark/-leak-trace/retained-object-count/#retainedobjectcount","title":"retainedObjectCount","text":"<p>[jvm]\\ val retainedObjectCount: Int?</p> <p>The minimum number of objects which would be unreachable if the leak was fixed. Null if the retained heap size was not computed.</p>"},{"location":"api/shark/-leak-trace/signature/","title":"Signature","text":"<p>//leakcanary-repo/shark/LeakTrace/signature</p>"},{"location":"api/shark/-leak-trace/signature/#signature","title":"signature","text":"<p>[jvm]\\ val signature: String</p> <p>A SHA1 hash that represents this leak trace. This can be useful to group together similar leak traces.</p> <p>The signature is a hash of suspectReferenceSubpath.</p>"},{"location":"api/shark/-leak-trace/suspect-reference-subpath/","title":"Suspect reference subpath","text":"<p>//leakcanary-repo/shark/LeakTrace/suspectReferenceSubpath</p>"},{"location":"api/shark/-leak-trace/suspect-reference-subpath/#suspectreferencesubpath","title":"suspectReferenceSubpath","text":"<p>[jvm]\\ val suspectReferenceSubpath: Sequence<LeakTraceReference></p> <p>A part of referencePath that contains the references suspected to cause the leak. Starts at the last non leaking object and ends before the first leaking object.</p>"},{"location":"api/shark/-leak-trace/to-simple-path-string/","title":"To simple path string","text":"<p>//leakcanary-repo/shark/LeakTrace/toSimplePathString</p>"},{"location":"api/shark/-leak-trace/to-simple-path-string/#tosimplepathstring","title":"toSimplePathString","text":"<p>[jvm]\\ fun toSimplePathString(): String</p>"},{"location":"api/shark/-leak-trace/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/LeakTrace/toString</p>"},{"location":"api/shark/-leak-trace/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-leak-trace/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/Companion</p>"},{"location":"api/shark/-leak-trace/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/#gcroottype","title":"GcRootType","text":"<p>[jvm]\\ enum GcRootType : Enum<LeakTrace.GcRootType></p>"},{"location":"api/shark/-leak-trace/-gc-root-type/#entries","title":"Entries","text":"JNI_GLOBAL [jvm]JNI_GLOBAL JNI_LOCAL [jvm]JNI_LOCAL JAVA_FRAME [jvm]JAVA_FRAME NATIVE_STACK [jvm]NATIVE_STACK STICKY_CLASS [jvm]STICKY_CLASS THREAD_BLOCK [jvm]THREAD_BLOCK MONITOR_USED [jvm]MONITOR_USED THREAD_OBJECT [jvm]THREAD_OBJECT JNI_MONITOR [jvm]JNI_MONITOR"},{"location":"api/shark/-leak-trace/-gc-root-type/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-leak-trace/-gc-root-type/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): LeakTrace.GcRootTypeReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<LeakTrace.GcRootType>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-leak-trace/-gc-root-type/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/description/","title":"Description","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/description</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/description/#description","title":"description","text":"<p>[jvm]\\ val description: String</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/valueOf</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): LeakTrace.GcRootType</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-leak-trace/-gc-root-type/values/","title":"Values","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/values</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<LeakTrace.GcRootType></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/Companion</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-companion/#functions","title":"Functions","text":"Name Summary fromGcRoot [jvm]fun fromGcRoot(gcRoot: GcRoot): LeakTrace.GcRootType"},{"location":"api/shark/-leak-trace/-gc-root-type/-companion/from-gc-root/","title":"From gc root","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/Companion/fromGcRoot</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-companion/from-gc-root/#fromgcroot","title":"fromGcRoot","text":"<p>[jvm]\\ fun fromGcRoot(gcRoot: GcRoot): LeakTrace.GcRootType</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-a-v-a_-f-r-a-m-e/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/JAVA_FRAME</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-a-v-a_-f-r-a-m-e/#java_frame","title":"JAVA_FRAME","text":"<p>[jvm]\\ JAVA_FRAME</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-a-v-a_-f-r-a-m-e/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-g-l-o-b-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/JNI_GLOBAL</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-g-l-o-b-a-l/#jni_global","title":"JNI_GLOBAL","text":"<p>[jvm]\\ JNI_GLOBAL</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-g-l-o-b-a-l/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-l-o-c-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/JNI_LOCAL</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-l-o-c-a-l/#jni_local","title":"JNI_LOCAL","text":"<p>[jvm]\\ JNI_LOCAL</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-l-o-c-a-l/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-m-o-n-i-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/JNI_MONITOR</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-m-o-n-i-t-o-r/#jni_monitor","title":"JNI_MONITOR","text":"<p>[jvm]\\ JNI_MONITOR</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-m-o-n-i-t-o-r/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-m-o-n-i-t-o-r_-u-s-e-d/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/MONITOR_USED</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-m-o-n-i-t-o-r_-u-s-e-d/#monitor_used","title":"MONITOR_USED","text":"<p>[jvm]\\ MONITOR_USED</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-m-o-n-i-t-o-r_-u-s-e-d/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-n-a-t-i-v-e_-s-t-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/NATIVE_STACK</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-n-a-t-i-v-e_-s-t-a-c-k/#native_stack","title":"NATIVE_STACK","text":"<p>[jvm]\\ NATIVE_STACK</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-n-a-t-i-v-e_-s-t-a-c-k/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-s-t-i-c-k-y_-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/STICKY_CLASS</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-s-t-i-c-k-y_-c-l-a-s-s/#sticky_class","title":"STICKY_CLASS","text":"<p>[jvm]\\ STICKY_CLASS</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-s-t-i-c-k-y_-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-b-l-o-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/THREAD_BLOCK</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-b-l-o-c-k/#thread_block","title":"THREAD_BLOCK","text":"<p>[jvm]\\ THREAD_BLOCK</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-b-l-o-c-k/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-o-b-j-e-c-t/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/THREAD_OBJECT</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-o-b-j-e-c-t/#thread_object","title":"THREAD_OBJECT","text":"<p>[jvm]\\ THREAD_OBJECT</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-o-b-j-e-c-t/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject</p>"},{"location":"api/shark/-leak-trace-object/#leaktraceobject","title":"LeakTraceObject","text":"<p>[jvm]\\ data class LeakTraceObject(val type: LeakTraceObject.ObjectType, val className: String, val labels: Set<String>, val leakingStatus: LeakTraceObject.LeakingStatus, val leakingStatusReason: String, val retainedHeapByteSize: Int?, val retainedObjectCount: Int?) : Serializable</p>"},{"location":"api/shark/-leak-trace-object/#constructors","title":"Constructors","text":"LeakTraceObject [jvm]constructor(type: LeakTraceObject.ObjectType, className: String, labels: Set<String>, leakingStatus: LeakTraceObject.LeakingStatus, leakingStatusReason: String, retainedHeapByteSize: Int?, retainedObjectCount: Int?)"},{"location":"api/shark/-leak-trace-object/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion LeakingStatus [jvm]enum LeakingStatus : Enum<LeakTraceObject.LeakingStatus> ObjectType [jvm]enum ObjectType : Enum<LeakTraceObject.ObjectType>"},{"location":"api/shark/-leak-trace-object/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-leak-trace-object/#properties","title":"Properties","text":"Name Summary className [jvm]val className: StringClass name of the object. The class name format is the same as what would be returned by Class.getName. classSimpleName [jvm]val classSimpleName: StringReturns {@link #className} without the package, ie stripped of any string content before the last period (included). labels [jvm]val labels: Set<String>Labels that were computed during analysis. A label provides extra information that helps understand the state of the leak trace object. leakingStatus [jvm]val leakingStatus: LeakTraceObject.LeakingStatus leakingStatusReason [jvm]val leakingStatusReason: String retainedHeapByteSize [jvm]val retainedHeapByteSize: Int?The minimum number of bytes which would be freed if all references to this object were released. Not null only if the retained heap size was computed AND leakingStatus is equal to LeakingStatus.UNKNOWN or LeakingStatus.LEAKING. retainedObjectCount [jvm]val retainedObjectCount: Int?The minimum number of objects which would be unreachable if all references to this object were released. Not null only if the retained heap size was computed AND leakingStatus is equal to LeakingStatus.UNKNOWN or LeakingStatus.LEAKING. type [jvm]val type: LeakTraceObject.ObjectType typeName [jvm]val typeName: String"},{"location":"api/shark/-leak-trace-object/-leak-trace-object/","title":"leak trace object","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakTraceObject</p>"},{"location":"api/shark/-leak-trace-object/-leak-trace-object/#leaktraceobject","title":"LeakTraceObject","text":"<p>[jvm]\\ constructor(type: LeakTraceObject.ObjectType, className: String, labels: Set<String>, leakingStatus: LeakTraceObject.LeakingStatus, leakingStatusReason: String, retainedHeapByteSize: Int?, retainedObjectCount: Int?)</p>"},{"location":"api/shark/-leak-trace-object/class-name/","title":"Class name","text":"<p>//leakcanary-repo/shark/LeakTraceObject/className</p>"},{"location":"api/shark/-leak-trace-object/class-name/#classname","title":"className","text":"<p>[jvm]\\ val className: String</p> <p>Class name of the object. The class name format is the same as what would be returned by Class.getName.</p>"},{"location":"api/shark/-leak-trace-object/class-simple-name/","title":"Class simple name","text":"<p>//leakcanary-repo/shark/LeakTraceObject/classSimpleName</p>"},{"location":"api/shark/-leak-trace-object/class-simple-name/#classsimplename","title":"classSimpleName","text":"<p>[jvm]\\ val classSimpleName: String</p> <p>Returns {@link #className} without the package, ie stripped of any string content before the last period (included).</p>"},{"location":"api/shark/-leak-trace-object/labels/","title":"Labels","text":"<p>//leakcanary-repo/shark/LeakTraceObject/labels</p>"},{"location":"api/shark/-leak-trace-object/labels/#labels","title":"labels","text":"<p>[jvm]\\ val labels: Set<String></p> <p>Labels that were computed during analysis. A label provides extra information that helps understand the state of the leak trace object.</p>"},{"location":"api/shark/-leak-trace-object/leaking-status-reason/","title":"Leaking status reason","text":"<p>//leakcanary-repo/shark/LeakTraceObject/leakingStatusReason</p>"},{"location":"api/shark/-leak-trace-object/leaking-status-reason/#leakingstatusreason","title":"leakingStatusReason","text":"<p>[jvm]\\ val leakingStatusReason: String</p>"},{"location":"api/shark/-leak-trace-object/leaking-status/","title":"Leaking status","text":"<p>//leakcanary-repo/shark/LeakTraceObject/leakingStatus</p>"},{"location":"api/shark/-leak-trace-object/leaking-status/#leakingstatus","title":"leakingStatus","text":"<p>[jvm]\\ val leakingStatus: LeakTraceObject.LeakingStatus</p>"},{"location":"api/shark/-leak-trace-object/retained-heap-byte-size/","title":"Retained heap byte size","text":"<p>//leakcanary-repo/shark/LeakTraceObject/retainedHeapByteSize</p>"},{"location":"api/shark/-leak-trace-object/retained-heap-byte-size/#retainedheapbytesize","title":"retainedHeapByteSize","text":"<p>[jvm]\\ val retainedHeapByteSize: Int?</p> <p>The minimum number of bytes which would be freed if all references to this object were released. Not null only if the retained heap size was computed AND leakingStatus is equal to LeakingStatus.UNKNOWN or LeakingStatus.LEAKING.</p>"},{"location":"api/shark/-leak-trace-object/retained-object-count/","title":"Retained object count","text":"<p>//leakcanary-repo/shark/LeakTraceObject/retainedObjectCount</p>"},{"location":"api/shark/-leak-trace-object/retained-object-count/#retainedobjectcount","title":"retainedObjectCount","text":"<p>[jvm]\\ val retainedObjectCount: Int?</p> <p>The minimum number of objects which would be unreachable if all references to this object were released. Not null only if the retained heap size was computed AND leakingStatus is equal to LeakingStatus.UNKNOWN or LeakingStatus.LEAKING.</p>"},{"location":"api/shark/-leak-trace-object/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/LeakTraceObject/toString</p>"},{"location":"api/shark/-leak-trace-object/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-leak-trace-object/type-name/","title":"Type name","text":"<p>//leakcanary-repo/shark/LeakTraceObject/typeName</p>"},{"location":"api/shark/-leak-trace-object/type-name/#typename","title":"typeName","text":"<p>[jvm]\\ val typeName: String</p>"},{"location":"api/shark/-leak-trace-object/type/","title":"Type","text":"<p>//leakcanary-repo/shark/LeakTraceObject/type</p>"},{"location":"api/shark/-leak-trace-object/type/#type","title":"type","text":"<p>[jvm]\\ val type: LeakTraceObject.ObjectType</p>"},{"location":"api/shark/-leak-trace-object/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/Companion</p>"},{"location":"api/shark/-leak-trace-object/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/#leakingstatus","title":"LeakingStatus","text":"<p>[jvm]\\ enum LeakingStatus : Enum<LeakTraceObject.LeakingStatus></p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/#entries","title":"Entries","text":"NOT_LEAKING [jvm]NOT_LEAKINGThe object was needed and therefore expected to be reachable. LEAKING [jvm]LEAKINGThe object was no longer needed and therefore expected to be unreachable. UNKNOWN [jvm]UNKNOWNNo decision can be made about the provided object."},{"location":"api/shark/-leak-trace-object/-leaking-status/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): LeakTraceObject.LeakingStatusReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<LeakTraceObject.LeakingStatus>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-leak-trace-object/-leaking-status/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-leaking-status/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus/valueOf</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): LeakTraceObject.LeakingStatus</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-leak-trace-object/-leaking-status/values/","title":"Values","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus/values</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<LeakTraceObject.LeakingStatus></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-l-e-a-k-i-n-g/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus/LEAKING</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-l-e-a-k-i-n-g/#leaking","title":"LEAKING","text":"<p>[jvm]\\ LEAKING</p> <p>The object was no longer needed and therefore expected to be unreachable.</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-l-e-a-k-i-n-g/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-leaking-status/-n-o-t_-l-e-a-k-i-n-g/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus/NOT_LEAKING</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-n-o-t_-l-e-a-k-i-n-g/#not_leaking","title":"NOT_LEAKING","text":"<p>[jvm]\\ NOT_LEAKING</p> <p>The object was needed and therefore expected to be reachable.</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-n-o-t_-l-e-a-k-i-n-g/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-leaking-status/-u-n-k-n-o-w-n/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus/UNKNOWN</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-u-n-k-n-o-w-n/#unknown","title":"UNKNOWN","text":"<p>[jvm]\\ UNKNOWN</p> <p>No decision can be made about the provided object.</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-u-n-k-n-o-w-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-object-type/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType</p>"},{"location":"api/shark/-leak-trace-object/-object-type/#objecttype","title":"ObjectType","text":"<p>[jvm]\\ enum ObjectType : Enum<LeakTraceObject.ObjectType></p>"},{"location":"api/shark/-leak-trace-object/-object-type/#entries","title":"Entries","text":"CLASS [jvm]CLASS ARRAY [jvm]ARRAY INSTANCE [jvm]INSTANCE"},{"location":"api/shark/-leak-trace-object/-object-type/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): LeakTraceObject.ObjectTypeReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<LeakTraceObject.ObjectType>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-leak-trace-object/-object-type/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-object-type/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType/valueOf</p>"},{"location":"api/shark/-leak-trace-object/-object-type/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): LeakTraceObject.ObjectType</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-leak-trace-object/-object-type/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-leak-trace-object/-object-type/values/","title":"Values","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType/values</p>"},{"location":"api/shark/-leak-trace-object/-object-type/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<LeakTraceObject.ObjectType></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-a-r-r-a-y/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType/ARRAY</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-a-r-r-a-y/#array","title":"ARRAY","text":"<p>[jvm]\\ ARRAY</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-a-r-r-a-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-object-type/-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType/CLASS</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-c-l-a-s-s/#class","title":"CLASS","text":"<p>[jvm]\\ CLASS</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-object-type/-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType/INSTANCE</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-i-n-s-t-a-n-c-e/#instance","title":"INSTANCE","text":"<p>[jvm]\\ INSTANCE</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-reference/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference</p>"},{"location":"api/shark/-leak-trace-reference/#leaktracereference","title":"LeakTraceReference","text":"<p>[jvm]\\ data class LeakTraceReference(val originObject: LeakTraceObject, val referenceType: LeakTraceReference.ReferenceType, val owningClassName: String, val referenceName: String) : Serializable</p> <p>A LeakTraceReference represents an origin LeakTraceObject and either a reference from that object to the LeakTraceObject in the next LeakTraceReference in LeakTrace.referencePath, or to LeakTrace.leakingObject if this is the last LeakTraceReference in LeakTrace.referencePath.</p>"},{"location":"api/shark/-leak-trace-reference/#constructors","title":"Constructors","text":"LeakTraceReference [jvm]constructor(originObject: LeakTraceObject, referenceType: LeakTraceReference.ReferenceType, owningClassName: String, referenceName: String)"},{"location":"api/shark/-leak-trace-reference/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion ReferenceType [jvm]enum ReferenceType : Enum<LeakTraceReference.ReferenceType>"},{"location":"api/shark/-leak-trace-reference/#properties","title":"Properties","text":"Name Summary originObject [jvm]val originObject: LeakTraceObject owningClassName [jvm]val owningClassName: String owningClassSimpleName [jvm]val owningClassSimpleName: StringReturns {@link #className} without the package, ie stripped of any string content before the last period (included). referenceDisplayName [jvm]val referenceDisplayName: String referenceGenericName [jvm]val referenceGenericName: String referenceName [jvm]val referenceName: String referenceType [jvm]val referenceType: LeakTraceReference.ReferenceType"},{"location":"api/shark/-leak-trace-reference/-leak-trace-reference/","title":"leak trace reference","text":"<p>//leakcanary-repo/shark/LeakTraceReference/LeakTraceReference</p>"},{"location":"api/shark/-leak-trace-reference/-leak-trace-reference/#leaktracereference","title":"LeakTraceReference","text":"<p>[jvm]\\ constructor(originObject: LeakTraceObject, referenceType: LeakTraceReference.ReferenceType, owningClassName: String, referenceName: String)</p>"},{"location":"api/shark/-leak-trace-reference/origin-object/","title":"Origin object","text":"<p>//leakcanary-repo/shark/LeakTraceReference/originObject</p>"},{"location":"api/shark/-leak-trace-reference/origin-object/#originobject","title":"originObject","text":"<p>[jvm]\\ val originObject: LeakTraceObject</p>"},{"location":"api/shark/-leak-trace-reference/owning-class-name/","title":"Owning class name","text":"<p>//leakcanary-repo/shark/LeakTraceReference/owningClassName</p>"},{"location":"api/shark/-leak-trace-reference/owning-class-name/#owningclassname","title":"owningClassName","text":"<p>[jvm]\\ val owningClassName: String</p>"},{"location":"api/shark/-leak-trace-reference/owning-class-simple-name/","title":"Owning class simple name","text":"<p>//leakcanary-repo/shark/LeakTraceReference/owningClassSimpleName</p>"},{"location":"api/shark/-leak-trace-reference/owning-class-simple-name/#owningclasssimplename","title":"owningClassSimpleName","text":"<p>[jvm]\\ val owningClassSimpleName: String</p> <p>Returns {@link #className} without the package, ie stripped of any string content before the last period (included).</p>"},{"location":"api/shark/-leak-trace-reference/reference-display-name/","title":"Reference display name","text":"<p>//leakcanary-repo/shark/LeakTraceReference/referenceDisplayName</p>"},{"location":"api/shark/-leak-trace-reference/reference-display-name/#referencedisplayname","title":"referenceDisplayName","text":"<p>[jvm]\\ val referenceDisplayName: String</p>"},{"location":"api/shark/-leak-trace-reference/reference-generic-name/","title":"Reference generic name","text":"<p>//leakcanary-repo/shark/LeakTraceReference/referenceGenericName</p>"},{"location":"api/shark/-leak-trace-reference/reference-generic-name/#referencegenericname","title":"referenceGenericName","text":"<p>[jvm]\\ val referenceGenericName: String</p>"},{"location":"api/shark/-leak-trace-reference/reference-name/","title":"Reference name","text":"<p>//leakcanary-repo/shark/LeakTraceReference/referenceName</p>"},{"location":"api/shark/-leak-trace-reference/reference-name/#referencename","title":"referenceName","text":"<p>[jvm]\\ val referenceName: String</p>"},{"location":"api/shark/-leak-trace-reference/reference-type/","title":"Reference type","text":"<p>//leakcanary-repo/shark/LeakTraceReference/referenceType</p>"},{"location":"api/shark/-leak-trace-reference/reference-type/#referencetype","title":"referenceType","text":"<p>[jvm]\\ val referenceType: LeakTraceReference.ReferenceType</p>"},{"location":"api/shark/-leak-trace-reference/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/Companion</p>"},{"location":"api/shark/-leak-trace-reference/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/#referencetype","title":"ReferenceType","text":"<p>[jvm]\\ enum ReferenceType : Enum<LeakTraceReference.ReferenceType></p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/#entries","title":"Entries","text":"INSTANCE_FIELD [jvm]INSTANCE_FIELD STATIC_FIELD [jvm]STATIC_FIELD LOCAL [jvm]LOCAL ARRAY_ENTRY [jvm]ARRAY_ENTRY"},{"location":"api/shark/-leak-trace-reference/-reference-type/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): LeakTraceReference.ReferenceTypeReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<LeakTraceReference.ReferenceType>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-leak-trace-reference/-reference-type/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-reference/-reference-type/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/valueOf</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): LeakTraceReference.ReferenceType</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-leak-trace-reference/-reference-type/values/","title":"Values","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/values</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<LeakTraceReference.ReferenceType></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-a-r-r-a-y_-e-n-t-r-y/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/ARRAY_ENTRY</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-a-r-r-a-y_-e-n-t-r-y/#array_entry","title":"ARRAY_ENTRY","text":"<p>[jvm]\\ ARRAY_ENTRY</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-a-r-r-a-y_-e-n-t-r-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-reference/-reference-type/-i-n-s-t-a-n-c-e_-f-i-e-l-d/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/INSTANCE_FIELD</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-i-n-s-t-a-n-c-e_-f-i-e-l-d/#instance_field","title":"INSTANCE_FIELD","text":"<p>[jvm]\\ INSTANCE_FIELD</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-i-n-s-t-a-n-c-e_-f-i-e-l-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-reference/-reference-type/-l-o-c-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/LOCAL</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-l-o-c-a-l/#local","title":"LOCAL","text":"<p>[jvm]\\ LOCAL</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-l-o-c-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-reference/-reference-type/-s-t-a-t-i-c_-f-i-e-l-d/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/STATIC_FIELD</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-s-t-a-t-i-c_-f-i-e-l-d/#static_field","title":"STATIC_FIELD","text":"<p>[jvm]\\ STATIC_FIELD</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-s-t-a-t-i-c_-f-i-e-l-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-tracer/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTracer</p>"},{"location":"api/shark/-leak-tracer/#leaktracer","title":"LeakTracer","text":"<p>[jvm]\\ fun interface LeakTracer</p>"},{"location":"api/shark/-leak-tracer/#types","title":"Types","text":"Name Summary Factory [jvm]fun interface Factory"},{"location":"api/shark/-leak-tracer/#functions","title":"Functions","text":"Name Summary traceObjects [jvm]abstract fun traceObjects(objectIds: Set<Long>): LeaksAndUnreachableObjects"},{"location":"api/shark/-leak-tracer/trace-objects/","title":"Trace objects","text":"<p>//leakcanary-repo/shark/LeakTracer/traceObjects</p>"},{"location":"api/shark/-leak-tracer/trace-objects/#traceobjects","title":"traceObjects","text":"<p>[jvm]\\ abstract fun traceObjects(objectIds: Set<Long>): LeaksAndUnreachableObjects</p>"},{"location":"api/shark/-leak-tracer/-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTracer/Factory</p>"},{"location":"api/shark/-leak-tracer/-factory/#factory","title":"Factory","text":"<p>fun interface Factory</p>"},{"location":"api/shark/-leak-tracer/-factory/#inheritors","title":"Inheritors","text":"RealLeakTracerFactory"},{"location":"api/shark/-leak-tracer/-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]abstract fun createFor(heapGraph: HeapGraph): LeakTracer"},{"location":"api/shark/-leak-tracer/-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/LeakTracer/Factory/createFor</p>"},{"location":"api/shark/-leak-tracer/-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ abstract fun createFor(heapGraph: HeapGraph): LeakTracer</p>"},{"location":"api/shark/-leaking-object-finder/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakingObjectFinder</p>"},{"location":"api/shark/-leaking-object-finder/#leakingobjectfinder","title":"LeakingObjectFinder","text":"<p>fun interface LeakingObjectFinder</p> <p>Finds the objects that are leaking, for which Shark will compute leak traces.</p>"},{"location":"api/shark/-leaking-object-finder/#inheritors","title":"Inheritors","text":"FilteringLeakingObjectFinder KeyedWeakReferenceFinder"},{"location":"api/shark/-leaking-object-finder/#functions","title":"Functions","text":"Name Summary findLeakingObjectIds [jvm]abstract fun findLeakingObjectIds(graph: HeapGraph): Set<Long>For a given heap graph, returns a set of object ids for the objects that are leaking."},{"location":"api/shark/-leaking-object-finder/find-leaking-object-ids/","title":"Find leaking object ids","text":"<p>//leakcanary-repo/shark/LeakingObjectFinder/findLeakingObjectIds</p>"},{"location":"api/shark/-leaking-object-finder/find-leaking-object-ids/#findleakingobjectids","title":"findLeakingObjectIds","text":"<p>[jvm]\\ abstract fun findLeakingObjectIds(graph: HeapGraph): Set<Long></p> <p>For a given heap graph, returns a set of object ids for the objects that are leaking.</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/","title":"Index","text":"<p>//leakcanary-repo/shark/LeaksAndUnreachableObjects</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/#leaksandunreachableobjects","title":"LeaksAndUnreachableObjects","text":"<p>[jvm]\\ data class LeaksAndUnreachableObjects(val applicationLeaks: List<ApplicationLeak>, val libraryLeaks: List<LibraryLeak>, val unreachableObjects: List<LeakTraceObject>)</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/#constructors","title":"Constructors","text":"LeaksAndUnreachableObjects [jvm]constructor(applicationLeaks: List<ApplicationLeak>, libraryLeaks: List<LibraryLeak>, unreachableObjects: List<LeakTraceObject>)"},{"location":"api/shark/-leaks-and-unreachable-objects/#properties","title":"Properties","text":"Name Summary applicationLeaks [jvm]val applicationLeaks: List<ApplicationLeak> libraryLeaks [jvm]val libraryLeaks: List<LibraryLeak> unreachableObjects [jvm]val unreachableObjects: List<LeakTraceObject>"},{"location":"api/shark/-leaks-and-unreachable-objects/-leaks-and-unreachable-objects/","title":"leaks and unreachable objects","text":"<p>//leakcanary-repo/shark/LeaksAndUnreachableObjects/LeaksAndUnreachableObjects</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/-leaks-and-unreachable-objects/#leaksandunreachableobjects","title":"LeaksAndUnreachableObjects","text":"<p>[jvm]\\ constructor(applicationLeaks: List<ApplicationLeak>, libraryLeaks: List<LibraryLeak>, unreachableObjects: List<LeakTraceObject>)</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/application-leaks/","title":"Application leaks","text":"<p>//leakcanary-repo/shark/LeaksAndUnreachableObjects/applicationLeaks</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/application-leaks/#applicationleaks","title":"applicationLeaks","text":"<p>[jvm]\\ val applicationLeaks: List<ApplicationLeak></p>"},{"location":"api/shark/-leaks-and-unreachable-objects/library-leaks/","title":"Library leaks","text":"<p>//leakcanary-repo/shark/LeaksAndUnreachableObjects/libraryLeaks</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/library-leaks/#libraryleaks","title":"libraryLeaks","text":"<p>[jvm]\\ val libraryLeaks: List<LibraryLeak></p>"},{"location":"api/shark/-leaks-and-unreachable-objects/unreachable-objects/","title":"Unreachable objects","text":"<p>//leakcanary-repo/shark/LeaksAndUnreachableObjects/unreachableObjects</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/unreachable-objects/#unreachableobjects","title":"unreachableObjects","text":"<p>[jvm]\\ val unreachableObjects: List<LeakTraceObject></p>"},{"location":"api/shark/-library-leak/","title":"Index","text":"<p>//leakcanary-repo/shark/LibraryLeak</p>"},{"location":"api/shark/-library-leak/#libraryleak","title":"LibraryLeak","text":"<p>[jvm]\\ data class LibraryLeak(val leakTraces: List<LeakTrace>, val pattern: ReferencePattern, val description: String) : Leak</p> <p>A leak found by HeapAnalyzer, where the only path to the leaking object required going through a reference matched by pattern, as provided to a LibraryLeakReferenceMatcher instance. This is a known leak in library code that is beyond your control.</p>"},{"location":"api/shark/-library-leak/#constructors","title":"Constructors","text":"LibraryLeak [jvm]constructor(leakTraces: List<LeakTrace>, pattern: ReferencePattern, description: String)"},{"location":"api/shark/-library-leak/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-library-leak/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-library-leak/#properties","title":"Properties","text":"Name Summary description [jvm]val description: StringA description that conveys what we know about this library leak. leakTraces [jvm]open override val leakTraces: List<LeakTrace>Group of leak traces which share the same leak signature. pattern [jvm]val pattern: ReferencePatternThe pattern that matched one of the references in each of leakTraces, as provided to a LibraryLeakReferenceMatcher instance. shortDescription [jvm]open override val shortDescription: String signature [jvm]open override val signature: StringA unique SHA1 hash that represents this group of leak traces. totalRetainedHeapByteSize [jvm]val totalRetainedHeapByteSize: Int?Sum of LeakTrace.retainedHeapByteSize for all elements in leakTraces. Null if the retained heap size was not computed. totalRetainedObjectCount [jvm]val totalRetainedObjectCount: Int?Sum of LeakTrace.retainedObjectCount for all elements in leakTraces. Null if the retained heap size was not computed."},{"location":"api/shark/-library-leak/-library-leak/","title":"library leak","text":"<p>//leakcanary-repo/shark/LibraryLeak/LibraryLeak</p>"},{"location":"api/shark/-library-leak/-library-leak/#libraryleak","title":"LibraryLeak","text":"<p>[jvm]\\ constructor(leakTraces: List<LeakTrace>, pattern: ReferencePattern, description: String)</p>"},{"location":"api/shark/-library-leak/description/","title":"Description","text":"<p>//leakcanary-repo/shark/LibraryLeak/description</p>"},{"location":"api/shark/-library-leak/description/#description","title":"description","text":"<p>[jvm]\\ val description: String</p> <p>A description that conveys what we know about this library leak.</p>"},{"location":"api/shark/-library-leak/leak-traces/","title":"Leak traces","text":"<p>//leakcanary-repo/shark/LibraryLeak/leakTraces</p>"},{"location":"api/shark/-library-leak/leak-traces/#leaktraces","title":"leakTraces","text":"<p>[jvm]\\ open override val leakTraces: List<LeakTrace></p> <p>Group of leak traces which share the same leak signature.</p>"},{"location":"api/shark/-library-leak/pattern/","title":"Pattern","text":"<p>//leakcanary-repo/shark/LibraryLeak/pattern</p>"},{"location":"api/shark/-library-leak/pattern/#pattern","title":"pattern","text":"<p>[jvm]\\ val pattern: ReferencePattern</p> <p>The pattern that matched one of the references in each of leakTraces, as provided to a LibraryLeakReferenceMatcher instance.</p>"},{"location":"api/shark/-library-leak/short-description/","title":"Short description","text":"<p>//leakcanary-repo/shark/LibraryLeak/shortDescription</p>"},{"location":"api/shark/-library-leak/short-description/#shortdescription","title":"shortDescription","text":"<p>[jvm]\\ open override val shortDescription: String</p>"},{"location":"api/shark/-library-leak/signature/","title":"Signature","text":"<p>//leakcanary-repo/shark/LibraryLeak/signature</p>"},{"location":"api/shark/-library-leak/signature/#signature","title":"signature","text":"<p>[jvm]\\ open override val signature: String</p> <p>A unique SHA1 hash that represents this group of leak traces.</p> <p>For ApplicationLeak this is based on LeakTrace.signature and for LibraryLeak this is based on LibraryLeak.pattern.</p>"},{"location":"api/shark/-library-leak/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/LibraryLeak/toString</p>"},{"location":"api/shark/-library-leak/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-library-leak/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/LibraryLeak/Companion</p>"},{"location":"api/shark/-library-leak/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-library-leak-reference-matcher/","title":"Index","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher</p>"},{"location":"api/shark/-library-leak-reference-matcher/#libraryleakreferencematcher","title":"LibraryLeakReferenceMatcher","text":"<p>[jvm]\\ data class LibraryLeakReferenceMatcher(val pattern: ReferencePattern, val description: String = \"\", val patternApplies: (HeapGraph) -> Boolean = ALWAYS) : ReferenceMatcher</p> <p>LibraryLeakReferenceMatcher should be used to match references in library code that are known to create leaks and are beyond your control. The shortest path finder will only go through matching references after it has exhausted references that don\u2019t match, prioritizing finding an application leak over a known library leak. Library leaks will be reported as LibraryLeak instead of ApplicationLeak.</p>"},{"location":"api/shark/-library-leak-reference-matcher/#constructors","title":"Constructors","text":"LibraryLeakReferenceMatcher [jvm]constructor(pattern: ReferencePattern, description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS)"},{"location":"api/shark/-library-leak-reference-matcher/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-library-leak-reference-matcher/#properties","title":"Properties","text":"Name Summary description [jvm]val description: StringA description that conveys what we know about this library leak. pattern [jvm]open override val pattern: ReferencePatternThe pattern that references will be matched against. patternApplies [jvm]open override val patternApplies: (HeapGraph) -> BooleanWhether the identified leak may exist in the provided HeapGraph. Defaults to true. If the heap dump comes from a VM that runs a different version of the library that doesn\u2019t have the leak, then this should return false."},{"location":"api/shark/-library-leak-reference-matcher/-library-leak-reference-matcher/","title":"library leak reference matcher","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher/LibraryLeakReferenceMatcher</p>"},{"location":"api/shark/-library-leak-reference-matcher/-library-leak-reference-matcher/#libraryleakreferencematcher","title":"LibraryLeakReferenceMatcher","text":"<p>[jvm]\\ constructor(pattern: ReferencePattern, description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS)</p>"},{"location":"api/shark/-library-leak-reference-matcher/description/","title":"Description","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher/description</p>"},{"location":"api/shark/-library-leak-reference-matcher/description/#description","title":"description","text":"<p>[jvm]\\ val description: String</p> <p>A description that conveys what we know about this library leak.</p>"},{"location":"api/shark/-library-leak-reference-matcher/pattern-applies/","title":"Pattern applies","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher/patternApplies</p>"},{"location":"api/shark/-library-leak-reference-matcher/pattern-applies/#patternapplies","title":"patternApplies","text":"<p>[jvm]\\ open override val patternApplies: (HeapGraph) -> Boolean</p> <p>Whether the identified leak may exist in the provided HeapGraph. Defaults to true. If the heap dump comes from a VM that runs a different version of the library that doesn\u2019t have the leak, then this should return false.</p>"},{"location":"api/shark/-library-leak-reference-matcher/pattern/","title":"Pattern","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher/pattern</p>"},{"location":"api/shark/-library-leak-reference-matcher/pattern/#pattern","title":"pattern","text":"<p>[jvm]\\ open override val pattern: ReferencePattern</p> <p>The pattern that references will be matched against.</p>"},{"location":"api/shark/-library-leak-reference-matcher/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher/toString</p>"},{"location":"api/shark/-library-leak-reference-matcher/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-matching-gc-root-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/MatchingGcRootProvider</p>"},{"location":"api/shark/-matching-gc-root-provider/#matchinggcrootprovider","title":"MatchingGcRootProvider","text":"<p>[jvm]\\ class MatchingGcRootProvider(referenceMatchers: List<ReferenceMatcher>) : GcRootProvider</p> <p>TODO Extracted from PathFinder, this should eventually be part of public API surface and we should likely also revisit the gc root type filtering which happens during heap parsing, as that\u2019s not really a concern for the heap parser and more for path finding. There are probably memory concerns as well there though. We could:</p> <ul> <li>compress the storing of these roots</li> <li>keep only the roots locations and read / deserialize as needed</li> <li>Ensure a unique / consistent view of roots by doing the work of GcRootProvider at parsing time and keeping that list.</li> </ul> <p>A GcRootProvider that matches roots against referenceMatchers.</p>"},{"location":"api/shark/-matching-gc-root-provider/#constructors","title":"Constructors","text":"MatchingGcRootProvider [jvm]constructor(referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-matching-gc-root-provider/#functions","title":"Functions","text":"Name Summary provideGcRoots [jvm]open override fun provideGcRoots(graph: HeapGraph): Sequence<GcRootReference>Provides a sequence of GC Roots to traverse the graph from, ideally in a stable order."},{"location":"api/shark/-matching-gc-root-provider/-matching-gc-root-provider/","title":"matching gc root provider","text":"<p>//leakcanary-repo/shark/MatchingGcRootProvider/MatchingGcRootProvider</p>"},{"location":"api/shark/-matching-gc-root-provider/-matching-gc-root-provider/#matchinggcrootprovider","title":"MatchingGcRootProvider","text":"<p>[jvm]\\ constructor(referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-matching-gc-root-provider/provide-gc-roots/","title":"Provide gc roots","text":"<p>//leakcanary-repo/shark/MatchingGcRootProvider/provideGcRoots</p>"},{"location":"api/shark/-matching-gc-root-provider/provide-gc-roots/#providegcroots","title":"provideGcRoots","text":"<p>[jvm]\\ open override fun provideGcRoots(graph: HeapGraph): Sequence<GcRootReference></p> <p>Provides a sequence of GC Roots to traverse the graph from, ideally in a stable order.</p>"},{"location":"api/shark/-metadata-extractor/","title":"Index","text":"<p>//leakcanary-repo/shark/MetadataExtractor</p>"},{"location":"api/shark/-metadata-extractor/#metadataextractor","title":"MetadataExtractor","text":"<p>fun interface MetadataExtractor</p> <p>Extracts metadata from a hprof to be reported in HeapAnalysisSuccess.metadata.</p>"},{"location":"api/shark/-metadata-extractor/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-metadata-extractor/#functions","title":"Functions","text":"Name Summary extractMetadata [jvm]abstract fun extractMetadata(graph: HeapGraph): Map<String, String>"},{"location":"api/shark/-metadata-extractor/extract-metadata/","title":"Extract metadata","text":"<p>//leakcanary-repo/shark/MetadataExtractor/extractMetadata</p>"},{"location":"api/shark/-metadata-extractor/extract-metadata/#extractmetadata","title":"extractMetadata","text":"<p>[jvm]\\ abstract fun extractMetadata(graph: HeapGraph): Map<String, String></p>"},{"location":"api/shark/-metadata-extractor/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/MetadataExtractor/Companion</p>"},{"location":"api/shark/-metadata-extractor/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-metadata-extractor/-companion/#properties","title":"Properties","text":"Name Summary NO_OP [jvm]val NO_OP: MetadataExtractorA no-op MetadataExtractor"},{"location":"api/shark/-metadata-extractor/-companion/-n-o_-o-p/","title":"n o o p","text":"<p>//leakcanary-repo/shark/MetadataExtractor/Companion/NO_OP</p>"},{"location":"api/shark/-metadata-extractor/-companion/-n-o_-o-p/#no_op","title":"NO_OP","text":"<p>[jvm]\\ val NO_OP: MetadataExtractor</p> <p>A no-op MetadataExtractor</p>"},{"location":"api/shark/-neo4-j-command/","title":"Index","text":"<p>//leakcanary-repo/shark/Neo4JCommand</p>"},{"location":"api/shark/-neo4-j-command/#neo4jcommand","title":"Neo4JCommand","text":"<p>[jvm]\\ class Neo4JCommand : CliktCommand</p> <p>Example commands:</p> <p>MATCH (roots: GcRoots) RETURN roots</p> <p>MATCH (activity: Instance) -:CLASS|SUPER*1..-> (c:Class {className: \"android.app.Activity\"}) RETURN activity</p> <p>MATCH (activity: Instance) -:CLASS|SUPER*1..-> (c:Class {className: \"android.app.Activity\"}) WHERE \"android.app.Activity.mDestroyed = true\" in activity.fields RETURN activity</p> <p>MATCH (roots: GcRoots) MATCH (activity: Instance) -:CLASS|SUPER*1..->(c:Class {className: \"android.app.Activity\"}) WHERE \"android.app.Activity.mDestroyed = true\" in activity.fields RETURN shortestPath((roots)-:ROOT|REF*->(activity))</p>"},{"location":"api/shark/-neo4-j-command/#constructors","title":"Constructors","text":"Neo4JCommand [jvm]constructor()"},{"location":"api/shark/-neo4-j-command/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-neo4-j-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-neo4-j-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-neo4-j-command/-neo4-j-command/","title":"neo4 j command","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Neo4JCommand</p>"},{"location":"api/shark/-neo4-j-command/-neo4-j-command/#neo4jcommand","title":"Neo4JCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-neo4-j-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/Neo4JCommand/run</p>"},{"location":"api/shark/-neo4-j-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-neo4-j-command/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion</p>"},{"location":"api/shark/-neo4-j-command/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-neo4-j-command/-companion/#functions","title":"Functions","text":"Name Summary dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) heapValueAsString [jvm]fun HeapValue.heapValueAsString(): String"},{"location":"api/shark/-neo4-j-command/-companion/#properties","title":"Properties","text":"Name Summary PHANTOM_REFERENCE [jvm]val PHANTOM_REFERENCE: String REFERENCE [jvm]val REFERENCE: String SOFT_REFERENCE [jvm]val SOFT_REFERENCE: String WEAK_REFERENCE [jvm]val WEAK_REFERENCE: String"},{"location":"api/shark/-neo4-j-command/-companion/-p-h-a-n-t-o-m_-r-e-f-e-r-e-n-c-e/","title":"p h a n t o m r e f e r e n c e","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/PHANTOM_REFERENCE</p>"},{"location":"api/shark/-neo4-j-command/-companion/-p-h-a-n-t-o-m_-r-e-f-e-r-e-n-c-e/#phantom_reference","title":"PHANTOM_REFERENCE","text":"<p>[jvm]\\ val PHANTOM_REFERENCE: String</p>"},{"location":"api/shark/-neo4-j-command/-companion/-r-e-f-e-r-e-n-c-e/","title":"r e f e r e n c e","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/REFERENCE</p>"},{"location":"api/shark/-neo4-j-command/-companion/-r-e-f-e-r-e-n-c-e/#reference","title":"REFERENCE","text":"<p>[jvm]\\ val REFERENCE: String</p>"},{"location":"api/shark/-neo4-j-command/-companion/-s-o-f-t_-r-e-f-e-r-e-n-c-e/","title":"s o f t r e f e r e n c e","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/SOFT_REFERENCE</p>"},{"location":"api/shark/-neo4-j-command/-companion/-s-o-f-t_-r-e-f-e-r-e-n-c-e/#soft_reference","title":"SOFT_REFERENCE","text":"<p>[jvm]\\ val SOFT_REFERENCE: String</p>"},{"location":"api/shark/-neo4-j-command/-companion/-w-e-a-k_-r-e-f-e-r-e-n-c-e/","title":"w e a k r e f e r e n c e","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/WEAK_REFERENCE</p>"},{"location":"api/shark/-neo4-j-command/-companion/-w-e-a-k_-r-e-f-e-r-e-n-c-e/#weak_reference","title":"WEAK_REFERENCE","text":"<p>[jvm]\\ val WEAK_REFERENCE: String</p>"},{"location":"api/shark/-neo4-j-command/-companion/dump/","title":"Dump","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/dump</p>"},{"location":"api/shark/-neo4-j-command/-companion/dump/#dump","title":"dump","text":"<p>[jvm]\\ fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?)</p>"},{"location":"api/shark/-neo4-j-command/-companion/heap-value-as-string/","title":"Heap value as string","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/heapValueAsString</p>"},{"location":"api/shark/-neo4-j-command/-companion/heap-value-as-string/#heapvalueasstring","title":"heapValueAsString","text":"<p>[jvm]\\ fun HeapValue.heapValueAsString(): String</p>"},{"location":"api/shark/-object-array-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectArrayReferenceReader</p>"},{"location":"api/shark/-object-array-reference-reader/#objectarrayreferencereader","title":"ObjectArrayReferenceReader","text":"<p>[jvm]\\ class ObjectArrayReferenceReader : ReferenceReader<HeapObject.HeapObjectArray></p>"},{"location":"api/shark/-object-array-reference-reader/#constructors","title":"Constructors","text":"ObjectArrayReferenceReader [jvm]constructor()"},{"location":"api/shark/-object-array-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]open override fun read(source: HeapObject.HeapObjectArray): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-object-array-reference-reader/-object-array-reference-reader/","title":"object array reference reader","text":"<p>//leakcanary-repo/shark/ObjectArrayReferenceReader/ObjectArrayReferenceReader</p>"},{"location":"api/shark/-object-array-reference-reader/-object-array-reference-reader/#objectarrayreferencereader","title":"ObjectArrayReferenceReader","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-object-array-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/ObjectArrayReferenceReader/read</p>"},{"location":"api/shark/-object-array-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ open override fun read(source: HeapObject.HeapObjectArray): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-object-dominators/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectDominators</p>"},{"location":"api/shark/-object-dominators/#objectdominators","title":"ObjectDominators","text":"<p>[jvm]\\ class ObjectDominators</p> <p>Exposes high level APIs to compute and render a dominator tree. This class needs to be public to be used by other LeakCanary modules but is internal and its API might change at any moment.</p> <p>Note that the exposed APIs are not optimized for speed, memory or IO.</p> <p>Eventually this capability should become part of the Shark public APIs, please open an issue if you\u2019d like to use this directly.</p>"},{"location":"api/shark/-object-dominators/#constructors","title":"Constructors","text":"ObjectDominators [jvm]constructor()"},{"location":"api/shark/-object-dominators/#types","title":"Types","text":"Name Summary DominatorNode [jvm]data class DominatorNode(val shallowSize: Int, val retainedSize: Int, val retainedCount: Int, val dominatedObjectIds: List<Long>) : Serializable OfflineDominatorNode [jvm]data class OfflineDominatorNode(val node: ObjectDominators.DominatorNode, val name: String) : Serializable"},{"location":"api/shark/-object-dominators/#functions","title":"Functions","text":"Name Summary buildDominatorTree [jvm]fun buildDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>): Map<Long, ObjectDominators.DominatorNode> buildOfflineDominatorTree [jvm]fun buildOfflineDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>): Map<Long, ObjectDominators.OfflineDominatorNode> renderDominatorTree [jvm]fun renderDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>, minRetainedSize: Int, threadName: String? = null, printStringContent: Boolean = false): String"},{"location":"api/shark/-object-dominators/-object-dominators/","title":"object dominators","text":"<p>//leakcanary-repo/shark/ObjectDominators/ObjectDominators</p>"},{"location":"api/shark/-object-dominators/-object-dominators/#objectdominators","title":"ObjectDominators","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-object-dominators/build-dominator-tree/","title":"Build dominator tree","text":"<p>//leakcanary-repo/shark/ObjectDominators/buildDominatorTree</p>"},{"location":"api/shark/-object-dominators/build-dominator-tree/#builddominatortree","title":"buildDominatorTree","text":"<p>[jvm]\\ fun buildDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>): Map<Long, ObjectDominators.DominatorNode></p>"},{"location":"api/shark/-object-dominators/build-offline-dominator-tree/","title":"Build offline dominator tree","text":"<p>//leakcanary-repo/shark/ObjectDominators/buildOfflineDominatorTree</p>"},{"location":"api/shark/-object-dominators/build-offline-dominator-tree/#buildofflinedominatortree","title":"buildOfflineDominatorTree","text":"<p>[jvm]\\ fun buildOfflineDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>): Map<Long, ObjectDominators.OfflineDominatorNode></p>"},{"location":"api/shark/-object-dominators/render-dominator-tree/","title":"Render dominator tree","text":"<p>//leakcanary-repo/shark/ObjectDominators/renderDominatorTree</p>"},{"location":"api/shark/-object-dominators/render-dominator-tree/#renderdominatortree","title":"renderDominatorTree","text":"<p>[jvm]\\ fun renderDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>, minRetainedSize: Int, threadName: String? = null, printStringContent: Boolean = false): String</p>"},{"location":"api/shark/-object-dominators/-dominator-node/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode</p>"},{"location":"api/shark/-object-dominators/-dominator-node/#dominatornode","title":"DominatorNode","text":"<p>[jvm]\\ data class DominatorNode(val shallowSize: Int, val retainedSize: Int, val retainedCount: Int, val dominatedObjectIds: List<Long>) : Serializable</p>"},{"location":"api/shark/-object-dominators/-dominator-node/#constructors","title":"Constructors","text":"DominatorNode [jvm]constructor(shallowSize: Int, retainedSize: Int, retainedCount: Int, dominatedObjectIds: List<Long>)"},{"location":"api/shark/-object-dominators/-dominator-node/#properties","title":"Properties","text":"Name Summary dominatedObjectIds [jvm]val dominatedObjectIds: List<Long> retainedCount [jvm]val retainedCount: Int retainedSize [jvm]val retainedSize: Int shallowSize [jvm]val shallowSize: Int"},{"location":"api/shark/-object-dominators/-dominator-node/-dominator-node/","title":"dominator node","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode/DominatorNode</p>"},{"location":"api/shark/-object-dominators/-dominator-node/-dominator-node/#dominatornode","title":"DominatorNode","text":"<p>[jvm]\\ constructor(shallowSize: Int, retainedSize: Int, retainedCount: Int, dominatedObjectIds: List<Long>)</p>"},{"location":"api/shark/-object-dominators/-dominator-node/dominated-object-ids/","title":"Dominated object ids","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode/dominatedObjectIds</p>"},{"location":"api/shark/-object-dominators/-dominator-node/dominated-object-ids/#dominatedobjectids","title":"dominatedObjectIds","text":"<p>[jvm]\\ val dominatedObjectIds: List<Long></p>"},{"location":"api/shark/-object-dominators/-dominator-node/retained-count/","title":"Retained count","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode/retainedCount</p>"},{"location":"api/shark/-object-dominators/-dominator-node/retained-count/#retainedcount","title":"retainedCount","text":"<p>[jvm]\\ val retainedCount: Int</p>"},{"location":"api/shark/-object-dominators/-dominator-node/retained-size/","title":"Retained size","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode/retainedSize</p>"},{"location":"api/shark/-object-dominators/-dominator-node/retained-size/#retainedsize","title":"retainedSize","text":"<p>[jvm]\\ val retainedSize: Int</p>"},{"location":"api/shark/-object-dominators/-dominator-node/shallow-size/","title":"Shallow size","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode/shallowSize</p>"},{"location":"api/shark/-object-dominators/-dominator-node/shallow-size/#shallowsize","title":"shallowSize","text":"<p>[jvm]\\ val shallowSize: Int</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectDominators/OfflineDominatorNode</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/#offlinedominatornode","title":"OfflineDominatorNode","text":"<p>[jvm]\\ data class OfflineDominatorNode(val node: ObjectDominators.DominatorNode, val name: String) : Serializable</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/#constructors","title":"Constructors","text":"OfflineDominatorNode [jvm]constructor(node: ObjectDominators.DominatorNode, name: String)"},{"location":"api/shark/-object-dominators/-offline-dominator-node/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String node [jvm]val node: ObjectDominators.DominatorNode"},{"location":"api/shark/-object-dominators/-offline-dominator-node/-offline-dominator-node/","title":"offline dominator node","text":"<p>//leakcanary-repo/shark/ObjectDominators/OfflineDominatorNode/OfflineDominatorNode</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/-offline-dominator-node/#offlinedominatornode","title":"OfflineDominatorNode","text":"<p>[jvm]\\ constructor(node: ObjectDominators.DominatorNode, name: String)</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/name/","title":"Name","text":"<p>//leakcanary-repo/shark/ObjectDominators/OfflineDominatorNode/name</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/name/#name","title":"name","text":"<p>[jvm]\\ val name: String</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/node/","title":"Node","text":"<p>//leakcanary-repo/shark/ObjectDominators/OfflineDominatorNode/node</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/node/#node","title":"node","text":"<p>[jvm]\\ val node: ObjectDominators.DominatorNode</p>"},{"location":"api/shark/-object-growth-detector/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectGrowthDetector</p>"},{"location":"api/shark/-object-growth-detector/#objectgrowthdetector","title":"ObjectGrowthDetector","text":"<p>[jvm]\\ class ObjectGrowthDetector(gcRootProvider: GcRootProvider, referenceReaderFactory: ReferenceReader.Factory<HeapObject>)</p> <p>Looks for objects that have grown in outgoing references in a new heap dump compared to a previous heap dump by diffing heap traversals.</p>"},{"location":"api/shark/-object-growth-detector/#constructors","title":"Constructors","text":"ObjectGrowthDetector [jvm]constructor(gcRootProvider: GcRootProvider, referenceReaderFactory: ReferenceReader.Factory<HeapObject>)"},{"location":"api/shark/-object-growth-detector/#types","title":"Types","text":"Name Summary Companion [jvm]object CompanionThis allows external modules to add factory methods for configured instances of this class as extension functions of this companion object."},{"location":"api/shark/-object-growth-detector/#functions","title":"Functions","text":"Name Summary findGrowingObjects [jvm]fun findGrowingObjects(heapGraph: CloseableHeapGraph, previousTraversal: HeapTraversalInput = InitialState()): HeapTraversalOutput"},{"location":"api/shark/-object-growth-detector/-object-growth-detector/","title":"object growth detector","text":"<p>//leakcanary-repo/shark/ObjectGrowthDetector/ObjectGrowthDetector</p>"},{"location":"api/shark/-object-growth-detector/-object-growth-detector/#objectgrowthdetector","title":"ObjectGrowthDetector","text":"<p>[jvm]\\ constructor(gcRootProvider: GcRootProvider, referenceReaderFactory: ReferenceReader.Factory<HeapObject>)</p>"},{"location":"api/shark/-object-growth-detector/find-growing-objects/","title":"Find growing objects","text":"<p>//leakcanary-repo/shark/ObjectGrowthDetector/findGrowingObjects</p>"},{"location":"api/shark/-object-growth-detector/find-growing-objects/#findgrowingobjects","title":"findGrowingObjects","text":"<p>[jvm]\\ fun findGrowingObjects(heapGraph: CloseableHeapGraph, previousTraversal: HeapTraversalInput = InitialState()): HeapTraversalOutput</p>"},{"location":"api/shark/-object-growth-detector/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectGrowthDetector/Companion</p>"},{"location":"api/shark/-object-growth-detector/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p> <p>This allows external modules to add factory methods for configured instances of this class as extension functions of this companion object.</p>"},{"location":"api/shark/-object-growth-detector/-companion/#functions","title":"Functions","text":"Name Summary forAndroidHeap [jvm]fun ObjectGrowthDetector.Companion.forAndroidHeap(referenceMatchers: List<ReferenceMatcher> = AndroidObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector forJvmHeap [jvm]fun ObjectGrowthDetector.Companion.forJvmHeap(referenceMatchers: List<ReferenceMatcher> = JvmObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector"},{"location":"api/shark/-object-inspector/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspector</p>"},{"location":"api/shark/-object-inspector/#objectinspector","title":"ObjectInspector","text":"<p>fun interface ObjectInspector</p> <p>Provides LeakCanary with insights about objects (classes, instances and arrays) found in the heap. inspect will be called for each object that LeakCanary wants to know more about. The implementation can then use the provided ObjectReporter to provide insights for that object.</p>"},{"location":"api/shark/-object-inspector/#inheritors","title":"Inheritors","text":"AppSingletonInspector ObjectInspectors"},{"location":"api/shark/-object-inspector/#functions","title":"Functions","text":"Name Summary inspect [jvm]abstract fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspector/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspector/inspect</p>"},{"location":"api/shark/-object-inspector/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ abstract fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspector/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-inspectors/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors</p>"},{"location":"api/shark/-object-inspectors/#objectinspectors","title":"ObjectInspectors","text":"<p>[jvm]\\ enum ObjectInspectors : Enum<ObjectInspectors> , ObjectInspector</p> <p>A set of default ObjectInspectors that knows about common JDK objects.</p>"},{"location":"api/shark/-object-inspectors/#entries","title":"Entries","text":"KEYED_WEAK_REFERENCE [jvm]KEYED_WEAK_REFERENCE CLASSLOADER [jvm]CLASSLOADER CLASS [jvm]CLASS ANONYMOUS_CLASS [jvm]ANONYMOUS_CLASS THREAD [jvm]THREAD"},{"location":"api/shark/-object-inspectors/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-object-inspectors/#functions","title":"Functions","text":"Name Summary inspect [jvm]abstract fun inspect(reporter: ObjectReporter) valueOf [jvm]fun valueOf(value: String): ObjectInspectorsReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<ObjectInspectors>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-object-inspectors/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/ObjectInspectors/valueOf</p>"},{"location":"api/shark/-object-inspectors/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): ObjectInspectors</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-object-inspectors/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-object-inspectors/values/","title":"Values","text":"<p>//leakcanary-repo/shark/ObjectInspectors/values</p>"},{"location":"api/shark/-object-inspectors/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<ObjectInspectors></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/ANONYMOUS_CLASS</p>"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/#anonymous_class","title":"ANONYMOUS_CLASS","text":"<p>[jvm]\\ ANONYMOUS_CLASS</p>"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspectors/ANONYMOUS_CLASS/inspect</p>"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/CLASS</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/#class","title":"CLASS","text":"<p>[jvm]\\ CLASS</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspectors/CLASS/inspect</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/CLASSLOADER</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/#classloader","title":"CLASSLOADER","text":"<p>[jvm]\\ CLASSLOADER</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspectors/CLASSLOADER/inspect</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-inspectors/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/Companion</p>"},{"location":"api/shark/-object-inspectors/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-object-inspectors/-companion/#functions","title":"Functions","text":"Name Summary createLeakingObjectFilters [jvm]fun createLeakingObjectFilters(inspectors: Set<ObjectInspectors>): List<FilteringLeakingObjectFinder.LeakingObjectFilter>Creates a list of LeakingObjectFilter based on the passed in ObjectInspectors."},{"location":"api/shark/-object-inspectors/-companion/#properties","title":"Properties","text":"Name Summary jdkDefaults [jvm]val jdkDefaults: List<ObjectInspector> jdkLeakingObjectFilters [jvm]val jdkLeakingObjectFilters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>Returns a list of LeakingObjectFilter suitable for common JDK projects."},{"location":"api/shark/-object-inspectors/-companion/create-leaking-object-filters/","title":"Create leaking object filters","text":"<p>//leakcanary-repo/shark/ObjectInspectors/Companion/createLeakingObjectFilters</p>"},{"location":"api/shark/-object-inspectors/-companion/create-leaking-object-filters/#createleakingobjectfilters","title":"createLeakingObjectFilters","text":"<p>[jvm]\\ fun createLeakingObjectFilters(inspectors: Set<ObjectInspectors>): List<FilteringLeakingObjectFinder.LeakingObjectFilter></p> <p>Creates a list of LeakingObjectFilter based on the passed in ObjectInspectors.</p>"},{"location":"api/shark/-object-inspectors/-companion/jdk-defaults/","title":"Jdk defaults","text":"<p>//leakcanary-repo/shark/ObjectInspectors/Companion/jdkDefaults</p>"},{"location":"api/shark/-object-inspectors/-companion/jdk-defaults/#jdkdefaults","title":"jdkDefaults","text":"<p>[jvm]\\ val jdkDefaults: List<ObjectInspector></p>"},{"location":"api/shark/-object-inspectors/-companion/jdk-defaults/#see-also","title":"See also","text":"ObjectInspectors"},{"location":"api/shark/-object-inspectors/-companion/jdk-leaking-object-filters/","title":"Jdk leaking object filters","text":"<p>//leakcanary-repo/shark/ObjectInspectors/Companion/jdkLeakingObjectFilters</p>"},{"location":"api/shark/-object-inspectors/-companion/jdk-leaking-object-filters/#jdkleakingobjectfilters","title":"jdkLeakingObjectFilters","text":"<p>[jvm]\\ val jdkLeakingObjectFilters: List<FilteringLeakingObjectFinder.LeakingObjectFilter></p> <p>Returns a list of LeakingObjectFilter suitable for common JDK projects.</p>"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/KEYED_WEAK_REFERENCE</p>"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/#keyed_weak_reference","title":"KEYED_WEAK_REFERENCE","text":"<p>[jvm]\\ KEYED_WEAK_REFERENCE</p>"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspectors/KEYED_WEAK_REFERENCE/inspect</p>"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/THREAD</p>"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/#thread","title":"THREAD","text":"<p>[jvm]\\ THREAD</p>"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspectors/THREAD/inspect</p>"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-reporter/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectReporter</p>"},{"location":"api/shark/-object-reporter/#objectreporter","title":"ObjectReporter","text":"<p>[jvm]\\ class ObjectReporter(val heapObject: HeapObject)</p> <p>Enables ObjectInspector implementations to provide insights on heapObject, which is an object (class, instance or array) found in the heap.</p> <p>A given ObjectReporter only maps to one object in the heap, but is shared to many ObjectInspector implementations and accumulates insights.</p>"},{"location":"api/shark/-object-reporter/#constructors","title":"Constructors","text":"ObjectReporter [jvm]constructor(heapObject: HeapObject)"},{"location":"api/shark/-object-reporter/#functions","title":"Functions","text":"Name Summary whenInstanceOf [jvm]fun whenInstanceOf(expectedClassName: String, block: ObjectReporter.(HeapObject.HeapInstance) -> Unit)Runs block if ObjectReporter.heapObject is an instance of expectedClassName.[jvm]fun whenInstanceOf(expectedClass: KClass<out Any>, block: ObjectReporter.(HeapObject.HeapInstance) -> Unit)Runs block if ObjectReporter.heapObject is an instance of expectedClass."},{"location":"api/shark/-object-reporter/#properties","title":"Properties","text":"Name Summary heapObject [jvm]val heapObject: HeapObject labels [jvm]val labels: LinkedHashSet<String>Labels that will be visible on the corresponding heapObject in the leak trace. leakingReasons [jvm]val leakingReasons: MutableSet<String>Reasons for which this object is expected to be unreachable (ie it\u2019s leaking). notLeakingReasons [jvm]val notLeakingReasons: MutableSet<String>Reasons for which this object is expected to be reachable (ie it\u2019s not leaking)."},{"location":"api/shark/-object-reporter/-object-reporter/","title":"object reporter","text":"<p>//leakcanary-repo/shark/ObjectReporter/ObjectReporter</p>"},{"location":"api/shark/-object-reporter/-object-reporter/#objectreporter","title":"ObjectReporter","text":"<p>[jvm]\\ constructor(heapObject: HeapObject)</p>"},{"location":"api/shark/-object-reporter/heap-object/","title":"Heap object","text":"<p>//leakcanary-repo/shark/ObjectReporter/heapObject</p>"},{"location":"api/shark/-object-reporter/heap-object/#heapobject","title":"heapObject","text":"<p>[jvm]\\ val heapObject: HeapObject</p>"},{"location":"api/shark/-object-reporter/labels/","title":"Labels","text":"<p>//leakcanary-repo/shark/ObjectReporter/labels</p>"},{"location":"api/shark/-object-reporter/labels/#labels","title":"labels","text":"<p>[jvm]\\ val labels: LinkedHashSet<String></p> <p>Labels that will be visible on the corresponding heapObject in the leak trace.</p>"},{"location":"api/shark/-object-reporter/leaking-reasons/","title":"Leaking reasons","text":"<p>//leakcanary-repo/shark/ObjectReporter/leakingReasons</p>"},{"location":"api/shark/-object-reporter/leaking-reasons/#leakingreasons","title":"leakingReasons","text":"<p>[jvm]\\ val leakingReasons: MutableSet<String></p> <p>Reasons for which this object is expected to be unreachable (ie it\u2019s leaking).</p>"},{"location":"api/shark/-object-reporter/not-leaking-reasons/","title":"Not leaking reasons","text":"<p>//leakcanary-repo/shark/ObjectReporter/notLeakingReasons</p>"},{"location":"api/shark/-object-reporter/not-leaking-reasons/#notleakingreasons","title":"notLeakingReasons","text":"<p>[jvm]\\ val notLeakingReasons: MutableSet<String></p> <p>Reasons for which this object is expected to be reachable (ie it\u2019s not leaking).</p>"},{"location":"api/shark/-object-reporter/when-instance-of/","title":"When instance of","text":"<p>//leakcanary-repo/shark/ObjectReporter/whenInstanceOf</p>"},{"location":"api/shark/-object-reporter/when-instance-of/#wheninstanceof","title":"whenInstanceOf","text":"<p>[jvm]\\ fun whenInstanceOf(expectedClass: KClass<out Any>, block: ObjectReporter.(HeapObject.HeapInstance) -> Unit)</p> <p>Runs block if ObjectReporter.heapObject is an instance of expectedClass.</p> <p>[jvm]\\ fun whenInstanceOf(expectedClassName: String, block: ObjectReporter.(HeapObject.HeapInstance) -> Unit)</p> <p>Runs block if ObjectReporter.heapObject is an instance of expectedClassName.</p>"},{"location":"api/shark/-on-analysis-progress-listener/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener</p>"},{"location":"api/shark/-on-analysis-progress-listener/#onanalysisprogresslistener","title":"OnAnalysisProgressListener","text":"<p>[jvm]\\ fun interface OnAnalysisProgressListener</p> <p>Reports progress from the HeapAnalyzer as they occur, as Step values.</p>"},{"location":"api/shark/-on-analysis-progress-listener/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion Step [jvm]enum Step : Enum<OnAnalysisProgressListener.Step>"},{"location":"api/shark/-on-analysis-progress-listener/#functions","title":"Functions","text":"Name Summary onAnalysisProgress [jvm]abstract fun onAnalysisProgress(step: OnAnalysisProgressListener.Step)"},{"location":"api/shark/-on-analysis-progress-listener/on-analysis-progress/","title":"On analysis progress","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/onAnalysisProgress</p>"},{"location":"api/shark/-on-analysis-progress-listener/on-analysis-progress/#onanalysisprogress","title":"onAnalysisProgress","text":"<p>[jvm]\\ abstract fun onAnalysisProgress(step: OnAnalysisProgressListener.Step)</p>"},{"location":"api/shark/-on-analysis-progress-listener/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Companion</p>"},{"location":"api/shark/-on-analysis-progress-listener/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-on-analysis-progress-listener/-companion/#properties","title":"Properties","text":"Name Summary NO_OP [jvm]val NO_OP: OnAnalysisProgressListenerA no-op OnAnalysisProgressListener"},{"location":"api/shark/-on-analysis-progress-listener/-companion/-n-o_-o-p/","title":"n o o p","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Companion/NO_OP</p>"},{"location":"api/shark/-on-analysis-progress-listener/-companion/-n-o_-o-p/#no_op","title":"NO_OP","text":"<p>[jvm]\\ val NO_OP: OnAnalysisProgressListener</p> <p>A no-op OnAnalysisProgressListener</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/#step","title":"Step","text":"<p>[jvm]\\ enum Step : Enum<OnAnalysisProgressListener.Step></p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/#entries","title":"Entries","text":"PARSING_HEAP_DUMP [jvm]PARSING_HEAP_DUMP EXTRACTING_METADATA [jvm]EXTRACTING_METADATA FINDING_RETAINED_OBJECTS [jvm]FINDING_RETAINED_OBJECTS FINDING_PATHS_TO_RETAINED_OBJECTS [jvm]FINDING_PATHS_TO_RETAINED_OBJECTS FINDING_DOMINATORS [jvm]FINDING_DOMINATORS INSPECTING_OBJECTS [jvm]INSPECTING_OBJECTS COMPUTING_NATIVE_RETAINED_SIZE [jvm]COMPUTING_NATIVE_RETAINED_SIZE COMPUTING_RETAINED_SIZE [jvm]COMPUTING_RETAINED_SIZE BUILDING_LEAK_TRACES [jvm]BUILDING_LEAK_TRACES REPORTING_HEAP_ANALYSIS [jvm]REPORTING_HEAP_ANALYSIS"},{"location":"api/shark/-on-analysis-progress-listener/-step/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): OnAnalysisProgressListener.StepReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<OnAnalysisProgressListener.Step>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-on-analysis-progress-listener/-step/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/human-readable-name/","title":"Human readable name","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/humanReadableName</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/human-readable-name/#humanreadablename","title":"humanReadableName","text":"<p>[jvm]\\ val humanReadableName: String</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/valueOf</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): OnAnalysisProgressListener.Step</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-on-analysis-progress-listener/-step/values/","title":"Values","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/values</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<OnAnalysisProgressListener.Step></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-b-u-i-l-d-i-n-g_-l-e-a-k_-t-r-a-c-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/BUILDING_LEAK_TRACES</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-b-u-i-l-d-i-n-g_-l-e-a-k_-t-r-a-c-e-s/#building_leak_traces","title":"BUILDING_LEAK_TRACES","text":"<p>[jvm]\\ BUILDING_LEAK_TRACES</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-b-u-i-l-d-i-n-g_-l-e-a-k_-t-r-a-c-e-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-n-a-t-i-v-e_-r-e-t-a-i-n-e-d_-s-i-z-e/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/COMPUTING_NATIVE_RETAINED_SIZE</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-n-a-t-i-v-e_-r-e-t-a-i-n-e-d_-s-i-z-e/#computing_native_retained_size","title":"COMPUTING_NATIVE_RETAINED_SIZE","text":"<p>[jvm]\\ COMPUTING_NATIVE_RETAINED_SIZE</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-n-a-t-i-v-e_-r-e-t-a-i-n-e-d_-s-i-z-e/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-r-e-t-a-i-n-e-d_-s-i-z-e/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/COMPUTING_RETAINED_SIZE</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-r-e-t-a-i-n-e-d_-s-i-z-e/#computing_retained_size","title":"COMPUTING_RETAINED_SIZE","text":"<p>[jvm]\\ COMPUTING_RETAINED_SIZE</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-r-e-t-a-i-n-e-d_-s-i-z-e/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-e-x-t-r-a-c-t-i-n-g_-m-e-t-a-d-a-t-a/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/EXTRACTING_METADATA</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-e-x-t-r-a-c-t-i-n-g_-m-e-t-a-d-a-t-a/#extracting_metadata","title":"EXTRACTING_METADATA","text":"<p>[jvm]\\ EXTRACTING_METADATA</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-e-x-t-r-a-c-t-i-n-g_-m-e-t-a-d-a-t-a/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-d-o-m-i-n-a-t-o-r-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/FINDING_DOMINATORS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-d-o-m-i-n-a-t-o-r-s/#finding_dominators","title":"FINDING_DOMINATORS","text":"<p>[jvm]\\ FINDING_DOMINATORS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-d-o-m-i-n-a-t-o-r-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-p-a-t-h-s_-t-o_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/FINDING_PATHS_TO_RETAINED_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-p-a-t-h-s_-t-o_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/#finding_paths_to_retained_objects","title":"FINDING_PATHS_TO_RETAINED_OBJECTS","text":"<p>[jvm]\\ FINDING_PATHS_TO_RETAINED_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-p-a-t-h-s_-t-o_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/FINDING_RETAINED_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/#finding_retained_objects","title":"FINDING_RETAINED_OBJECTS","text":"<p>[jvm]\\ FINDING_RETAINED_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-i-n-s-p-e-c-t-i-n-g_-o-b-j-e-c-t-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/INSPECTING_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-i-n-s-p-e-c-t-i-n-g_-o-b-j-e-c-t-s/#inspecting_objects","title":"INSPECTING_OBJECTS","text":"<p>[jvm]\\ INSPECTING_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-i-n-s-p-e-c-t-i-n-g_-o-b-j-e-c-t-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-p-a-r-s-i-n-g_-h-e-a-p_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/PARSING_HEAP_DUMP</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-p-a-r-s-i-n-g_-h-e-a-p_-d-u-m-p/#parsing_heap_dump","title":"PARSING_HEAP_DUMP","text":"<p>[jvm]\\ PARSING_HEAP_DUMP</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-p-a-r-s-i-n-g_-h-e-a-p_-d-u-m-p/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-r-e-p-o-r-t-i-n-g_-h-e-a-p_-a-n-a-l-y-s-i-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/REPORTING_HEAP_ANALYSIS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-r-e-p-o-r-t-i-n-g_-h-e-a-p_-a-n-a-l-y-s-i-s/#reporting_heap_analysis","title":"REPORTING_HEAP_ANALYSIS","text":"<p>[jvm]\\ REPORTING_HEAP_ANALYSIS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-r-e-p-o-r-t-i-n-g_-h-e-a-p_-a-n-a-l-y-s-i-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-hprof-record-listener/","title":"Index","text":"<p>//leakcanary-repo/shark/OnHprofRecordListener</p>"},{"location":"api/shark/-on-hprof-record-listener/#onhprofrecordlistener","title":"OnHprofRecordListener","text":"<p>[jvm]\\ fun interface OnHprofRecordListener</p> <p>Listener passed in to StreamingRecordReaderAdapter.readRecords, gets notified for each HprofRecord found in the heap dump which types is in the set of the recordTypes parameter passed to StreamingRecordReaderAdapter.readRecords.</p>"},{"location":"api/shark/-on-hprof-record-listener/#functions","title":"Functions","text":"Name Summary onHprofRecord [jvm]abstract fun onHprofRecord(position: Long, record: HprofRecord)"},{"location":"api/shark/-on-hprof-record-listener/on-hprof-record/","title":"On hprof record","text":"<p>//leakcanary-repo/shark/OnHprofRecordListener/onHprofRecord</p>"},{"location":"api/shark/-on-hprof-record-listener/on-hprof-record/#onhprofrecord","title":"onHprofRecord","text":"<p>[jvm]\\ abstract fun onHprofRecord(position: Long, record: HprofRecord)</p>"},{"location":"api/shark/-on-hprof-record-tag-listener/","title":"Index","text":"<p>//leakcanary-repo/shark/OnHprofRecordTagListener</p>"},{"location":"api/shark/-on-hprof-record-tag-listener/#onhprofrecordtaglistener","title":"OnHprofRecordTagListener","text":"<p>[jvm]\\ fun interface OnHprofRecordTagListener</p> <p>Listener passed in to StreamingHprofReader.readRecords, gets notified for each HprofRecordTag found in the heap dump.</p> <p>Listener implementations are expected to read all bytes corresponding to a given tag from the provided reader before returning.</p>"},{"location":"api/shark/-on-hprof-record-tag-listener/#functions","title":"Functions","text":"Name Summary onHprofRecord [jvm]abstract fun onHprofRecord(tag: HprofRecordTag, length: Long, reader: HprofRecordReader)"},{"location":"api/shark/-on-hprof-record-tag-listener/on-hprof-record/","title":"On hprof record","text":"<p>//leakcanary-repo/shark/OnHprofRecordTagListener/onHprofRecord</p>"},{"location":"api/shark/-on-hprof-record-tag-listener/on-hprof-record/#onhprofrecord","title":"onHprofRecord","text":"<p>[jvm]\\ abstract fun onHprofRecord(tag: HprofRecordTag, length: Long, reader: HprofRecordReader)</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/#openjdkinstancerefreaders","title":"OpenJdkInstanceRefReaders","text":"<p>[jvm]\\ enum OpenJdkInstanceRefReaders : Enum<OpenJdkInstanceRefReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactory</p> <p>Defines VirtualInstanceReferenceReader factories for common OpenJDK data structures.</p> <p>Note: the expanders target the direct classes and don\u2019t target subclasses, as these might include additional out going references that would be missed.</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/#entries","title":"Entries","text":"LINKED_LIST [jvm]LINKED_LIST ARRAY_LIST [jvm]ARRAY_LIST COPY_ON_WRITE_ARRAY_LIST [jvm]COPY_ON_WRITE_ARRAY_LIST HASH_MAP [jvm]HASH_MAPHandles HashMap & LinkedHashMap CONCURRENT_HASH_MAP [jvm]CONCURRENT_HASH_MAP WEAK_HASH_MAP [jvm]WEAK_HASH_MAP HASH_SET [jvm]HASH_SETHandles HashSet & LinkedHashSet"},{"location":"api/shark/-open-jdk-instance-ref-readers/#functions","title":"Functions","text":"Name Summary create [jvm]abstract fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader? valueOf [jvm]fun valueOf(value: String): OpenJdkInstanceRefReadersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<OpenJdkInstanceRefReaders>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-open-jdk-instance-ref-readers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/valueOf</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): OpenJdkInstanceRefReaders</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-open-jdk-instance-ref-readers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/values</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<OpenJdkInstanceRefReaders></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/ARRAY_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#array_list","title":"ARRAY_LIST","text":"<p>[jvm]\\ ARRAY_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/ARRAY_LIST/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/CONCURRENT_HASH_MAP</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/#concurrent_hash_map","title":"CONCURRENT_HASH_MAP","text":"<p>[jvm]\\ CONCURRENT_HASH_MAP</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/CONCURRENT_HASH_MAP/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/COPY_ON_WRITE_ARRAY_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#copy_on_write_array_list","title":"COPY_ON_WRITE_ARRAY_LIST","text":"<p>[jvm]\\ COPY_ON_WRITE_ARRAY_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/COPY_ON_WRITE_ARRAY_LIST/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/HASH_MAP</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/#hash_map","title":"HASH_MAP","text":"<p>[jvm]\\ HASH_MAP</p> <p>Handles HashMap & LinkedHashMap</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/HASH_MAP/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/HASH_SET</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/#hash_set","title":"HASH_SET","text":"<p>[jvm]\\ HASH_SET</p> <p>Handles HashSet & LinkedHashSet</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/HASH_SET/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/LINKED_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#linked_list","title":"LINKED_LIST","text":"<p>[jvm]\\ LINKED_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/LINKED_LIST/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/WEAK_HASH_MAP</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#weak_hash_map","title":"WEAK_HASH_MAP","text":"<p>[jvm]\\ WEAK_HASH_MAP</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/WEAK_HASH_MAP/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkReferenceReaderFactory</p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/#openjdkreferencereaderfactory","title":"OpenJdkReferenceReaderFactory","text":"<p>[jvm]\\ class OpenJdkReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject></p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/#constructors","title":"Constructors","text":"OpenJdkReferenceReaderFactory [jvm]constructor(referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-open-jdk-reference-reader-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject>"},{"location":"api/shark/-open-jdk-reference-reader-factory/-open-jdk-reference-reader-factory/","title":"open jdk reference reader factory","text":"<p>//leakcanary-repo/shark/OpenJdkReferenceReaderFactory/OpenJdkReferenceReaderFactory</p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/-open-jdk-reference-reader-factory/#openjdkreferencereaderfactory","title":"OpenJdkReferenceReaderFactory","text":"<p>[jvm]\\ constructor(referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/OpenJdkReferenceReaderFactory/createFor</p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject></p>"},{"location":"api/shark/-path-finding-results/","title":"Index","text":"<p>//leakcanary-repo/shark/PathFindingResults</p>"},{"location":"api/shark/-path-finding-results/#pathfindingresults","title":"PathFindingResults","text":"<p>[jvm]\\ class PathFindingResults(val pathsToLeakingObjects: List<ReferencePathNode>, val dominatorTree: DominatorTree?)</p>"},{"location":"api/shark/-path-finding-results/#constructors","title":"Constructors","text":"PathFindingResults [jvm]constructor(pathsToLeakingObjects: List<ReferencePathNode>, dominatorTree: DominatorTree?)"},{"location":"api/shark/-path-finding-results/#properties","title":"Properties","text":"Name Summary dominatorTree [jvm]val dominatorTree: DominatorTree? pathsToLeakingObjects [jvm]val pathsToLeakingObjects: List<ReferencePathNode>"},{"location":"api/shark/-path-finding-results/-path-finding-results/","title":"path finding results","text":"<p>//leakcanary-repo/shark/PathFindingResults/PathFindingResults</p>"},{"location":"api/shark/-path-finding-results/-path-finding-results/#pathfindingresults","title":"PathFindingResults","text":"<p>[jvm]\\ constructor(pathsToLeakingObjects: List<ReferencePathNode>, dominatorTree: DominatorTree?)</p>"},{"location":"api/shark/-path-finding-results/dominator-tree/","title":"Dominator tree","text":"<p>//leakcanary-repo/shark/PathFindingResults/dominatorTree</p>"},{"location":"api/shark/-path-finding-results/dominator-tree/#dominatortree","title":"dominatorTree","text":"<p>[jvm]\\ val dominatorTree: DominatorTree?</p>"},{"location":"api/shark/-path-finding-results/paths-to-leaking-objects/","title":"Paths to leaking objects","text":"<p>//leakcanary-repo/shark/PathFindingResults/pathsToLeakingObjects</p>"},{"location":"api/shark/-path-finding-results/paths-to-leaking-objects/#pathstoleakingobjects","title":"pathsToLeakingObjects","text":"<p>[jvm]\\ val pathsToLeakingObjects: List<ReferencePathNode></p>"},{"location":"api/shark/-primitive-type/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType</p>"},{"location":"api/shark/-primitive-type/#primitivetype","title":"PrimitiveType","text":"<p>[jvm]\\ enum PrimitiveType : Enum<PrimitiveType> </p> <p>A primitive type in the prof.</p>"},{"location":"api/shark/-primitive-type/#entries","title":"Entries","text":"BOOLEAN [jvm]BOOLEAN CHAR [jvm]CHAR FLOAT [jvm]FLOAT DOUBLE [jvm]DOUBLE BYTE [jvm]BYTE SHORT [jvm]SHORT INT [jvm]INT LONG [jvm]LONG"},{"location":"api/shark/-primitive-type/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-primitive-type/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): PrimitiveTypeReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<PrimitiveType>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-primitive-type/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/byte-size/","title":"Byte size","text":"<p>//leakcanary-repo/shark/PrimitiveType/byteSize</p>"},{"location":"api/shark/-primitive-type/byte-size/#bytesize","title":"byteSize","text":"<p>[jvm]\\ val byteSize: Int</p> <p>The size in bytes for each value of that type.</p>"},{"location":"api/shark/-primitive-type/hprof-type/","title":"Hprof type","text":"<p>//leakcanary-repo/shark/PrimitiveType/hprofType</p>"},{"location":"api/shark/-primitive-type/hprof-type/#hproftype","title":"hprofType","text":"<p>[jvm]\\ val hprofType: Int</p> <p>The hprof defined \"basic type\".</p>"},{"location":"api/shark/-primitive-type/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/PrimitiveType/valueOf</p>"},{"location":"api/shark/-primitive-type/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): PrimitiveType</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-primitive-type/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-primitive-type/values/","title":"Values","text":"<p>//leakcanary-repo/shark/PrimitiveType/values</p>"},{"location":"api/shark/-primitive-type/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<PrimitiveType></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-primitive-type/-b-o-o-l-e-a-n/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/BOOLEAN</p>"},{"location":"api/shark/-primitive-type/-b-o-o-l-e-a-n/#boolean","title":"BOOLEAN","text":"<p>[jvm]\\ BOOLEAN</p>"},{"location":"api/shark/-primitive-type/-b-o-o-l-e-a-n/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-b-y-t-e/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/BYTE</p>"},{"location":"api/shark/-primitive-type/-b-y-t-e/#byte","title":"BYTE","text":"<p>[jvm]\\ BYTE</p>"},{"location":"api/shark/-primitive-type/-b-y-t-e/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-c-h-a-r/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/CHAR</p>"},{"location":"api/shark/-primitive-type/-c-h-a-r/#char","title":"CHAR","text":"<p>[jvm]\\ CHAR</p>"},{"location":"api/shark/-primitive-type/-c-h-a-r/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/Companion</p>"},{"location":"api/shark/-primitive-type/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-primitive-type/-companion/#properties","title":"Properties","text":"Name Summary byteSizeByHprofType [jvm]val byteSizeByHprofType: Map<Int, Int> primitiveTypeByHprofType [jvm]val primitiveTypeByHprofType: Map<Int, PrimitiveType> REFERENCE_HPROF_TYPE [jvm]const val REFERENCE_HPROF_TYPE: Int = 2The hprof defined \"basic type\" for references."},{"location":"api/shark/-primitive-type/-companion/-r-e-f-e-r-e-n-c-e_-h-p-r-o-f_-t-y-p-e/","title":"r e f e r e n c e h p r o f t y p e","text":"<p>//leakcanary-repo/shark/PrimitiveType/Companion/REFERENCE_HPROF_TYPE</p>"},{"location":"api/shark/-primitive-type/-companion/-r-e-f-e-r-e-n-c-e_-h-p-r-o-f_-t-y-p-e/#reference_hprof_type","title":"REFERENCE_HPROF_TYPE","text":"<p>[jvm]\\ const val REFERENCE_HPROF_TYPE: Int = 2</p> <p>The hprof defined \"basic type\" for references.</p>"},{"location":"api/shark/-primitive-type/-companion/byte-size-by-hprof-type/","title":"Byte size by hprof type","text":"<p>//leakcanary-repo/shark/PrimitiveType/Companion/byteSizeByHprofType</p>"},{"location":"api/shark/-primitive-type/-companion/byte-size-by-hprof-type/#bytesizebyhproftype","title":"byteSizeByHprofType","text":"<p>[jvm]\\ val byteSizeByHprofType: Map<Int, Int></p>"},{"location":"api/shark/-primitive-type/-companion/primitive-type-by-hprof-type/","title":"Primitive type by hprof type","text":"<p>//leakcanary-repo/shark/PrimitiveType/Companion/primitiveTypeByHprofType</p>"},{"location":"api/shark/-primitive-type/-companion/primitive-type-by-hprof-type/#primitivetypebyhproftype","title":"primitiveTypeByHprofType","text":"<p>[jvm]\\ val primitiveTypeByHprofType: Map<Int, PrimitiveType></p>"},{"location":"api/shark/-primitive-type/-d-o-u-b-l-e/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/DOUBLE</p>"},{"location":"api/shark/-primitive-type/-d-o-u-b-l-e/#double","title":"DOUBLE","text":"<p>[jvm]\\ DOUBLE</p>"},{"location":"api/shark/-primitive-type/-d-o-u-b-l-e/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-f-l-o-a-t/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/FLOAT</p>"},{"location":"api/shark/-primitive-type/-f-l-o-a-t/#float","title":"FLOAT","text":"<p>[jvm]\\ FLOAT</p>"},{"location":"api/shark/-primitive-type/-f-l-o-a-t/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-i-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/INT</p>"},{"location":"api/shark/-primitive-type/-i-n-t/#int","title":"INT","text":"<p>[jvm]\\ INT</p>"},{"location":"api/shark/-primitive-type/-i-n-t/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-l-o-n-g/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/LONG</p>"},{"location":"api/shark/-primitive-type/-l-o-n-g/#long","title":"LONG","text":"<p>[jvm]\\ LONG</p>"},{"location":"api/shark/-primitive-type/-l-o-n-g/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-s-h-o-r-t/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/SHORT</p>"},{"location":"api/shark/-primitive-type/-s-h-o-r-t/#short","title":"SHORT","text":"<p>[jvm]\\ SHORT</p>"},{"location":"api/shark/-primitive-type/-s-h-o-r-t/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-prioritizing-shortest-path-finder/","title":"Index","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/#prioritizingshortestpathfinder","title":"PrioritizingShortestPathFinder","text":"<p>[jvm]\\ class PrioritizingShortestPathFinder : ShortestPathFinder</p> <p>Not thread safe.</p> <p>Finds the shortest path from leaking references to a gc root, first ignoring references identified as \"to visit last\" and then visiting them as needed if no path is found.</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/#types","title":"Types","text":"Name Summary Event [jvm]interface Event Factory [jvm]class Factory(listener: PrioritizingShortestPathFinder.Event.Listener, referenceReaderFactory: ReferenceReader.Factory<HeapObject>, gcRootProvider: GcRootProvider, computeRetainedHeapSize: Boolean) : ShortestPathFinder.Factory"},{"location":"api/shark/-prioritizing-shortest-path-finder/#functions","title":"Functions","text":"Name Summary findShortestPathsFromGcRoots [jvm]open override fun findShortestPathsFromGcRoots(leakingObjectIds: Set<Long>): PathFindingResults"},{"location":"api/shark/-prioritizing-shortest-path-finder/find-shortest-paths-from-gc-roots/","title":"Find shortest paths from gc roots","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/findShortestPathsFromGcRoots</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/find-shortest-paths-from-gc-roots/#findshortestpathsfromgcroots","title":"findShortestPathsFromGcRoots","text":"<p>[jvm]\\ open override fun findShortestPathsFromGcRoots(leakingObjectIds: Set<Long>): PathFindingResults</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/","title":"Index","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/Event</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/#event","title":"Event","text":"<p>interface Event</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/#inheritors","title":"Inheritors","text":"StartedFindingPathsToRetainedObjects StartedFindingDominators"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/#types","title":"Types","text":"Name Summary Listener [jvm]fun interface Listener StartedFindingDominators [jvm]object StartedFindingDominators : PrioritizingShortestPathFinder.Event StartedFindingPathsToRetainedObjects [jvm]object StartedFindingPathsToRetainedObjects : PrioritizingShortestPathFinder.Event"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-listener/","title":"Index","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/Event/Listener</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-listener/#listener","title":"Listener","text":"<p>[jvm]\\ fun interface Listener</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-listener/#functions","title":"Functions","text":"Name Summary onEvent [jvm]abstract fun onEvent(event: PrioritizingShortestPathFinder.Event)"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/Event/Listener/onEvent</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-listener/on-event/#onevent","title":"onEvent","text":"<p>[jvm]\\ abstract fun onEvent(event: PrioritizingShortestPathFinder.Event)</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-started-finding-dominators/","title":"Index","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/Event/StartedFindingDominators</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-started-finding-dominators/#startedfindingdominators","title":"StartedFindingDominators","text":"<p>[jvm]\\ object StartedFindingDominators : PrioritizingShortestPathFinder.Event</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-started-finding-paths-to-retained-objects/","title":"Index","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/Event/StartedFindingPathsToRetainedObjects</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-started-finding-paths-to-retained-objects/#startedfindingpathstoretainedobjects","title":"StartedFindingPathsToRetainedObjects","text":"<p>[jvm]\\ object StartedFindingPathsToRetainedObjects : PrioritizingShortestPathFinder.Event</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/Factory</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-factory/#factory","title":"Factory","text":"<p>[jvm]\\ class Factory(listener: PrioritizingShortestPathFinder.Event.Listener, referenceReaderFactory: ReferenceReader.Factory<HeapObject>, gcRootProvider: GcRootProvider, computeRetainedHeapSize: Boolean) : ShortestPathFinder.Factory</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-factory/#constructors","title":"Constructors","text":"Factory [jvm]constructor(listener: PrioritizingShortestPathFinder.Event.Listener, referenceReaderFactory: ReferenceReader.Factory<HeapObject>, gcRootProvider: GcRootProvider, computeRetainedHeapSize: Boolean)"},{"location":"api/shark/-prioritizing-shortest-path-finder/-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]open override fun createFor(heapGraph: HeapGraph): ShortestPathFinder"},{"location":"api/shark/-prioritizing-shortest-path-finder/-factory/-factory/","title":"factory","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/Factory/Factory</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-factory/-factory/#factory","title":"Factory","text":"<p>[jvm]\\ constructor(listener: PrioritizingShortestPathFinder.Event.Listener, referenceReaderFactory: ReferenceReader.Factory<HeapObject>, gcRootProvider: GcRootProvider, computeRetainedHeapSize: Boolean)</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/Factory/createFor</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ open override fun createFor(heapGraph: HeapGraph): ShortestPathFinder</p>"},{"location":"api/shark/-proguard-mapping/","title":"Index","text":"<p>//leakcanary-repo/shark/ProguardMapping</p>"},{"location":"api/shark/-proguard-mapping/#proguardmapping","title":"ProguardMapping","text":"<p>[jvm]\\ class ProguardMapping</p>"},{"location":"api/shark/-proguard-mapping/#constructors","title":"Constructors","text":"ProguardMapping [jvm]constructor()"},{"location":"api/shark/-proguard-mapping/#functions","title":"Functions","text":"Name Summary addMapping [jvm]fun addMapping(obfuscatedName: String, clearName: String)Adds entry to the obfuscatedToClearNamesMap map. create [jvm]fun ProguardMapping.create(block: ProguardMappingHelper.() -> Unit): ProguardMapping deobfuscateClassName [jvm]fun deobfuscateClassName(obfuscatedClassName: String): StringReturns deobfuscated class name or original string if there is no mapping for given obfuscated name. deobfuscateFieldName [jvm]fun deobfuscateFieldName(obfuscatedClass: String, obfuscatedField: String): StringReturns deobfuscated field name or original string if there is no mapping for given obfuscated name."},{"location":"api/shark/-proguard-mapping/-proguard-mapping/","title":"proguard mapping","text":"<p>//leakcanary-repo/shark/ProguardMapping/ProguardMapping</p>"},{"location":"api/shark/-proguard-mapping/-proguard-mapping/#proguardmapping","title":"ProguardMapping","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-proguard-mapping/add-mapping/","title":"Add mapping","text":"<p>//leakcanary-repo/shark/ProguardMapping/addMapping</p>"},{"location":"api/shark/-proguard-mapping/add-mapping/#addmapping","title":"addMapping","text":"<p>[jvm]\\ fun addMapping(obfuscatedName: String, clearName: String)</p> <p>Adds entry to the obfuscatedToClearNamesMap map.</p>"},{"location":"api/shark/-proguard-mapping/deobfuscate-class-name/","title":"Deobfuscate class name","text":"<p>//leakcanary-repo/shark/ProguardMapping/deobfuscateClassName</p>"},{"location":"api/shark/-proguard-mapping/deobfuscate-class-name/#deobfuscateclassname","title":"deobfuscateClassName","text":"<p>[jvm]\\ fun deobfuscateClassName(obfuscatedClassName: String): String</p> <p>Returns deobfuscated class name or original string if there is no mapping for given obfuscated name.</p>"},{"location":"api/shark/-proguard-mapping/deobfuscate-field-name/","title":"Deobfuscate field name","text":"<p>//leakcanary-repo/shark/ProguardMapping/deobfuscateFieldName</p>"},{"location":"api/shark/-proguard-mapping/deobfuscate-field-name/#deobfuscatefieldname","title":"deobfuscateFieldName","text":"<p>[jvm]\\ fun deobfuscateFieldName(obfuscatedClass: String, obfuscatedField: String): String</p> <p>Returns deobfuscated field name or original string if there is no mapping for given obfuscated name.</p>"},{"location":"api/shark/-proguard-mapping-helper/","title":"Index","text":"<p>//leakcanary-repo/shark/ProguardMappingHelper</p>"},{"location":"api/shark/-proguard-mapping-helper/#proguardmappinghelper","title":"ProguardMappingHelper","text":"<p>[jvm]\\ class ProguardMappingHelper(proguardMapping: ProguardMapping)</p>"},{"location":"api/shark/-proguard-mapping-helper/#constructors","title":"Constructors","text":"ProguardMappingHelper [jvm]constructor(proguardMapping: ProguardMapping)"},{"location":"api/shark/-proguard-mapping-helper/#types","title":"Types","text":"Name Summary Class [jvm]inner class Class(val nameMapping: Pair<String, String>)"},{"location":"api/shark/-proguard-mapping-helper/#functions","title":"Functions","text":"Name Summary clazz [jvm]fun clazz(className: Pair<String, String>, fieldsBlock: ProguardMappingHelper.Class.() -> Unit = {}) field [jvm]fun ProguardMappingHelper.Class.field(block: () -> Pair<String, String>)"},{"location":"api/shark/-proguard-mapping-helper/-proguard-mapping-helper/","title":"proguard mapping helper","text":"<p>//leakcanary-repo/shark/ProguardMappingHelper/ProguardMappingHelper</p>"},{"location":"api/shark/-proguard-mapping-helper/-proguard-mapping-helper/#proguardmappinghelper","title":"ProguardMappingHelper","text":"<p>[jvm]\\ constructor(proguardMapping: ProguardMapping)</p>"},{"location":"api/shark/-proguard-mapping-helper/clazz/","title":"Clazz","text":"<p>//leakcanary-repo/shark/ProguardMappingHelper/clazz</p>"},{"location":"api/shark/-proguard-mapping-helper/clazz/#clazz","title":"clazz","text":"<p>[jvm]\\ fun clazz(className: Pair<String, String>, fieldsBlock: ProguardMappingHelper.Class.() -> Unit = {})</p>"},{"location":"api/shark/-proguard-mapping-helper/field/","title":"Field","text":"<p>//leakcanary-repo/shark/ProguardMappingHelper/field</p>"},{"location":"api/shark/-proguard-mapping-helper/field/#field","title":"field","text":"<p>[jvm]\\ fun ProguardMappingHelper.Class.field(block: () -> Pair<String, String>)</p>"},{"location":"api/shark/-proguard-mapping-helper/-class/","title":"Index","text":"<p>//leakcanary-repo/shark/ProguardMappingHelper/Class</p>"},{"location":"api/shark/-proguard-mapping-helper/-class/#class","title":"Class","text":"<p>[jvm]\\ inner class Class(val nameMapping: Pair<String, String>)</p>"},{"location":"api/shark/-proguard-mapping-helper/-class/#constructors","title":"Constructors","text":"Class [jvm]constructor(nameMapping: Pair<String, String>)"},{"location":"api/shark/-proguard-mapping-helper/-class/#properties","title":"Properties","text":"Name Summary fieldMappings [jvm]val fieldMappings: MutableSet<Pair<String, String>> nameMapping [jvm]val nameMapping: Pair<String, String>"},{"location":"api/shark/-proguard-mapping-helper/-class/-class/","title":"class","text":"<p>//leakcanary-repo/shark/ProguardMappingHelper/Class/Class</p>"},{"location":"api/shark/-proguard-mapping-helper/-class/-class/#class","title":"Class","text":"<p>[jvm]\\ constructor(nameMapping: Pair<String, String>)</p>"},{"location":"api/shark/-proguard-mapping-helper/-class/field-mappings/","title":"Field mappings","text":"<p>//leakcanary-repo/shark/ProguardMappingHelper/Class/fieldMappings</p>"},{"location":"api/shark/-proguard-mapping-helper/-class/field-mappings/#fieldmappings","title":"fieldMappings","text":"<p>[jvm]\\ val fieldMappings: MutableSet<Pair<String, String>></p>"},{"location":"api/shark/-proguard-mapping-helper/-class/name-mapping/","title":"Name mapping","text":"<p>//leakcanary-repo/shark/ProguardMappingHelper/Class/nameMapping</p>"},{"location":"api/shark/-proguard-mapping-helper/-class/name-mapping/#namemapping","title":"nameMapping","text":"<p>[jvm]\\ val nameMapping: Pair<String, String></p>"},{"location":"api/shark/-proguard-mapping-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/ProguardMappingReader</p>"},{"location":"api/shark/-proguard-mapping-reader/#proguardmappingreader","title":"ProguardMappingReader","text":"<p>[jvm]\\ class ProguardMappingReader(proguardMappingInputStream: InputStream)</p>"},{"location":"api/shark/-proguard-mapping-reader/#constructors","title":"Constructors","text":"ProguardMappingReader [jvm]constructor(proguardMappingInputStream: InputStream)"},{"location":"api/shark/-proguard-mapping-reader/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-proguard-mapping-reader/#functions","title":"Functions","text":"Name Summary readProguardMapping [jvm]fun readProguardMapping(): ProguardMapping"},{"location":"api/shark/-proguard-mapping-reader/-proguard-mapping-reader/","title":"proguard mapping reader","text":"<p>//leakcanary-repo/shark/ProguardMappingReader/ProguardMappingReader</p>"},{"location":"api/shark/-proguard-mapping-reader/-proguard-mapping-reader/#proguardmappingreader","title":"ProguardMappingReader","text":"<p>[jvm]\\ constructor(proguardMappingInputStream: InputStream)</p>"},{"location":"api/shark/-proguard-mapping-reader/read-proguard-mapping/","title":"Read proguard mapping","text":"<p>//leakcanary-repo/shark/ProguardMappingReader/readProguardMapping</p>"},{"location":"api/shark/-proguard-mapping-reader/read-proguard-mapping/#readproguardmapping","title":"readProguardMapping","text":"<p>[jvm]\\ fun readProguardMapping(): ProguardMapping</p>"},{"location":"api/shark/-proguard-mapping-reader/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ProguardMappingReader/Companion</p>"},{"location":"api/shark/-proguard-mapping-reader/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-random-access-hprof-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/RandomAccessHprofReader</p>"},{"location":"api/shark/-random-access-hprof-reader/#randomaccesshprofreader","title":"RandomAccessHprofReader","text":"<p>[jvm]\\ class RandomAccessHprofReader : Closeable</p> <p>Reads records in a Hprof source, one at a time with a specific position and size. Call openReaderFor to obtain a new instance.</p>"},{"location":"api/shark/-random-access-hprof-reader/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-random-access-hprof-reader/#functions","title":"Functions","text":"Name Summary close [jvm]open override fun close() readRecord [jvm]fun <T> readRecord(recordPosition: Long, recordSize: Long, withRecordReader: HprofRecordReader.() -> T): TLoads recordSize bytes at recordPosition into the buffer that backs HprofRecordReader then calls withRecordReader with that reader as a receiver. withRecordReader is expected to use the receiver reader to read one record of exactly recordSize bytes."},{"location":"api/shark/-random-access-hprof-reader/close/","title":"Close","text":"<p>//leakcanary-repo/shark/RandomAccessHprofReader/close</p>"},{"location":"api/shark/-random-access-hprof-reader/close/#close","title":"close","text":"<p>[jvm]\\ open override fun close()</p>"},{"location":"api/shark/-random-access-hprof-reader/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/RandomAccessHprofReader/readRecord</p>"},{"location":"api/shark/-random-access-hprof-reader/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ fun <T> readRecord(recordPosition: Long, recordSize: Long, withRecordReader: HprofRecordReader.() -> T): T</p> <p>Loads recordSize bytes at recordPosition into the buffer that backs HprofRecordReader then calls withRecordReader with that reader as a receiver. withRecordReader is expected to use the receiver reader to read one record of exactly recordSize bytes.</p>"},{"location":"api/shark/-random-access-hprof-reader/read-record/#return","title":"Return","text":"<p>the results from withRecordReader</p>"},{"location":"api/shark/-random-access-hprof-reader/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/RandomAccessHprofReader/Companion</p>"},{"location":"api/shark/-random-access-hprof-reader/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-random-access-hprof-reader/-companion/#functions","title":"Functions","text":"Name Summary openReaderFor [jvm]fun openReaderFor(hprofFile: File, hprofHeader: HprofHeader = HprofHeader.parseHeaderOf(hprofFile)): RandomAccessHprofReaderfun openReaderFor(hprofSourceProvider: RandomAccessSourceProvider, hprofHeader: HprofHeader = hprofSourceProvider.openRandomAccessSource() .use { HprofHeader.parseHeaderOf(it.asStreamingSource()) }): RandomAccessHprofReader"},{"location":"api/shark/-random-access-hprof-reader/-companion/open-reader-for/","title":"Open reader for","text":"<p>//leakcanary-repo/shark/RandomAccessHprofReader/Companion/openReaderFor</p>"},{"location":"api/shark/-random-access-hprof-reader/-companion/open-reader-for/#openreaderfor","title":"openReaderFor","text":"<p>[jvm]\\ fun openReaderFor(hprofFile: File, hprofHeader: HprofHeader = HprofHeader.parseHeaderOf(hprofFile)): RandomAccessHprofReader</p> <p>fun openReaderFor(hprofSourceProvider: RandomAccessSourceProvider, hprofHeader: HprofHeader = hprofSourceProvider.openRandomAccessSource() .use { HprofHeader.parseHeaderOf(it.asStreamingSource()) }): RandomAccessHprofReader</p>"},{"location":"api/shark/-random-access-source/","title":"Index","text":"<p>//leakcanary-repo/shark/RandomAccessSource</p>"},{"location":"api/shark/-random-access-source/#randomaccesssource","title":"RandomAccessSource","text":"<p>[jvm]\\ interface RandomAccessSource : Closeable</p>"},{"location":"api/shark/-random-access-source/#functions","title":"Functions","text":"Name Summary asStreamingSource [jvm]open fun asStreamingSource(): BufferedSource close [jvm]abstract override fun close() read [jvm]abstract fun read(sink: Buffer, position: Long, byteCount: Long): Long"},{"location":"api/shark/-random-access-source/as-streaming-source/","title":"As streaming source","text":"<p>//leakcanary-repo/shark/RandomAccessSource/asStreamingSource</p>"},{"location":"api/shark/-random-access-source/as-streaming-source/#asstreamingsource","title":"asStreamingSource","text":"<p>[jvm]\\ open fun asStreamingSource(): BufferedSource</p>"},{"location":"api/shark/-random-access-source/read/","title":"Read","text":"<p>//leakcanary-repo/shark/RandomAccessSource/read</p>"},{"location":"api/shark/-random-access-source/read/#read","title":"read","text":"<p>[jvm]\\ abstract fun read(sink: Buffer, position: Long, byteCount: Long): Long</p>"},{"location":"api/shark/-random-access-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/RandomAccessSourceProvider</p>"},{"location":"api/shark/-random-access-source-provider/#randomaccesssourceprovider","title":"RandomAccessSourceProvider","text":"<p>fun interface RandomAccessSourceProvider</p> <p>Can open RandomAccessSource instances.</p>"},{"location":"api/shark/-random-access-source-provider/#inheritors","title":"Inheritors","text":"DualSourceProvider"},{"location":"api/shark/-random-access-source-provider/#functions","title":"Functions","text":"Name Summary openRandomAccessSource [jvm]abstract fun openRandomAccessSource(): RandomAccessSource"},{"location":"api/shark/-random-access-source-provider/open-random-access-source/","title":"Open random access source","text":"<p>//leakcanary-repo/shark/RandomAccessSourceProvider/openRandomAccessSource</p>"},{"location":"api/shark/-random-access-source-provider/open-random-access-source/#openrandomaccesssource","title":"openRandomAccessSource","text":"<p>[jvm]\\ abstract fun openRandomAccessSource(): RandomAccessSource</p>"},{"location":"api/shark/-real-leak-tracer-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/RealLeakTracerFactory</p>"},{"location":"api/shark/-real-leak-tracer-factory/#realleaktracerfactory","title":"RealLeakTracerFactory","text":"<p>[jvm]\\ class RealLeakTracerFactory(shortestPathFinderFactory: ShortestPathFinder.Factory, objectInspectors: List<ObjectInspector>, listener: RealLeakTracerFactory.Event.Listener) : LeakTracer.Factory</p>"},{"location":"api/shark/-real-leak-tracer-factory/#constructors","title":"Constructors","text":"RealLeakTracerFactory [jvm]constructor(shortestPathFinderFactory: ShortestPathFinder.Factory, objectInspectors: List<ObjectInspector>, listener: RealLeakTracerFactory.Event.Listener)"},{"location":"api/shark/-real-leak-tracer-factory/#types","title":"Types","text":"Name Summary Event [jvm]interface Event"},{"location":"api/shark/-real-leak-tracer-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]open override fun createFor(heapGraph: HeapGraph): LeakTracer"},{"location":"api/shark/-real-leak-tracer-factory/-real-leak-tracer-factory/","title":"real leak tracer factory","text":"<p>//leakcanary-repo/shark/RealLeakTracerFactory/RealLeakTracerFactory</p>"},{"location":"api/shark/-real-leak-tracer-factory/-real-leak-tracer-factory/#realleaktracerfactory","title":"RealLeakTracerFactory","text":"<p>[jvm]\\ constructor(shortestPathFinderFactory: ShortestPathFinder.Factory, objectInspectors: List<ObjectInspector>, listener: RealLeakTracerFactory.Event.Listener)</p>"},{"location":"api/shark/-real-leak-tracer-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/RealLeakTracerFactory/createFor</p>"},{"location":"api/shark/-real-leak-tracer-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ open override fun createFor(heapGraph: HeapGraph): LeakTracer</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/","title":"Index","text":"<p>//leakcanary-repo/shark/RealLeakTracerFactory/Event</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/#event","title":"Event","text":"<p>interface Event</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/#inheritors","title":"Inheritors","text":"StartedBuildingLeakTraces StartedInspectingObjects StartedComputingJavaHeapRetainedSize"},{"location":"api/shark/-real-leak-tracer-factory/-event/#types","title":"Types","text":"Name Summary Listener [jvm]fun interface Listener StartedBuildingLeakTraces [jvm]object StartedBuildingLeakTraces : RealLeakTracerFactory.Event StartedComputingJavaHeapRetainedSize [jvm]object StartedComputingJavaHeapRetainedSize : RealLeakTracerFactory.Event StartedInspectingObjects [jvm]object StartedInspectingObjects : RealLeakTracerFactory.Event"},{"location":"api/shark/-real-leak-tracer-factory/-event/-listener/","title":"Index","text":"<p>//leakcanary-repo/shark/RealLeakTracerFactory/Event/Listener</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/-listener/#listener","title":"Listener","text":"<p>[jvm]\\ fun interface Listener</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/-listener/#functions","title":"Functions","text":"Name Summary onEvent [jvm]abstract fun onEvent(event: RealLeakTracerFactory.Event)"},{"location":"api/shark/-real-leak-tracer-factory/-event/-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/shark/RealLeakTracerFactory/Event/Listener/onEvent</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/-listener/on-event/#onevent","title":"onEvent","text":"<p>[jvm]\\ abstract fun onEvent(event: RealLeakTracerFactory.Event)</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/-started-building-leak-traces/","title":"Index","text":"<p>//leakcanary-repo/shark/RealLeakTracerFactory/Event/StartedBuildingLeakTraces</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/-started-building-leak-traces/#startedbuildingleaktraces","title":"StartedBuildingLeakTraces","text":"<p>[jvm]\\ object StartedBuildingLeakTraces : RealLeakTracerFactory.Event</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/-started-computing-java-heap-retained-size/","title":"Index","text":"<p>//leakcanary-repo/shark/RealLeakTracerFactory/Event/StartedComputingJavaHeapRetainedSize</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/-started-computing-java-heap-retained-size/#startedcomputingjavaheapretainedsize","title":"StartedComputingJavaHeapRetainedSize","text":"<p>[jvm]\\ object StartedComputingJavaHeapRetainedSize : RealLeakTracerFactory.Event</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/-started-inspecting-objects/","title":"Index","text":"<p>//leakcanary-repo/shark/RealLeakTracerFactory/Event/StartedInspectingObjects</p>"},{"location":"api/shark/-real-leak-tracer-factory/-event/-started-inspecting-objects/#startedinspectingobjects","title":"StartedInspectingObjects","text":"<p>[jvm]\\ object StartedInspectingObjects : RealLeakTracerFactory.Event</p>"},{"location":"api/shark/-reference/","title":"Index","text":"<p>//leakcanary-repo/shark/Reference</p>"},{"location":"api/shark/-reference/#reference","title":"Reference","text":"<p>[jvm]\\ data class Reference(val valueObjectId: Long, val isLowPriority: Boolean, val isLeafObject: Boolean = false, val lazyDetailsResolver: Reference.LazyDetails.Resolver)</p> <p>TODO Review as public API.</p>"},{"location":"api/shark/-reference/#constructors","title":"Constructors","text":"Reference [jvm]constructor(valueObjectId: Long, isLowPriority: Boolean, isLeafObject: Boolean = false, lazyDetailsResolver: Reference.LazyDetails.Resolver)"},{"location":"api/shark/-reference/#types","title":"Types","text":"Name Summary LazyDetails [jvm]class LazyDetails(val name: String, val locationClassObjectId: Long, val locationType: ReferenceLocationType, val matchedLibraryLeak: LibraryLeakReferenceMatcher?, val isVirtual: Boolean)"},{"location":"api/shark/-reference/#properties","title":"Properties","text":"Name Summary isLeafObject [jvm]val isLeafObject: Boolean = falseWhether this object should be treated as a leaf / sink object with no outgoing references (regardless of its actual content). isLowPriority [jvm]val isLowPriority: BooleanLow priority references are references that should be explored after any non low priority reference has been explored. This ensures that such references are not on the shortest best path if there is any other path that doesn\u2019t include any low priority reference. lazyDetailsResolver [jvm]val lazyDetailsResolver: Reference.LazyDetails.Resolver valueObjectId [jvm]val valueObjectId: LongThe value of the reference, i.e. the object the reference is pointing to."},{"location":"api/shark/-reference/-reference/","title":"reference","text":"<p>//leakcanary-repo/shark/Reference/Reference</p>"},{"location":"api/shark/-reference/-reference/#reference","title":"Reference","text":"<p>[jvm]\\ constructor(valueObjectId: Long, isLowPriority: Boolean, isLeafObject: Boolean = false, lazyDetailsResolver: Reference.LazyDetails.Resolver)</p>"},{"location":"api/shark/-reference/is-leaf-object/","title":"Is leaf object","text":"<p>//leakcanary-repo/shark/Reference/isLeafObject</p>"},{"location":"api/shark/-reference/is-leaf-object/#isleafobject","title":"isLeafObject","text":"<p>[jvm]\\ val isLeafObject: Boolean = false</p> <p>Whether this object should be treated as a leaf / sink object with no outgoing references (regardless of its actual content).</p>"},{"location":"api/shark/-reference/is-low-priority/","title":"Is low priority","text":"<p>//leakcanary-repo/shark/Reference/isLowPriority</p>"},{"location":"api/shark/-reference/is-low-priority/#islowpriority","title":"isLowPriority","text":"<p>[jvm]\\ val isLowPriority: Boolean</p> <p>Low priority references are references that should be explored after any non low priority reference has been explored. This ensures that such references are not on the shortest best path if there is any other path that doesn\u2019t include any low priority reference.</p> <p>This is useful to highlight references that most likely exist due to known leaks (which means we can potentially find unknown leaks instead) as well as references which are harder to interpret for developers (such as java locals).</p>"},{"location":"api/shark/-reference/lazy-details-resolver/","title":"Lazy details resolver","text":"<p>//leakcanary-repo/shark/Reference/lazyDetailsResolver</p>"},{"location":"api/shark/-reference/lazy-details-resolver/#lazydetailsresolver","title":"lazyDetailsResolver","text":"<p>[jvm]\\ val lazyDetailsResolver: Reference.LazyDetails.Resolver</p>"},{"location":"api/shark/-reference/value-object-id/","title":"Value object id","text":"<p>//leakcanary-repo/shark/Reference/valueObjectId</p>"},{"location":"api/shark/-reference/value-object-id/#valueobjectid","title":"valueObjectId","text":"<p>[jvm]\\ val valueObjectId: Long</p> <p>The value of the reference, i.e. the object the reference is pointing to.</p>"},{"location":"api/shark/-reference/-lazy-details/","title":"Index","text":"<p>//leakcanary-repo/shark/Reference/LazyDetails</p>"},{"location":"api/shark/-reference/-lazy-details/#lazydetails","title":"LazyDetails","text":"<p>[jvm]\\ class LazyDetails(val name: String, val locationClassObjectId: Long, val locationType: ReferenceLocationType, val matchedLibraryLeak: LibraryLeakReferenceMatcher?, val isVirtual: Boolean)</p>"},{"location":"api/shark/-reference/-lazy-details/#constructors","title":"Constructors","text":"LazyDetails [jvm]constructor(name: String, locationClassObjectId: Long, locationType: ReferenceLocationType, matchedLibraryLeak: LibraryLeakReferenceMatcher?, isVirtual: Boolean)"},{"location":"api/shark/-reference/-lazy-details/#types","title":"Types","text":"Name Summary Resolver [jvm]fun interface ResolverImplementations should keep the minimal state they need and if needed rehydrate the objects when resolving."},{"location":"api/shark/-reference/-lazy-details/#properties","title":"Properties","text":"Name Summary isVirtual [jvm]val isVirtual: Boolean locationClassObjectId [jvm]val locationClassObjectId: Long locationType [jvm]val locationType: ReferenceLocationType matchedLibraryLeak [jvm]val matchedLibraryLeak: LibraryLeakReferenceMatcher?Non null if this reference matches a known library leak pattern, null otherwise. name [jvm]val name: String"},{"location":"api/shark/-reference/-lazy-details/-lazy-details/","title":"lazy details","text":"<p>//leakcanary-repo/shark/Reference/LazyDetails/LazyDetails</p>"},{"location":"api/shark/-reference/-lazy-details/-lazy-details/#lazydetails","title":"LazyDetails","text":"<p>[jvm]\\ constructor(name: String, locationClassObjectId: Long, locationType: ReferenceLocationType, matchedLibraryLeak: LibraryLeakReferenceMatcher?, isVirtual: Boolean)</p>"},{"location":"api/shark/-reference/-lazy-details/is-virtual/","title":"Is virtual","text":"<p>//leakcanary-repo/shark/Reference/LazyDetails/isVirtual</p>"},{"location":"api/shark/-reference/-lazy-details/is-virtual/#isvirtual","title":"isVirtual","text":"<p>[jvm]\\ val isVirtual: Boolean</p>"},{"location":"api/shark/-reference/-lazy-details/location-class-object-id/","title":"Location class object id","text":"<p>//leakcanary-repo/shark/Reference/LazyDetails/locationClassObjectId</p>"},{"location":"api/shark/-reference/-lazy-details/location-class-object-id/#locationclassobjectid","title":"locationClassObjectId","text":"<p>[jvm]\\ val locationClassObjectId: Long</p>"},{"location":"api/shark/-reference/-lazy-details/location-type/","title":"Location type","text":"<p>//leakcanary-repo/shark/Reference/LazyDetails/locationType</p>"},{"location":"api/shark/-reference/-lazy-details/location-type/#locationtype","title":"locationType","text":"<p>[jvm]\\ val locationType: ReferenceLocationType</p>"},{"location":"api/shark/-reference/-lazy-details/matched-library-leak/","title":"Matched library leak","text":"<p>//leakcanary-repo/shark/Reference/LazyDetails/matchedLibraryLeak</p>"},{"location":"api/shark/-reference/-lazy-details/matched-library-leak/#matchedlibraryleak","title":"matchedLibraryLeak","text":"<p>[jvm]\\ val matchedLibraryLeak: LibraryLeakReferenceMatcher?</p> <p>Non null if this reference matches a known library leak pattern, null otherwise.</p> <p>Usually associated with Reference.isLowPriority being true, so that the shortest path finder will only go through matching references after it has exhausted references that don\u2019t match, prioritizing finding an application leak over a known library leak.</p>"},{"location":"api/shark/-reference/-lazy-details/name/","title":"Name","text":"<p>//leakcanary-repo/shark/Reference/LazyDetails/name</p>"},{"location":"api/shark/-reference/-lazy-details/name/#name","title":"name","text":"<p>[jvm]\\ val name: String</p>"},{"location":"api/shark/-reference/-lazy-details/-resolver/","title":"Index","text":"<p>//leakcanary-repo/shark/Reference/LazyDetails/Resolver</p>"},{"location":"api/shark/-reference/-lazy-details/-resolver/#resolver","title":"Resolver","text":"<p>[jvm]\\ fun interface Resolver</p> <p>Implementations should keep the minimal state they need and if needed rehydrate the objects when resolving.</p>"},{"location":"api/shark/-reference/-lazy-details/-resolver/#functions","title":"Functions","text":"Name Summary resolve [jvm]abstract fun resolve(): Reference.LazyDetails"},{"location":"api/shark/-reference/-lazy-details/-resolver/resolve/","title":"Resolve","text":"<p>//leakcanary-repo/shark/Reference/LazyDetails/Resolver/resolve</p>"},{"location":"api/shark/-reference/-lazy-details/-resolver/resolve/#resolve","title":"resolve","text":"<p>[jvm]\\ abstract fun resolve(): Reference.LazyDetails</p>"},{"location":"api/shark/-reference-location-type/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferenceLocationType</p>"},{"location":"api/shark/-reference-location-type/#referencelocationtype","title":"ReferenceLocationType","text":"<p>[jvm]\\ enum ReferenceLocationType : Enum<ReferenceLocationType> </p> <p>TODO This is quite similar to the leaktrace equivalent</p>"},{"location":"api/shark/-reference-location-type/#entries","title":"Entries","text":"INSTANCE_FIELD [jvm]INSTANCE_FIELD STATIC_FIELD [jvm]STATIC_FIELD LOCAL [jvm]LOCAL ARRAY_ENTRY [jvm]ARRAY_ENTRY"},{"location":"api/shark/-reference-location-type/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): ReferenceLocationTypeReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<ReferenceLocationType>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-reference-location-type/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-reference-location-type/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/ReferenceLocationType/valueOf</p>"},{"location":"api/shark/-reference-location-type/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): ReferenceLocationType</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-reference-location-type/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-reference-location-type/values/","title":"Values","text":"<p>//leakcanary-repo/shark/ReferenceLocationType/values</p>"},{"location":"api/shark/-reference-location-type/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<ReferenceLocationType></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-reference-location-type/-a-r-r-a-y_-e-n-t-r-y/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferenceLocationType/ARRAY_ENTRY</p>"},{"location":"api/shark/-reference-location-type/-a-r-r-a-y_-e-n-t-r-y/#array_entry","title":"ARRAY_ENTRY","text":"<p>[jvm]\\ ARRAY_ENTRY</p>"},{"location":"api/shark/-reference-location-type/-a-r-r-a-y_-e-n-t-r-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-reference-location-type/-i-n-s-t-a-n-c-e_-f-i-e-l-d/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferenceLocationType/INSTANCE_FIELD</p>"},{"location":"api/shark/-reference-location-type/-i-n-s-t-a-n-c-e_-f-i-e-l-d/#instance_field","title":"INSTANCE_FIELD","text":"<p>[jvm]\\ INSTANCE_FIELD</p>"},{"location":"api/shark/-reference-location-type/-i-n-s-t-a-n-c-e_-f-i-e-l-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-reference-location-type/-l-o-c-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferenceLocationType/LOCAL</p>"},{"location":"api/shark/-reference-location-type/-l-o-c-a-l/#local","title":"LOCAL","text":"<p>[jvm]\\ LOCAL</p>"},{"location":"api/shark/-reference-location-type/-l-o-c-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-reference-location-type/-s-t-a-t-i-c_-f-i-e-l-d/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferenceLocationType/STATIC_FIELD</p>"},{"location":"api/shark/-reference-location-type/-s-t-a-t-i-c_-f-i-e-l-d/#static_field","title":"STATIC_FIELD","text":"<p>[jvm]\\ STATIC_FIELD</p>"},{"location":"api/shark/-reference-location-type/-s-t-a-t-i-c_-f-i-e-l-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-reference-matcher/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferenceMatcher</p>"},{"location":"api/shark/-reference-matcher/#referencematcher","title":"ReferenceMatcher","text":"<p>sealed class ReferenceMatcher</p> <p>Used to pattern match known patterns of references in the heap, either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher), which lowers their traversal priority when exploring the heap.</p>"},{"location":"api/shark/-reference-matcher/#inheritors","title":"Inheritors","text":"LibraryLeakReferenceMatcher IgnoredReferenceMatcher"},{"location":"api/shark/-reference-matcher/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion ListBuilder [jvm]fun interface ListBuilder"},{"location":"api/shark/-reference-matcher/#properties","title":"Properties","text":"Name Summary pattern [jvm]abstract val pattern: ReferencePatternThe pattern that references will be matched against. patternApplies [jvm]abstract val patternApplies: (HeapGraph) -> BooleanWhether the identified leak may exist in the provided HeapGraph. Defaults to true. If the heap dump comes from a VM that runs a different version of the library that doesn\u2019t have the leak, then this should return false."},{"location":"api/shark/-reference-matcher/pattern-applies/","title":"Pattern applies","text":"<p>//leakcanary-repo/shark/ReferenceMatcher/patternApplies</p>"},{"location":"api/shark/-reference-matcher/pattern-applies/#patternapplies","title":"patternApplies","text":"<p>[jvm]\\ abstract val patternApplies: (HeapGraph) -> Boolean</p> <p>Whether the identified leak may exist in the provided HeapGraph. Defaults to true. If the heap dump comes from a VM that runs a different version of the library that doesn\u2019t have the leak, then this should return false.</p>"},{"location":"api/shark/-reference-matcher/pattern/","title":"Pattern","text":"<p>//leakcanary-repo/shark/ReferenceMatcher/pattern</p>"},{"location":"api/shark/-reference-matcher/pattern/#pattern","title":"pattern","text":"<p>[jvm]\\ abstract val pattern: ReferencePattern</p> <p>The pattern that references will be matched against.</p>"},{"location":"api/shark/-reference-matcher/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferenceMatcher/Companion</p>"},{"location":"api/shark/-reference-matcher/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-reference-matcher/-companion/#functions","title":"Functions","text":"Name Summary fromListBuilders [jvm]fun fromListBuilders(referenceMatcherListBuilders: Collection<ReferenceMatcher.ListBuilder>): List<ReferenceMatcher>Builds a list of ReferenceMatcher from referenceMatcherListBuilders."},{"location":"api/shark/-reference-matcher/-companion/#properties","title":"Properties","text":"Name Summary ALWAYS [jvm]val ALWAYS: (HeapGraph) -> Boolean"},{"location":"api/shark/-reference-matcher/-companion/-a-l-w-a-y-s/","title":"a l w a y s","text":"<p>//leakcanary-repo/shark/ReferenceMatcher/Companion/ALWAYS</p>"},{"location":"api/shark/-reference-matcher/-companion/-a-l-w-a-y-s/#always","title":"ALWAYS","text":"<p>[jvm]\\ val ALWAYS: (HeapGraph) -> Boolean</p>"},{"location":"api/shark/-reference-matcher/-companion/from-list-builders/","title":"From list builders","text":"<p>//leakcanary-repo/shark/ReferenceMatcher/Companion/fromListBuilders</p>"},{"location":"api/shark/-reference-matcher/-companion/from-list-builders/#fromlistbuilders","title":"fromListBuilders","text":"<p>[jvm]\\ fun fromListBuilders(referenceMatcherListBuilders: Collection<ReferenceMatcher.ListBuilder>): List<ReferenceMatcher></p> <p>Builds a list of ReferenceMatcher from referenceMatcherListBuilders.</p>"},{"location":"api/shark/-reference-matcher/-list-builder/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferenceMatcher/ListBuilder</p>"},{"location":"api/shark/-reference-matcher/-list-builder/#listbuilder","title":"ListBuilder","text":"<p>fun interface ListBuilder</p>"},{"location":"api/shark/-reference-matcher/-list-builder/#inheritors","title":"Inheritors","text":"JdkReferenceMatchers JvmObjectGrowthReferenceMatchers"},{"location":"api/shark/-reference-matcher/-list-builder/#functions","title":"Functions","text":"Name Summary add [jvm]abstract fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-reference-matcher/-list-builder/add/","title":"Add","text":"<p>//leakcanary-repo/shark/ReferenceMatcher/ListBuilder/add</p>"},{"location":"api/shark/-reference-matcher/-list-builder/add/#add","title":"add","text":"<p>[jvm]\\ abstract fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-reference-pattern/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferencePattern</p>"},{"location":"api/shark/-reference-pattern/#referencepattern","title":"ReferencePattern","text":"<p>sealed class ReferencePattern : Serializable</p> <p>A pattern that will match references for a given ReferenceMatcher.</p>"},{"location":"api/shark/-reference-pattern/#inheritors","title":"Inheritors","text":"JavaLocalPattern StaticFieldPattern InstanceFieldPattern NativeGlobalVariablePattern"},{"location":"api/shark/-reference-pattern/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion InstanceFieldPattern [jvm]data class InstanceFieldPattern(val className: String, val fieldName: String) : ReferencePatternMatches instances field references, identified by className and fieldName. JavaLocalPattern [jvm]data class JavaLocalPattern(val threadName: String) : ReferencePatternMatches local references held in the stack of frames of a given thread, identified by its name. NativeGlobalVariablePattern [jvm]data class NativeGlobalVariablePattern(val className: String) : ReferencePatternMatches native global variables (also known as jni global gc roots) that reference Java objects. The class name will match against classes, instances and object arrays with a matching class name. StaticFieldPattern [jvm]data class StaticFieldPattern(val className: String, val fieldName: String) : ReferencePatternMatches static field references, identified by className and fieldName."},{"location":"api/shark/-reference-pattern/#functions","title":"Functions","text":"Name Summary ignored [jvm]fun ReferencePattern.ignored(patternApplies: (HeapGraph) -> Boolean = ALWAYS): IgnoredReferenceMatcher leak [jvm]fun ReferencePattern.leak(description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS): LibraryLeakReferenceMatcher"},{"location":"api/shark/-reference-pattern/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferencePattern/Companion</p>"},{"location":"api/shark/-reference-pattern/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-reference-pattern/-companion/#functions","title":"Functions","text":"Name Summary instanceField [jvm]fun instanceField(className: String, fieldName: String): ReferencePattern.InstanceFieldPattern javaLocal [jvm]fun javaLocal(threadName: String): ReferencePattern.JavaLocalPattern nativeGlobalVariable [jvm]fun nativeGlobalVariable(className: String): ReferencePattern.NativeGlobalVariablePattern staticField [jvm]fun staticField(className: String, fieldName: String): ReferencePattern.StaticFieldPattern"},{"location":"api/shark/-reference-pattern/-companion/instance-field/","title":"Instance field","text":"<p>//leakcanary-repo/shark/ReferencePattern/Companion/instanceField</p>"},{"location":"api/shark/-reference-pattern/-companion/instance-field/#instancefield","title":"instanceField","text":"<p>[jvm]\\ fun instanceField(className: String, fieldName: String): ReferencePattern.InstanceFieldPattern</p>"},{"location":"api/shark/-reference-pattern/-companion/java-local/","title":"Java local","text":"<p>//leakcanary-repo/shark/ReferencePattern/Companion/javaLocal</p>"},{"location":"api/shark/-reference-pattern/-companion/java-local/#javalocal","title":"javaLocal","text":"<p>[jvm]\\ fun javaLocal(threadName: String): ReferencePattern.JavaLocalPattern</p>"},{"location":"api/shark/-reference-pattern/-companion/native-global-variable/","title":"Native global variable","text":"<p>//leakcanary-repo/shark/ReferencePattern/Companion/nativeGlobalVariable</p>"},{"location":"api/shark/-reference-pattern/-companion/native-global-variable/#nativeglobalvariable","title":"nativeGlobalVariable","text":"<p>[jvm]\\ fun nativeGlobalVariable(className: String): ReferencePattern.NativeGlobalVariablePattern</p>"},{"location":"api/shark/-reference-pattern/-companion/static-field/","title":"Static field","text":"<p>//leakcanary-repo/shark/ReferencePattern/Companion/staticField</p>"},{"location":"api/shark/-reference-pattern/-companion/static-field/#staticfield","title":"staticField","text":"<p>[jvm]\\ fun staticField(className: String, fieldName: String): ReferencePattern.StaticFieldPattern</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferencePattern/InstanceFieldPattern</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/#instancefieldpattern","title":"InstanceFieldPattern","text":"<p>[jvm]\\ data class InstanceFieldPattern(val className: String, val fieldName: String) : ReferencePattern</p> <p>Matches instances field references, identified by className and fieldName.</p> <p>Note: If fieldName is declared in a superclass it will still match for subclasses. This is to support overriding of rules for specific cases. If two ReferenceMatcher match for the same fieldName but for different className in a class hierarchy, then the closest class in the hierarchy wins.</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/#constructors","title":"Constructors","text":"InstanceFieldPattern [jvm]constructor(className: String, fieldName: String)"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/#functions","title":"Functions","text":"Name Summary ignored [jvm]fun ReferencePattern.ignored(patternApplies: (HeapGraph) -> Boolean = ALWAYS): IgnoredReferenceMatcher leak [jvm]fun ReferencePattern.leak(description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS): LibraryLeakReferenceMatcher toString [jvm]open override fun toString(): String"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/#properties","title":"Properties","text":"Name Summary className [jvm]val className: String fieldName [jvm]val fieldName: String"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/-instance-field-pattern/","title":"instance field pattern","text":"<p>//leakcanary-repo/shark/ReferencePattern/InstanceFieldPattern/InstanceFieldPattern</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/-instance-field-pattern/#instancefieldpattern","title":"InstanceFieldPattern","text":"<p>[jvm]\\ constructor(className: String, fieldName: String)</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/class-name/","title":"Class name","text":"<p>//leakcanary-repo/shark/ReferencePattern/InstanceFieldPattern/className</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/class-name/#classname","title":"className","text":"<p>[jvm]\\ val className: String</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/field-name/","title":"Field name","text":"<p>//leakcanary-repo/shark/ReferencePattern/InstanceFieldPattern/fieldName</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/field-name/#fieldname","title":"fieldName","text":"<p>[jvm]\\ val fieldName: String</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/ReferencePattern/InstanceFieldPattern/toString</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferencePattern/InstanceFieldPattern/Companion</p>"},{"location":"api/shark/-reference-pattern/-instance-field-pattern/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-reference-pattern/-java-local-pattern/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferencePattern/JavaLocalPattern</p>"},{"location":"api/shark/-reference-pattern/-java-local-pattern/#javalocalpattern","title":"JavaLocalPattern","text":"<p>[jvm]\\ data class JavaLocalPattern(val threadName: String) : ReferencePattern</p> <p>Matches local references held in the stack of frames of a given thread, identified by its name.</p>"},{"location":"api/shark/-reference-pattern/-java-local-pattern/#constructors","title":"Constructors","text":"JavaLocalPattern [jvm]constructor(threadName: String)"},{"location":"api/shark/-reference-pattern/-java-local-pattern/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-reference-pattern/-java-local-pattern/#functions","title":"Functions","text":"Name Summary ignored [jvm]fun ReferencePattern.ignored(patternApplies: (HeapGraph) -> Boolean = ALWAYS): IgnoredReferenceMatcher leak [jvm]fun ReferencePattern.leak(description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS): LibraryLeakReferenceMatcher toString [jvm]open override fun toString(): String"},{"location":"api/shark/-reference-pattern/-java-local-pattern/#properties","title":"Properties","text":"Name Summary threadName [jvm]val threadName: String"},{"location":"api/shark/-reference-pattern/-java-local-pattern/-java-local-pattern/","title":"java local pattern","text":"<p>//leakcanary-repo/shark/ReferencePattern/JavaLocalPattern/JavaLocalPattern</p>"},{"location":"api/shark/-reference-pattern/-java-local-pattern/-java-local-pattern/#javalocalpattern","title":"JavaLocalPattern","text":"<p>[jvm]\\ constructor(threadName: String)</p>"},{"location":"api/shark/-reference-pattern/-java-local-pattern/thread-name/","title":"Thread name","text":"<p>//leakcanary-repo/shark/ReferencePattern/JavaLocalPattern/threadName</p>"},{"location":"api/shark/-reference-pattern/-java-local-pattern/thread-name/#threadname","title":"threadName","text":"<p>[jvm]\\ val threadName: String</p>"},{"location":"api/shark/-reference-pattern/-java-local-pattern/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/ReferencePattern/JavaLocalPattern/toString</p>"},{"location":"api/shark/-reference-pattern/-java-local-pattern/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-reference-pattern/-java-local-pattern/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferencePattern/JavaLocalPattern/Companion</p>"},{"location":"api/shark/-reference-pattern/-java-local-pattern/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferencePattern/NativeGlobalVariablePattern</p>"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/#nativeglobalvariablepattern","title":"NativeGlobalVariablePattern","text":"<p>[jvm]\\ data class NativeGlobalVariablePattern(val className: String) : ReferencePattern</p> <p>Matches native global variables (also known as jni global gc roots) that reference Java objects. The class name will match against classes, instances and object arrays with a matching class name.</p>"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/#constructors","title":"Constructors","text":"NativeGlobalVariablePattern [jvm]constructor(className: String)"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/#functions","title":"Functions","text":"Name Summary ignored [jvm]fun ReferencePattern.ignored(patternApplies: (HeapGraph) -> Boolean = ALWAYS): IgnoredReferenceMatcher leak [jvm]fun ReferencePattern.leak(description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS): LibraryLeakReferenceMatcher toString [jvm]open override fun toString(): String"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/#properties","title":"Properties","text":"Name Summary className [jvm]val className: String"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/-native-global-variable-pattern/","title":"native global variable pattern","text":"<p>//leakcanary-repo/shark/ReferencePattern/NativeGlobalVariablePattern/NativeGlobalVariablePattern</p>"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/-native-global-variable-pattern/#nativeglobalvariablepattern","title":"NativeGlobalVariablePattern","text":"<p>[jvm]\\ constructor(className: String)</p>"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/class-name/","title":"Class name","text":"<p>//leakcanary-repo/shark/ReferencePattern/NativeGlobalVariablePattern/className</p>"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/class-name/#classname","title":"className","text":"<p>[jvm]\\ val className: String</p>"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/ReferencePattern/NativeGlobalVariablePattern/toString</p>"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferencePattern/NativeGlobalVariablePattern/Companion</p>"},{"location":"api/shark/-reference-pattern/-native-global-variable-pattern/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferencePattern/StaticFieldPattern</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/#staticfieldpattern","title":"StaticFieldPattern","text":"<p>[jvm]\\ data class StaticFieldPattern(val className: String, val fieldName: String) : ReferencePattern</p> <p>Matches static field references, identified by className and fieldName.</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/#constructors","title":"Constructors","text":"StaticFieldPattern [jvm]constructor(className: String, fieldName: String)"},{"location":"api/shark/-reference-pattern/-static-field-pattern/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-reference-pattern/-static-field-pattern/#functions","title":"Functions","text":"Name Summary ignored [jvm]fun ReferencePattern.ignored(patternApplies: (HeapGraph) -> Boolean = ALWAYS): IgnoredReferenceMatcher leak [jvm]fun ReferencePattern.leak(description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS): LibraryLeakReferenceMatcher toString [jvm]open override fun toString(): String"},{"location":"api/shark/-reference-pattern/-static-field-pattern/#properties","title":"Properties","text":"Name Summary className [jvm]val className: String fieldName [jvm]val fieldName: String"},{"location":"api/shark/-reference-pattern/-static-field-pattern/-static-field-pattern/","title":"static field pattern","text":"<p>//leakcanary-repo/shark/ReferencePattern/StaticFieldPattern/StaticFieldPattern</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/-static-field-pattern/#staticfieldpattern","title":"StaticFieldPattern","text":"<p>[jvm]\\ constructor(className: String, fieldName: String)</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/class-name/","title":"Class name","text":"<p>//leakcanary-repo/shark/ReferencePattern/StaticFieldPattern/className</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/class-name/#classname","title":"className","text":"<p>[jvm]\\ val className: String</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/field-name/","title":"Field name","text":"<p>//leakcanary-repo/shark/ReferencePattern/StaticFieldPattern/fieldName</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/field-name/#fieldname","title":"fieldName","text":"<p>[jvm]\\ val fieldName: String</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/ReferencePattern/StaticFieldPattern/toString</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferencePattern/StaticFieldPattern/Companion</p>"},{"location":"api/shark/-reference-pattern/-static-field-pattern/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferenceReader</p>"},{"location":"api/shark/-reference-reader/#referencereader","title":"ReferenceReader","text":"<p>fun interface ReferenceReader<T : HeapObject></p>"},{"location":"api/shark/-reference-reader/#inheritors","title":"Inheritors","text":"ChainingInstanceReferenceReader VirtualInstanceReferenceReader ClassReferenceReader FieldInstanceReferenceReader ObjectArrayReferenceReader"},{"location":"api/shark/-reference-reader/#types","title":"Types","text":"Name Summary Factory [jvm]fun interface Factory<T : HeapObject>"},{"location":"api/shark/-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]abstract fun read(source: T): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/ReferenceReader/read</p>"},{"location":"api/shark/-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ abstract fun read(source: T): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-reference-reader/-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/ReferenceReader/Factory</p>"},{"location":"api/shark/-reference-reader/-factory/#factory","title":"Factory","text":"<p>fun interface Factory<T : HeapObject></p>"},{"location":"api/shark/-reference-reader/-factory/#inheritors","title":"Inheritors","text":"ActualMatchingReferenceReaderFactory AndroidReferenceReaderFactory OpenJdkReferenceReaderFactory VirtualizingMatchingReferenceReaderFactory"},{"location":"api/shark/-reference-reader/-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]abstract fun createFor(heapGraph: HeapGraph): ReferenceReader<T>"},{"location":"api/shark/-reference-reader/-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/ReferenceReader/Factory/createFor</p>"},{"location":"api/shark/-reference-reader/-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ abstract fun createFor(heapGraph: HeapGraph): ReferenceReader<T></p>"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/","title":"Index","text":"<p>//leakcanary-repo/shark/RepeatingHeapGraphObjectGrowthDetector</p>"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/#repeatingheapgraphobjectgrowthdetector","title":"RepeatingHeapGraphObjectGrowthDetector","text":"<p>class RepeatingHeapGraphObjectGrowthDetector(objectGrowthDetector: ObjectGrowthDetector, completionListener: RepeatingHeapGraphObjectGrowthDetector.CompletionListener = CompletionListener { })</p>"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/#see-also","title":"See also","text":"RepeatingHeapGraphObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/#constructors","title":"Constructors","text":"RepeatingHeapGraphObjectGrowthDetector [jvm]constructor(objectGrowthDetector: ObjectGrowthDetector, completionListener: RepeatingHeapGraphObjectGrowthDetector.CompletionListener = CompletionListener { })"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/#types","title":"Types","text":"Name Summary CompletionListener [jvm]fun interface CompletionListener"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/#functions","title":"Functions","text":"Name Summary findRepeatedlyGrowingObjects [jvm]fun findRepeatedlyGrowingObjects(scenarioLoopsPerGraph: Int = InitialState.DEFAULT_SCENARIO_LOOPS_PER_GRAPH, heapGraphSequence: Sequence<CloseableHeapGraph>): HeapDiffDetects object growth by iterating through heapGraphSequence repeatedly until no object growth is detected or the sequence ends. Returns the HeapDiff for the last iteration. You can check HeapDiff.isGrowing and HeapDiff.growingObjects to report object growth."},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/-repeating-heap-graph-object-growth-detector/","title":"repeating heap graph object growth detector","text":"<p>//leakcanary-repo/shark/RepeatingHeapGraphObjectGrowthDetector/RepeatingHeapGraphObjectGrowthDetector</p>"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/-repeating-heap-graph-object-growth-detector/#repeatingheapgraphobjectgrowthdetector","title":"RepeatingHeapGraphObjectGrowthDetector","text":"<p>[jvm]\\ constructor(objectGrowthDetector: ObjectGrowthDetector, completionListener: RepeatingHeapGraphObjectGrowthDetector.CompletionListener = CompletionListener { })</p>"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/find-repeatedly-growing-objects/","title":"Find repeatedly growing objects","text":"<p>//leakcanary-repo/shark/RepeatingHeapGraphObjectGrowthDetector/findRepeatedlyGrowingObjects</p>"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/find-repeatedly-growing-objects/#findrepeatedlygrowingobjects","title":"findRepeatedlyGrowingObjects","text":"<p>[jvm]\\ fun findRepeatedlyGrowingObjects(scenarioLoopsPerGraph: Int = InitialState.DEFAULT_SCENARIO_LOOPS_PER_GRAPH, heapGraphSequence: Sequence<CloseableHeapGraph>): HeapDiff</p> <p>Detects object growth by iterating through heapGraphSequence repeatedly until no object growth is detected or the sequence ends. Returns the HeapDiff for the last iteration. You can check HeapDiff.isGrowing and HeapDiff.growingObjects to report object growth.</p>"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/-completion-listener/","title":"Index","text":"<p>//leakcanary-repo/shark/RepeatingHeapGraphObjectGrowthDetector/CompletionListener</p>"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/-completion-listener/#completionlistener","title":"CompletionListener","text":"<p>fun interface CompletionListener</p>"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/-completion-listener/#functions","title":"Functions","text":"Name Summary onObjectGrowthDetectionComplete [jvm]abstract fun onObjectGrowthDetectionComplete(result: HeapDiff)"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/-completion-listener/on-object-growth-detection-complete/","title":"On object growth detection complete","text":"<p>//leakcanary-repo/shark/RepeatingHeapGraphObjectGrowthDetector/CompletionListener/onObjectGrowthDetectionComplete</p>"},{"location":"api/shark/-repeating-heap-graph-object-growth-detector/-completion-listener/on-object-growth-detection-complete/#onobjectgrowthdetectioncomplete","title":"onObjectGrowthDetectionComplete","text":"<p>[jvm]\\ abstract fun onObjectGrowthDetectionComplete(result: HeapDiff)</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/","title":"Index","text":"<p>//leakcanary-repo/shark/RepeatingScenarioObjectGrowthDetector</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/#repeatingscenarioobjectgrowthdetector","title":"RepeatingScenarioObjectGrowthDetector","text":"<p>class RepeatingScenarioObjectGrowthDetector(heapGraphProvider: HeapGraphProvider, repeatingHeapGraphDetector: RepeatingHeapGraphObjectGrowthDetector)</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/shark/-repeating-scenario-object-growth-detector/#constructors","title":"Constructors","text":"RepeatingScenarioObjectGrowthDetector [jvm]constructor(heapGraphProvider: HeapGraphProvider, repeatingHeapGraphDetector: RepeatingHeapGraphObjectGrowthDetector)"},{"location":"api/shark/-repeating-scenario-object-growth-detector/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-repeating-scenario-object-growth-detector/#functions","title":"Functions","text":"Name Summary findRepeatedlyGrowingObjects [jvm]fun findRepeatedlyGrowingObjects(maxHeapDumps: Int = DEFAULT_MAX_HEAP_DUMPS, scenarioLoopsPerDump: Int = DEFAULT_SCENARIO_LOOPS_PER_DUMP, roundTripScenario: () -> Unit): HeapDiffDetects object growth by iterating through roundTripScenario repeatedly and dumping the heap every <code>scenarioLoopsPerDump</code> until no object growth is detected or we reach <code>maxHeapDumps</code>. Returns the HeapDiff for the last iteration. You can check HeapDiff.isGrowing and HeapDiff.growingObjects to report object growth."},{"location":"api/shark/-repeating-scenario-object-growth-detector/-repeating-scenario-object-growth-detector/","title":"repeating scenario object growth detector","text":"<p>//leakcanary-repo/shark/RepeatingScenarioObjectGrowthDetector/RepeatingScenarioObjectGrowthDetector</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/-repeating-scenario-object-growth-detector/#repeatingscenarioobjectgrowthdetector","title":"RepeatingScenarioObjectGrowthDetector","text":"<p>[jvm]\\ constructor(heapGraphProvider: HeapGraphProvider, repeatingHeapGraphDetector: RepeatingHeapGraphObjectGrowthDetector)</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/","title":"Find repeatedly growing objects","text":"<p>//leakcanary-repo/shark/RepeatingScenarioObjectGrowthDetector/findRepeatedlyGrowingObjects</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/#findrepeatedlygrowingobjects","title":"findRepeatedlyGrowingObjects","text":"<p>[jvm]\\ fun findRepeatedlyGrowingObjects(maxHeapDumps: Int = DEFAULT_MAX_HEAP_DUMPS, scenarioLoopsPerDump: Int = DEFAULT_SCENARIO_LOOPS_PER_DUMP, roundTripScenario: () -> Unit): HeapDiff</p> <p>Detects object growth by iterating through roundTripScenario repeatedly and dumping the heap every <code>scenarioLoopsPerDump</code> until no object growth is detected or we reach <code>maxHeapDumps</code>. Returns the HeapDiff for the last iteration. You can check HeapDiff.isGrowing and HeapDiff.growingObjects to report object growth.</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/#parameters","title":"Parameters","text":"<p>jvm</p> scenarioLoopsPerDump How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerDump times since the previous traversal. While 1 can work fine, we recommend at least 2 to ignore any side effect of dumping the heap."},{"location":"api/shark/-repeating-scenario-object-growth-detector/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/RepeatingScenarioObjectGrowthDetector/Companion</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/-companion/#properties","title":"Properties","text":"Name Summary DEFAULT_MAX_HEAP_DUMPS [jvm]const val DEFAULT_MAX_HEAP_DUMPS: Int = 5 DEFAULT_SCENARIO_LOOPS_PER_DUMP [jvm]const val DEFAULT_SCENARIO_LOOPS_PER_DUMP: Int = 2"},{"location":"api/shark/-repeating-scenario-object-growth-detector/-companion/-d-e-f-a-u-l-t_-m-a-x_-h-e-a-p_-d-u-m-p-s/","title":"d e f a u l t m a x h e a p d u m p s","text":"<p>//leakcanary-repo/shark/RepeatingScenarioObjectGrowthDetector/Companion/DEFAULT_MAX_HEAP_DUMPS</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/-companion/-d-e-f-a-u-l-t_-m-a-x_-h-e-a-p_-d-u-m-p-s/#default_max_heap_dumps","title":"DEFAULT_MAX_HEAP_DUMPS","text":"<p>[jvm]\\ const val DEFAULT_MAX_HEAP_DUMPS: Int = 5</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/-companion/-d-e-f-a-u-l-t_-s-c-e-n-a-r-i-o_-l-o-o-p-s_-p-e-r_-d-u-m-p/","title":"d e f a u l t s c e n a r i o l o o p s p e r d u m p","text":"<p>//leakcanary-repo/shark/RepeatingScenarioObjectGrowthDetector/Companion/DEFAULT_SCENARIO_LOOPS_PER_DUMP</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/-companion/-d-e-f-a-u-l-t_-s-c-e-n-a-r-i-o_-l-o-o-p-s_-p-e-r_-d-u-m-p/#default_scenario_loops_per_dump","title":"DEFAULT_SCENARIO_LOOPS_PER_DUMP","text":"<p>[jvm]\\ const val DEFAULT_SCENARIO_LOOPS_PER_DUMP: Int = 2</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/-companion/-i-n_-p-r-o-c-e-s-s_-s-c-e-n-a-r-i-o_-l-o-o-p-s_-p-e-r_-d-u-m-p/","title":"i n p r o c e s s s c e n a r i o l o o p s p e r d u m p","text":"<p>//leakcanary-repo/shark/RepeatingScenarioObjectGrowthDetector/Companion/IN_PROCESS_SCENARIO_LOOPS_PER_DUMP</p>"},{"location":"api/shark/-repeating-scenario-object-growth-detector/-companion/-i-n_-p-r-o-c-e-s-s_-s-c-e-n-a-r-i-o_-l-o-o-p-s_-p-e-r_-d-u-m-p/#in_process_scenario_loops_per_dump","title":"IN_PROCESS_SCENARIO_LOOPS_PER_DUMP","text":"<p>[jvm]\\ const val IN_PROCESS_SCENARIO_LOOPS_PER_DUMP: Int = 2</p> <p>In process => More than one to account for the impact of running the analysis.</p>"},{"location":"api/shark/-retained/","title":"Index","text":"<p>//leakcanary-repo/shark/Retained</p>"},{"location":"api/shark/-retained/#retained","title":"Retained","text":"<p>[jvm]\\ @JvmInline</p> <p>value class Retained</p>"},{"location":"api/shark/-retained/#properties","title":"Properties","text":"Name Summary heapSize [jvm]val heapSize: ByteSize isUnknown [jvm]val isUnknown: Boolean isZero [jvm]val isZero: Boolean objectCount [jvm]val objectCount: Int"},{"location":"api/shark/-retained/heap-size/","title":"Heap size","text":"<p>//leakcanary-repo/shark/Retained/heapSize</p>"},{"location":"api/shark/-retained/heap-size/#heapsize","title":"heapSize","text":"<p>[jvm]\\ val heapSize: ByteSize</p>"},{"location":"api/shark/-retained/is-unknown/","title":"Is unknown","text":"<p>//leakcanary-repo/shark/Retained/isUnknown</p>"},{"location":"api/shark/-retained/is-unknown/#isunknown","title":"isUnknown","text":"<p>[jvm]\\ val isUnknown: Boolean</p>"},{"location":"api/shark/-retained/is-zero/","title":"Is zero","text":"<p>//leakcanary-repo/shark/Retained/isZero</p>"},{"location":"api/shark/-retained/is-zero/#iszero","title":"isZero","text":"<p>[jvm]\\ val isZero: Boolean</p>"},{"location":"api/shark/-retained/object-count/","title":"Object count","text":"<p>//leakcanary-repo/shark/Retained/objectCount</p>"},{"location":"api/shark/-retained/object-count/#objectcount","title":"objectCount","text":"<p>[jvm]\\ val objectCount: Int</p>"},{"location":"api/shark/-shark-cli-command/","title":"Index","text":"<p>//leakcanary-repo/shark/SharkCliCommand</p>"},{"location":"api/shark/-shark-cli-command/#sharkclicommand","title":"SharkCliCommand","text":"<p>[jvm]\\ class SharkCliCommand : CliktCommand</p>"},{"location":"api/shark/-shark-cli-command/#constructors","title":"Constructors","text":"SharkCliCommand [jvm]constructor()"},{"location":"api/shark/-shark-cli-command/#types","title":"Types","text":"Name Summary CommandParams [jvm]class CommandParams(val source: SharkCliCommand.HeapDumpSource, val obfuscationMappingPath: File?) Companion [jvm]object Companion HeapDumpSource [jvm]sealed class HeapDumpSource"},{"location":"api/shark/-shark-cli-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-shark-cli-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-shark-cli-command/-shark-cli-command/","title":"shark cli command","text":"<p>//leakcanary-repo/shark/SharkCliCommand/SharkCliCommand</p>"},{"location":"api/shark/-shark-cli-command/-shark-cli-command/#sharkclicommand","title":"SharkCliCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-shark-cli-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/SharkCliCommand/run</p>"},{"location":"api/shark/-shark-cli-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-shark-cli-command/-command-params/","title":"Index","text":"<p>//leakcanary-repo/shark/SharkCliCommand/CommandParams</p>"},{"location":"api/shark/-shark-cli-command/-command-params/#commandparams","title":"CommandParams","text":"<p>[jvm]\\ class CommandParams(val source: SharkCliCommand.HeapDumpSource, val obfuscationMappingPath: File?)</p>"},{"location":"api/shark/-shark-cli-command/-command-params/#constructors","title":"Constructors","text":"CommandParams [jvm]constructor(source: SharkCliCommand.HeapDumpSource, obfuscationMappingPath: File?)"},{"location":"api/shark/-shark-cli-command/-command-params/#properties","title":"Properties","text":"Name Summary obfuscationMappingPath [jvm]val obfuscationMappingPath: File? source [jvm]val source: SharkCliCommand.HeapDumpSource"},{"location":"api/shark/-shark-cli-command/-command-params/-command-params/","title":"command params","text":"<p>//leakcanary-repo/shark/SharkCliCommand/CommandParams/CommandParams</p>"},{"location":"api/shark/-shark-cli-command/-command-params/-command-params/#commandparams","title":"CommandParams","text":"<p>[jvm]\\ constructor(source: SharkCliCommand.HeapDumpSource, obfuscationMappingPath: File?)</p>"},{"location":"api/shark/-shark-cli-command/-command-params/obfuscation-mapping-path/","title":"Obfuscation mapping path","text":"<p>//leakcanary-repo/shark/SharkCliCommand/CommandParams/obfuscationMappingPath</p>"},{"location":"api/shark/-shark-cli-command/-command-params/obfuscation-mapping-path/#obfuscationmappingpath","title":"obfuscationMappingPath","text":"<p>[jvm]\\ val obfuscationMappingPath: File?</p>"},{"location":"api/shark/-shark-cli-command/-command-params/source/","title":"Source","text":"<p>//leakcanary-repo/shark/SharkCliCommand/CommandParams/source</p>"},{"location":"api/shark/-shark-cli-command/-command-params/source/#source","title":"source","text":"<p>[jvm]\\ val source: SharkCliCommand.HeapDumpSource</p>"},{"location":"api/shark/-shark-cli-command/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/SharkCliCommand/Companion</p>"},{"location":"api/shark/-shark-cli-command/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-shark-cli-command/-companion/#functions","title":"Functions","text":"Name Summary echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File runCommand [jvm]fun runCommand(directory: File, vararg arguments: String): String"},{"location":"api/shark/-shark-cli-command/-companion/#properties","title":"Properties","text":"Name Summary sharkCliParams [jvm]var Context.sharkCliParams: SharkCliCommand.CommandParams"},{"location":"api/shark/-shark-cli-command/-companion/echo-newline/","title":"Echo newline","text":"<p>//leakcanary-repo/shark/SharkCliCommand/Companion/echoNewline</p>"},{"location":"api/shark/-shark-cli-command/-companion/echo-newline/#echonewline","title":"echoNewline","text":"<p>[jvm]\\ fun CliktCommand.echoNewline()</p>"},{"location":"api/shark/-shark-cli-command/-companion/echo/","title":"Echo","text":"<p>//leakcanary-repo/shark/SharkCliCommand/Companion/echo</p>"},{"location":"api/shark/-shark-cli-command/-companion/echo/#echo","title":"echo","text":"<p>[jvm]\\ fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)</p> <p>Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions</p>"},{"location":"api/shark/-shark-cli-command/-companion/retrieve-heap-dump-file/","title":"Retrieve heap dump file","text":"<p>//leakcanary-repo/shark/SharkCliCommand/Companion/retrieveHeapDumpFile</p>"},{"location":"api/shark/-shark-cli-command/-companion/retrieve-heap-dump-file/#retrieveheapdumpfile","title":"retrieveHeapDumpFile","text":"<p>[jvm]\\ fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File</p>"},{"location":"api/shark/-shark-cli-command/-companion/run-command/","title":"Run command","text":"<p>//leakcanary-repo/shark/SharkCliCommand/Companion/runCommand</p>"},{"location":"api/shark/-shark-cli-command/-companion/run-command/#runcommand","title":"runCommand","text":"<p>[jvm]\\ fun runCommand(directory: File, vararg arguments: String): String</p>"},{"location":"api/shark/-shark-cli-command/-companion/shark-cli-params/","title":"Shark cli params","text":"<p>//leakcanary-repo/shark/SharkCliCommand/Companion/sharkCliParams</p>"},{"location":"api/shark/-shark-cli-command/-companion/shark-cli-params/#sharkcliparams","title":"sharkCliParams","text":"<p>[jvm]\\ var Context.sharkCliParams: SharkCliCommand.CommandParams</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/","title":"Index","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/#heapdumpsource","title":"HeapDumpSource","text":"<p>sealed class HeapDumpSource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/#inheritors","title":"Inheritors","text":"HprofFileSource HprofDirectorySource ProcessSource"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/#types","title":"Types","text":"Name Summary HprofDirectorySource [jvm]class HprofDirectorySource(val directory: File) : SharkCliCommand.HeapDumpSource HprofFileSource [jvm]class HprofFileSource(val file: File) : SharkCliCommand.HeapDumpSource ProcessSource [jvm]class ProcessSource(val processName: String, val deviceId: String?) : SharkCliCommand.HeapDumpSource"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/","title":"Index","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/HprofDirectorySource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/#hprofdirectorysource","title":"HprofDirectorySource","text":"<p>[jvm]\\ class HprofDirectorySource(val directory: File) : SharkCliCommand.HeapDumpSource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/#constructors","title":"Constructors","text":"HprofDirectorySource [jvm]constructor(directory: File)"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/#properties","title":"Properties","text":"Name Summary directory [jvm]val directory: File hprofFiles [jvm]val hprofFiles: List<File>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/-hprof-directory-source/","title":"hprof directory source","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/HprofDirectorySource/HprofDirectorySource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/-hprof-directory-source/#hprofdirectorysource","title":"HprofDirectorySource","text":"<p>[jvm]\\ constructor(directory: File)</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/directory/","title":"Directory","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/HprofDirectorySource/directory</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/directory/#directory","title":"directory","text":"<p>[jvm]\\ val directory: File</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/hprof-files/","title":"Hprof files","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/HprofDirectorySource/hprofFiles</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-directory-source/hprof-files/#hproffiles","title":"hprofFiles","text":"<p>[jvm]\\ val hprofFiles: List<File></p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/","title":"Index","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/HprofFileSource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/#hproffilesource","title":"HprofFileSource","text":"<p>[jvm]\\ class HprofFileSource(val file: File) : SharkCliCommand.HeapDumpSource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/#constructors","title":"Constructors","text":"HprofFileSource [jvm]constructor(file: File)"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/#properties","title":"Properties","text":"Name Summary file [jvm]val file: File"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/-hprof-file-source/","title":"hprof file source","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/HprofFileSource/HprofFileSource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/-hprof-file-source/#hproffilesource","title":"HprofFileSource","text":"<p>[jvm]\\ constructor(file: File)</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/file/","title":"File","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/HprofFileSource/file</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-hprof-file-source/file/#file","title":"file","text":"<p>[jvm]\\ val file: File</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-process-source/","title":"Index","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/ProcessSource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-process-source/#processsource","title":"ProcessSource","text":"<p>[jvm]\\ class ProcessSource(val processName: String, val deviceId: String?) : SharkCliCommand.HeapDumpSource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-process-source/#constructors","title":"Constructors","text":"ProcessSource [jvm]constructor(processName: String, deviceId: String?)"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-process-source/#properties","title":"Properties","text":"Name Summary deviceId [jvm]val deviceId: String? processName [jvm]val processName: String"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-process-source/-process-source/","title":"process source","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/ProcessSource/ProcessSource</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-process-source/-process-source/#processsource","title":"ProcessSource","text":"<p>[jvm]\\ constructor(processName: String, deviceId: String?)</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-process-source/device-id/","title":"Device id","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/ProcessSource/deviceId</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-process-source/device-id/#deviceid","title":"deviceId","text":"<p>[jvm]\\ val deviceId: String?</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-process-source/process-name/","title":"Process name","text":"<p>//leakcanary-repo/shark/SharkCliCommand/HeapDumpSource/ProcessSource/processName</p>"},{"location":"api/shark/-shark-cli-command/-heap-dump-source/-process-source/process-name/#processname","title":"processName","text":"<p>[jvm]\\ val processName: String</p>"},{"location":"api/shark/-shark-log/","title":"Index","text":"<p>//leakcanary-repo/shark/SharkLog</p>"},{"location":"api/shark/-shark-log/#sharklog","title":"SharkLog","text":"<p>[jvm]\\ object SharkLog</p> <p>Central Logger for all Shark artifacts. Set logger to change where these logs go.</p>"},{"location":"api/shark/-shark-log/#types","title":"Types","text":"Name Summary Logger [jvm]interface Logger"},{"location":"api/shark/-shark-log/#functions","title":"Functions","text":"Name Summary d [jvm]inline fun d(message: () -> String)inline fun d(throwable: Throwable, message: () -> String)"},{"location":"api/shark/-shark-log/#properties","title":"Properties","text":"Name Summary logger [jvm]@Volatilevar logger: SharkLog.Logger?"},{"location":"api/shark/-shark-log/d/","title":"D","text":"<p>//leakcanary-repo/shark/SharkLog/d</p>"},{"location":"api/shark/-shark-log/d/#d","title":"d","text":"<p>[jvm]\\ inline fun d(message: () -> String)</p> <p>inline fun d(throwable: Throwable, message: () -> String)</p>"},{"location":"api/shark/-shark-log/d/#see-also","title":"See also","text":"SharkLog.Logger.d"},{"location":"api/shark/-shark-log/logger/","title":"Logger","text":"<p>//leakcanary-repo/shark/SharkLog/logger</p>"},{"location":"api/shark/-shark-log/logger/#logger","title":"logger","text":"<p>[jvm]\\</p> <p>@Volatile</p> <p>var logger: SharkLog.Logger?</p>"},{"location":"api/shark/-shark-log/-logger/","title":"Index","text":"<p>//leakcanary-repo/shark/SharkLog/Logger</p>"},{"location":"api/shark/-shark-log/-logger/#logger","title":"Logger","text":"<p>interface Logger</p>"},{"location":"api/shark/-shark-log/-logger/#see-also","title":"See also","text":"SharkLog"},{"location":"api/shark/-shark-log/-logger/#functions","title":"Functions","text":"Name Summary d [jvm]abstract fun d(message: String)Logs a debug message formatted with the passed in arguments.[jvm]abstract fun d(throwable: Throwable, message: String)Logs a Throwable and debug message formatted with the passed in arguments."},{"location":"api/shark/-shark-log/-logger/d/","title":"D","text":"<p>//leakcanary-repo/shark/SharkLog/Logger/d</p>"},{"location":"api/shark/-shark-log/-logger/d/#d","title":"d","text":"<p>[jvm]\\ abstract fun d(message: String)</p> <p>Logs a debug message formatted with the passed in arguments.</p> <p>[jvm]\\ abstract fun d(throwable: Throwable, message: String)</p> <p>Logs a Throwable and debug message formatted with the passed in arguments.</p>"},{"location":"api/shark/-shortest-path-finder/","title":"Index","text":"<p>//leakcanary-repo/shark/ShortestPathFinder</p>"},{"location":"api/shark/-shortest-path-finder/#shortestpathfinder","title":"ShortestPathFinder","text":"<p>fun interface ShortestPathFinder</p>"},{"location":"api/shark/-shortest-path-finder/#inheritors","title":"Inheritors","text":"PrioritizingShortestPathFinder"},{"location":"api/shark/-shortest-path-finder/#types","title":"Types","text":"Name Summary Factory [jvm]fun interface Factory"},{"location":"api/shark/-shortest-path-finder/#functions","title":"Functions","text":"Name Summary findShortestPathsFromGcRoots [jvm]abstract fun findShortestPathsFromGcRoots(leakingObjectIds: Set<Long>): PathFindingResults"},{"location":"api/shark/-shortest-path-finder/find-shortest-paths-from-gc-roots/","title":"Find shortest paths from gc roots","text":"<p>//leakcanary-repo/shark/ShortestPathFinder/findShortestPathsFromGcRoots</p>"},{"location":"api/shark/-shortest-path-finder/find-shortest-paths-from-gc-roots/#findshortestpathsfromgcroots","title":"findShortestPathsFromGcRoots","text":"<p>[jvm]\\ abstract fun findShortestPathsFromGcRoots(leakingObjectIds: Set<Long>): PathFindingResults</p>"},{"location":"api/shark/-shortest-path-finder/-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/ShortestPathFinder/Factory</p>"},{"location":"api/shark/-shortest-path-finder/-factory/#factory","title":"Factory","text":"<p>fun interface Factory</p>"},{"location":"api/shark/-shortest-path-finder/-factory/#inheritors","title":"Inheritors","text":"Factory"},{"location":"api/shark/-shortest-path-finder/-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]abstract fun createFor(heapGraph: HeapGraph): ShortestPathFinder"},{"location":"api/shark/-shortest-path-finder/-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/ShortestPathFinder/Factory/createFor</p>"},{"location":"api/shark/-shortest-path-finder/-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ abstract fun createFor(heapGraph: HeapGraph): ShortestPathFinder</p>"},{"location":"api/shark/-shortest-path-object-node/","title":"Index","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode</p>"},{"location":"api/shark/-shortest-path-object-node/#shortestpathobjectnode","title":"ShortestPathObjectNode","text":"<p>[jvm]\\ class ShortestPathObjectNode(val name: String, val parent: ShortestPathObjectNode?)</p>"},{"location":"api/shark/-shortest-path-object-node/#constructors","title":"Constructors","text":"ShortestPathObjectNode [jvm]constructor(name: String, parent: ShortestPathObjectNode?)"},{"location":"api/shark/-shortest-path-object-node/#types","title":"Types","text":"Name Summary GrowingChildNode [jvm]data class GrowingChildNode(val child: ShortestPathObjectNode, val objectCountIncrease: Int)"},{"location":"api/shark/-shortest-path-object-node/#functions","title":"Functions","text":"Name Summary copyResettingAsInitialTree [jvm]fun copyResettingAsInitialTree(): ShortestPathObjectNode pathFromRootAsString [jvm]fun pathFromRootAsString(): String toString [jvm]open override fun toString(): String"},{"location":"api/shark/-shortest-path-object-node/#properties","title":"Properties","text":"Name Summary children [jvm]val children: List<ShortestPathObjectNode> growingChildren [jvm]val growingChildren: List<ShortestPathObjectNode.GrowingChildNode>Returns a list of pair of child ShortestPathObjectNode and associated object count increase, filtered to only the children nodes that were marked as growing, i.e. children that had an object count increase greater or equal to the scenario loop count. name [jvm]val name: String parent [jvm]val parent: ShortestPathObjectNode? retained [jvm]var retained: RetainedSet for growing nodes if the traversal requested the computation of retained sizes, otherwise null. retainedIncrease [jvm]var retainedIncrease: RetainedSet for growing nodes if retainedOrNull is not null. Non 0 if the previous traversal also computed retained size. selfObjectCount [jvm]var selfObjectCount: Int"},{"location":"api/shark/-shortest-path-object-node/-shortest-path-object-node/","title":"shortest path object node","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/ShortestPathObjectNode</p>"},{"location":"api/shark/-shortest-path-object-node/-shortest-path-object-node/#shortestpathobjectnode","title":"ShortestPathObjectNode","text":"<p>[jvm]\\ constructor(name: String, parent: ShortestPathObjectNode?)</p>"},{"location":"api/shark/-shortest-path-object-node/children-object-count-increase/","title":"Children object count increase","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/childrenObjectCountIncrease</p>"},{"location":"api/shark/-shortest-path-object-node/children-object-count-increase/#childrenobjectcountincrease","title":"childrenObjectCountIncrease","text":"<p>[jvm]\\ val childrenObjectCountIncrease: Int</p>"},{"location":"api/shark/-shortest-path-object-node/children-object-count/","title":"Children object count","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/childrenObjectCount</p>"},{"location":"api/shark/-shortest-path-object-node/children-object-count/#childrenobjectcount","title":"childrenObjectCount","text":"<p>[jvm]\\ val childrenObjectCount: Int</p>"},{"location":"api/shark/-shortest-path-object-node/children/","title":"Children","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/children</p>"},{"location":"api/shark/-shortest-path-object-node/children/#children","title":"children","text":"<p>[jvm]\\ val children: List<ShortestPathObjectNode></p>"},{"location":"api/shark/-shortest-path-object-node/copy-resetting-as-initial-tree/","title":"Copy resetting as initial tree","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/copyResettingAsInitialTree</p>"},{"location":"api/shark/-shortest-path-object-node/copy-resetting-as-initial-tree/#copyresettingasinitialtree","title":"copyResettingAsInitialTree","text":"<p>[jvm]\\ fun copyResettingAsInitialTree(): ShortestPathObjectNode</p>"},{"location":"api/shark/-shortest-path-object-node/growing-children/","title":"Growing children","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/growingChildren</p>"},{"location":"api/shark/-shortest-path-object-node/growing-children/#growingchildren","title":"growingChildren","text":"<p>[jvm]\\ val growingChildren: List<ShortestPathObjectNode.GrowingChildNode></p> <p>Returns a list of pair of child ShortestPathObjectNode and associated object count increase, filtered to only the children nodes that were marked as growing, i.e. children that had an object count increase greater or equal to the scenario loop count.</p>"},{"location":"api/shark/-shortest-path-object-node/name/","title":"Name","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/name</p>"},{"location":"api/shark/-shortest-path-object-node/name/#name","title":"name","text":"<p>[jvm]\\ val name: String</p>"},{"location":"api/shark/-shortest-path-object-node/parent/","title":"Parent","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/parent</p>"},{"location":"api/shark/-shortest-path-object-node/parent/#parent","title":"parent","text":"<p>[jvm]\\ val parent: ShortestPathObjectNode?</p>"},{"location":"api/shark/-shortest-path-object-node/path-from-root-as-string/","title":"Path from root as string","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/pathFromRootAsString</p>"},{"location":"api/shark/-shortest-path-object-node/path-from-root-as-string/#pathfromrootasstring","title":"pathFromRootAsString","text":"<p>[jvm]\\ fun pathFromRootAsString(): String</p>"},{"location":"api/shark/-shortest-path-object-node/retained-increase-or-null/","title":"Retained increase or null","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/retainedIncreaseOrNull</p>"},{"location":"api/shark/-shortest-path-object-node/retained-increase-or-null/#retainedincreaseornull","title":"retainedIncreaseOrNull","text":"<p>[jvm]\\ var retainedIncreaseOrNull: ShortestPathObjectNode.Retained?</p> <p>Set for growing nodes if retainedOrNull is not null. Non 0 if the previous traversal also computed retained size. This is on the last 2 traversals.</p>"},{"location":"api/shark/-shortest-path-object-node/retained-increase/","title":"Retained increase","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/retainedIncrease</p>"},{"location":"api/shark/-shortest-path-object-node/retained-increase/#retainedincrease","title":"retainedIncrease","text":"<p>[jvm]\\ var retainedIncrease: Retained</p> <p>Set for growing nodes if retainedOrNull is not null. Non 0 if the previous traversal also computed retained size.</p>"},{"location":"api/shark/-shortest-path-object-node/retained-or-null/","title":"Retained or null","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/retainedOrNull</p>"},{"location":"api/shark/-shortest-path-object-node/retained-or-null/#retainedornull","title":"retainedOrNull","text":"<p>[jvm]\\ var retainedOrNull: ShortestPathObjectNode.Retained?</p> <p>Set for growing nodes if the traversal requested the computation of retained sizes, otherwise null. This is on the last 2 traversals.</p>"},{"location":"api/shark/-shortest-path-object-node/retained/","title":"Retained","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/retained</p>"},{"location":"api/shark/-shortest-path-object-node/retained/#retained","title":"retained","text":"<p>[jvm]\\ var retained: Retained</p> <p>Set for growing nodes if the traversal requested the computation of retained sizes, otherwise null.</p>"},{"location":"api/shark/-shortest-path-object-node/self-object-count-increase/","title":"Self object count increase","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/selfObjectCountIncrease</p>"},{"location":"api/shark/-shortest-path-object-node/self-object-count-increase/#selfobjectcountincrease","title":"selfObjectCountIncrease","text":"<p>[jvm]\\ var selfObjectCountIncrease: Int</p>"},{"location":"api/shark/-shortest-path-object-node/self-object-count/","title":"Self object count","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/selfObjectCount</p>"},{"location":"api/shark/-shortest-path-object-node/self-object-count/#selfobjectcount","title":"selfObjectCount","text":"<p>[jvm]\\ var selfObjectCount: Int</p>"},{"location":"api/shark/-shortest-path-object-node/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/toString</p>"},{"location":"api/shark/-shortest-path-object-node/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-shortest-path-object-node/-growing-child-node/","title":"Index","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/GrowingChildNode</p>"},{"location":"api/shark/-shortest-path-object-node/-growing-child-node/#growingchildnode","title":"GrowingChildNode","text":"<p>[jvm]\\ data class GrowingChildNode(val child: ShortestPathObjectNode, val objectCountIncrease: Int)</p>"},{"location":"api/shark/-shortest-path-object-node/-growing-child-node/#constructors","title":"Constructors","text":"GrowingChildNode [jvm]constructor(child: ShortestPathObjectNode, objectCountIncrease: Int)"},{"location":"api/shark/-shortest-path-object-node/-growing-child-node/#properties","title":"Properties","text":"Name Summary child [jvm]val child: ShortestPathObjectNode objectCountIncrease [jvm]val objectCountIncrease: Int"},{"location":"api/shark/-shortest-path-object-node/-growing-child-node/-growing-child-node/","title":"growing child node","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/GrowingChildNode/GrowingChildNode</p>"},{"location":"api/shark/-shortest-path-object-node/-growing-child-node/-growing-child-node/#growingchildnode","title":"GrowingChildNode","text":"<p>[jvm]\\ constructor(child: ShortestPathObjectNode, objectCountIncrease: Int)</p>"},{"location":"api/shark/-shortest-path-object-node/-growing-child-node/child/","title":"Child","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/GrowingChildNode/child</p>"},{"location":"api/shark/-shortest-path-object-node/-growing-child-node/child/#child","title":"child","text":"<p>[jvm]\\ val child: ShortestPathObjectNode</p>"},{"location":"api/shark/-shortest-path-object-node/-growing-child-node/object-count-increase/","title":"Object count increase","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/GrowingChildNode/objectCountIncrease</p>"},{"location":"api/shark/-shortest-path-object-node/-growing-child-node/object-count-increase/#objectcountincrease","title":"objectCountIncrease","text":"<p>[jvm]\\ val objectCountIncrease: Int</p>"},{"location":"api/shark/-shortest-path-object-node/-retained/","title":"Index","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/Retained</p>"},{"location":"api/shark/-shortest-path-object-node/-retained/#retained","title":"Retained","text":"<p>[jvm]\\ class Retained(val heapSize: ByteSize, val objectCount: Int)</p>"},{"location":"api/shark/-shortest-path-object-node/-retained/#constructors","title":"Constructors","text":"Retained [jvm]constructor(heapSize: ByteSize, objectCount: Int)"},{"location":"api/shark/-shortest-path-object-node/-retained/#properties","title":"Properties","text":"Name Summary heapSize [jvm]val heapSize: ByteSizeThe minimum number of bytes which would be freed if all references to this object were released. objectCount [jvm]val objectCount: IntThe minimum number of objects which would be unreachable if all references to this object were released."},{"location":"api/shark/-shortest-path-object-node/-retained/-retained/","title":"retained","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/Retained/Retained</p>"},{"location":"api/shark/-shortest-path-object-node/-retained/-retained/#retained","title":"Retained","text":"<p>[jvm]\\ constructor(heapSize: ByteSize, objectCount: Int)</p>"},{"location":"api/shark/-shortest-path-object-node/-retained/heap-size/","title":"Heap size","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/Retained/heapSize</p>"},{"location":"api/shark/-shortest-path-object-node/-retained/heap-size/#heapsize","title":"heapSize","text":"<p>[jvm]\\ val heapSize: ByteSize</p> <p>The minimum number of bytes which would be freed if all references to this object were released.</p>"},{"location":"api/shark/-shortest-path-object-node/-retained/object-count/","title":"Object count","text":"<p>//leakcanary-repo/shark/ShortestPathObjectNode/Retained/objectCount</p>"},{"location":"api/shark/-shortest-path-object-node/-retained/object-count/#objectcount","title":"objectCount","text":"<p>[jvm]\\ val objectCount: Int</p> <p>The minimum number of objects which would be unreachable if all references to this object were released.</p>"},{"location":"api/shark/-streaming-hprof-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/StreamingHprofReader</p>"},{"location":"api/shark/-streaming-hprof-reader/#streaminghprofreader","title":"StreamingHprofReader","text":"<p>[jvm]\\ class StreamingHprofReader</p> <p>Reads the entire content of a Hprof source in one fell swoop. Call readerFor to obtain a new instance.</p>"},{"location":"api/shark/-streaming-hprof-reader/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-streaming-hprof-reader/#functions","title":"Functions","text":"Name Summary asStreamingRecordReader [jvm]fun StreamingHprofReader.asStreamingRecordReader(): StreamingRecordReaderAdapter readRecords [jvm]fun readRecords(recordTags: Set<HprofRecordTag>, listener: OnHprofRecordTagListener): LongObtains a new source to read all hprof records from and calls listener back for each record that matches one of the provided recordTags."},{"location":"api/shark/-streaming-hprof-reader/read-records/","title":"Read records","text":"<p>//leakcanary-repo/shark/StreamingHprofReader/readRecords</p>"},{"location":"api/shark/-streaming-hprof-reader/read-records/#readrecords","title":"readRecords","text":"<p>[jvm]\\ fun readRecords(recordTags: Set<HprofRecordTag>, listener: OnHprofRecordTagListener): Long</p> <p>Obtains a new source to read all hprof records from and calls listener back for each record that matches one of the provided recordTags.</p>"},{"location":"api/shark/-streaming-hprof-reader/read-records/#return","title":"Return","text":"<p>the number of bytes read from the source</p>"},{"location":"api/shark/-streaming-hprof-reader/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/StreamingHprofReader/Companion</p>"},{"location":"api/shark/-streaming-hprof-reader/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-streaming-hprof-reader/-companion/#functions","title":"Functions","text":"Name Summary readerFor [jvm]fun readerFor(hprofFile: File, hprofHeader: HprofHeader = HprofHeader.parseHeaderOf(hprofFile)): StreamingHprofReaderCreates a StreamingHprofReader for the provided hprofFile. hprofHeader will be read from hprofFile unless you provide it.[jvm]fun readerFor(hprofSourceProvider: StreamingSourceProvider, hprofHeader: HprofHeader = hprofSourceProvider.openStreamingSource() .use { HprofHeader.parseHeaderOf(it) }): StreamingHprofReaderCreates a StreamingHprofReader that will call StreamingSourceProvider.openStreamingSource on every readRecords to obtain a Source to read the hprof data from. Before reading the hprof records, StreamingHprofReader will skip HprofHeader.recordsPosition bytes."},{"location":"api/shark/-streaming-hprof-reader/-companion/reader-for/","title":"Reader for","text":"<p>//leakcanary-repo/shark/StreamingHprofReader/Companion/readerFor</p>"},{"location":"api/shark/-streaming-hprof-reader/-companion/reader-for/#readerfor","title":"readerFor","text":"<p>[jvm]\\ fun readerFor(hprofFile: File, hprofHeader: HprofHeader = HprofHeader.parseHeaderOf(hprofFile)): StreamingHprofReader</p> <p>Creates a StreamingHprofReader for the provided hprofFile. hprofHeader will be read from hprofFile unless you provide it.</p> <p>[jvm]\\ fun readerFor(hprofSourceProvider: StreamingSourceProvider, hprofHeader: HprofHeader = hprofSourceProvider.openStreamingSource() .use { HprofHeader.parseHeaderOf(it) }): StreamingHprofReader</p> <p>Creates a StreamingHprofReader that will call StreamingSourceProvider.openStreamingSource on every readRecords to obtain a Source to read the hprof data from. Before reading the hprof records, StreamingHprofReader will skip HprofHeader.recordsPosition bytes.</p>"},{"location":"api/shark/-streaming-record-reader-adapter/","title":"Index","text":"<p>//leakcanary-repo/shark/StreamingRecordReaderAdapter</p>"},{"location":"api/shark/-streaming-record-reader-adapter/#streamingrecordreaderadapter","title":"StreamingRecordReaderAdapter","text":"<p>[jvm]\\ class StreamingRecordReaderAdapter(streamingHprofReader: StreamingHprofReader)</p> <p>Wraps a StreamingHprofReader to provide a higher level API that streams HprofRecord instances.</p>"},{"location":"api/shark/-streaming-record-reader-adapter/#constructors","title":"Constructors","text":"StreamingRecordReaderAdapter [jvm]constructor(streamingHprofReader: StreamingHprofReader)"},{"location":"api/shark/-streaming-record-reader-adapter/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-streaming-record-reader-adapter/#functions","title":"Functions","text":"Name Summary readRecords [jvm]fun readRecords(recordTypes: Set<KClass<out HprofRecord>>, listener: OnHprofRecordListener): LongObtains a new source to read all hprof records from and calls listener back for each record that matches one of the provided recordTypes."},{"location":"api/shark/-streaming-record-reader-adapter/-streaming-record-reader-adapter/","title":"streaming record reader adapter","text":"<p>//leakcanary-repo/shark/StreamingRecordReaderAdapter/StreamingRecordReaderAdapter</p>"},{"location":"api/shark/-streaming-record-reader-adapter/-streaming-record-reader-adapter/#streamingrecordreaderadapter","title":"StreamingRecordReaderAdapter","text":"<p>[jvm]\\ constructor(streamingHprofReader: StreamingHprofReader)</p>"},{"location":"api/shark/-streaming-record-reader-adapter/read-records/","title":"Read records","text":"<p>//leakcanary-repo/shark/StreamingRecordReaderAdapter/readRecords</p>"},{"location":"api/shark/-streaming-record-reader-adapter/read-records/#readrecords","title":"readRecords","text":"<p>[jvm]\\ fun readRecords(recordTypes: Set<KClass<out HprofRecord>>, listener: OnHprofRecordListener): Long</p> <p>Obtains a new source to read all hprof records from and calls listener back for each record that matches one of the provided recordTypes.</p>"},{"location":"api/shark/-streaming-record-reader-adapter/read-records/#return","title":"Return","text":"<p>the number of bytes read from the source</p>"},{"location":"api/shark/-streaming-record-reader-adapter/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/StreamingRecordReaderAdapter/Companion</p>"},{"location":"api/shark/-streaming-record-reader-adapter/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-streaming-record-reader-adapter/-companion/#functions","title":"Functions","text":"Name Summary asHprofTags [jvm]fun Set<KClass<out HprofRecord>>.asHprofTags(): EnumSet<HprofRecordTag> asStreamingRecordReader [jvm]fun StreamingHprofReader.asStreamingRecordReader(): StreamingRecordReaderAdapter"},{"location":"api/shark/-streaming-record-reader-adapter/-companion/as-hprof-tags/","title":"As hprof tags","text":"<p>//leakcanary-repo/shark/StreamingRecordReaderAdapter/Companion/asHprofTags</p>"},{"location":"api/shark/-streaming-record-reader-adapter/-companion/as-hprof-tags/#ashproftags","title":"asHprofTags","text":"<p>[jvm]\\ fun Set<KClass<out HprofRecord>>.asHprofTags(): EnumSet<HprofRecordTag></p>"},{"location":"api/shark/-streaming-record-reader-adapter/-companion/as-streaming-record-reader/","title":"As streaming record reader","text":"<p>//leakcanary-repo/shark/StreamingRecordReaderAdapter/Companion/asStreamingRecordReader</p>"},{"location":"api/shark/-streaming-record-reader-adapter/-companion/as-streaming-record-reader/#asstreamingrecordreader","title":"asStreamingRecordReader","text":"<p>[jvm]\\ fun StreamingHprofReader.asStreamingRecordReader(): StreamingRecordReaderAdapter</p>"},{"location":"api/shark/-streaming-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/StreamingSourceProvider</p>"},{"location":"api/shark/-streaming-source-provider/#streamingsourceprovider","title":"StreamingSourceProvider","text":"<p>fun interface StreamingSourceProvider</p> <p>Can open Source instances.</p>"},{"location":"api/shark/-streaming-source-provider/#inheritors","title":"Inheritors","text":"DualSourceProvider"},{"location":"api/shark/-streaming-source-provider/#functions","title":"Functions","text":"Name Summary openStreamingSource [jvm]abstract fun openStreamingSource(): BufferedSource"},{"location":"api/shark/-streaming-source-provider/open-streaming-source/","title":"Open streaming source","text":"<p>//leakcanary-repo/shark/StreamingSourceProvider/openStreamingSource</p>"},{"location":"api/shark/-streaming-source-provider/open-streaming-source/#openstreamingsource","title":"openStreamingSource","text":"<p>[jvm]\\ abstract fun openStreamingSource(): BufferedSource</p>"},{"location":"api/shark/-strip-hprof-command/","title":"Index","text":"<p>//leakcanary-repo/shark/StripHprofCommand</p>"},{"location":"api/shark/-strip-hprof-command/#striphprofcommand","title":"StripHprofCommand","text":"<p>[jvm]\\ class StripHprofCommand : CliktCommand</p>"},{"location":"api/shark/-strip-hprof-command/#constructors","title":"Constructors","text":"StripHprofCommand [jvm]constructor()"},{"location":"api/shark/-strip-hprof-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-strip-hprof-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-strip-hprof-command/-strip-hprof-command/","title":"strip hprof command","text":"<p>//leakcanary-repo/shark/StripHprofCommand/StripHprofCommand</p>"},{"location":"api/shark/-strip-hprof-command/-strip-hprof-command/#striphprofcommand","title":"StripHprofCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-strip-hprof-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/StripHprofCommand/run</p>"},{"location":"api/shark/-strip-hprof-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-throwing-cancelable-file-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/ThrowingCancelableFileSourceProvider</p>"},{"location":"api/shark/-throwing-cancelable-file-source-provider/#throwingcancelablefilesourceprovider","title":"ThrowingCancelableFileSourceProvider","text":"<p>[jvm]\\ class ThrowingCancelableFileSourceProvider(file: File, throwIfCanceled: Runnable) : DualSourceProvider</p> <p>A DualSourceProvider that invokes throwIfCanceled before every read, allowing cancellation of IO based work built on top by throwing an exception.</p>"},{"location":"api/shark/-throwing-cancelable-file-source-provider/#constructors","title":"Constructors","text":"ThrowingCancelableFileSourceProvider [jvm]constructor(file: File, throwIfCanceled: Runnable)"},{"location":"api/shark/-throwing-cancelable-file-source-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph openRandomAccessSource [jvm]open override fun openRandomAccessSource(): RandomAccessSource openStreamingSource [jvm]open override fun openStreamingSource(): BufferedSource"},{"location":"api/shark/-throwing-cancelable-file-source-provider/-throwing-cancelable-file-source-provider/","title":"throwing cancelable file source provider","text":"<p>//leakcanary-repo/shark/ThrowingCancelableFileSourceProvider/ThrowingCancelableFileSourceProvider</p>"},{"location":"api/shark/-throwing-cancelable-file-source-provider/-throwing-cancelable-file-source-provider/#throwingcancelablefilesourceprovider","title":"ThrowingCancelableFileSourceProvider","text":"<p>[jvm]\\ constructor(file: File, throwIfCanceled: Runnable)</p>"},{"location":"api/shark/-throwing-cancelable-file-source-provider/open-random-access-source/","title":"Open random access source","text":"<p>//leakcanary-repo/shark/ThrowingCancelableFileSourceProvider/openRandomAccessSource</p>"},{"location":"api/shark/-throwing-cancelable-file-source-provider/open-random-access-source/#openrandomaccesssource","title":"openRandomAccessSource","text":"<p>[jvm]\\ open override fun openRandomAccessSource(): RandomAccessSource</p>"},{"location":"api/shark/-throwing-cancelable-file-source-provider/open-streaming-source/","title":"Open streaming source","text":"<p>//leakcanary-repo/shark/ThrowingCancelableFileSourceProvider/openStreamingSource</p>"},{"location":"api/shark/-throwing-cancelable-file-source-provider/open-streaming-source/#openstreamingsource","title":"openStreamingSource","text":"<p>[jvm]\\ open override fun openStreamingSource(): BufferedSource</p>"},{"location":"api/shark/-value-holder/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder</p>"},{"location":"api/shark/-value-holder/#valueholder","title":"ValueHolder","text":"<p>sealed class ValueHolder</p> <p>A value in the heap dump, which can be a ReferenceHolder or a primitive type.</p>"},{"location":"api/shark/-value-holder/#inheritors","title":"Inheritors","text":"ReferenceHolder BooleanHolder CharHolder FloatHolder DoubleHolder ByteHolder ShortHolder IntHolder LongHolder"},{"location":"api/shark/-value-holder/#types","title":"Types","text":"Name Summary BooleanHolder [jvm]data class BooleanHolder(val value: Boolean) : ValueHolder ByteHolder [jvm]data class ByteHolder(val value: Byte) : ValueHolder CharHolder [jvm]data class CharHolder(val value: Char) : ValueHolder Companion [jvm]object Companion DoubleHolder [jvm]data class DoubleHolder(val value: Double) : ValueHolder FloatHolder [jvm]data class FloatHolder(val value: Float) : ValueHolder IntHolder [jvm]data class IntHolder(val value: Int) : ValueHolder LongHolder [jvm]data class LongHolder(val value: Long) : ValueHolder ReferenceHolder [jvm]data class ReferenceHolder(val value: Long) : ValueHolder ShortHolder [jvm]data class ShortHolder(val value: Short) : ValueHolder"},{"location":"api/shark/-value-holder/-boolean-holder/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder/BooleanHolder</p>"},{"location":"api/shark/-value-holder/-boolean-holder/#booleanholder","title":"BooleanHolder","text":"<p>[jvm]\\ data class BooleanHolder(val value: Boolean) : ValueHolder</p>"},{"location":"api/shark/-value-holder/-boolean-holder/#constructors","title":"Constructors","text":"BooleanHolder [jvm]constructor(value: Boolean)"},{"location":"api/shark/-value-holder/-boolean-holder/#properties","title":"Properties","text":"Name Summary value [jvm]val value: Boolean"},{"location":"api/shark/-value-holder/-boolean-holder/-boolean-holder/","title":"boolean holder","text":"<p>//leakcanary-repo/shark/ValueHolder/BooleanHolder/BooleanHolder</p>"},{"location":"api/shark/-value-holder/-boolean-holder/-boolean-holder/#booleanholder","title":"BooleanHolder","text":"<p>[jvm]\\ constructor(value: Boolean)</p>"},{"location":"api/shark/-value-holder/-boolean-holder/value/","title":"Value","text":"<p>//leakcanary-repo/shark/ValueHolder/BooleanHolder/value</p>"},{"location":"api/shark/-value-holder/-boolean-holder/value/#value","title":"value","text":"<p>[jvm]\\ val value: Boolean</p>"},{"location":"api/shark/-value-holder/-byte-holder/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder/ByteHolder</p>"},{"location":"api/shark/-value-holder/-byte-holder/#byteholder","title":"ByteHolder","text":"<p>[jvm]\\ data class ByteHolder(val value: Byte) : ValueHolder</p>"},{"location":"api/shark/-value-holder/-byte-holder/#constructors","title":"Constructors","text":"ByteHolder [jvm]constructor(value: Byte)"},{"location":"api/shark/-value-holder/-byte-holder/#properties","title":"Properties","text":"Name Summary value [jvm]val value: Byte"},{"location":"api/shark/-value-holder/-byte-holder/-byte-holder/","title":"byte holder","text":"<p>//leakcanary-repo/shark/ValueHolder/ByteHolder/ByteHolder</p>"},{"location":"api/shark/-value-holder/-byte-holder/-byte-holder/#byteholder","title":"ByteHolder","text":"<p>[jvm]\\ constructor(value: Byte)</p>"},{"location":"api/shark/-value-holder/-byte-holder/value/","title":"Value","text":"<p>//leakcanary-repo/shark/ValueHolder/ByteHolder/value</p>"},{"location":"api/shark/-value-holder/-byte-holder/value/#value","title":"value","text":"<p>[jvm]\\ val value: Byte</p>"},{"location":"api/shark/-value-holder/-char-holder/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder/CharHolder</p>"},{"location":"api/shark/-value-holder/-char-holder/#charholder","title":"CharHolder","text":"<p>[jvm]\\ data class CharHolder(val value: Char) : ValueHolder</p>"},{"location":"api/shark/-value-holder/-char-holder/#constructors","title":"Constructors","text":"CharHolder [jvm]constructor(value: Char)"},{"location":"api/shark/-value-holder/-char-holder/#properties","title":"Properties","text":"Name Summary value [jvm]val value: Char"},{"location":"api/shark/-value-holder/-char-holder/-char-holder/","title":"char holder","text":"<p>//leakcanary-repo/shark/ValueHolder/CharHolder/CharHolder</p>"},{"location":"api/shark/-value-holder/-char-holder/-char-holder/#charholder","title":"CharHolder","text":"<p>[jvm]\\ constructor(value: Char)</p>"},{"location":"api/shark/-value-holder/-char-holder/value/","title":"Value","text":"<p>//leakcanary-repo/shark/ValueHolder/CharHolder/value</p>"},{"location":"api/shark/-value-holder/-char-holder/value/#value","title":"value","text":"<p>[jvm]\\ val value: Char</p>"},{"location":"api/shark/-value-holder/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder/Companion</p>"},{"location":"api/shark/-value-holder/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-value-holder/-companion/#properties","title":"Properties","text":"Name Summary NULL_REFERENCE [jvm]const val NULL_REFERENCE: Long = 0"},{"location":"api/shark/-value-holder/-companion/-n-u-l-l_-r-e-f-e-r-e-n-c-e/","title":"n u l l r e f e r e n c e","text":"<p>//leakcanary-repo/shark/ValueHolder/Companion/NULL_REFERENCE</p>"},{"location":"api/shark/-value-holder/-companion/-n-u-l-l_-r-e-f-e-r-e-n-c-e/#null_reference","title":"NULL_REFERENCE","text":"<p>[jvm]\\ const val NULL_REFERENCE: Long = 0</p>"},{"location":"api/shark/-value-holder/-double-holder/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder/DoubleHolder</p>"},{"location":"api/shark/-value-holder/-double-holder/#doubleholder","title":"DoubleHolder","text":"<p>[jvm]\\ data class DoubleHolder(val value: Double) : ValueHolder</p>"},{"location":"api/shark/-value-holder/-double-holder/#constructors","title":"Constructors","text":"DoubleHolder [jvm]constructor(value: Double)"},{"location":"api/shark/-value-holder/-double-holder/#properties","title":"Properties","text":"Name Summary value [jvm]val value: Double"},{"location":"api/shark/-value-holder/-double-holder/-double-holder/","title":"double holder","text":"<p>//leakcanary-repo/shark/ValueHolder/DoubleHolder/DoubleHolder</p>"},{"location":"api/shark/-value-holder/-double-holder/-double-holder/#doubleholder","title":"DoubleHolder","text":"<p>[jvm]\\ constructor(value: Double)</p>"},{"location":"api/shark/-value-holder/-double-holder/value/","title":"Value","text":"<p>//leakcanary-repo/shark/ValueHolder/DoubleHolder/value</p>"},{"location":"api/shark/-value-holder/-double-holder/value/#value","title":"value","text":"<p>[jvm]\\ val value: Double</p>"},{"location":"api/shark/-value-holder/-float-holder/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder/FloatHolder</p>"},{"location":"api/shark/-value-holder/-float-holder/#floatholder","title":"FloatHolder","text":"<p>[jvm]\\ data class FloatHolder(val value: Float) : ValueHolder</p>"},{"location":"api/shark/-value-holder/-float-holder/#constructors","title":"Constructors","text":"FloatHolder [jvm]constructor(value: Float)"},{"location":"api/shark/-value-holder/-float-holder/#properties","title":"Properties","text":"Name Summary value [jvm]val value: Float"},{"location":"api/shark/-value-holder/-float-holder/-float-holder/","title":"float holder","text":"<p>//leakcanary-repo/shark/ValueHolder/FloatHolder/FloatHolder</p>"},{"location":"api/shark/-value-holder/-float-holder/-float-holder/#floatholder","title":"FloatHolder","text":"<p>[jvm]\\ constructor(value: Float)</p>"},{"location":"api/shark/-value-holder/-float-holder/value/","title":"Value","text":"<p>//leakcanary-repo/shark/ValueHolder/FloatHolder/value</p>"},{"location":"api/shark/-value-holder/-float-holder/value/#value","title":"value","text":"<p>[jvm]\\ val value: Float</p>"},{"location":"api/shark/-value-holder/-int-holder/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder/IntHolder</p>"},{"location":"api/shark/-value-holder/-int-holder/#intholder","title":"IntHolder","text":"<p>[jvm]\\ data class IntHolder(val value: Int) : ValueHolder</p>"},{"location":"api/shark/-value-holder/-int-holder/#constructors","title":"Constructors","text":"IntHolder [jvm]constructor(value: Int)"},{"location":"api/shark/-value-holder/-int-holder/#properties","title":"Properties","text":"Name Summary value [jvm]val value: Int"},{"location":"api/shark/-value-holder/-int-holder/-int-holder/","title":"int holder","text":"<p>//leakcanary-repo/shark/ValueHolder/IntHolder/IntHolder</p>"},{"location":"api/shark/-value-holder/-int-holder/-int-holder/#intholder","title":"IntHolder","text":"<p>[jvm]\\ constructor(value: Int)</p>"},{"location":"api/shark/-value-holder/-int-holder/value/","title":"Value","text":"<p>//leakcanary-repo/shark/ValueHolder/IntHolder/value</p>"},{"location":"api/shark/-value-holder/-int-holder/value/#value","title":"value","text":"<p>[jvm]\\ val value: Int</p>"},{"location":"api/shark/-value-holder/-long-holder/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder/LongHolder</p>"},{"location":"api/shark/-value-holder/-long-holder/#longholder","title":"LongHolder","text":"<p>[jvm]\\ data class LongHolder(val value: Long) : ValueHolder</p>"},{"location":"api/shark/-value-holder/-long-holder/#constructors","title":"Constructors","text":"LongHolder [jvm]constructor(value: Long)"},{"location":"api/shark/-value-holder/-long-holder/#properties","title":"Properties","text":"Name Summary value [jvm]val value: Long"},{"location":"api/shark/-value-holder/-long-holder/-long-holder/","title":"long holder","text":"<p>//leakcanary-repo/shark/ValueHolder/LongHolder/LongHolder</p>"},{"location":"api/shark/-value-holder/-long-holder/-long-holder/#longholder","title":"LongHolder","text":"<p>[jvm]\\ constructor(value: Long)</p>"},{"location":"api/shark/-value-holder/-long-holder/value/","title":"Value","text":"<p>//leakcanary-repo/shark/ValueHolder/LongHolder/value</p>"},{"location":"api/shark/-value-holder/-long-holder/value/#value","title":"value","text":"<p>[jvm]\\ val value: Long</p>"},{"location":"api/shark/-value-holder/-reference-holder/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder/ReferenceHolder</p>"},{"location":"api/shark/-value-holder/-reference-holder/#referenceholder","title":"ReferenceHolder","text":"<p>[jvm]\\ data class ReferenceHolder(val value: Long) : ValueHolder</p>"},{"location":"api/shark/-value-holder/-reference-holder/#constructors","title":"Constructors","text":"ReferenceHolder [jvm]constructor(value: Long)"},{"location":"api/shark/-value-holder/-reference-holder/#properties","title":"Properties","text":"Name Summary isNull [jvm]val isNull: Boolean value [jvm]val value: Long"},{"location":"api/shark/-value-holder/-reference-holder/-reference-holder/","title":"reference holder","text":"<p>//leakcanary-repo/shark/ValueHolder/ReferenceHolder/ReferenceHolder</p>"},{"location":"api/shark/-value-holder/-reference-holder/-reference-holder/#referenceholder","title":"ReferenceHolder","text":"<p>[jvm]\\ constructor(value: Long)</p>"},{"location":"api/shark/-value-holder/-reference-holder/is-null/","title":"Is null","text":"<p>//leakcanary-repo/shark/ValueHolder/ReferenceHolder/isNull</p>"},{"location":"api/shark/-value-holder/-reference-holder/is-null/#isnull","title":"isNull","text":"<p>[jvm]\\ val isNull: Boolean</p>"},{"location":"api/shark/-value-holder/-reference-holder/value/","title":"Value","text":"<p>//leakcanary-repo/shark/ValueHolder/ReferenceHolder/value</p>"},{"location":"api/shark/-value-holder/-reference-holder/value/#value","title":"value","text":"<p>[jvm]\\ val value: Long</p>"},{"location":"api/shark/-value-holder/-short-holder/","title":"Index","text":"<p>//leakcanary-repo/shark/ValueHolder/ShortHolder</p>"},{"location":"api/shark/-value-holder/-short-holder/#shortholder","title":"ShortHolder","text":"<p>[jvm]\\ data class ShortHolder(val value: Short) : ValueHolder</p>"},{"location":"api/shark/-value-holder/-short-holder/#constructors","title":"Constructors","text":"ShortHolder [jvm]constructor(value: Short)"},{"location":"api/shark/-value-holder/-short-holder/#properties","title":"Properties","text":"Name Summary value [jvm]val value: Short"},{"location":"api/shark/-value-holder/-short-holder/-short-holder/","title":"short holder","text":"<p>//leakcanary-repo/shark/ValueHolder/ShortHolder/ShortHolder</p>"},{"location":"api/shark/-value-holder/-short-holder/-short-holder/#shortholder","title":"ShortHolder","text":"<p>[jvm]\\ constructor(value: Short)</p>"},{"location":"api/shark/-value-holder/-short-holder/value/","title":"Value","text":"<p>//leakcanary-repo/shark/ValueHolder/ShortHolder/value</p>"},{"location":"api/shark/-value-holder/-short-holder/value/#value","title":"value","text":"<p>[jvm]\\ val value: Short</p>"},{"location":"api/shark/-virtualizing-matching-reference-reader-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/VirtualizingMatchingReferenceReaderFactory</p>"},{"location":"api/shark/-virtualizing-matching-reference-reader-factory/#virtualizingmatchingreferencereaderfactory","title":"VirtualizingMatchingReferenceReaderFactory","text":"<p>[jvm]\\ class VirtualizingMatchingReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>, virtualRefReadersFactory: ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.ChainFactory) : ReferenceReader.Factory<HeapObject> </p> <p>Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, creating additional virtual instance reference based on the list of VirtualInstanceReferenceReader created by virtualRefReadersFactory.</p>"},{"location":"api/shark/-virtualizing-matching-reference-reader-factory/#constructors","title":"Constructors","text":"VirtualizingMatchingReferenceReaderFactory [jvm]constructor(referenceMatchers: List<ReferenceMatcher>, virtualRefReadersFactory: ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.ChainFactory)"},{"location":"api/shark/-virtualizing-matching-reference-reader-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject>"},{"location":"api/shark/-virtualizing-matching-reference-reader-factory/-virtualizing-matching-reference-reader-factory/","title":"virtualizing matching reference reader factory","text":"<p>//leakcanary-repo/shark/VirtualizingMatchingReferenceReaderFactory/VirtualizingMatchingReferenceReaderFactory</p>"},{"location":"api/shark/-virtualizing-matching-reference-reader-factory/-virtualizing-matching-reference-reader-factory/#virtualizingmatchingreferencereaderfactory","title":"VirtualizingMatchingReferenceReaderFactory","text":"<p>[jvm]\\ constructor(referenceMatchers: List<ReferenceMatcher>, virtualRefReadersFactory: ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.ChainFactory)</p>"},{"location":"api/shark/-virtualizing-matching-reference-reader-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/VirtualizingMatchingReferenceReaderFactory/createFor</p>"},{"location":"api/shark/-virtualizing-matching-reference-reader-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject></p>"},{"location":"snippets/bugsnag-uploader/","title":"Bugsnag uploader","text":"<pre><code>import android.app.Application\nimport com.bugsnag.android.Bugsnag\nimport com.bugsnag.android.Configuration\nimport com.bugsnag.android.ErrorTypes\nimport com.bugsnag.android.Event\nimport com.bugsnag.android.ThreadSendPolicy\nimport shark.HeapAnalysis\nimport shark.HeapAnalysisFailure\nimport shark.HeapAnalysisSuccess\nimport shark.Leak\nimport shark.LeakTrace\nimport shark.LeakTraceReference\nimport shark.LibraryLeak\n\nclass BugsnagLeakUploader(applicationContext: Application) {\n\nprivate val bugsnagClient = Bugsnag.start(\napplicationContext,\nConfiguration(\"YOUR_BUGSNAG_API_KEY\").apply {\nenabledErrorTypes = ErrorTypes(\nanrs = false,\nndkCrashes = false,\nunhandledExceptions = false,\nunhandledRejections = false\n)\nsendThreads = ThreadSendPolicy.NEVER\n}\n)\n\nfun upload(heapAnalysis: HeapAnalysis) {\nwhen (heapAnalysis) {\nis HeapAnalysisSuccess -> {\nval allLeakTraces = heapAnalysis\n.allLeaks\n.toList()\n.flatMap { leak ->\nleak.leakTraces.map { leakTrace -> leak to leakTrace }\n}\nif (allLeakTraces.isEmpty()) {\n// Track how often we perform a heap analysis that yields no result.\nbugsnagClient.notify(NoLeakException()) { event ->\nevent.addHeapAnalysis(heapAnalysis)\ntrue\n}\n} else {\nallLeakTraces.forEach { (leak, leakTrace) ->\nval message = \"Memory leak: ${leak.shortDescription}. See LEAK tab.\"\nval exception = leakTrace.asFakeException(message)\nbugsnagClient.notify(exception) { event ->\nevent.addHeapAnalysis(heapAnalysis)\nevent.addLeak(leak)\nevent.addLeakTrace(leakTrace)\nevent.groupingHash = leak.signature\ntrue\n}\n}\n}\n}\nis HeapAnalysisFailure -> {\n// Please file any reported failure to\n// https://github.com/square/leakcanary/issues\nbugsnagClient.notify(heapAnalysis.exception)\n}\n}\n}\n\nclass NoLeakException : RuntimeException()\n\nprivate fun Event.addHeapAnalysis(heapAnalysis: HeapAnalysisSuccess) {\naddMetadata(\"Leak\", \"heapDumpPath\", heapAnalysis.heapDumpFile.absolutePath)\nheapAnalysis.metadata.forEach { (key, value) ->\naddMetadata(\"Leak\", key, value)\n}\naddMetadata(\"Leak\", \"analysisDurationMs\", heapAnalysis.analysisDurationMillis)\n}\n\nprivate fun Event.addLeak(leak: Leak) {\naddMetadata(\"Leak\", \"libraryLeak\", leak is LibraryLeak)\nif (leak is LibraryLeak) {\naddMetadata(\"Leak\", \"libraryLeakPattern\", leak.pattern.toString())\naddMetadata(\"Leak\", \"libraryLeakDescription\", leak.description)\n}\n}\n\nprivate fun Event.addLeakTrace(leakTrace: LeakTrace) {\naddMetadata(\"Leak\", \"retainedHeapByteSize\", leakTrace.retainedHeapByteSize)\naddMetadata(\"Leak\", \"signature\", leakTrace.signature)\naddMetadata(\"Leak\", \"leakTrace\", leakTrace.toString())\n}\n\nprivate fun LeakTrace.asFakeException(message: String): RuntimeException {\nval exception = RuntimeException(message)\nval stackTrace = mutableListOf<StackTraceElement>()\nstackTrace.add(StackTraceElement(\"GcRoot\", gcRootType.name, \"GcRoot.kt\", 42))\nfor (cause in referencePath) {\nstackTrace.add(buildStackTraceElement(cause))\n}\nexception.stackTrace = stackTrace.toTypedArray()\nreturn exception\n}\n\nprivate fun buildStackTraceElement(reference: LeakTraceReference): StackTraceElement {\nval file = reference.owningClassName.substringAfterLast(\".\") + \".kt\"\nreturn StackTraceElement(reference.owningClassName, reference.referenceDisplayName, file, 42)\n}\n}\n</code></pre>"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"LeakCanary \ud83d\udc24","text":"<p>LeakCanary is a memory leak detection library for Android.</p> <p> </p> <p>LeakCanary\u2019s knowledge of the internals of the Android Framework gives it a unique ability to narrow down the cause of each leak, helping developers dramatically reduce jank, <code>Application Not Responding</code> freezes and <code>OutOfMemoryError</code> crashes.</p> <p>Get started!</p> <p>Quote</p> <p>\u201cA small leak will sink a great ship.\u201d - Benjamin Franklin</p>"},{"location":"blog-articles/","title":"Blog Articles","text":"<ul> <li>Memory Leaks in Android</li> <li>Detect memory leaks in your instrumentation tests using LeakCanary</li> <li>9 ways to avoid memory leaks in Android</li> <li>LeakCanary - Deobfuscation Feature Explained</li> <li>LeakCanary - An in-depth example of Android memory-leaks in MVP architecture</li> <li>Detecting memory leaks in Android applications</li> </ul> <p>Your article should be here, please update this list! Any technical level welcome.</p>"},{"location":"changelog/","title":"Change Log","text":"<p>Please thank our contributors \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p>"},{"location":"changelog/#version-30-alpha-8-2024-06-04","title":"Version 3.0 Alpha 8 (2024-06-04)","text":"<ul> <li>Added support for proper hprof handling on heap growth detection failures. Also inlined some public collaborators to achieve that. We now have a single class that\u2019s a bit larger but also a lot more obvious.</li> <li><code>findGrowingObjects</code> does not take a <code>CloseableHeapGraph</code> anymore (just a <code>HeapGraph</code>) and does not close that graph.</li> </ul>"},{"location":"changelog/#version-30-alpha-7-2024-05-30","title":"Version 3.0 Alpha 7 (2024-05-30)","text":"<p>Revisited a number of API choices for heap growth, to simplify but also support more advanced behavior such as keep heap dumps on test failure, or zipping heap dumps for CI upload.</p> <ul> <li><code>HeapGrowthTraversal</code> is now <code>HeapDiff</code></li> <li><code>ObjectGrowthDetector.forAndroidHeap().repeatingAndroidInProcessScenario()</code> is now HeapDiff.repeatingAndroidInProcessScenario()<code>which is now really just a wrapper for HeapDiff.repeatingDumpingTestScenario()</code> with Android UI test specific configuration.</li> <li><code>maxHeapDumps</code> and <code>scenarioLoopsPerDump</code> have moved from being factory parameters to being per scenario parameters.</li> <li>\ud83d\udca5 #2683 Fix crash when java.lang.Object has multiple class load records in JVM heap dumps</li> <li>\ud83d\udd28 #2682 Add support for unload class tags and records</li> </ul>"},{"location":"changelog/#heap-growth-espresso-test-example","title":"Heap Growth: Espresso test example","text":"<pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-android-test:3.0-alpha-7'\n}\n</code></pre> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest\nxmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n<!-- Performing the heap growth analysis in process requires more heap. -->\n<application\nandroid:largeHeap=\"true\"/>\n</manifest>\n</code></pre> <pre><code>class MyEspressoTest {\nval detector = HeapDiff.repeatingAndroidInProcessScenario()\n\n@Test\nfun greeter_says_hello_does_not_grow_heap() {\n// Runs repeatedly until the heap stops growing or we reach max heap dumps.\nval heapDiff = detector.findRepeatedlyGrowingObjects {\nonView(withId(R.id.name_field)).perform(typeText(\"Steve\"))\nonView(withId(R.id.greet_button)).perform(click())\nonView(withText(\"Hello Steve!\")).check(matches(isDisplayed()))\n}\n\nassertThat(heapDiff.growingObjects).isEmpty()\n}\n}\n</code></pre>"},{"location":"changelog/#heap-growth-jvm-junit-test-example","title":"Heap Growth: JVM Junit test example.","text":"<pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-jvm-test:3.0-alpha-7'\n}\n</code></pre> <pre><code>class MyUnitTest {\nval detector = HeapDiff.repeatingJvmInProcessScenario()\n\nval growingList = mutableListOf<String>()\n\n@Test\nfun failing_test() {\n// Runs repeatedly until the heap stops growing or we reach max heap dumps.\nval heapDiff = detector.findRepeatedlyGrowingObjects {\ngrowingList += \"Hi at ${System.currentTimeMillis()}\"\n}\n\n// This should fail.\nassertThat(heapDiff.growingObjects).isEmpty()\n}\n}\n</code></pre>"},{"location":"changelog/#heap-growth-ui-automator-test-example","title":"Heap Growth: UI Automator test example.","text":"<pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-android-uiautomator:3.0-alpha-7'\n}\n</code></pre> <pre><code>class MyUiAutomatorTest {\nval detector = HeapDiff.repeatingUiAutomatorScenario()\n\n@Test\nfun clicking_welcome_does_not_grow_heap() {\nval device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())\n// Runs repeatedly until the heap stops growing or we reach max heap dumps.\nval heapDiff = detector.findRepeatedlyGrowingObjects {\ndevice.findObject(By.text(\"Welcome!\")).click()\n}\n\nassertThat(heapDiff.growingObjects).isEmpty()\n}\n}\n</code></pre>"},{"location":"changelog/#heap-growth-shark-cli","title":"Heap Growth: Shark CLI","text":"<p>Download the Shark CLI Zip (alphas cannot be released to brew) and unzip it.</p> <p>Run the <code>heap-growth</code> command:</p> <pre><code>$ ~/Downloads/shark-cli-3.0-alpha-7/bin/shark-cli -p com.example.app.debug heap-growth\n</code></pre> <p>See the full diff.</p>"},{"location":"changelog/#version-30-alpha-6-2024-05-21","title":"Version 3.0 Alpha 6 (2024-05-21)","text":"<ul> <li>\ud83d\udc1b #2670 Use <code>RequestPermissionActivity</code> context for <code>Toast.makeText</code>.</li> </ul>"},{"location":"changelog/#heap-growth","title":"Heap Growth","text":"<ul> <li>Add warmup to reduce changes of classloading tied to analysis being picked up as false positive heap growth signal.</li> <li>Add dependency on AndroidX Collections to use in place of JDK data structures (lower memory footprint) and HHPC copied data structures (hard to maintain).</li> <li>Improvements to memory footprint by flattening a number of objects</li> <li>Fix retained size not being computed when analysis stops at the second heap dump.</li> <li>Removed <code>InitialState.heapGraphCount</code></li> <li>Ignore static <code><resolved_references></code> in all classes on JVM</li> </ul> <p>See the full diff.</p>"},{"location":"changelog/#version-30-alpha-4-2024-05-10","title":"Version 3.0 Alpha 4 (2024-05-10)","text":"<ul> <li>Deleted the <code>shark-heap-growth</code> artifact, the code has been merged into the <code>shark*</code> and <code>leakcanary*</code> modules.</li> <li>New <code>leakcanary-android-test</code> and <code>leakcanary-android-uiautomator</code> artifacts.</li> <li>Undo of breaking API changes that were introduced in alpha 1. The goal is to make the upgrade seamless. Please file an issue if you find an API breaking change from a 2.x release.</li> <li>Optimization: for known data structures that don\u2019t reference the rest of the graph beyond the references we know about, we explore them locally at once and stop enqueuing their internals, which reduces the memory footprint and the IO reads.</li> <li>Revamped the heap growth detection APIs, added support for UI Automator and Shark CLI.</li> </ul> <p>(note: I skipped from alpha 1 to alpha 4 because I messed up a few releases. Sorry!)</p>"},{"location":"changelog/#heap-growth-espresso-test-example_1","title":"Heap Growth: Espresso test example","text":"<p>Add the dependency:</p> <pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-android-test:3.0-alpha-2'\n}\n</code></pre> <p>Ensure your UI tests have enough heap by updating <code>src/androidTest/AndroidManifest.xml</code>:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest\nxmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n<!-- Performing the heap growth analysis in process requires more heap. -->\n<application\nandroid:largeHeap=\"true\"/>\n</manifest>\n</code></pre> <pre><code>class MyEspressoTest {\nval detector = ObjectGrowthDetector\n.forAndroidHeap()\n.repeatingAndroidInProcessScenario()\n\n@Test\nfun greeter_says_hello_does_not_leak() {\n// Runs repeatedly until the heap stops growing or we reach max heap dumps.\nval heapGrowth = detector.findRepeatedlyGrowingObjects {\nonView(withId(R.id.name_field)).perform(typeText(\"Steve\"))\nonView(withId(R.id.greet_button)).perform(click())\nonView(withText(\"Hello Steve!\")).check(matches(isDisplayed()))\n}\n\nassertThat(heapGrowth.growingObjects).isEmpty()\n}\n}\n</code></pre>"},{"location":"changelog/#heap-growth-ui-automator-test-example_1","title":"Heap Growth: UI Automator test example.","text":"<p>Add the dependency:</p> <pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-android-uiautomator:3.0-alpha-4'\n}\n</code></pre> <pre><code>class MyUiAutomatorTest {\nval detector = ObjectGrowthDetector\n.forAndroidHeap()\n.repeatingUiAutomatorScenario()\n\n@Test\nfun clicking_welcome_does_not_leak() {\nval device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())\n// Runs repeatedly until the heap stops growing or we reach max heap dumps.\nval heapGrowth = detector.findRepeatedlyGrowingObjects {\ndevice.findObject(By.text(\"Welcome!\")).click()\n}\n\nassertThat(heapGrowth.growingObjects).isEmpty()\n}\n}\n</code></pre>"},{"location":"changelog/#heap-growth-shark-cli_1","title":"Heap Growth: Shark CLI","text":"<p>Download the Shark CLI Zip (alphas cannot be released to brew) and unzip it.</p> <p>Run the <code>heap-growth</code> command:</p> <pre><code>$ ~/Downloads/shark-cli-3.0-alpha-2/bin/shark-cli -p com.example.app.debug heap-growth\n</code></pre>"},{"location":"changelog/#version-214-2024-04-17","title":"Version 2.14 (2024-04-17)","text":"<ul> <li>\ud83d\udc1b #2650 Removed accidental usage of <code>SettableFuture</code>, a <code>WorkManager</code> internal class, which will be removed in a future release of WorkManager. After updating WorkManager to that future release, all versions of LeakCanary from 2.8 to 2.13 will crash on leak analysis. To avoid a nasty surprise in the near future, update to LeakCanary 2.14.</li> <li>\ud83d\udd28 #2660 Add proguard mapping support for LeakCanary release.</li> <li>\ud83d\udc1b #2531 Heap dump & leak lists not preserving list position when navigating.</li> <li>\ud83d\udc24 #2615 Automatic fix of AOSP PermissionControllerManager leak (issuetracker.google.com/issues/318415056).</li> <li>\ud83d\udc24 #2559 Ignore <code>UiModeManager</code> AOSP leak.</li> <li>\ud83d\udca5 #2643 Fixed rare crash on RenderHeapDumpScreen.</li> </ul>"},{"location":"changelog/#version-30-alpha-1-2024-01-09","title":"Version 3.0 Alpha 1 (2024-01-09)","text":"<p>This alpha release marks the start of the work on LeakCanary 3. It\u2019s not stable! While I intend to rework some APIs, I also want to minimize migration work. The best way to ensure migrations will go smoothly is to try upgrading to a 3.0 alpha and to let me know if you get any compile or runtime error.</p>"},{"location":"changelog/#heap-growth_1","title":"Heap Growth","text":"<p>New APIs, not stable yet: the <code>shark-heap-growth</code> artifact contains APIs for writing test scenarios that detect repeated heap growth.</p> <p>Here\u2019s how it\u2019s used with an Espresso test:</p> <pre><code>class MyEspressoTest {\n\n@Test\nfun greeter_says_hello_does_not_leak() {\n// Runs in a loop until the heap stops growing or we reach max heap dumps.\nval heapTraversal = HeapGrowthDetector.detectRepeatedHeapGrowth {\n// Runs repeatedly until the heap stops growing or we reach maxHeapDumps.\nonView(withId(R.id.name_field)).perform(typeText(\"Steve\"))\nonView(withId(R.id.greet_button)).perform(click())\nonView(withText(\"Hello Steve!\")).check(matches(isDisplayed()))\n}\n\nassertThat(heapTraversal.growingNodes).isEmpty()\n}\n}\n</code></pre> <p>Here\u2019s an example set up, this is all very manual for now.</p> <p>Add the new dependency:</p> <pre><code>dependencies {\nandroidTestImplementation 'com.squareup.leakcanary:shark-heap-growth:3.0-alpha-1'\nandroidTestImplementation 'com.squareup.leakcanary:leakcanary-android-core:3.0-alpha-1'\n}\n</code></pre> <p>Create an implementation setup for Espresso in process UI tests:</p> <pre><code>import leakcanary.AndroidDebugHeapDumper\nimport shark.AndroidReferenceMatchers\nimport shark.AndroidReferenceReaderFactory\nimport shark.CloseableHeapGraph\nimport shark.DiffingHeapGrowthDetector\nimport shark.HeapGraphProvider\nimport shark.HeapTraversal\nimport shark.HprofHeapGraph.Companion.openHeapGraph\nimport shark.IgnoredReferenceMatcher\nimport shark.LiveHeapGrowthDetector\nimport shark.LoopingHeapGrowthDetector\nimport shark.MatchingGcRootProvider\nimport shark.ReferencePattern.InstanceFieldPattern\nimport java.io.File\nimport java.text.SimpleDateFormat\nimport java.util.Date\nimport java.util.Locale\n\n/**\n * Heap growth detector for in process Espresso UI tests.\n *\n * Call [LiveHeapGrowthDetector.detectRepeatedHeapGrowth] with a scenario to repeat,\n * then assert that the resulting [shark.HeapTraversalWithDiff.growingNodes] is empty.\n */\nval HeapGrowthDetector by lazy {\nval referenceMatchers = AndroidReferenceMatchers.appDefaults +\nHeapTraversal.ignoredReferences +\n// https://cs.android.com/android/_/android/platform/frameworks/base/+/6985fb39f07294fb979b14ba0ebabfd2fea06d34\nIgnoredReferenceMatcher(InstanceFieldPattern(\"android.os.StrictMode\", \"sLastVmViolationTime\"))\n\nval dateFormat = SimpleDateFormat(\"yyyy-MM-dd_HH-mm-ss_SSS'-heap-growth.hprof'\", Locale.US)\nval uploadedTracesDirectory = File(\"/sdcard/traces/\")\nuploadedTracesDirectory.mkdirs()\ncheck(uploadedTracesDirectory.exists()) {\n\"Expected heap dump folder to exist: ${uploadedTracesDirectory.absolutePath}\"\n}\n\nval heapGraphProvider = HeapGraphProvider {\nval fileName = dateFormat.format(Date())\nval heapDumpFile = File(uploadedTracesDirectory, fileName)\nAndroidDebugHeapDumper.dumpHeap(heapDumpFile)\ncheck(heapDumpFile.exists()) {\n\"Expected file to exist after heap dump: ${heapDumpFile.absolutePath}\"\n}\nval realGraph = heapDumpFile.openHeapGraph()\nobject : CloseableHeapGraph by realGraph {\noverride fun close() {\nrealGraph.close()\nheapDumpFile.delete()\n}\n}\n}\n\nLiveHeapGrowthDetector(\nmaxHeapDumps = 5,\nheapGraphProvider = heapGraphProvider,\nscenarioLoopsPerDump = 5,\ndetector = LoopingHeapGrowthDetector(\nDiffingHeapGrowthDetector(\nreferenceReaderFactory = AndroidReferenceReaderFactory(referenceMatchers),\ngcRootProvider = MatchingGcRootProvider(referenceMatchers)\n)\n)\n)\n}\n</code></pre> <p>Ensure your UI tests have enough heap by updating <code>src/androidTest/AndroidManifest.xml</code>:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest\nxmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n<!-- Performing the heap growth analysis in process requires more heap. -->\n<application\nandroid:largeHeap=\"true\"/>\n</manifest>\n</code></pre>"},{"location":"changelog/#reference-readers","title":"Reference readers","text":"<p>New APIs, not stable yet: <code>ReferenceReader</code> implementations aka expanders, are now public APIs. The names might change. These class define how LeakCanary traverses the graph, and allow for the creating of virtual references, as introduced here. These new APIs make it possible to add support for more custom data structures, and they\u2019re also useful when working directly with the <code>shark</code> APIs (for example, these APIs were necessary to build the heap growth detection tooling mentioned above).</p>"},{"location":"changelog/#objectwatcher-apis-refactor","title":"ObjectWatcher APIs refactor","text":"<p>#2612 is a first attempt at refactoring the reachability APIs. I already found backward compatibility issues (#2617), will fix in the next alpha, and probably still change the API shape.</p> <p>The general purpose of this refactor is to move away from the static singletons and high coupling of the current implementation, making the reachability APIs more useful in a variaty of contexts.</p>"},{"location":"changelog/#other-bug-fixes-and-improvements","title":"Other bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>Bumped Kotlin to 1.8.21</li> <li>Dropped support for detecting support fragment leaks: apps should all have migrated to Android X by now, and if not they can easily add their own implementation back.</li> </ul> <p>This list reflects only a subset of all changes. For more details, the full diff.</p>"},{"location":"changelog/#version-213-2024-01-03","title":"Version 2.13 (2024-01-03)","text":"<ul> <li>\ud83d\udc1b #2565 Fix AndroidX Fragments incorrectly marked as leaking if detached but not destroyed.</li> <li>\ud83d\udca5 #2568 Fixed missing <code>RECEIVER_EXPORTED</code> flag when calling <code>registerReceiver()</code> on API 34+.</li> <li>\ud83d\udd28 #2555 Binder stubs are now called out in leak traces.</li> <li>\ud83d\udc24 #2601 Added several known manufacturer & framework leaks.</li> </ul>"},{"location":"changelog/#version-212-2023-06-29","title":"Version 2.12 (2023-06-29)","text":"<ul> <li>\ud83d\udca5 #2527 <code>LifecycleRegistry</code> in <code>androidx.lifecycle:lifecycle-runtime</code> was migrated to kotlin and its <code>mState</code> field name changed to <code>state</code> which broke LeakCanary expectations.</li> <li>\ud83d\udc24 #2545 Added several known manufacturer & framework leaks.</li> </ul>"},{"location":"changelog/#version-211-2023-05-17","title":"Version 2.11 (2023-05-17)","text":"<ul> <li>\ud83d\udc1b #1764 Ignore phantom classes that were unloaded than reloaded (long time LeakCanary bug).</li> <li>\ud83d\udc1b #2471 Fix LeakCanary introducing a weird leak in Google\u2019s CI infra.</li> <li>\ud83d\udc1b #2496 Fix broken ViewModel leak detection</li> </ul>"},{"location":"changelog/#version-210-2022-11-10","title":"Version 2.10 (2022-11-10)","text":""},{"location":"changelog/#experimental-neo4j-heap-dump-exploration","title":"Experimental Neo4j heap dump exploration","text":"<p><code>shark-cli</code> has a new experiment <code>neo4j</code> command that will convert a heap dump into an embedded Neo4j database and then open Neo4j Browser to explore the heap dump.</p> <pre><code>brew install leakcanary-shark\n\nshark-cli --process com.example.app.debug neo4j\n</code></pre> <p></p>"},{"location":"changelog/#other-bug-fixes-and-improvements_1","title":"Other bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>\ud83d\udc24 #2440 Add Android 13 <code>POST_NOTICICATIONS</code> permission as well as a new <code>LeakCanary.Config.showNotifications</code> config to disable notifications entirely.</li> <li>\ud83d\udc24 #2416 Add Android 13 monochrome icon.</li> <li>\ud83d\udca5 #2371 Fix db crash when navigating heap dump screen.</li> <li>\ud83d\udc1b #2393 Allow LeakCanary to be defined as an AndroidX Startup dependency.</li> <li>\ud83d\udca5 #2430 Fix ShortcutManager crash on Android TV.</li> <li>\ud83d\udca5 #2382 Fix heap dump close crash.</li> </ul> <p>This list reflects only a subset of all changes. For more details, see the 2.10 Milestone and the full diff.</p>"},{"location":"changelog/#version-291-2022-04-20","title":"Version 2.9.1 (2022-04-20)","text":""},{"location":"changelog/#preface","title":"Preface","text":"<p>What are some things you\u2019d like to see in a future LeakCanary 3 version? Tell me on Twitter!</p> <p>Some ideas I\u2019m playing with:</p> <ul> <li>Moving heap analysis leak visualisation to a separate single app (written with Compose!) available on the PlayStore.</li> <li>Bumping Okio to 3.0</li> <li>Multiplatform heap analysis? Analyze a JVM heap dump in your browser?!</li> <li>Visualize the heap dominators / retained size as a treemap.</li> <li>A backend for LeakCanary?</li> </ul> <p>Anyway, that\u2019s still very much the future, let\u2019s talk about what\u2019s in <code>2.9.1</code> now!</p>"},{"location":"changelog/#new-metrics-in-heap-analysis-metadata","title":"New metrics in heap analysis metadata","text":"<p>I built LeakCanary to help fix leaks, but in doing so I accidentally wrote a fairly flexible heap dump parser. Since we\u2019re parsing the heap to find leaks anyway, we might as well report additional interesting metrics. Here\u2019s what you\u2019ll now see in the heap dump metadata:</p> <ul> <li>Class count: count of loaded classes</li> <li>Instance count</li> <li>Primitive array count</li> <li>Object array count</li> <li>Thread count</li> <li>Heap total bytes</li> <li>Bitmap count</li> <li>Bitmap total bytes</li> <li>Large bitmap count (bitmaps with more pixels than 1.1x the pixels on screen)</li> <li>Large bitmap total bytes</li> <li>SQLiteDatabase in memory (open or closed, as well as their file path)</li> </ul> <p>This is just a first pass, feedback and ideas welcome!</p>"},{"location":"changelog/#performance-improvements","title":"Performance improvements","text":"<p>The heap analysis now traverses the heap dump using <code>RandomAccessFile</code> instead of <code>FileChannel.transferTo()</code> 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.</p>"},{"location":"changelog/#breaking-change-failtestonleakrunlistener-deleted","title":"Breaking change: FailTestOnLeakRunListener deleted","text":"<p><code>FailTestOnLeakRunListener</code>, <code>FailTestOnLeak</code> and <code>FailAnnotatedTestOnLeakRunListener</code> were deprecated in LeakCanary 2.8 as they rely on hacking the Android Test library internals which have since changed, and have been replaced by <code>LeakAssertions.assertNoLeak()</code> and the <code>DetectLeaksAfterTestSuccess</code> 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\u2019re gone: #2282. If you can\u2019t use the test rules just yet, you\u2019re welcome to copy paste the listener implementations in your own codebase.</p>"},{"location":"changelog/#other-bug-fixes-and-improvements_2","title":"Other bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>\ud83d\udca5 #2367 Fixed <code>AndroidLeakFixes.FLUSH_HANDLER_THREADS</code> (<code>HandlerThread</code> can have a null <code>Looper</code>).</li> <li>\ud83d\udca5 #2286 Update Curtains to include Proguard rules and prevent <code>WindowCallbackWrapper</code> crashes.</li> <li>\ud83d\udca5 #2294 Fixed <code>WindowDelegateCallback.onMenuOpened()</code> crash.</li> <li>\ud83d\udc24 #2328 Fixed ToastEventListener leak. Sorry \ud83d\ude2c!</li> <li>\ud83d\udca5 #2310 Fixed crash when using WorkManager < 2.1.0.</li> <li>\ud83d\udca5 #2342 Fixed crash when <code>HashSet.map</code> is null (which isn\u2019t supposed to happen, oh well, Android \ud83e\udd37\u200d\u2642\ufe0f).</li> <li>\ud83d\udc1b #2117 Fixed StrictMode disk read violations.</li> <li>\ud83d\udca5 #2351 Fixed a race causing a startup crash.</li> <li>\ud83d\udca5 #2315 Fixed crash when using Okio 1.14.</li> <li>\ud83d\udc1b #2182 Fixed multi rescheduling of <code>BackgroundListener$checkAppInBackground</code>.</li> <li>\ud83d\udca5 #2360 Fixed SQLiteOpenHelper concurrent creation crash.</li> </ul> <p>This list reflects only a subset of all changes. For more details, see the 2.9 Milestone and the full diff.</p>"},{"location":"changelog/#version-281-2022-01-06","title":"Version 2.8.1 (2022-01-06)","text":"<p>This is a bugfix release, a quick follow up to <code>2.8</code> which had a few major issues \ud83d\ude05. If you haven\u2019t yet, you should definitely read the <code>2.8</code> changelog.</p>"},{"location":"changelog/#thanks","title":"Thanks","text":"<p>Please thank @dicosta, @Goooler, @plnice, @preetha1326 for their contributions, bug reports and feature requests \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p>"},{"location":"changelog/#crash-fixes","title":"Crash fixes \ud83d\udca5\ud83d\udca5\ud83d\udca5","text":"<p>This patch release fixes not 1, not 2, but 3 crashes!</p> <ul> <li>\ud83d\udca5 #2268 WorkManager expedited request crashes before API 31.</li> <li>\ud83d\udca5 #2270 Updating <code>LeakCanary.config</code> crashes when <code>AppWatcher</code> is not installed.</li> <li>\ud83d\udca5 #2271 Analysis failure on API 25 because <code>HashMap$Entry</code> became <code>HashMap$HashMapEntry</code> (on API 25) before it finally changed to <code>HashMap$Node</code>.</li> </ul> <p>For more details, see the 2.8.1 Milestone and the full diff.</p>"},{"location":"changelog/#version-28-2022-01-04","title":"Version 2.8 (2022-01-04)","text":"<p>Note: please update to <code>2.8.1</code> instead.</p>"},{"location":"changelog/#preface_1","title":"Preface","text":"<p>The last release was 9 months ago. What happened?! Well, soon after releasing LeakCanary 2.7, I had my 2nd baby, a wonderful daughter \ud83d\ude0d. Having 2 young kids leaves a lot less time available for Open Source work\u2026 but it\u2019s worth it!</p> <p>\u2015 P.Y.</p>"},{"location":"changelog/#thanks_1","title":"Thanks","text":"<p>Please thank @aaronweihe, @alhah, @Andre-max, @AoraMD, @BraisGabin, @breezenan, @Goooler, @iliaskomp @Jeff11, @jmnwong, @IdioticMadman, @keyur1sst, @lchen8, @leinardi, @Maragues, @mars885, @mateuszkwiecinski, @matiash, @maxxx, @preetha1326, @SimonMarquis, @slavonnet, @Sonphil, @summerlyr, @SUPERCILEX, @utwyko, @ZacSweers, @ziranshang, @zoltish for their contributions, bug reports and feature requests \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p>"},{"location":"changelog/#improved-support-for-data-structure-internals","title":"Improved support for data structure internals","text":"<p>\ud83e\udd13 Inspired by Android Studio, LeakCanary\u2019s node discovery during heap graph traversal is now abstracted away. This allows overlaying logical structure over common data structure internals.</p> <p>\ud83d\ude05 WHAT?!</p> <p>\ud83d\udc49 This means we can make known data structures look more like their APIs than their internals. For example, developers tend to think of setting a <code>HashMap</code> entry as <code>map[\"key\"] = value</code> rather than <code>map.table[hash(\"key\")].next.next.next = Node(value)</code>, which is what LeakCanary would previously show in its leak traces.</p> <p>Let\u2019s look at a <code>HashMap</code> example:</p> <pre><code>class CheckoutController {\n\nval tabs = HashMap<String, Tab>()\n\nfun addItemsTab(tab: Tab) {\ntabs[\"ItemsTab\"] = tab\n}\n}\n</code></pre> <p>If the <code>Tab</code> instance holds on to a view, we might see a leak trace that would look like this:</p> <pre><code>\u2502 ...\n\u251c\u2500 com.example.CheckoutController instance\n\u2502 \u2193 CheckoutController.tabs\n\u251c\u2500 java.util.HashMap instance\n\u2502 \u2193 HashMap.table\n\u251c\u2500 java.util.HashMap$Node[] array\n\u2502 \u2193 HashMap$Node[42]\n\u251c\u2500 java.util.HashMap$Node instance\n\u2502 \u2193 HashMap$Node.next\n\u251c\u2500 java.util.HashMap$Node instance\n\u2502 \u2193 HashMap$Node.value\n\u251c\u2500 com.example.Tab instance\n\u2502 ...\n</code></pre> <p>With the improved data structure support, the leak trace is much clearer (also note how the <code>ItemsTab</code> string key is now surfaced):</p> <pre><code>\u2502 ...\n\u251c\u2500 com.example.CheckoutController instance\n\u2502 \u2193 CheckoutController.tabs\n\u251c\u2500 java.util.HashMap instance\n\u2502 \u2193 HashMap[ItemsTab]\n\u251c\u2500 com.example.Tab instance\n\u2502 ...\n</code></pre> <p>Another benefit of this change is that leak signatures become less dependent of the runtime, and therefore are more consistent. This is especially true for any data structure that relies on a linked list (<code>HashMap</code>, <code>LinkedList</code>, <code>MessageQueue</code>, \u2026). Currently LeakCanary supports a limited set of common data structures from Apache Harmony, Open JDK, and the Android SDK. Let me know what else you need!</p>"},{"location":"changelog/#objectanimator-leaks","title":"ObjectAnimator leaks","text":"<p>LeakCanary will now detect leaks that trigger when forgetting to cancel <code>ObjectAnimator</code>. This new feature is enabled by the node discovery changes described above!</p> <p>Let\u2019s say you accidentally start an infinite <code>ObjectAnimator</code> and never cancel it, like so:</p> <pre><code>class ExampleActivity : Activity() {\n\noverride fun onCreate(savedInstanceState: Bundle?) {\nsuper.onCreate(savedInstanceState)\nsetContentView(R.layout.main_activity)\nfindViewById<Button>(R.id.button).setOnClickListener { view ->\nObjectAnimator.ofFloat(view, View.ALPHA, 0.1f, 0.2f).apply {\nduration = 100\nrepeatMode = ValueAnimator.REVERSE\nrepeatCount = ValueAnimator.INFINITE\nstart()\n}\n}\n}\n}\n</code></pre> <p>In previous releases, LeakCanary would detect that the animated view is leaking but it wouldn\u2019t be able to find the leak and instead would report it as an unreachable object: An unreachable object is still in memory but LeakCanary could not find a strong reference path from GC roots.</p> <p>LeakCanary now reports the leak and adds animator state information, helping detect and fix any infinite <code>ObjectAnimator</code>.</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: Thread object\n\u2502\n\u251c\u2500 java.lang.Thread instance\n\u2502 Leaking: NO (the main thread always runs)\n\u2502 Thread name: 'main'\n\u2502 \u2193 Thread.threadLocals\n\u2502 ~~~~~~~~~~~~\n...\n\u251c\u2500 android.animation.ObjectAnimator instance\n\u2502 Leaking: UNKNOWN\n\u2502 mListeners = null\n\u2502 mPropertyName = null\n\u2502 mProperty.mName = alpha\n\u2502 mProperty.mType = java.lang.Float\n\u2502 mInitialized = true\n\u2502 mStarted = true\n\u2502 mRunning = true\n\u2502 mAnimationEndRequested = false\n\u2502 mDuration = 100\n\u2502 mStartDelay = 0\n\u2502 mRepeatCount = INFINITE (-1)\n\u2502 mRepeatMode = REVERSE (2)\n\u2502 \u2193 ObjectAnimator.mTarget\n\u2502 ~~~~~~~\n\u2570\u2192 android.widget.Button instance\n Leaking: YES (View.mContext references a destroyed activity)\n</code></pre> <p>To learn more, see this AOSP issue: ObjectAnimator.mTarget weak ref creates memory leaks on infinite animators.</p>"},{"location":"changelog/#leak-detection-in-tests","title":"Leak detection in tests","text":"<p>Previous releases of <code>leakcanary-android-instrumentation</code> introduced a <code>FailTestOnLeakRunListener</code> which could run leak detection after each UI tests. Unfortunately <code>FailTestOnLeakRunListener</code> relied on a hack around <code>androidx.test</code> internals to report failures. The internals keep changing with every <code>androidx.test</code> release and breaking <code>FailTestOnLeakRunListener</code> \ud83d\ude2d.</p> <p><code>FailTestOnLeakRunListener</code> is now deprecated (\ud83d\udc4b) and replaced by the <code>DetectLeaksAfterTestSuccess</code> test rule, which you can add to your test like any normal test rule.</p> <p>Additionally, you can call <code>LeakAssertions.assertNoLeak()</code> from anywhere in your instrumentation tests. You can also annotate tests with <code>@SkipLeakDetection</code> (for that to work you\u2019ll also need to set up the <code>TestDescriptionHolder</code> test rule).</p> <pre><code>class CartTest {\n@get:Rule\nval rules = RuleChain.outerRule(TestDescriptionHolder)\n.around(DetectLeaksAfterTestSuccess())\n.around(ActivityScenarioRule(CartActivity::class.java))\n\n@Test\nfun addItemToCart() {\n// ...\n}\n\n@SkipLeakDetection(\"See #1234\")\n@Test\nfun removeItemFromCart() {\n// ...\n}\n}\n</code></pre>"},{"location":"changelog/#android-12","title":"Android 12","text":"<p>Hopefully this time we fixed everything that Android 12 broke: missing <code>exported:true</code> tags, missing pending intent flags, and <code>ForegroundServiceStartNotAllowedException</code> crashes. If not, let us know! Can\u2019t wait for Android 13 to break everything again \ud83e\udd2c.</p>"},{"location":"changelog/#workmanager","title":"WorkManager","text":"<p>Running an Android Service without crashing (<code>ForegroundServiceStartNotAllowedException</code>\u2026) is becoming harder with every release of Android, so I got rid of the LeakCanary heap analyzer service! Instead, LeakCanary leverages WorkManager if you already have it as a dependency. If you don\u2019t use WorkManager, then LeakCanary will fall back to using a simple thread.</p> <p>Note: I recommend using at least WorkManager 2.7.0 as it adds the <code>WorkRequest.Builder.setExpedited()</code> API which LeakCanary leverages if available.</p>"},{"location":"changelog/#multi-process","title":"Multi process","text":"<p>Switching to WorkManager also impacts the LeakCanary multi process approach, which now leverages WorkManager remote jobs. Blog on how I got this working: WorkManager multi-process for libraries.</p> <p>Multi process is harder to get right so you should only use this if LeakCanary frequently runs out of memory while performing the heap analysis. Here are the updated set up steps:</p> <p>1) Add the <code>leakcanary-android-process</code> dependency and keep the <code>leakcanary-android</code> dependency.</p> <pre><code>dependencies {\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8'\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android-process:2.8'\n}\n</code></pre> <p>2) Skip the initialization code in the <code>Application</code> class</p> <pre><code>class ExampleApplication : Application() {\n\noverride fun onCreate() {\nif (LeakCanaryProcess.isInAnalyzerProcess(this)) {\nreturn\n}\nsuper.onCreate()\n// normal init goes here, skipped in :leakcanary process.\n}\n}\n</code></pre> <p>That\u2019s it! Note that event listeners (see below) related to the analysis will fire in the remote process.</p>"},{"location":"changelog/#androidx-app-startup","title":"AndroidX App Startup","text":"<p>LeakCanary now optionally supports the AndroidX App Startup library. All you need to do is replace the <code>leakcanary-android</code> dependency with <code>leakcanary-android-startup</code>:</p> <pre><code>dependencies {\n// Remove the normal leakcanary-android dependency\n// debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8'\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android-startup:2.8'\n}\n</code></pre> <p>Note 1: <code>leakcanary-android</code> adds the code for automatic installl to <code>leakcanary-android-core</code>. If you\u2019re calling <code>AppWatcher.manualInstall()</code>, you can depend directly on <code>leakcanary-android-core</code> instead of <code>leakcanary-android</code>, and you won\u2019t need the disable any automatic install.</p> <p>Note 2: the same principle applies to <code>leakcanary-object-watcher-android</code>: it depends on <code>leakcanary-object-watcher-android-core</code> and adds automatic install, while <code>leakcanary-object-watcher-android-startup</code> leverages the App Startup library. Same for <code>plumber-android</code>, <code>plumber-android-core</code> and <code>plumber-android-startup</code>.</p>"},{"location":"changelog/#event-listeners","title":"Event listeners","text":"<p><code>LeakCanary.Config</code> has a new <code>eventListeners</code> field allowing you to react to LeakCanary\u2019s lifecycle. If you want to customize this, you most likely should be keeping the default list of listeners and add or remove from it.</p> <p>For example, if you want to disable the LeakCanary toast:</p> <pre><code>LeakCanary.config = LeakCanary.config.run {\ncopy(\neventListeners = eventListeners.filter {\nit !is ToastEventListener\n}\n)\n}\n</code></pre> <p>If you want to upload heap analysis results:</p> <pre><code>LeakCanary.config = LeakCanary.config.run {\ncopy(\neventListeners = eventListeners + EventListener { event ->\nif (event is HeapAnalysisSucceeded) {\n// Upload event.heapAnalysis\n}\n}\n)\n}\n</code></pre> <p>Note: <code>Leakcanary.Config.onHeapAnalyzedListener</code> still works but is now deprecated.</p> <p>Feedback welcome on this new API!</p>"},{"location":"changelog/#other-bug-fixes-and-improvements_3","title":"Other bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>#2096 Opening / sharing heap dump files now supports LeakCanary as an option.</li> <li>#2210 First Compose dedicated object inspectors!</li> <li>#2121 Support for customizing the heap dumper.</li> </ul> <p>This list reflects only a subset of all changes. For more details, see the 2.8 Milestone and the full diff.</p>"},{"location":"changelog/#version-27-2021-03-26","title":"Version 2.7 (2021-03-26)","text":"<p>Please thank @chao2zhang, @ihrupin, @jzbrooks, @msfjarvis, @reneargento, @Unpublished for their contributions, bug reports and feature requests \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p>"},{"location":"changelog/#finer-grained-root-view-watching","title":"Finer grained root view watching","text":"<p>In version 2.6, LeakCanary added detection of root views retained after <code>View.onDetachedFromWindow()</code>. This helps find more leaks, but unfortunately some Android widgets keep a detached root view around to reattach it later (e.g. spinner). App developers also sometimes do the same with dialogs, keeping a single instance around and calling <code>show()</code> and <code>hide()</code> as needed. As a result, LeakCanary would report leaks that were actually not leaks.</p> <p>In version 2.7, the default behavior changed: LeakCanary will continue to detect leaks of toasts, but will ignore root views created by a PopupWindow (which is what Android widgets use). It will also ignore root views created by a dialog by default, and you can turn this back on by setting the <code>leak_canary_watcher_watch_dismissed_dialogs</code> resource boolean to true:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<bool name=\"leak_canary_watcher_watch_dismissed_dialogs\">true</bool>\n</resources>\n</code></pre> <p>This is implemented using a new Square library: Curtains.</p>"},{"location":"changelog/#targeting-android-12","title":"Targeting Android 12","text":"<p>We fixed two issues for apps that want to target Android 12:</p> <ul> <li>#2074 Activities that use intent filters must declare the <code>android:exported</code> attribute.</li> <li>#2079 PendingIntent requires the <code>FLAG_IMMUTABLE</code> flag.</li> </ul>"},{"location":"changelog/#bug-fixes-and-improvements","title":"Bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>#2075 Fixed crash when sharing heap dumps.</li> <li>#2067 Fixed crash when opening leaks from older versions (before 2.6) of LeakCanary.</li> <li>#2049 Fixed Plumber crash due to R8 shaking AndroidLeakFixes.</li> <li>#2084 Fixed Shark crash when used from multiple threads.</li> <li>#2054 \ud83d\ude48\ud83d\ude49\ud83d\ude4a Blocked Monkeys from deleting leaks.</li> <li>#2069 Added X button to the root leak activity (for custom devices with no back button)</li> <li>#2091 Added receiver details if LoadedApk shows up in the leaktrace.</li> <li>#2083 Added service status details (created or not) to leaktrace.</li> <li>#2099 Retry button if analysis fails.</li> <li>#2066 When heap analysis in UI tests is skipped and NoAnalysis is returned, NoAnalysis now includes a reason to help debug why it didn\u2019t run.</li> <li>#2000 The LeakCanary CI now leverages GitHub actions instead of Travis.</li> </ul> <p>For more details, see the 2.7 Milestone and the full diff.</p>"},{"location":"changelog/#version-26-christmas-release-2020-12-24","title":"Version 2.6 - Christmas Release \ud83c\udf84 (2020-12-24)","text":"<p>Please thank @chao2zhang, @ChaosLeung, @LitterSun, @mickverm, @opatry, @Thomas-Vos, @tricknology, @rahul-a, @samoylenkodmitry, @sing0055, @ubiratansoares for their contributions, bug reports and feature requests \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p> <p>This Christmas Release includes several external contributions and a bunch of cool new features! \ud83c\udf81\ud83c\udf81</p>"},{"location":"changelog/#detecting-root-views-retained-after-viewondetachedfromwindow","title":"Detecting root views retained after <code>View.onDetachedFromWindow()</code>","text":"<p>On Android, every displayed view hierarchy is attached to a window, whether it be the view hierarchy of an activity, a dialog, a toast or a chat head. After a view hierarchy is detached from its window, it should be garbage collected.</p> <p>LeakCanary already detects leaks of activity view hierarchies because retained detached views reference their activity context and LeakCanary detects activities retained after <code>Activity.onDestroy()</code>. In this new release, LeakCanary will now detect the leak of a dialog view hierarchy as soon as that dialog is dismissed, or any other view that is passed to WindowManager.removeView().</p>"},{"location":"changelog/#detecting-services-retained-after-serviceondestroy","title":"Detecting services retained after <code>Service.onDestroy()</code>","text":"<p>After an Android service is destroyed, it should be garbage collected. Unfortunately, the Android SDK does not provide any generic API to observe the service lifecycle. We worked around that using reflection on greylist APIs (details in #2014). Let\u2019s hope this motivates the Android team to build the APIs developers need.</p>"},{"location":"changelog/#configuring-retained-object-detection","title":"Configuring retained object detection","text":"<p>With the detection of 2 new types of retained objects, we\u2019re also adding APIs to configure which watchers should be installed as well as adding filtering capabilities.</p> <p>First, disable the automatic install:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<bool name=\"leak_canary_watcher_auto_install\">false</bool>\n</resources>\n</code></pre> <p>Then you can install LeakCanary manually. LeakCanary 2.6 comes with 4 watchers installed by default: <code>ActivityWatcher</code>, <code>FragmentAndViewModelWatcher</code>, <code>RootViewWatcher</code>, <code>ServiceWatcher</code>. Here\u2019s an example to get all the default watchers except <code>ServiceWatcher</code>:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\n\nval watchersToInstall = AppWatcher.appDefaultWatchers(application)\n.filter { it !is ServiceWatcher }\n\nAppWatcher.manualInstall(\napplication = application,\nwatchersToInstall = watchersToInstall\n)\n}\n}\n</code></pre> <p>LeakCanary introduces a new functional (SAM) interface implemented by <code>ObjectWatcher</code>: <code>ReachabilityWatcher</code>, with a <code>ReachabilityWatcher.expectWeaklyReachable()</code> method that replaces the now deprecated <code>ObjectWatcher.watch()</code> method. You can create the default watcher instances with a custom <code>ReachabilityWatcher</code> that delegates to <code>AppWatcher.objectWatcher</code> but filters out specific instances (e.g. <code>BadSdkLeakingFragment</code>):</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\n\nval delegate = ReachabilityWatcher { watchedObject, description ->\nif (watchedObject !is BadSdkLeakingFragment) {\nAppWatcher.objectWatcher.expectWeaklyReachable(watchedObject, description)\n}\n}\n\nval watchersToInstall = AppWatcher.appDefaultWatchers(application, delegate)\n\nAppWatcher.manualInstall(\napplication = application,\nwatchersToInstall = watchersToInstall\n)\n}\n}\n</code></pre> <p>With these new configuration options, <code>AppWatcher.config</code> is now deprecated and a no-op.</p>"},{"location":"changelog/#dumping-the-heap-on-screen-off","title":"Dumping the heap on screen off","text":"<p>The default threshold to dump the heap is 5 retained objects when the app is visible, and 1 retained object when the app is not visible. Up until now, visible meant \u201cthe app has at least one activity in started state\u201d. In LeakCanary 2.6, the app will now be considered not visible if the device screen is off, lowering the threshold to trigger heap dumps when you turn off the device screen.</p>"},{"location":"changelog/#leakcanary-for-releases","title":"LeakCanary for releases","text":"<p>LeakCanary 2.6 introduces a new artifact: <code>leakcanary-android-release</code>. This artifact exposes APIs to run a heap analysis in release builds, in production.</p> <p>Danger</p> <p>Everything about this is experimental. Running a heap analysis in production is not a very common thing to do, and we\u2019re still learning and experimenting with this. Also, both the artifact name and the APIs may change.</p> <pre><code>dependencies {\n// debugImplementation because LeakCanary should only run in debug builds.\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.6'\n\n// NEW: LeakCanary for releases!\nreleaseImplementation 'com.squareup.leakcanary:leakcanary-android-release:2.6'\n// Optional: detect retained objects. This helps but is not required.\nreleaseImplementation 'com.squareup.leakcanary:leakcanary-object-watcher-android:2.6'\n}\n</code></pre> <p>Here\u2019s a code example that runs a heap analysis when the screen is turned off or the app enters background, checking first if a Firebase Remote Config flag is turned on, and uploading the result to Bugsnag:</p> <pre><code>class ReleaseExampleApplication : ExampleApplication() {\n\n// Cancels heap analysis if \"heap_analysis_flag\" is false.\nprivate val flagInterceptor by lazy {\nobject : HeapAnalysisInterceptor {\n\nval remoteConfig: FirebaseRemoteConfig = TODO()\n\noverride fun intercept(chain: Chain): HeapAnalysisJob.Result {\nif (remoteConfig.getBoolean(\"heap_analysis_flag\")) {\nchain.job.cancel(\"heap_analysis_flag false\")\n}\nreturn chain.proceed()\n}\n}\n}\n\nprivate val analysisClient by lazy {\nHeapAnalysisClient(\n// Use private app storage. cacheDir is never backed up which is important.\nheapDumpDirectoryProvider = { cacheDir },\n// stripHeapDump: remove all user data from hprof before analysis.\nconfig = HeapAnalysisConfig(stripHeapDump = true),\n// Default interceptors may cancel analysis for several other reasons.\ninterceptors = listOf(flagInterceptor) + HeapAnalysisClient.defaultInterceptors(this)\n)\n}\n\nprivate val analysisExecutor by lazy {\nExecutors.newSingleThreadExecutor {\nthread(start = false, name = \"Heap analysis executor\") {\nandroid.os.Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND)\nit.run()\n}\n}\n}\n\nprivate val analysisCallback: (Result) -> Unit by lazy {\nval uploader = BugsnagHeapAnalysisUploader(this@ReleaseExampleApplication)\n{ result ->\nif (result is Done) {\nuploader.upload(result.analysis)\n}\n}\n}\n\noverride fun onCreate() {\nsuper.onCreate()\n\n// Delete any remaining heap dump (if we crashed)\nanalysisExecutor.execute {\nanalysisClient.deleteHeapDumpFiles()\n}\n\n// Starts heap analysis on background importance\nBackgroundTrigger(\napplication = this,\nanalysisClient = analysisClient,\nanalysisExecutor = analysisExecutor,\nanalysisCallback = analysisCallback\n).start()\n\n// Starts heap analysis when screen off\nScreenOffTrigger(\napplication = this,\nanalysisClient = analysisClient,\nanalysisExecutor = analysisExecutor,\nanalysisCallback = analysisCallback\n).start()\n}\n\n/**\n * Call this to trigger heap analysis manually, e.g. from\n * a help button.\n *\n * This method returns a `HeapAnalysisJob` on which you can\n * call `HeapAnalysisJob.cancel()` at any time.\n */\nfun triggerHeapAnalysisNow(): HeapAnalysisJob {\nval job = analysisClient.newJob()\nanalysisExecutor.execute {\nval result = job.execute()\nanalysisCallback(result)\n}\nreturn job\n}\n}\n</code></pre> <p>The Bugsnag uploader:</p> <pre><code>class BugsnagHeapAnalysisUploader(applicationContext: Application) {\n\nprivate val bugsnagClient: Client\n\ninit {\nbugsnagClient = Client(\napplicationContext,\nBUGSNAG_API_KEY,\nDO_NOT_ENABLE_EXCEPTION_HANDLER\n)\nbugsnagClient.setSendThreads(false)\n}\n\nfun upload(heapAnalysis: HeapAnalysis) {\nwhen (heapAnalysis) {\nis HeapAnalysisSuccess -> {\nval exception = HeapAnalysisReport()\nbugsnagClient.notify(exception) { report ->\nval metaData = report.error.metaData\nmetaData.addToTab(\"Heap Analysis\", \"result\", heapAnalysis.toString())\n}\n}\nis HeapAnalysisFailure -> {\n// Please file any reported failure to\n// https://github.com/square/leakcanary/issues\nbugsnagClient.notify(heapAnalysis.exception)\n}\n}\n}\n\n// Exception with fake unique stacktrace to send all reports to the same error entry.\nclass HeapAnalysisReport : Exception(\"Check the HEAP ANALYSIS tab\") {\noverride fun fillInStackTrace(): Throwable {\nstackTrace = arrayOf(\nStackTraceElement(\n\"HeapAnalysisReport\",\n\"analyzeHeap\",\n\"HeapAnalysisReport.kt\",\n1\n)\n)\nreturn this\n}\n}\n\ncompanion object {\nprivate const val BUGSNAG_API_KEY = YOUR_BUGSNAG_API_KEY\nprivate const val DO_NOT_ENABLE_EXCEPTION_HANDLER = false\n}\n}\n</code></pre>"},{"location":"changelog/#more-leak-fixes-in-plumber","title":"More leak fixes in Plumber","text":"<p>We added 3 new automatic fixes for known AOSP leaks in <code>plumber-android</code> (details: #1993). As a reminder, <code>plumber-android</code> is automatically included when you add <code>leakcanary-android</code>, and you can add it manually for build types that don\u2019t include LeakCanary:</p> <pre><code>dependencies {\n // leakcanary-android adds plumber-android to debug builds\n debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.6'\n\n // This adds plumber-android to all build types\n implementation 'com.squareup.leakcanary:plumber-android:2.6'\n}\n</code></pre>"},{"location":"changelog/#bug-fixes-and-improvements_1","title":"Bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>#1948 Leakcanary is now compiled against Kotlin 1.4 (while staying 1.3 compatible) to support Functional (SAM) interfaces.</li> <li>#1956 The retained object size is displayed as a human readable output (KB, MB, \u2026).</li> <li>#1976 Improved default object inspectors and leak finders for <code>View</code> and <code>Context</code>.</li> <li>#1972 Fields are printed with the parent class name that holds the field in leak traces.</li> <li>#1981 Fixed StrictMode policy violation (main thread read from disk).</li> <li>#1977 Report objects that are not strongly reachable.</li> <li>#2018 & #2019 Fixed crashes in LeakCanary UI (discovered by Monkey tests).</li> <li>#2015 Fixed crash on Android < 16.</li> <li>#2023 Fixed crash in plugin projects.</li> </ul> <p>For more details, see the 2.6 Milestone and the full diff.</p>"},{"location":"changelog/#version-25-2020-10-01","title":"Version 2.5 (2020-10-01)","text":"<p>Please thank @Amokrane, @Armaxis, @askont, @chao2zhang, @daniil-shevtsov, @eygraber, @msfjarvis, @mzgreen, @lchen8, @rpattabi, @sahil2441, @SylvainGirod, @vhow for their contributions, bug reports and feature requests \ud83d\ude4f \ud83d\ude4f \ud83d\ude4f.</p>"},{"location":"changelog/#heap-analysis-is-twice-as-fast","title":"Heap analysis is twice as fast \ud83d\udc24\ud83d\udca8","text":"<p>No one asked, so we delivered! We rewrote several core components in Shark (LeakCanary\u2019s heap analyzer) to dramatically reduce IO reads and allocations while keeping memory constant. More details on Twitter: thread by @ArtemChubaryan and thread by @Piwai.</p>"},{"location":"changelog/#compute-retained-size-within-the-leak-trace","title":"Compute retained size within the leak trace","text":"<p>Previously, LeakCanary computed the retained size for the leaking object (the last object in the leak trace). However, the bad reference causing objects to leak is often higher up in the leak trace and everything that it holds onto is actually leaking. So LeakCanary now computes the retained size for all the objects in the leaktrace that have a LEAKING or UNKNOWN status:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 com.example.MySingleton class\n\u2502 Leaking: NO (a class is never leaking)\n\u2502 \u2193 static MySingleton.leakedView\n\u2502 ~~~~~~~~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 Leaking: YES (View.mContext references a destroyed activity)\n\u2502 Retaining 46326 bytes in 942 objects\n\u2502 \u2193 TextView.mContext\n\u2570\u2192 com.example.MainActivity instance\n\u200b Leaking: YES (Activity#mDestroyed is true)\n\u200b Retaining 1432 bytes in 36 objects\n</code></pre>"},{"location":"changelog/#disable-leakcanary-from-the-ui","title":"Disable LeakCanary from the UI","text":"<p>New toggle to disable heap dumping, which can be useful for QA, or when doing a product demo. LeakCanary will still show a notification when an object is retained.</p> <p></p>"},{"location":"changelog/#deobfuscating-hprof-files","title":"Deobfuscating hprof files","text":"<p>The Shark CLI can now deobfuscate heap dumps:</p> <pre><code>brew install leakcanary-shark\n\nshark-cli --hprof heapdump.hprof -m mapping.txt deobfuscate-hprof\n</code></pre>"},{"location":"changelog/#bug-fixes-and-improvements_2","title":"Bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>Heap analysis text results now wrap to a max width when sharing them from the LeakCanary activity or printing to logcat. This will make it harder to miss details that are lost at the end of long lines of text.</li> <li>The <code>leak_canary_watcher_auto_install</code>, <code>leak_canary_allow_in_non_debuggable_build</code> and <code>leak_canary_plumber_auto_install</code> resource booleans were meant to be public.</li> <li>We sprinkled a few <code>@JvmStatic</code> to help Java consummers.</li> <li>Fixed crash when no browser installed.</li> <li>Use distinct group for LeakCanary notifications.</li> <li>The heap analysis result now includes the heap dump duration because it looks like Android 11 heap dumps are sometimes super slow. We also added more perf related metrics.</li> <li>Disable logging when AppWatcher runs in release builds.</li> <li>Highlight library leak patterns directly within the leak traces.</li> <li>Improved inspections for Context, View and ContextImpl.</li> </ul> <p>For more details, see the 2.5 Milestone and the full diff.</p>"},{"location":"changelog/#version-24-2020-06-10","title":"Version 2.4 (2020-06-10)","text":"<p>Please thank @0x109, @andersu, @antoniomerlin, @bishiboosh, @ckesc, @jrodbx, @LouisCAD, @marcardar, @OlivierGenez, @pyricau, @runningcode, @seljad, @worldsnas for their contributions, bug reports and feature requests.</p>"},{"location":"changelog/#plumber-android-is-a-new-artifact-that-fixes-known-android-leaks","title":"<code>plumber-android</code> is a new artifact that fixes known Android leaks \ud83d\udebd\ud83d\udd27","text":"<p>LeakCanary reports all leaks, including leaks caused by a known bug in 3rd party code that you do not have control over (reported as Library leaks). That can be annoying! LeakCanary now ships with a new dependency, <code>plumber-android</code>, which performs hacks at runtime to fix some of these known leaks. This releases has fixes for 11 known leaks, but this is just the beginning. Contributions welcome! \ud83d\ude4f</p> <p>Note that since the <code>leakcanary-android</code> dependency is usually added as a <code>debugImplementation</code> dependency, the <code>plumber-android</code> is transitively added only in debug builds, so it will not fix leaks in your release builds. You can add the dependency directly as <code>implementation</code> to get these fixes in release builds as well:</p> <pre><code>dependencies {\nimplementation 'com.squareup.leakcanary:plumber-android:2.4'\n}\n</code></pre> <p>Warning</p> <p>While several of these fixes already ship in release builds of Square apps, this is the first official release of <code>plumber-android</code>, so you should consider it experimental.</p>"},{"location":"changelog/#analyzing-leaks-from-the-cli-is-easier-than-ever","title":"Analyzing leaks from the CLI is easier than ever \ud83c\udf7a","text":"<p>The Shark CLI can now be installed via Homebrew</p> <pre><code>brew install leakcanary-shark\n</code></pre> <p>You can then look for leaks in apps on any connected device, for example:</p> <pre><code>$ shark-cli --device emulator-5554 --process com.example.app.debug analyze\n</code></pre>"},{"location":"changelog/#support-for-android-test-orchestrator","title":"Support for Android Test Orchestrator \ud83c\udfbc","text":"<p>If you set up LeakCanary to report test failures when detecting leaks in instrumentation tests, it now works with Android Test Orchestrator as well. No change required, LeakCanary will automatically detect thatAndroid Test Orchestrator is running and hook into it.</p>"},{"location":"changelog/#no-more-master-branch","title":"No more <code>master</code> branch","text":"<p>The branch name <code>master</code> comes from the master / slave terminology. We renamed the default branch to <code>main</code>, a small step towards making the LeakCanary community a safer space. Here\u2019s a good thread on this topic.</p>"},{"location":"changelog/#bug-fixes-and-improvements_3","title":"Bug fixes and improvements \ud83d\udc1b\ud83d\udd28","text":"<ul> <li>URLs in Library Leak descriptions are now clickable</li> <li>Fixed ordering issues causing improper config with manual setup. A related change is that <code>AppWatcher.Config.enabled</code> is now deprecated.</li> <li>Fixed possible OutOfMemoryError failure when computing retained size: we were loading to memory large arrays from the heap dump just to get their size.</li> </ul> <p>For more details, see the 2.4 Milestone and the full diff.</p>"},{"location":"changelog/#version-23-2020-04-08","title":"Version 2.3 (2020-04-08)","text":"<p>This is a minor release on the feature front, but a large release on the documentation front!</p> <p>Many thanks to @adamfit, @Amokrane, @Armaxis, @artnc, @burakeregar, @ClaasJG, @clementcontet, @ckesc, @cketti, @fbenbassat, @Guneetgstar, @Igorxp5, @JLLeitschuh, @KidAndroid, @ligi, @mzgreen, @pyricau, @sprintuu, @tevjef, @thrlr123 for the contributions, bug reports and feature requests.</p> <p>We asked for help and immediately started seeing more contributions. Thanks all! Check out the How to help page.</p>"},{"location":"changelog/#leakcanary-will-now-crash-in-release-builds","title":"LeakCanary will now crash in release builds","text":"<p>Despite the documentation insisting on using <code>debugImplementation</code>, we\u2019ve seen apps ship LeakCanary in release builds. Mistakes happen, so we\u2019ve made that mistake harder to miss by making LeakCanary crash when included in release builds.</p> <p>Learn More: LeakCanary in release builds.</p>"},{"location":"changelog/#doc-site","title":"Doc site \ud83d\udec0\ud83d\udca5","text":"<p>The doc site content has changed quite a bit! We applied advice from Google\u2019s tech writing guide. If you\u2019ve been confused by Library Leaks before, check out see the new Categorizing leaks section. Take a look around, let us know what you think.</p>"},{"location":"changelog/#bug-fixes-and-improvements_4","title":"Bug fixes and improvements \ud83d\ude09","text":"<ul> <li>The new deobfuscation Gradle plugin wasn\u2019t working with Gradle 3.6, this is now fixed. Also removed the requirement for the plugin to be applied after AGP.</li> <li>Fixed 2 crashes (#1768 & #1769) in the LeakCanary UI found by a sneaky monkey runner \ud83d\ude48.</li> <li>The LeakCanary UI updates immediately when a heap analysis is added or deleted.</li> <li>Fixed a crash when updating from LeakCanary 2.0.</li> <li>The About section of the LeakCanary now surfaces whether heap dumping is currently enabled.</li> <li>Fixed process not exiting in SharkCLI on Windows.</li> <li>Improved error message when obfuscation mappings appear to be missing.</li> </ul> <p>For more details, see the 2.3 Milestone and the full diff.</p>"},{"location":"changelog/#version-22-2020-02-05","title":"Version 2.2 (2020-02-05)","text":"<p>We\u2019ve got some good stuff for the first release of the decade!</p> <p>Many thanks to @AndroidInternal, @Armaxis, @lic2050, @mzgreen, @orenktaboola, @personshelldon, @Plastix, @pyricau for the contributions, bug reports and feature requests.</p>"},{"location":"changelog/#viewmodel-leak-detection","title":"ViewModel leak detection","text":"<p>Android ViewModels are really cool! Their lifecycle is much nicer than fragments or activities, but sometimes mistakes happen. LeakCanary will now automatically detect ViewModel leaks and report any ViewModel instance retained after its <code>onCleared()</code> method was called.</p>"},{"location":"changelog/#android-tv","title":"Android TV","text":"<p>LeakCanary is finally coming to big screens near you! Best part - no additional setup is required, just enable it like you would for a mobile device. Now whenever there\u2019s a leak - you will see a helpful Toast appear with all the details. Make sure to check out our new Android TV section and chill!</p>"},{"location":"changelog/#java-friendly-config-builders","title":"Java-friendly Config builders","text":"<p>It was brought to our attention that configuring <code>LeakCanary</code> and <code>AppWatcher</code> was a miserable experience from Java code. Well, not anymore!</p> <p>Now you can use <code>LeakCanary.Config.Builder</code> and <code>AppWatcher.Config.Builder</code> to have idiomatic Java when updating the configurations. For example:</p> <pre><code>LeakCanary.Config config = LeakCanary.getConfig().newBuilder()\n .retainedVisibleThreshold(3)\n .computeRetainedHeapSize(false)\n .build();\nLeakCanary.setConfig(config);\n</code></pre> <p>If you notice any other problems when using LeakCanary from Java, please file an issue! We take Java-interop seriously and will be happy to improve LeakCanary\u2019s API!</p> <p>For more details, see the 2.2 Milestone and the full diff.</p>"},{"location":"changelog/#version-21-2019-12-31","title":"Version 2.1 (2019-12-31)","text":"<p>A special New Year\u2019s Eve release \ud83e\udd73, the next release will be in another decade \ud83d\ude0e!</p> <p>Many thanks to @adamfit, @alexander-smityuk, @Armaxis, @BraisGabin, @devism, @ditclear, @jrodbx, @jstefanowski, @Maragues, @mzgreen, @pyricau for the contributions, bug reports and feature requests.</p>"},{"location":"changelog/#a-gradle-plugin-for-obfuscated-apps","title":"A Gradle plugin for obfuscated apps","text":"<p>It\u2019s fairly common for teams to have a QA build that is tested before making the release build. Usually that build will be obfuscated (via Proguard or R8), but also add LeakCanary to detect leaks during QA. This leads to obfuscated leak traces, which are hard to understand \ud83e\udd2f. Check out our new Gradle deobfuscation plugin and rejoice!</p>"},{"location":"changelog/#ui-twix-tweaks","title":"UI twix tweaks","text":"<p>In 2.0 we changed the LeakCanary UI and UX, and built a foundation on which 2.1 extends.</p> <p></p> <ul> <li>Since 2.0, Leaks are grouped by their distinct signature. In 2.1 there\u2019s a <code>New</code> tag that will show until you open up a leak. There\u2019s also a <code>Library Leak</code> tag for leaks that are known to be caused by a bug in the Android Framework or Google libraries, and the library leak description now shows up in the UI.</li> <li>The type of the Java objects (class, instance, array) is now displayed in the LeakTrace, e.g. see <code>FontsContract class</code> and <code>ExampleApplication instance</code> above.</li> <li>The type of the GC root now shows up at the root of the leak trace. Makes sense!</li> <li>The leak result notification has an importance now set to MAX so that it\u2019ll show up right in your face. If you turn it off, the canary will haunt you in your dreams \ud83d\udc24\ud83d\udc7b. To save your sanity and your device battery, automatic heap dumps now won\u2019t happen more often than once per minute.</li> <li>The resource id name for <code>View</code> instances is now displayed in the leak trace. You shouldn\u2019t look at the implementation.</li> </ul> <pre><code>\u251c\u2500 android.widget.TextView instance\n\u2502 View.mID = R.id.helper_text\n</code></pre>"},{"location":"changelog/#documentation-goodies","title":"Documentation goodies","text":"<ul> <li>The Fundamentals page was entirely rewritten, split into 3 pages and moved to its own tab. Please read it and provide feedback!</li> <li>At Square, we have been uploading leaks to Bugsnag for 3 years now, so that no leak ever gets missed. Follow this recipe!</li> <li>Did you know you can run LeakCanary in a JVM?</li> </ul>"},{"location":"changelog/#api-breaking-bettering-changes","title":"API breaking bettering changes","text":"<ul> <li>The APIs of the <code>Leak</code> and <code>LeakTrace</code> classes have significantly changed, e.g. all <code>LeakTrace</code> instances with an identical signature are grouped under the same Leak object. Despite these breaking changes, this release version is a minor update. Oh noes, what about semantic versioning \ud83d\ude31? Ask Don Quixote.</li> <li>You can now customize the way LeakCanary finds the leaking objects in the heap dump. For example, here\u2019s the configuration SharkCli uses to find leaks in heap dumps of apps that don\u2019t even have the LeakCanary dependency:</li> </ul> <pre><code>LeakCanary.config = LeakCanary.config.copy(\nleakingObjectFinder = FilteringLeakingObjectFinder(\nAndroidObjectInspectors.appLeakingObjectFilters\n)\n)\n</code></pre> <ul> <li>LeakCanary automatically disables itself in tests by detecting that the <code>org.junit.Test</code> is in the classpath. Unfortunately, some apps ship Junit in their app debug classpath (e.g. when using OkHttp MockWebServer). You can now customize which class is used to detect tests:</li> </ul> <pre><code><resources>\n<string name=\"leak_canary_test_class_name\">assertk.Assert</string>\n</resources>\n</code></pre>"},{"location":"changelog/#interactive-cli","title":"Interactive CLI","text":"<p>Shark CLI was rewritten on top of Clikt:</p> <pre><code>$ shark-cli\nUsage: shark-cli [OPTIONS] COMMAND [ARGS]...\n\n ^`. .=\"\"=.\n ^_ \\ \\ / _ _ \\\n\\ \\ { \\ | d b |\n{ \\ / `~~~--__ \\ /\\ /\n { \\___----~~' `~~-_/'-=\\/=-'\\,\n \\ /// a `~. \\ \\\n / /~~~~-, ,__. , /// __,,,,) \\ |\n \\/ \\/ `~~~; ,---~~-_`/ \\ / \\/\n / / '. .'\n '._.' _|`~~`|_\n /|\\ /|\\\n\nOptions:\n -p, --process NAME Full or partial name of a process, e.g.\n \"example\" would match \"com.example.app\"\n-d, --device ID device/emulator id\n -m, --obfuscation-mapping PATH path to obfuscation mapping file\n --verbose / --no-verbose provide additional details as to what\n shark-cli is doing\n -h, --hprof FILE path to a .hprof file\n --help Show this message and exit\n\nCommands:\n interactive Explore a heap dump.\n analyze Analyze a heap dump.\n dump-process Dump the heap and pull the hprof file.\n strip-hprof Replace all primitive arrays from the provided heap dump with\n arrays of zeroes and generate a new \"-stripped.hprof\" file.\n</code></pre> <p>There\u2019s a new <code>interactive</code> command which enables exploring the heap dump from the command line:</p> <pre><code>$ shark-cli -h heapdump.hprof interactive\nEnter command [help]:\nhelp\n\nAvailable commands:\n analyze Analyze the heap dump.\n class NAME@ID Show class with a matching NAME and Object ID.\n instance CLASS_NAME@ID Show instance with a matching CLASS_NAME and Object\nID.\n array CLASS_NAME@ID Show array instance with a matching CLASS_NAME and\nObject ID.\n ->instance CLASS_NAME@ID Show path from GC Roots to instance.\n ~>instance CLASS_NAME@ID Show path from GC Roots to instance, highlighting\nsuspect references.\n help Show this message.\n exit Exit this interactive prompt.\n</code></pre> <p>We\u2019re currently exploring the idea of adding support for SQL queries, feedback welcome!</p> <p>For more details, see the 2.1 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-2019-11-27","title":"Version 2.0 (2019-11-27)","text":"<p>In the past 7 months, LeakCanary went through 3 alphas and 5 betas, encompassing 23 contributors over 493 commits, 35826 insertions and 10156 deletions.</p>"},{"location":"changelog/#should-i-upgrade","title":"Should I upgrade?","text":"<p>YES! LeakCanary 2 is so much better, it might make you excited when you see a new memory leak. Follow the upgrade guide, you won\u2019t regret it!</p>"},{"location":"changelog/#so-whats-changed-since-163","title":"So, what\u2019s changed since 1.6.3?","text":"<p>Everything. The LeakCanary codebase went from ~6000 lines of Java to ~16000 lines of Kotlin, excluding comments & blanks.</p> <p>Isn\u2019t Kotlin supposed to drastically reduce the amount of boilerplate code?</p> <p>Absolutely! And it did. But then, we wrote more code. LeakCanary used to depend on HAHA, a repackaging of perflib, the heap dump parser used by Android Studio. Unfortunately perflib was slow and used too much memory, so LeakCanary now includes its own heap dump parser: Shark. The extra code comes from Shark, but also from having a lot more automated tests, and an improved UI layer.</p> <p>One major difference: when the app is in foreground, LeakCanary 2 will not trigger on every retained instance. Instead it will wait until the app goes in background or to reach a threashold of 5 retained instances in foreground. The analysis will then find all the leaks at once, and group identical leaks in the results UI. Please read the Fundamentals section to learn more!</p>"},{"location":"changelog/#random-facts","title":"Random facts","text":"<ul> <li>You can customize the Leaks launcher icon and label: learn more here.</li> <li>If you ` press on your main activity launcher icon, you should see a LeakCanary dynamic shortcut. You can then long press that to drop it on your home screen, and the launcher shows that it\u2019s the leaks launcher for your app.</li> <li>Out of the box, LeakCanary tracks all fragments flavors: AOSP, Support Library and Android X.</li> <li>From within the leak screen, you can share a leak to stack overflow. You can also share a heap dump, or import and analyze a heap dump from another device.</li> <li>You can run LeakCanary from your computer command line, on any debuggable app even if that app doesn\u2019t have LeakCanary: learn more here.</li> <li>The new documentation is fully searchable and includes the API documentation. Try the search bar \u2934.</li> <li>A large 160Mb heap dump uses 2Gb memory when opening it in Android Studio, but only 40Mb with Shark.</li> </ul>"},{"location":"changelog/#changes-since-20-beta-5","title":"Changes since 2.0 Beta 5","text":"<ul> <li>Shark CLI supports multiple connected devices #1642</li> <li>Fixed missing sources from Maven Central #1643</li> <li>Updated notification icon to avoid confusion with Twitter DM notifications, and added icons to bottom navigation bar #1648</li> <li>Automatic leak detection for support library fragments #1611</li> </ul> <p>Many thanks to @AndreasBoehm, @jrodbx, @pyricau for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-beta-5-2019-11-25","title":"Version 2.0 Beta 5 (2019-11-25)","text":"<ul> <li>Major bugfix: native gc roots were accidentally ignored in Beta 4, as a result some leaks were not found #1634</li> <li>Fixed Lint warning (<code>leak_canary_about_message</code> string triggered multiple substitutions warning) #1630</li> </ul> <p>Many thanks to @DanEdgarTarget, @msfjarvis, @PaulWoitaschek, @pyricau, @ZacSweers for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-beta-5 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-beta-4-2019-11-18","title":"Version 2.0 Beta 4 (2019-11-18)","text":"<ul> <li>Improved string rendering for heap analysis results</li> <li>UX redesign #1445</li> <li>Support for pattern matching of native reference leaks #1562</li> <li>Added support for deobfuscation using Proguard mapping files in Shark #1499. This isn\u2019t directly supported in LeakCanary yet.</li> <li>Added support for extracting metadata from the heap dump (see the recipe) #1519</li> <li>Improved auto disabling of LeakCanary in Unit and UI tests #1552</li> <li>Several performance improvements when parsing heap dumps</li> <li>Fixed several bugs and crashes</li> <li>Added new known leak patterns</li> </ul> <p>Many thanks to @Armaxis, @BraisGabin, @bric3, @elihart, @fernandospr, @flickator, @gabrysgab, @JorgeDLS, @lannyf77, @msfjarvis, @mzgreen, @ozmium, @PaulWoitaschek, @pyricau, @shelpy, @vRallev, @ZacSweers for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-beta-4 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-beta-3-2019-08-22","title":"Version 2.0 Beta 3 (2019-08-22)","text":"<ul> <li>Baseline memory usage for large hprofs divided by 3 and removed memory spikes #1543</li> <li>Fixed crash when LeakCanary is initialized from another process #1529</li> <li>Java local references are deprioritized to look for longer alternative paths #1525</li> <li>Fixed <code>JavaLocalPattern</code> not matching on Lollipop #1524</li> </ul> <p>Many thanks to @Armaxis, @elihart, @emartynov, @hmcgreevy-instil, @pyricau for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-beta-3 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-beta-2-2019-08-02","title":"Version 2.0 Beta 2 (2019-08-02)","text":"<ul> <li>Fixed Leak analysis failed: Object id not found in heap dump. #1516</li> <li>10x speed increase of hprof indexing on large heap dumps #1520</li> </ul> <p>Many thanks to @kolphi, @pyricau, @ZacSweers for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-beta-2 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-beta-1-2019-07-30","title":"Version 2.0 Beta 1 (2019-07-30)","text":"<ul> <li>New standalone library! Shark is the heap analyzer that powers LeakCanary 2, and it can run in any Java VM. It comes with a CLI: you can now run <code>shark-cli analyze-process com.example.myapp</code> from your computer.</li> <li>New Heap Explorer directly on device! Open a Heap Analysis in LeakCanary, tap the options menu and select \u201cHeap Explorer\u201d. This is still experimental and not very user friendly, contributions welcome!</li> <li>Large API rewrite to improve usability. If you used the alpha with a customized configuration, there are breaking changes. Of note: LeakSentry became AppWatcher, RefWatcher became ObjectWatcher, AndroidExcludedRefs became AndroidReferenceMatchers, AnalysisResultListener became OnHeapAnalyzedListener, AndroidLeakTraceInspectors became AndroidObjectInspectors.</li> <li>The entire API surface is now documented and the documentation is available on this website: see the LeakCanary API tab at the top.</li> <li>Removed the dependency on Android X. No more configuration issues! #1462</li> <li>Added Proguard rules for LeakCanary and ObjectWatcher. #1500</li> <li>Display LeakCanary version in the About screen. #1448</li> <li>Bug fixes, new reference matchers and object inspectors</li> </ul> <p>Many thanks to @arctouch-carlosottoboni, @jemaystermind, @kushagrakumar27, @pyricau, @snkashis for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-beta-1 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-alpha-3-2019-07-04","title":"Version 2.0 Alpha 3 (2019-07-04)","text":"<ul> <li>#1401 LeakCanary can now import all hprof files created from prior LeakCanary versions.</li> <li>#1414 New API: <code>RefWatcher.retainedInstances</code> which returns the instances that are currently considered retained.</li> <li>#1419 New APIs: <code>LeakCanary.Config.maxStoredHeapDumps</code> (default 7) and <code>LeakCanary.Config.requestWriteExternalStoragePermission</code> (default false). LeakCanary won\u2019t ask for the external storage permission anymore by default.</li> <li>#1338 API change: <code>LeakCanary.Config.exclusionsFactory</code> replaced with <code>LeakCanary.Config.knownReferences</code> (simpler use), <code>LeakCanary.Config.leakInspectors</code> and <code>LeakCanary.Config.labelers</code> merged into <code>LeakCanary.Config.leakTraceInspectors</code> which provides access to the entire leak trace as well as a new graph oriented API that replaces the low level hprof parser API.</li> <li>#1382 LeakCanary now disables automatic heap dumping when running in AndroidX UI tests.</li> <li>#1424 API rename: <code>RefWatcher.hasRetainedReferences</code> => <code>RefWatcher.hasRetainedInstances</code>, <code>RefWatcher.retainedReferenceCount</code> => <code>RefWatcher.retainedInstanceCount</code>, <code>RefWatcher.hasWatchedReferences</code> => <code>RefWatcher.hasWatchedInstances</code>, <code>RefWatcher.removeKeysRetainedBeforeHeapDump</code> => <code>RefWatcher.removeInstancesRetainedBeforeHeapDump</code>, <code>RefWatcher.clearWatchedReferences</code> => <code>RefWatcher.clearWatchedInstances</code>.</li> <li>#1432 #1438 #1440 New \u201cwon\u2019t fix\u201d leaks and leak trace inspectors</li> <li>#1374 #1364 #1366 #1417 #1399 #1416 #1407 #1427 #1385 Bug and crash fixes</li> </ul> <p>Many thanks to @1step2hell, @afollestad, @ansman, @bjdodson, @BraisGabin, @EBfVince, @jaredsburrows, @pforhan, @pyricau, @tellypresence, @wiyarmir for the contributions, bug reports and feature requests.</p> <p>For more details, see the 2.0-alpha-3 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-alpha-2-2019-05-21","title":"Version 2.0 Alpha 2 (2019-05-21)","text":"<ul> <li>#1040 Import and analyze hprof files from other devices</li> <li>#1344 Computing retained size</li> <li>#1325 New notification showing current count of retained instances</li> <li>#1079 \u201cExcluded\u201d leaks have been renamed to \u201cWon\u2019t fix\u201d leaks to clarify meaning.</li> <li>#1328 New leaks are called out in the UI.</li> <li>#1327 LeakSentry can be enabled / disabled and is automatically disabled in non debuggable builds.</li> <li>#1173 Experimental: now reporting leaks that only go through weak references (previously reported as \u201cno path to instance\u201d)</li> <li>#1339 Readded support for Thread name based exclusions</li> <li>#1312 Fixed bug causing LeakCanary to stop detecting leaks after the app is killed.</li> <li>#1310 #1313 #1314 #1340 #1337 Many API changes</li> <li>#1296 #1293 #1306 #1336 Fixed several crashes.</li> </ul> <p>Many thanks to @forrestbice, @Foso, @Goddchen, @marcosholgado, @orionlee, @pyricau, @satoshun, @ZacSweers for the contributions!</p> <p>For more details, see the 2.0-alpha-2 Milestone and the full diff.</p>"},{"location":"changelog/#version-20-alpha-1-2019-04-23","title":"Version 2.0 Alpha 1 (2019-04-23)","text":"<ul> <li>New logo, thanks @flickator!</li> <li>Entirely rewritten to 100% Kotlin</li> <li>Multiple leaks detected in one analysis<ul> <li>The heap is dumped when the app goes in the background, or when a minimum of 5 leaks is reached in the foreground.</li> </ul> </li> <li>Leak grouping<ul> <li>Leaks that share similar causes are grouped in the UI.</li> <li>New screens to see the list of groups and each group.</li> <li>Improved leaktrace strings to highlight leak causes.</li> <li>Leaks can be shared to Stack Overflow</li> </ul> </li> <li>New library: LeakSentry.<ul> <li>Detects when objects are leaking and triggers LeakCanary</li> <li>Can be used independently in production, for instance to report the number of leaking instances on an OutOfMemoryError crash.</li> </ul> </li> <li>New heap parser<ul> <li>Uses 90% less memory and 6 times faster than the prior heap parser.</li> <li>Runs in the same process as the app on a low priority thread.</li> <li>No more dependency on Perflib and TroveJ. New dependency on Okio.</li> <li>The old parser is still available as <code>leakcanary-android-perflib</code> but will be removed after alpha.</li> </ul> </li> <li>Labelers can add any string content to leak elements</li> <li>0 code setup, just add the one debug dependency.</li> <li>Simpler configuration options</li> <li>Updated from support library to Android X</li> </ul> <p>Many thanks to @BraisGabin, @colinmarsch, @jrodbx, @flickator, @JakeWharton, @pyricau, @WhatsEmo for the contributions!</p> <p>For more details, see the 2.0-alpha-1 Milestone and the full diff.</p>"},{"location":"changelog/#version-163-2019-01-10","title":"Version 1.6.3 (2019-01-10)","text":"<ul> <li>#1163 Fixed leaks being incorrectly classified as \u201cno leak\u201d due to missed GC Roots.</li> <li>#1153 <code>LeakCanary.isInAnalyzerProcess</code> now correctly returns true in the analyzer process prior to any first leak (could be triggered by starting the leak result activity).</li> <li>#1158 Stopped enabling DisplayLeakActivity when not using DisplayLeakService.</li> <li>#1135 Fixed IndexOutOfBoundsException for leak traces of size 1.</li> <li>#1163 Keep \u201cno leak\u201d heap dumps.</li> </ul> <p>Many thanks to @KMaragh, @pyricau, @SebRut for the code contributions!</p> <p>For more details, see the 1.6.3 Milestone and the full diff.</p>"},{"location":"changelog/#version-162-2018-10-16","title":"Version 1.6.2 (2018-10-16)","text":"<ul> <li>#1067 Fixed TransactionTooLargeException crash (leak analysis would never complete).</li> <li>#1061 Detection of Fragment view leaks after Fragment#onDestroyView().</li> <li>#1076 Added the FOREGROUND_SERVICE permission for Android P.</li> <li>#1062 The LeakCanary toast now always shows correctly. It doesn\u2019t show if there is no activity in foreground.</li> <li>#1115 Reenabled the DisplayLeakActivity icon on fresh installs.</li> <li>#1100 Added nullability annotations to improve Kotlin support.</li> <li>Updates to excluded leaks (commits).</li> <li>Updates to reachability inspectors (commits).</li> </ul> <p>Many thanks to @fractalwrench, @ZacSweers, @Goddchen, @igokoro, @IlyaGulya, @JakeWharton, @javmarina, @jokermonn, @jrodbx, @Parseus, @pyricau, @scottkennedy for the code contributions!</p>"},{"location":"changelog/#public-api-changes","title":"Public API changes","text":"<ul> <li>Subclasses of <code>AbstractAnalysisResultService</code> should now override <code>onHeapAnalyzed(@NonNull AnalyzedHeap analyzedHeap)</code> instead of <code>onHeapAnalyzed(@NonNull HeapDump heapDump, @NonNull AnalysisResult result)</code></li> </ul> <p>For more details, see the 1.6.2 Milestone and the full diff.</p>"},{"location":"changelog/#version-161-2018-06-21","title":"Version 1.6.1 (2018-06-21)","text":"<ul> <li>#727 Improved leak analysis: LeakCanary now identifies and highlights the potential causes of the leak.</li> <li>#1011 We noticed that computing the retained heap size could take a long time, so it\u2019s now optional and off by default.</li> <li>#633 Support for detecting leaks in instrumentation tests (see the wiki).</li> <li>#985 Ability to convert leak traces into stack traces for easy remote reporting (see the wiki).</li> <li>#983 Support for watching destroyed Fragments.</li> <li>#846 LeakCanary now uses foreground services and displays a notification when the analysis is in progress. This also fixes crashes when analyzing in background on O+.</li> <li>The LeakCanary icon (to start to DisplayLeakActivity) is now hidden by default, and only enabled after the first leak is found.</li> <li>#775 Fixed crash when sharing heap dumps on O+ and added a dependency to the support-core-utils library.</li> <li>#930 DisplayLeakActivity has a responsive icon.</li> <li>#685 Stopped doing IO on main thread in DisplayLeakActivity (fixes StrictMode errors).</li> <li>#999 Updated HAHA to 2.0.4, which uses Trove4j as an external dependency (from jcenter) instead of rebundling it. This is to clarify licences (Apache v2 vs LGPL 2.1).</li> <li>Several bug and crash fixes.</li> </ul> <p>Many thanks to @AdityaAnand1, @alhah, @christxph, @csoon03, @daqi, @JakeWharton, @jankovd, @jrodbx, @kurtisnelson, @NightlyNexus, @pyricau, @SalvatoreT, @shmuelr, @tokou, @xueqiushi for the code contributions!</p> <p>Note: we made a 1.6 release but quickly followed up with 1.6.1 due to #1058.</p>"},{"location":"changelog/#public-api-changes_1","title":"Public API changes","text":"<ul> <li>The installed ref watcher singleton is now available via <code>LeakCanary.installedRefWatcher()</code></li> <li><code>AnalysisResult.leakTraceAsFakeException()</code> returns an exception that can be used to report and group leak traces to a tool like Bugsnag or Crashlytics.</li> <li>New <code>InstrumentationLeakDetector</code> and <code>FailTestOnLeakRunListener</code> APIs for detecting leaks in instrumentation tests.</li> <li>New <code>Reachability.Inspector</code> and <code>RefWatcherBuilder.stethoscopeClasses()</code> API to establish reachability and help identify leak causes.</li> <li>Watching activities can be disabled with <code>AndroidRefWatcherBuilder.watchActivities(false)</code>, watching fragments can be disabled with <code>AndroidRefWatcherBuilder.watchFragments(false)</code></li> <li><code>LeakCanary.setDisplayLeakActivityDirectoryProvider()</code> is deprecated and replaced with <code>LeakCanary.setLeakDirectoryProvider()</code></li> <li>New <code>RefWatcherBuilder.computeRetainedHeapSize()</code> API to enable the computing of the retained heap size (off by default).</li> </ul> <p>For more details, see the 1.6.1 Milestone and the full diff.</p>"},{"location":"changelog/#version-154-2017-09-22","title":"Version 1.5.4 (2017-09-22)","text":"<ul> <li>Restore Java 7 compatibility in leakcanary-watcher</li> </ul>"},{"location":"changelog/#version-153-2017-09-17","title":"Version 1.5.3 (2017-09-17)","text":"<ul> <li>Fix broken 1.5.2 build</li> <li>Convert leakcanary-watcher from Android library to Java library</li> <li>Disable finish animations in RequestStoragePermissionActivity</li> <li>Corrected README sample for Robolectric tests</li> </ul> <p>For more details, see the full diff.</p>"},{"location":"changelog/#version-152-2017-08-09","title":"Version 1.5.2 (2017-08-09)","text":"<ul> <li>New excluded leaks</li> <li>Move Leakcanary UI into leak analyzer process</li> <li>Ignore computing retained sizes for bitmaps on O+</li> <li>Add notification channel for persistent messages on O+</li> <li>Exclude permission activity from recents menu</li> <li>Updated README and sample for handling Robolectric tests</li> </ul> <p>For more details, see the full diff.</p>"},{"location":"changelog/#version-151-2017-04-25","title":"Version 1.5.1 (2017-04-25)","text":"<ul> <li>New excluded leaks</li> <li>Fix java.util.MissingFormatArgumentException in DisplayLeakService</li> <li>Separate task affinities for different apps</li> <li>Bump minSdk to 14</li> <li>Fix HahaHelper for O Preview</li> </ul> <p>For more details, see the full diff.</p>"},{"location":"changelog/#version-15-2016-09-28","title":"Version 1.5 (2016-09-28)","text":"<ul> <li>New excluded leaks</li> <li>Added <code>LeakCanary.isInAnalyzerProcess()</code> to the no-op jar</li> <li>Fixed several file access issues:<ul> <li>No more cleanup on startup, we rotate the heap dump files on every new heap dump.</li> <li>LeakCanary now falls back to the app directory until it can write to the external storage.</li> </ul> </li> <li>Leak notifications now each use a distinct notification instead of erasing each other.</li> <li>If LeakCanary can\u2019t perform a heap dump for any reason (e.g. analysis in progress, debugger attached), it retries later with an exponential backoff.</li> <li>Added confirmation dialog when user deletes all leaks.</li> <li>Replace the two LeakCanary configuration methods with a builder that provides more flexibility, see <code>LeakCanary.refWatcher()</code>.</li> </ul> <p>For more details, see the full diff.</p>"},{"location":"changelog/#public-api-changes_2","title":"Public API changes","text":"<ul> <li>New <code>HeapAnalyzer.findTrackedReferences()</code> method for headless analysis when you have no context on what leaked.</li> <li>Added <code>LeakCanary.isInAnalyzerProcess()</code> to the no-op jar</li> <li>Added <code>LeakCanary.refWatcher()</code> which returns an <code>AndroidRefWatcherBuilder</code> that extends <code>RefWatcherBuilder</code> and lets you fully customize the <code>RefWatcher</code> instance.</li> <li>Removed <code>LeakCanary.install(Application, Class)</code> and <code>LeakCanary.androidWatcher(Context, HeapDump.Listener, ExcludedRefs)</code>.</li> <li>Removed <code>R.integer.leak_canary_max_stored_leaks</code> and <code>R.integer.leak_canary_watch_delay_millis</code>, those can now be set via <code>LeakCanary.refWatcher()</code>.</li> <li>Updated the <code>LeakDirectoryProvider</code> API to centralize all file related responsibilities.</li> <li><code>RefWatcher</code> is now constructed with a <code>WatchExecutor</code> which executes a <code>Retryable</code>, instead of an <code>Executor</code> that executes a <code>Runnable</code>.</li> <li><code>HeapDumper.NO_DUMP</code> was renamed <code>HeapDumper.RETRY_LATER</code></li> </ul>"},{"location":"changelog/#version-14-2016-09-11","title":"Version 1.4 (2016-09-11)","text":"<ul> <li>Fix false negative where GC root is of type android.os.Binder #482</li> <li>Update HAHA to 2.0.3; clear compiler warnings #563</li> <li>Correct some mistakes in German translation #516</li> <li>Don\u2019t loop when storage permission denied #422</li> <li>Remove old references to \u201c__\u201d prefixed resources #477</li> <li>Fix permission crash for DisplayLeakActivity on M #382</li> <li>Fix NPE when thread name not found in heap dump #417</li> <li>Add version info to stacktrace #473</li> </ul>"},{"location":"changelog/#version-14-beta2-2016-03-23","title":"Version 1.4-beta2 (2016-03-23)","text":"<ul> <li>Add reason for ignoring to analysis result #365.</li> <li>Lower memory usage when parsing heap dumps on M #223.</li> <li>Fix NPE in LeakCanaryInternals.isInServiceProcess() #449.</li> <li>New ignored Android SDK leaks #297,#322.</li> <li>Use leakcanary-android-no-op in test builds #143.</li> <li>Fixes to allow LeakCanary to work with ProGuard #398.</li> <li>Optimize png assets #406.</li> <li>Fix delete button not working on error views #408.</li> <li>Add German translation #437.</li> </ul>"},{"location":"changelog/#version-14-beta1-2016-01-08","title":"Version 1.4-beta1 (2016-01-08)","text":"<ul> <li>Switched to HAHA 2.0.2 with uses Perflib instead of MAT under the hood #219. This fixes crashes and improves speed a lot.</li> <li>We can now parse Android M heap dumps #267, although there are still memory issues (see #223).</li> <li>Excluded leaks are now reported as well and available in the display leak activity.</li> <li>Added ProGuard configuration for #132.</li> <li>Many new ignored Android SDK leaks.</li> <li>Added excluded leaks to text report #119.</li> <li>Added LeakCanary SHA to text report #120.</li> <li>Added CanaryLog API to replace the logger: #201.</li> <li>Renamed all resources to begin with <code>leak_canary_</code> instead of <code>__leak_canary</code>#161</li> <li>No crash when heap dump fails #226.</li> <li>Add retained size to leak reports #162.</li> </ul>"},{"location":"changelog/#public-api-changes_3","title":"Public API changes","text":"<ul> <li>AnalysisResult.failure is now a <code>Throwable</code> instead of an <code>Exception</code>. Main goal is to catch and correctly report OOMs while parsing.</li> <li>Added ARRAY_ENTRY to LeakTraceElement.Type for references through array entries.</li> <li>Renamed <code>ExcludedRefs</code> fields.</li> <li>Each <code>ExcludedRef</code> entry can now be ignored entirely or \u201ckept only if no other path\u201d.</li> <li>Added support for ignoring all fields (static and non static) for a given class.</li> </ul>"},{"location":"changelog/#version-131-2015-05-16","title":"Version 1.3.1 (2015-05-16)","text":"<ul> <li>Heap dumps and analysis results are now saved on the sd card: #21.</li> <li><code>ExcludedRef</code> and <code>AndroidExcludedRefs</code> are customizable: #12 #73.</li> <li>7 new ignored Android SDK leaks: #1 #4 #32 #89 #82 #97.</li> <li>Fixed 3 crashes in LeakCanary: #37 #46 #66.</li> <li>Fixed StrictMode thread policy violations: #15.</li> <li>Updated <code>minSdkVersion</code> from <code>9</code> to <code>8</code>: #57.</li> <li>Added LeakCanary version name to <code>LeakCanary.leakInfo()</code>: #49.</li> <li><code>leakcanary-android-no-op</code> is lighter, it does not depend on <code>leakcanary-watcher</code> anymore, only 2 classes now: #74.</li> <li>Adding field state details to the text leak trace.</li> <li>A Toast is displayed while the heap dump is in progress to warn that the UI will freeze: #20. You can customize the toast by providing your own layout named <code>__leak_canary_heap_dump_toast.xml</code> (e.g. you could make it an empty layout).</li> <li>If the analysis fails, the result and heap dump are kept so that it can be reported to LeakCanary: #102.</li> <li>Update to HAHA 1.3 to fix a 2 crashes #3 46</li> </ul>"},{"location":"changelog/#public-api-changes_4","title":"Public API changes","text":"<ul> <li>When upgrading from 1.3 to 1.3.1, previously saved heap dumps will not be readable any more, but they won\u2019t be removed from the app directory. You should probably uninstall your app.</li> <li>Added <code>android.permission.WRITE_EXTERNAL_STORAGE</code> to <code>leakcanary-android</code> artifact.</li> <li><code>LeakCanary.androidWatcher()</code> parameter types have changed (+ExcludedRefs).</li> <li><code>LeakCanary.leakInfo()</code> parameter types have changed (+boolean)</li> <li><code>ExcludedRef</code> is now serializable and immutable, instances can be created using <code>ExcludedRef.Builder</code>.</li> <li><code>ExcludedRef</code> is available in <code>HeapDump</code></li> <li><code>AndroidExcludedRefs</code> is an enum, you can now pick the leaks you want to ignore in <code>AndroidExcludedRefs</code> by creating an <code>EnumSet</code> and calling <code>AndroidExcludedRefs.createBuilder()</code>.</li> <li><code>AndroidExcludedRefs.createAppDefaults()</code> & <code>AndroidExcludedRefs.createAndroidDefaults()</code> return a <code>ExcludedRef.Builder</code>.</li> <li><code>ExcludedRef</code> moved from <code>leakcanary-analyzer</code> to <code>leakcanary-watcher</code></li> </ul>"},{"location":"changelog/#version-13-2015-05-08","title":"Version 1.3 (2015-05-08)","text":"<p>Initial release.</p>"},{"location":"changelog/#dependencies","title":"Dependencies","text":""},{"location":"code_of_conduct/","title":"Open Source Code of Conduct","text":"<p>At Square, we are committed to contributing to the open source community and simplifying the process of releasing and managing open source software. We\u2019ve seen incredible support and enthusiasm from thousands of people who have already contributed to our projects\u200a\u2014\u200aand we want to ensure our community continues to be truly open for everyone.</p> <p>This code of conduct outlines our expectations for participants, as well as steps to reporting unacceptable behavior. We are committed to providing a welcoming and inspiring community for all and expect our code of conduct to be honored.</p> <p>Square\u2019s open source community strives to:</p> <ul> <li> <p>Be open: We invite anyone to participate in any aspect of our projects. Our community is open, and any responsibility can be carried by a contributor who demonstrates the required capacity and competence.</p> </li> <li> <p>Be considerate: People use our work, and we depend on the work of others. Consider users and colleagues before taking action. For example, changes to code, infrastructure, policy, and documentation may negatively impact others.</p> </li> <li> <p>Be respectful: We expect people to work together to resolve conflict, assume good intentions, and act with empathy. Do not turn disagreements into personal attacks.</p> </li> <li> <p>Be collaborative: Collaboration reduces redundancy and improves the quality of our work. We strive for transparency within our open source community, and we work closely with upstream developers and others in the free software community to coordinate our efforts.</p> </li> <li> <p>Be pragmatic: Questions are encouraged and should be asked early in the process to avoid problems later. Be thoughtful and considerate when seeking out the appropriate forum for your questions. Those who are asked should be responsive and helpful.</p> </li> <li> <p>Step down considerately: Members of every project come and go. When somebody leaves or disengages from the project, they should make it known and take the proper steps to ensure that others can pick up where they left off.</p> </li> </ul> <p>This code is not exhaustive or complete. It serves to distill our common understanding of a collaborative, shared environment, and goals. We expect it to be followed in spirit as much as in the letter.</p>"},{"location":"code_of_conduct/#diversity-statement","title":"Diversity Statement","text":"<p>We encourage everyone to participate and are committed to building a community for all. Although we may not be able to satisfy everyone, we all agree that everyone is equal.</p> <p>Whenever a participant has made a mistake, we expect them to take responsibility for it. If someone has been harmed or offended, it is our responsibility to listen carefully and respectfully, and do our best to right the wrong.</p> <p>Although this list cannot be exhaustive, we explicitly honor diversity in age, culture, ethnicity, gender identity or expression, language, national origin, political beliefs, profession, race, religion, sexual orientation, socioeconomic status, and technical ability. We will not tolerate discrimination based on any of the protected characteristics above, including participants with disabilities.</p>"},{"location":"code_of_conduct/#reporting-issues","title":"Reporting Issues","text":"<p>If you experience or witness unacceptable behavior\u200a\u2014\u200aor have any other concerns\u200a\u2014\u200aplease report it by emailing codeofconduct@squareup.com. For more details, please see our Reporting Guidelines below.</p>"},{"location":"code_of_conduct/#thanks","title":"Thanks","text":"<p>Some of the ideas and wording for the statements and guidelines above were based on work by the Twitter, Ubuntu, GDC, and Django communities. We are thankful for their work.</p>"},{"location":"code_of_conduct/#reporting-guide","title":"Reporting Guide","text":"<p>If you experience or witness unacceptable behavior\u200a\u2014\u200aor have any other concerns\u200a\u2014\u200aplease report it by emailing codeofconduct@squareup.com. All reports will be handled with discretion.</p> <p>In your report please include:</p> <ul> <li>Your contact information.</li> <li>Names (real, nicknames, or pseudonyms) of any individuals involved. If there are additional witnesses, please include them as well.</li> <li>Your account of what occurred, and if you believe the incident is ongoing. If there is a publicly available record (e.g. a mailing list archive or a public IRC logger), please include a link.</li> <li>Any additional information that may be helpful.</li> </ul> <p>After filing a report, a representative from the Square Code of Conduct committee will contact you personally. The committee will then review the incident, follow up with any additional questions, and make a decision as to how to respond.</p> <p>Anyone asked to stop unacceptable behavior is expected to comply immediately. If an individual engages in unacceptable behavior, the Square Code of Conduct committee may take any action they deem appropriate, up to and including a permanent ban from all of Square spaces without warning.</p>"},{"location":"dev-env/","title":"Dev Environment for LeakCanary contributors","text":""},{"location":"dev-env/#setup","title":"Setup","text":"<ul> <li>Download Android Studio.</li> <li>We use two spaces code indentation, use <code>SquareAndroid</code> code style settings from https://github.com/square/java-code-styles.</li> <li>Build with <code>./gradlew build</code>.</li> <li>Running the failing UI tests to confirm leak detection correctly fails UI tests: <code>./gradlew leakcanary-android-sample:connectedCheck</code>.</li> <li>Normal UI tests: <code>./gradlew leakcanary-android-core:connectedCheck</code>.</li> </ul>"},{"location":"dev-env/#static-code-analysis","title":"Static Code Analysis","text":"<ul> <li>LeakCanary uses Detekt for static Code analysis.</li> <li>Analyze the entire project with <code>./gradlew check</code> or particular modules with <code>./gradlew :module-name:check</code>. Detekt will fail the build if any ruleset violations are found. You should fix all issues before pushing the branch to remote.</li> <li>There\u2019s also a git pre-push hook that will run analysis automatically before pushing a branch to the remote. If there are any violations - it will prevent the push. Fix the issues!</li> <li>You can bypass the git hook though; Travis CI will still run checks and will fail if any violations are found. </li> <li>Detekt report will be printed in the console and saved to <code>/moduleDir/build/reports/</code>.</li> </ul>"},{"location":"dev-env/#deploying-locally","title":"Deploying locally","text":"<p>To deploy LeakCanary to your local maven repository, run the following command, changing the path to the path of your local repository:</p> <pre><code>./gradlew uploadArchives -PSNAPSHOT_REPOSITORY_URL=file:///Users/py/.m2/repository\n</code></pre> <p>Then add the SNAPSHOT dependency and <code>mavenLocal()</code> repository to your project:</p> <pre><code>dependencies {\n debugImplementation 'com.squareup.leakcanary:leakcanary-android:3.0-alpha-9-SNAPSHOT'\n}\n\nrepositories {\n mavenLocal()\n}\n</code></pre>"},{"location":"dev-env/#deploying-the-docs-locally","title":"Deploying the docs locally","text":"<p>Installing or updating the docs dependencies:</p> <pre><code>pip install --requirement docs/requirements.txt\n</code></pre> <p>Deploying locally</p> <pre><code>mkdocs serve\n</code></pre>"},{"location":"faq/","title":"FAQ","text":""},{"location":"faq/#can-a-leak-be-caused-by-the-android-sdk","title":"Can a leak be caused by the Android SDK?","text":"<p>Yes. There are a number of known memory leaks that have been fixed over time in AOSP as well as in manufacturer implementations. When such a leak occurs, there is little you can do as an app developer to fix it. For that reason, LeakCanary has a built-in list of known Android leaks to recognize, called Library Leaks (see Categorizing leaks).</p> <p>If you find a new one, please create an issue (choose \ud83e\udd16Leak in Android SDK / support library) and follow these steps:</p> <ol> <li>Provide the entire leak trace information (including metadata), and use backticks (`) for formatting.</li> <li>Read the AOSP source for that version of Android, and try to figure out why it happens. You can easily navigate through SDK versions by switching branches on the GitHub mirror: android/platform_frameworks_base.</li> <li>Check if it happens on the latest version of Android, and otherwise use blame to find when it was fixed.</li> <li>If it\u2019s still happening, build a simple repro case.</li> <li>File an issue on b.android.com with the leak trace and the repro case. Please remember to follow up the issue when there are new responses. b/176886060 is a good example of effective and respectful communication.</li> <li>Create a PR in LeakCanary to update AndroidReferenceMatchers. Optional: if you find a hack to clear that leak on previous versions of Android, feel free to document it.</li> </ol>"},{"location":"faq/#how-do-i-know-if-leakcanary-is-running","title":"How do I know if LeakCanary is running?","text":"<p>You can confirm that LeakCanary starts correctly by filtering on the LeakCanary tag in Logcat:</p> <pre><code>$ adb logcat | grep LeakCanary\n\nD/LeakCanary: Installing AppWatcher\n</code></pre> <p>If you do not see <code>Installing AppWatcher</code> in the logs, check your dependencies (<code>./gradlew app:dependencies</code>) and make sure LeakCanary is there.</p> <p>Note that LeakCanary is automatically disabled in tests (see LeakCanary test environment detection):</p> <pre><code>$ adb logcat | grep LeakCanary\n\nD/LeakCanary: Installing AppWatcher\nD/LeakCanary: JUnit detected in classpath, app is running tests => disabling heap dumping & analysis\nD/LeakCanary: Updated LeakCanary.config: Config(dumpHeap=false)\n</code></pre>"},{"location":"faq/#where-does-leakcanary-store-heap-dumps","title":"Where does LeakCanary store heap dumps?","text":"<p>The default behavior is to store heap dumps in a <code>leakcanary</code> folder under the app directory. If the app has been granted the <code>android.permission.WRITE_EXTERNAL_STORAGE</code> permission, then heap dumps will be stored in a <code>leakcanary-com.example</code> folder (where <code>com.example</code> is your app package name) under the <code>Download</code> folder of the external storage. If the app has not been granted the <code>android.permission.WRITE_EXTERNAL_STORAGE</code> permission but that permission is listed in <code>AndroidManifest.xml</code> then LeakCanary will show a notification that can be tapped to grant permission.</p>"},{"location":"faq/#how-can-i-dig-beyond-the-leak-trace","title":"How can I dig beyond the leak trace?","text":"<p>Sometimes the leak trace isn\u2019t enough and you need to dig into a heap dump with MAT or YourKit.</p> <ul> <li>Go to a heap analysis screen, click the overflow menu and select Share Heap Dump.</li> </ul> <p>Here\u2019s how you can find the leaking instance in the heap dump:</p> <ol> <li>Look for all instances of <code>leakcanary.KeyedWeakReference</code>.</li> <li>For each of these, look at the <code>key</code> field.</li> <li>Find the <code>KeyedWeakReference</code> that has a <code>key</code> field equal to the reference key reported by LeakCanary.</li> <li>The <code>referent</code> field of that <code>KeyedWeakReference</code> is your leaking object.</li> <li>From then on, the matter is in your hands. A good start is to look at the shortest path to GC Roots (excluding weak references).</li> </ol>"},{"location":"faq/#how-does-leakcanary-get-installed-by-only-adding-a-dependency","title":"How does LeakCanary get installed by only adding a dependency?","text":"<p>On Android, content providers are created after the Application instance is created but before Application.onCreate() is called. The <code>leakcanary-object-watcher-android</code> artifact has a non exported ContentProvider defined in its <code>AndroidManifest.xml</code> file. When that ContentProvider is installed, it adds activity and fragment lifecycle listeners to the application.</p>"},{"location":"faq/#how-many-methods-does-leakcanary-add","title":"How many methods does LeakCanary add?","text":"<p>0. LeakCanary is a debug only library.</p>"},{"location":"faq/#how-do-i-use-the-snapshot-version","title":"How do I use the SNAPSHOT version?","text":"<p>Update your dependencies to the latest SNAPSHOT (see build.gradle):</p> <pre><code>dependencies {\n debugImplementation 'com.squareup.leakcanary:leakcanary-android:3.0-alpha-9-SNAPSHOT'\n}\n</code></pre> <p>Add Sonatype\u2019s <code>snapshots</code> repository:</p> <pre><code>repositories {\n mavenCentral()\n maven {\n url 'https://s01.oss.sonatype.org/content/repositories/snapshots/'\n }\n}\n</code></pre> <p>Status of the snapshot build: </p>"},{"location":"faq/#whos-behind-leakcanary","title":"Who\u2019s behind LeakCanary?","text":"<p>LeakCanary was created and open sourced by @pyricau, with many contributions from the community.</p>"},{"location":"faq/#why-is-it-called-leakcanary","title":"Why is it called LeakCanary?","text":"<p>The name LeakCanary is a reference to the expression canary in a coal mine, because LeakCanary is a sentinel used to detect risks by providing advance warning of a danger. Props to @edenman for suggesting it!</p>"},{"location":"faq/#who-made-the-logo","title":"Who made the logo?","text":"<ul> <li>@pyricau quickly made the first version of the logo. It was based on cliparts from Android Asset Studio, mixed with the selection from a photo of a Canary. The exclamation mark means danger, the shield stands for protection, and the bird, well, is a canary.</li> <li>@romainguy turned the ugly logo into a nice vector asset.</li> <li>@flickator designed a much nicer logo for LeakCanary 2.0!</li> </ul>"},{"location":"fundamentals-fixing-a-memory-leak/","title":"Fixing a memory leak","text":"<p>A memory leak is a programming error that causes an application to keep a reference to an object that is no longer needed. Somewhere in the code, there\u2019s a reference that should have been cleared and wasn\u2019t.</p> <p>Follow these 4 steps to fix memory leaks:</p> <ol> <li>Find the leak trace.</li> <li>Narrow down the suspect references.</li> <li>Find the reference causing the leak.</li> <li>Fix the leak.</li> </ol> <p>LeakCanary helps you with the first two steps. The last two steps are up to you!</p>"},{"location":"fundamentals-fixing-a-memory-leak/#1-find-the-leak-trace","title":"1. Find the leak trace","text":"<p>A leak trace is a shorter name for the best strong reference path from garbage collection roots to the retained object, ie the path of references that is holding an object in memory, therefore preventing it from being garbage collected.</p> <p>For example, let\u2019s store a helper singleton in a static field:</p> <pre><code>class Helper {\n}\n\nclass Utils {\npublic static Helper helper = new Helper();\n}\n</code></pre> <p>Let\u2019s tell LeakCanary that the singleton instance is expected to be garbage collected:</p> <pre><code>AppWatcher.objectWatcher.watch(Utils.helper)\n</code></pre> <p>The leak trace for that singleton looks like this:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: Local variable in native code\n\u2502\n\u251c\u2500 dalvik.system.PathClassLoader instance\n\u2502 \u2193 PathClassLoader.runtimeInternalObjects\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[43]\n\u251c\u2500 com.example.Utils class\n\u2502 \u2193 static Utils.helper\n\u2570\u2192 java.example.Helper\n</code></pre> <p>Let\u2019s break it down! At the top, a <code>PathClassLoader</code> instance is held by a garbage collection (GC) root, more specifically a local variable in native code. GC roots are special objects that are always reachable, ie they cannot be garbage collected. There are 4 main types of GC root:</p> <ul> <li>Local variables, which belong to the stack of a thread.</li> <li>Instances of active Java threads.</li> <li>System Classes, which never unload.</li> <li>Native references, which are controlled by native code.</li> </ul> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: Local variable in native code\n\u2502\n\u251c\u2500 dalvik.system.PathClassLoader instance\n</code></pre> <p>A line starting with <code>\u251c\u2500</code> represents a Java object (either a class, an object array or an instance), and a line starting with <code>\u2502 \u2193</code> represents a reference to the Java object on the next line.</p> <p><code>PathClassLoader</code> has a <code>runtimeInternalObjects</code> field that is a reference to an array of <code>Object</code>:</p> <pre><code>\u251c\u2500 dalvik.system.PathClassLoader instance\n\u2502 \u2193 PathClassLoader.runtimeInternalObjects\n\u251c\u2500 java.lang.Object[] array\n</code></pre> <p>The element at position 43 in that array of <code>Object</code> is a reference to the <code>Utils</code> class.</p> <pre><code>\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[43]\n\u251c\u2500 com.example.Utils class\n</code></pre> <p>A line starting with <code>\u2570\u2192</code> represents the leaking object, ie the object that is passed to AppWatcher.objectWatcher.watch().</p> <p>The <code>Utils</code> class has a static <code>helper</code> field which is a reference to the leaking object, which is the Helper singleton instance:</p> <pre><code>\u251c\u2500 com.example.Utils class\n\u2502 \u2193 static Utils.helper\n\u2570\u2192 java.example.Helper instance\n</code></pre>"},{"location":"fundamentals-fixing-a-memory-leak/#2-narrow-down-the-suspect-references","title":"2. Narrow down the suspect references","text":"<p>A leak trace is a path of references. Initially, all references in that path are suspected of causing the leak, but LeakCanary can automatically narrow down the suspect references. To understand what that means, let\u2019s go through that process manually.</p> <p>Here\u2019s an example of bad Android code:</p> <pre><code>class ExampleApplication : Application() {\nval leakedViews = mutableListOf<View>()\n}\n\nclass MainActivity : Activity() {\noverride fun onCreate(savedInstanceState: Bundle?) {\nsuper.onCreate(savedInstanceState)\nsetContentView(R.layout.main_activity)\n\nval textView = findViewById<View>(R.id.helper_text)\n\nval app = application as ExampleApplication\n// This creates a leak, What a Terrible Failure!\napp.leakedViews.add(textView)\n}\n}\n</code></pre> <p>LeakCanary produces a leak trace that looks like this:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 android.provider.FontsContract class\n\u2502 \u2193 static FontsContract.sContext\n\u251c\u2500 com.example.leakcanary.ExampleApplication instance\n\u2502 \u2193 ExampleApplication.leakedViews\n\u251c\u2500 java.util.ArrayList instance\n\u2502 \u2193 ArrayList.elementData\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[0]\n\u251c\u2500 android.widget.TextView instance\n\u2502 \u2193 TextView.mContext\n\u2570\u2192 com.example.leakcanary.MainActivity instance\n</code></pre> <p>Here\u2019s how to read that leak trace:</p> <p>The <code>FontsContract</code> class is a system class (see <code>GC Root: System class</code>) and has an <code>sContext</code> static field which references an <code>ExampleApplication</code> instance which has a <code>leakedViews</code> field which references an <code>ArrayList</code> instance which references an array (the array backing the array list implementation) which has an element that references a <code>TextView</code> which has an <code>mContext</code> field which references a destroyed instance of <code>MainActivity</code>.</p> <p>LeakCanary highlights all references suspected of causing this leak using ~~~ underlines. Initially, all references are suspect:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 android.provider.FontsContract class\n\u2502 \u2193 static FontsContract.sContext\n\u2502 ~~~~~~~~\n\u251c\u2500 com.example.leakcanary.ExampleApplication instance\n\u2502 Leaking: NO (Application is a singleton)\n\u2502 \u2193 ExampleApplication.leakedViews\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.util.ArrayList instance\n\u2502 \u2193 ArrayList.elementData\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[0]\n\u2502 ~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 \u2193 TextView.mContext\n\u2502 ~~~~~~~~\n\u2570\u2192 com.example.leakcanary.MainActivity instance\n</code></pre> <p>Then, LeakCanary makes deductions about the state and the lifecycle of the objects in the leak trace. In an Android app the <code>Application</code> instance is a singleton that is never garbage collected, so it\u2019s never leaking (<code>Leaking: NO (Application is a singleton)</code>). From that, LeakCanary concludes that the leak is not caused by <code>FontsContract.sContext</code> (removal of corresponding <code>~~~</code>). Here\u2019s the updated leak trace:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 android.provider.FontsContract class\n\u2502 \u2193 static FontsContract.sContext\n\u251c\u2500 com.example.leakcanary.ExampleApplication instance\n\u2502 Leaking: NO (Application is a singleton)\n\u2502 \u2193 ExampleApplication.leakedViews\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.util.ArrayList instance\n\u2502 \u2193 ArrayList.elementData\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[0]\n\u2502 ~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 \u2193 TextView.mContext\n\u2502 ~~~~~~~~\n\u2570\u2192 com.example.leakcanary.MainActivity instance\n</code></pre> <p>The <code>TextView</code> instance references the destroyed <code>MainActivity</code> instance via it\u2019s <code>mContext</code> field. Views should not survive the lifecycle of their context, so LeakCanary knows that this <code>TextView</code> instance is leaking (<code>Leaking: YES (View.mContext references a destroyed activity)</code>), and therefore that the leak is not caused by <code>TextView.mContext</code> (removal of corresponding <code>~~~</code>). Here\u2019s the updated leak trace:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 android.provider.FontsContract class\n\u2502 \u2193 static FontsContract.sContext\n\u251c\u2500 com.example.leakcanary.ExampleApplication instance\n\u2502 Leaking: NO (Application is a singleton)\n\u2502 \u2193 ExampleApplication.leakedViews\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.util.ArrayList instance\n\u2502 \u2193 ArrayList.elementData\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[0]\n\u2502 ~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 Leaking: YES (View.mContext references a destroyed activity)\n\u2502 \u2193 TextView.mContext\n\u2570\u2192 com.example.leakcanary.MainActivity instance\n</code></pre> <p>To summarize, LeakCanary inspects the state of objects in the leak trace to figure out if these objects are leaking (<code>Leaking: YES</code> vs <code>Leaking: NO</code>), and leverages that information to narrow down the suspect references. You can provide custom <code>ObjectInspector</code> implementations to improve how LeakCanary works in your codebase (see Identifying leaking objects and labeling objects).</p>"},{"location":"fundamentals-fixing-a-memory-leak/#3-find-the-reference-causing-the-leak","title":"3. Find the reference causing the leak","text":"<p>In the previous example, LeakCanary narrowed down the suspect references to <code>ExampleApplication.leakedViews</code>, <code>ArrayList.elementData</code> and <code>Object[].[0]</code>:</p> <pre><code>\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 android.provider.FontsContract class\n\u2502 \u2193 static FontsContract.sContext\n\u251c\u2500 com.example.leakcanary.ExampleApplication instance\n\u2502 Leaking: NO (Application is a singleton)\n\u2502 \u2193 ExampleApplication.leakedViews\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.util.ArrayList instance\n\u2502 \u2193 ArrayList.elementData\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.lang.Object[] array\n\u2502 \u2193 Object[].[0]\n\u2502 ~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 Leaking: YES (View.mContext references a destroyed activity)\n\u2502 \u2193 TextView.mContext\n\u2570\u2192 com.example.leakcanary.MainActivity instance\n</code></pre> <p><code>ArrayList.elementData</code> and <code>Object[].[0]</code> are implementation details of <code>ArrayList</code>, and it\u2019s unlikely that there\u2019s a bug in the <code>ArrayList</code> implementation, so the reference causing the leak is the only remaining reference: <code>ExampleApplication.leakedViews</code>.</p>"},{"location":"fundamentals-fixing-a-memory-leak/#4-fix-the-leak","title":"4. Fix the leak","text":"<p>Once you find the reference causing the leak, you need to figure out what that reference is about, when it should have been cleared and why it hasn\u2019t been. Sometimes it\u2019s obvious, like in the previous example. Sometimes you need more information to figure it out. You can add labels, or explore the hprof directly (see How can I dig beyond the leak trace?).</p> <p>Warning</p> <p>Memory leaks cannot be fixed by replacing strong references with weak references. It\u2019s a common solution when attempting to quickly address memory issues, however it never works. The bugs that were causing references to be kept longer than necessary are still there. On top of that, it creates more bugs as some objects will now be garbage collected sooner than they should. It also makes the code much harder to maintain.</p> <p>What\u2019s next? Customize LeakCanary to your needs with code recipes!</p>"},{"location":"fundamentals-how-leakcanary-works/","title":"How LeakCanary works","text":"<p>Once LeakCanary is installed, it automatically detects and report memory leaks, in 4 steps:</p> <ol> <li>Detecting retained objects.</li> <li>Dumping the heap.</li> <li>Analyzing the heap.</li> <li>Categorizing leaks.</li> </ol>"},{"location":"fundamentals-how-leakcanary-works/#1-detecting-retained-objects","title":"1. Detecting retained objects","text":"<p>LeakCanary hooks into the Android lifecycle to automatically detect when activities and fragments are destroyed and should be garbage collected. These destroyed objects are passed to an <code>ObjectWatcher</code>, which holds weak references to them. LeakCanary automatically detects leaks for the following objects:</p> <ul> <li>destroyed <code>Activity</code> instances</li> <li>destroyed <code>Fragment</code> instances</li> <li>destroyed fragment <code>View</code> instances</li> <li>cleared <code>ViewModel</code> instances</li> </ul> <p>You can watch any objects that is no longer needed, for example a detached view or a destroyed presenter:</p> <pre><code>AppWatcher.objectWatcher.watch(myDetachedView, \"View was detached\")\n</code></pre> <p>If the weak reference held by <code>ObjectWatcher</code> isn\u2019t cleared after waiting 5 seconds and running garbage collection, the watched object is considered retained, and potentially leaking. LeakCanary logs this to Logcat:</p> <pre><code>D LeakCanary: Watching instance of com.example.leakcanary.MainActivity\n (Activity received Activity#onDestroy() callback) \n\n... 5 seconds later ...\n\nD LeakCanary: Scheduling check for retained objects because found new object\n retained\n</code></pre> <p>LeakCanary waits for the count of retained objects to reach a threshold before dumping the heap, and displays a notification with the latest count.</p> <p> Figure 1. LeakCanary found 4 retained objects.</p> <pre><code>D LeakCanary: Rescheduling check for retained objects in 2000ms because found\n only 4 retained objects (< 5 while app visible)\n</code></pre> <p>Info</p> <p>The default threshold is 5 retained objects when the app is visible, and 1 retained object when the app is not visible. If you see the retained objects notification and then put the app in background (for example by pressing the Home button), then the threshold changes from 5 to 1 and LeakCanary dumps the heap within 5 seconds. Tapping the notification forces LeakCanary to dump the heap immediately.</p>"},{"location":"fundamentals-how-leakcanary-works/#2-dumping-the-heap","title":"2. Dumping the heap","text":"<p>When the count of retained objects reaches a threshold, LeakCanary dumps the Java heap into a <code>.hprof</code> file (a heap dump) stored onto the Android file system (see Where does LeakCanary store heap dumps?). Dumping the heap freezes the app for a short amount of time, during which LeakCanary displays the following toast:</p> <p> Figure 2. LeakCanary shows a toast while dumping the heap.</p>"},{"location":"fundamentals-how-leakcanary-works/#3-analyzing-the-heap","title":"3. Analyzing the heap","text":"<p>LeakCanary parses the <code>.hprof</code> file using Shark and locates the retained objects in that heap dump.</p> <p> Figure 3. LeakCanary finds retained objects in the heap dump.</p> <p>For each retained object, LeakCanary finds the path of references that prevents that retained object from being garbage collected: its leak trace. You will learn to analyze a leak trace in the next section: Fixing a memory leak.</p> <p> Figure 4. LeakCanary computes the leak trace for each retained object.</p> <p>When the analysis is done, LeakCanary displays a notification with a summary, and also prints the result in Logcat. Notice below how the 4 retained objects are grouped as 2 distinct leaks. LeakCanary creates a signature for each leak trace, and groups together leaks that have the same signature, ie leaks that are caused by the same bug.</p> <p> Figure 5. The 4 leak traces turned into 2 distinct leak signatures.</p> <pre><code>====================================\nHEAP ANALYSIS RESULT\n====================================\n2 APPLICATION LEAKS\n\nDisplaying only 1 leak trace out of 2 with the same signature\nSignature: ce9dee3a1feb859fd3b3a9ff51e3ddfd8efbc6\n\u252c\u2500\u2500\u2500\n\u2502 GC Root: Local variable in native code\n\u2502\n...\n</code></pre> <p>Tapping the notification starts an activity that provides more details. Come back to it again later by tapping the LeakCanary launcher icon:</p> <p> Figure 6. LeakCanary adds a launcher icon for each app it\u2019s installed in.</p> <p>Each row corresponds to a group of leaks with the same signature. LeakCanary marks a row as New the first time the app triggers a leak with that signature.</p> <p> Figure 7. The 4 leaks grouped into 2 rows, one for each distinct leak signature.</p> <p>Tap on a leak to open up a screen with the leak trace. You can toggle between retained objects and their leak trace via a drop down.</p> <p> Figure 8. A screen showing 3 leaks grouped by their common leak signature.</p> <p>The leak signature is the hash of the concatenation of each reference suspected to cause the leak, ie each reference displayed with a red underline:</p> <p> Figure 9. A leak trace with 3 suspect references.</p> <p>These same suspicious references are underlined with <code>~~~</code> when the leak trace is shared as text:</p> <pre><code>...\n\u2502 \n\u251c\u2500 com.example.leakcanary.LeakingSingleton class\n\u2502 Leaking: NO (a class is never leaking)\n\u2502 \u2193 static LeakingSingleton.leakedViews\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.util.ArrayList instance\n\u2502 Leaking: UNKNOWN\n\u2502 \u2193 ArrayList.elementData\n\u2502 ~~~~~~~~~~~\n\u251c\u2500 java.lang.Object[] array\n\u2502 Leaking: UNKNOWN\n\u2502 \u2193 Object[].[0]\n\u2502 ~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 Leaking: YES (View.mContext references a destroyed activity)\n...\n</code></pre> <p>In the example above, the signature of the leak would be computed as:</p> <pre><code>val leakSignature = sha1Hash(\n\"com.example.leakcanary.LeakingSingleton.leakedView\" +\n\"java.util.ArrayList.elementData\" +\n\"java.lang.Object[].[x]\"\n)\nprintln(leakSignature)\n// dbfa277d7e5624792e8b60bc950cd164190a11aa\n</code></pre>"},{"location":"fundamentals-how-leakcanary-works/#4-categorizing-leaks","title":"4. Categorizing leaks","text":"<p>LeakCanary separates the leaks it finds in your app into two categories: Application Leaks and Library Leaks. A Library Leak is a leak caused by a known bug in 3rd party code that you do not have control over. This leak is impacting your application, but unfortunately fixing it may not be in your control so LeakCanary separates it out.</p> <p>The two categories are separated in the result printed in Logcat:</p> <pre><code>====================================\nHEAP ANALYSIS RESULT\n====================================\n0 APPLICATION LEAKS\n\n====================================\n1 LIBRARY LEAK\n\n...\n\u252c\u2500\u2500\u2500\n\u2502 GC Root: Local variable in native code\n\u2502\n...\n</code></pre> <p>LeakCanary marks a row as a Library Leak in its list of leaks:</p> <p> Figure 10. LeakCanary found a Library Leak.</p> <p>LeakCanary ships with a database of known leaks, which it recognizes by pattern matching on reference names. For example:</p> <pre><code>Leak pattern: instance field android.app.Activity$1#this$0\nDescription: Android Q added a new IRequestFinishCallback$Stub class [...]\n\u252c\u2500\u2500\u2500\n\u2502 GC Root: Global variable in native code\n\u2502\n\u251c\u2500 android.app.Activity$1 instance\n\u2502 Leaking: UNKNOWN\n\u2502 Anonymous subclass of android.app.IRequestFinishCallback$Stub\n\u2502 \u2193 Activity$1.this$0\n\u2502 ~~~~~~\n\u2570\u2192 com.example.MainActivity instance\n</code></pre> <p>What did I do to cause this leak?</p> <p>Nothing wrong! You used an API the way it was intended but the implementation has a bug that is causing this leak.</p> <p>Is there anything I can do to prevent it?</p> <p>Maybe! Some Library Leaks can be fixed using reflection, others by exercising a code path that makes the leak go away. This type of fix tends to be hacky, so beware! Your best option might be to find the bug report or file one, and insist that the bug gets fixed.</p> <p>Since I can\u2019t do much about this leak, is there a way I can ask LeakCanary to ignore it?</p> <p>There\u2019s no way for LeakCanary to know whether a leak is a Library Leak prior to dumping the heap and analyzing it. If LeakCanary didn\u2019t show the result notification when a Library Leak is found then you\u2019d start wondering what happened to the LeakCanary analysis after the dumping toast.</p> <p>You can see the full list of known leaks in the AndroidReferenceMatchers class. If you find an Android SDK leak that isn\u2019t recognized, please report it. You can also customize the list of known Library Leaks.</p> <p>What\u2019s next? Learn how to fix a memory leak!</p>"},{"location":"fundamentals/","title":"Introduction","text":"<p>The fundamentals describe how LeakCanary works and how to use it to detect and fix memory leaks. This documentation is designed to help developers of all levels, so please don\u2019t hesitate to report any confusing section.</p>"},{"location":"fundamentals/#what-is-a-memory-leak","title":"What is a memory leak?","text":"<p>In a Java based runtime, a memory leak is a programming error that causes an application to keep a reference to an object that is no longer needed. As a result, the memory allocated for that object cannot be reclaimed.</p> <p>For example, an Android <code>Activity</code> instance is no longer needed after its <code>onDestroy()</code> method is called, and storing a reference to that instance in a static field prevents it from being garbage collected.</p>"},{"location":"fundamentals/#common-causes-for-memory-leaks","title":"Common causes for memory leaks","text":"<p>Most memory leaks are caused by bugs related to the lifecycle of objects. Here are a few common Android mistakes:</p> <ul> <li>Adding a <code>Fragment</code> instance to the backstack without clearing that Fragment\u2019s view fields in <code>Fragment.onDestroyView()</code> (more details in this StackOverflow answer).</li> <li>Storing an <code>Activity</code> instance as a <code>Context</code> field in an object that survives activity recreation due to configuration changes.</li> <li>Registering a listener, broadcast receiver or RxJava subscription which references an object with lifecycle, and forgetting to unregister when the lifecycle reaches its end.</li> </ul>"},{"location":"fundamentals/#why-should-i-use-leakcanary","title":"Why should I use LeakCanary?","text":"<p>Memory leaks are very common in Android apps. As small memory leaks accumulate, memory usage grows, the Garbage Collector (GC) runs more frequently and consumes more CPU, causing jank, UI freezes and Application Not Responding (ANR) reports, eventually leading to an OutOfMemoryError (OOME) crash. LeakCanary will help you find and fix these memory leaks during development. When Square engineers first enabled LeakCanary in the Square Point Of Sale app, they were able to fix several leaks and reduced the OOM crash rate by 94%.</p> <p>Info</p> <p>Your crash reporting tool might not correctly report OOMEs. When memory is low because of memory leak accumulation, an OOM can be thrown from anywhere in the app code, which means that every OOM has a different stacktrace. So instead of one crash entry with a 1000 crashes, OOMs get reported as 1000 distinct crashes and hide in the long tail of low occurring crashes.</p> <p>What\u2019s next? Learn how LeakCanary works!</p>"},{"location":"getting_started/","title":"Getting started","text":"<p>To use LeakCanary, add the <code>leakcanary-android</code> dependency to your app\u2019s <code>build.gradle</code> file:</p> <pre><code>dependencies {\n// debugImplementation because LeakCanary should only run in debug builds.\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'\n}\n</code></pre> <p>That\u2019s it, there is no code change needed!</p> <p>Confirm that LeakCanary is running on startup by filtering on the <code>LeakCanary</code> tag in Logcat:</p> <pre><code>D LeakCanary: LeakCanary is running and ready to detect leaks\n</code></pre> <p>Info</p> <p>LeakCanary automatically detects leaks of the following objects:</p> <ul> <li>destroyed <code>Activity</code> instances</li> <li>destroyed <code>Fragment</code> instances</li> <li>destroyed fragment <code>View</code> instances</li> <li>cleared <code>ViewModel</code> instances</li> <li>destroyed <code>Service</code> instance</li> </ul> <p>What\u2019s next? Learn the Fundamentals!</p>"},{"location":"how_to_help/","title":"How to help","text":"<p>\ud83d\ude4f\ud83d\ude4f\ud83d\ude4f</p> <p>LeakCanary is maintained by volunteers. Your help is welcome and will benefit the entire Android community!</p> <p>Here\u2019s how you can help:</p> <ul> <li>Contribute to Help Wanted issues.</li> <li>Answer StackOverflow questions.</li> <li>Provide feedback on pull requests.</li> <li>Contribute code by forking the repository on GitHub and sending a pull request. Please read Dev Environment for LeakCanary contributors. When submitting code, please make every effort to follow existing conventions and style in order to keep the code as readable as possible.</li> </ul>"},{"location":"leakcanary-for-releases/","title":"LeakCanary for releases","text":""},{"location":"leakcanary-for-releases/#leakcanary-for-releases","title":"LeakCanary for releases","text":"<p>Fixing leaks found in debug builds helps reduce <code>Application Not Responding</code> freezes and <code>OutfOfMemoryError</code> error crashes, but only scratches the surface of all the leaks that can happen. For the leaks that are found in debug builds, it\u2019s hard to determine which leaks to fix first.</p> <p>This situation is very similar to debug crashes, where we are often unable to make an accurate assessment of their future impact in a production environment nor find all crashes that will happen in production. For crashes, apps typically monitor a crash rate by having a release crash reporting pipeline, with counts to prioritize fixes.</p> <p>LeakCanary for releases exposes APIs to run a heap analysis in release builds, in production.</p> <p>Danger</p> <p>Everything about this is experimental. Running a heap analysis in production is not a very common thing to do, and we\u2019re still learning and experimenting with this. Also, both the artifact name and the APIs may change.</p>"},{"location":"leakcanary-for-releases/#getting-started","title":"Getting started","text":"<p>LeakCanary provides an artifact dedicated to detecting leaks in release builds:</p> <pre><code>dependencies {\n// LeakCanary for releases\nreleaseImplementation 'com.squareup.leakcanary:leakcanary-android-release:2.14'\n// Optional: detect retained objects. This helps but is not required.\nreleaseImplementation 'com.squareup.leakcanary:leakcanary-object-watcher-android:2.14'\n}\n</code></pre> <p>Here\u2019s a code example that runs a heap analysis when the screen is turned off or the app enters background, checking first if a Firebase Remote Config flag is turned on, and uploading the result to Bugsnag:</p> <pre><code>import android.os.Process.THREAD_PRIORITY_BACKGROUND\nimport java.util.concurrent.Executors\nimport kotlin.concurrent.thread\nimport leakcanary.BackgroundTrigger\nimport leakcanary.HeapAnalysisClient\nimport leakcanary.HeapAnalysisConfig\nimport leakcanary.HeapAnalysisInterceptor\nimport leakcanary.HeapAnalysisInterceptor.Chain\nimport leakcanary.HeapAnalysisJob\nimport leakcanary.HeapAnalysisJob.Result.Done\nimport leakcanary.ScreenOffTrigger\n\nclass ReleaseExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\n\n// Delete any remaining heap dump (if we crashed)\nanalysisExecutor.execute {\nanalysisClient.deleteHeapDumpFiles()\n}\n\n// Starts heap analysis on background importance\nBackgroundTrigger(\napplication = this,\nanalysisClient = analysisClient,\nanalysisExecutor = analysisExecutor,\nanalysisCallback = analysisCallback\n).start()\n\n// Starts heap analysis when screen off\nScreenOffTrigger(\napplication = this,\nanalysisClient = analysisClient,\nanalysisExecutor = analysisExecutor,\nanalysisCallback = analysisCallback\n).start()\n}\n\n/**\n * Call this to trigger heap analysis manually, e.g. from\n * a help button.\n *\n * This method returns a `HeapAnalysisJob` on which you can\n * call `HeapAnalysisJob.cancel()` at any time.\n */\nfun triggerHeapAnalysisNow(): HeapAnalysisJob {\nval job = analysisClient.newJob()\nanalysisExecutor.execute {\nval result = job.execute()\nanalysisCallback(result)\n}\nreturn job\n}\n\nprivate val analysisClient by lazy {\nHeapAnalysisClient(\n// Use private app storage. cacheDir is never backed up which is important.\nheapDumpDirectoryProvider = { cacheDir },\n// stripHeapDump: remove all user data from hprof before analysis.\nconfig = HeapAnalysisConfig(stripHeapDump = true),\n// Default interceptors may cancel analysis for several other reasons.\ninterceptors = listOf(flagInterceptor) + HeapAnalysisClient.defaultInterceptors(this)\n)\n}\n\n// Cancels heap analysis if \"heap_analysis_flag\" is false.\nprivate val flagInterceptor = object : HeapAnalysisInterceptor {\nval remoteConfig by lazy { FirebaseRemoteConfig.getInstance() }\n\noverride fun intercept(chain: Chain): HeapAnalysisJob.Result {\nif (remoteConfig.getBoolean(\"heap_analysis_flag\")) {\nchain.job.cancel(\"heap_analysis_flag false\")\n}\nreturn chain.proceed()\n}\n}\n\nprivate val analysisExecutor = Executors.newSingleThreadExecutor {\nthread(start = false, name = \"Heap analysis executor\") {\nandroid.os.Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND)\nit.run()\n}\n}\n\nprivate val analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result ->\nif (result is Done) {\nuploader.upload(result.analysis)\n}\n}\n\nprivate val uploader by lazy {\nBugsnagLeakUploader(this@ReleaseExampleApplication)\n}\n}\n</code></pre> <p>Here\u2019s the <code>BugsnagLeakUploader</code>:</p> <pre><code>import android.app.Application\nimport com.bugsnag.android.Bugsnag\nimport com.bugsnag.android.Configuration\nimport com.bugsnag.android.ErrorTypes\nimport com.bugsnag.android.Event\nimport com.bugsnag.android.ThreadSendPolicy\nimport shark.HeapAnalysis\nimport shark.HeapAnalysisFailure\nimport shark.HeapAnalysisSuccess\nimport shark.Leak\nimport shark.LeakTrace\nimport shark.LeakTraceReference\nimport shark.LibraryLeak\n\nclass BugsnagLeakUploader(applicationContext: Application) {\n\nprivate val bugsnagClient = Bugsnag.start(\napplicationContext,\nConfiguration(\"YOUR_BUGSNAG_API_KEY\").apply {\nenabledErrorTypes = ErrorTypes(\nanrs = false,\nndkCrashes = false,\nunhandledExceptions = false,\nunhandledRejections = false\n)\nsendThreads = ThreadSendPolicy.NEVER\n}\n)\n\nfun upload(heapAnalysis: HeapAnalysis) {\nwhen (heapAnalysis) {\nis HeapAnalysisSuccess -> {\nval allLeakTraces = heapAnalysis\n.allLeaks\n.toList()\n.flatMap { leak ->\nleak.leakTraces.map { leakTrace -> leak to leakTrace }\n}\nif (allLeakTraces.isEmpty()) {\n// Track how often we perform a heap analysis that yields no result.\nbugsnagClient.notify(NoLeakException()) { event ->\nevent.addHeapAnalysis(heapAnalysis)\ntrue\n}\n} else {\nallLeakTraces.forEach { (leak, leakTrace) ->\nval message = \"Memory leak: ${leak.shortDescription}. See LEAK tab.\"\nval exception = leakTrace.asFakeException(message)\nbugsnagClient.notify(exception) { event ->\nevent.addHeapAnalysis(heapAnalysis)\nevent.addLeak(leak)\nevent.addLeakTrace(leakTrace)\nevent.groupingHash = leak.signature\ntrue\n}\n}\n}\n}\nis HeapAnalysisFailure -> {\n// Please file any reported failure to\n// https://github.com/square/leakcanary/issues\nbugsnagClient.notify(heapAnalysis.exception)\n}\n}\n}\n\nclass NoLeakException : RuntimeException()\n\nprivate fun Event.addHeapAnalysis(heapAnalysis: HeapAnalysisSuccess) {\naddMetadata(\"Leak\", \"heapDumpPath\", heapAnalysis.heapDumpFile.absolutePath)\nheapAnalysis.metadata.forEach { (key, value) ->\naddMetadata(\"Leak\", key, value)\n}\naddMetadata(\"Leak\", \"analysisDurationMs\", heapAnalysis.analysisDurationMillis)\n}\n\nprivate fun Event.addLeak(leak: Leak) {\naddMetadata(\"Leak\", \"libraryLeak\", leak is LibraryLeak)\nif (leak is LibraryLeak) {\naddMetadata(\"Leak\", \"libraryLeakPattern\", leak.pattern.toString())\naddMetadata(\"Leak\", \"libraryLeakDescription\", leak.description)\n}\n}\n\nprivate fun Event.addLeakTrace(leakTrace: LeakTrace) {\naddMetadata(\"Leak\", \"retainedHeapByteSize\", leakTrace.retainedHeapByteSize)\naddMetadata(\"Leak\", \"signature\", leakTrace.signature)\naddMetadata(\"Leak\", \"leakTrace\", leakTrace.toString())\n}\n\nprivate fun LeakTrace.asFakeException(message: String): RuntimeException {\nval exception = RuntimeException(message)\nval stackTrace = mutableListOf<StackTraceElement>()\nstackTrace.add(StackTraceElement(\"GcRoot\", gcRootType.name, \"GcRoot.kt\", 42))\nfor (cause in referencePath) {\nstackTrace.add(buildStackTraceElement(cause))\n}\nexception.stackTrace = stackTrace.toTypedArray()\nreturn exception\n}\n\nprivate fun buildStackTraceElement(reference: LeakTraceReference): StackTraceElement {\nval file = reference.owningClassName.substringAfterLast(\".\") + \".kt\"\nreturn StackTraceElement(reference.owningClassName, reference.referenceDisplayName, file, 42)\n}\n}\n</code></pre>"},{"location":"recipes/","title":"Code Recipes","text":"<p>This page contains code recipes to customize LeakCanary to your needs. Read through the section titles and cook your own meal! Also don\u2019t forget to check out the FAQ.</p> <p>Bug</p> <p>If you think a recipe might be missing or you\u2019re not sure that what you\u2019re trying to achieve is possible with the current APIs, please file an issue. Your feedback helps us make LeakCanary better for the entire community.</p>"},{"location":"recipes/#watching-objects-with-a-lifecycle","title":"Watching objects with a lifecycle","text":"<p>The default configuration of LeakCanary will automatically watch Activity, Fragment, Fragment View and ViewModel instances.</p> <p>In your application, you may have other objects with a lifecycle, such as services, Dagger components, etc. Use AppWatcher.objectWatcher to watch instances that should be garbage collected:</p> <pre><code>class MyService : Service {\n\n// ...\n\noverride fun onDestroy() {\nsuper.onDestroy()\nAppWatcher.objectWatcher.watch(\nwatchedObject = this,\ndescription = \"MyService received Service#onDestroy() callback\"\n)\n}\n}\n</code></pre>"},{"location":"recipes/#configuration","title":"Configuration","text":"<p>LeakCanary has a default configuration that works well for most apps. You can also customize it to your needs. The LeakCanary configuration is held by two singleton objects (<code>AppWatcher</code> and <code>LeakCanary</code>) and can be updated at any time. Most developers configure LeakCanary in their debug Application class:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nAppWatcher.config = AppWatcher.config.copy(watchFragmentViews = false)\n}\n}\n</code></pre> <p>Info</p> <p>Create a debug application class in your <code>src/debug/java</code> folder. Don\u2019t forget to also register it in <code>src/debug/AndroidManifest.xml</code>.</p> <p>To customize the detection of retained objects at runtime, specify the watchers you wish to install via AppWatcher.manualInstall():</p> <pre><code>val watchersToInstall = AppWatcher.appDefaultWatchers(this)\n.filter { it !is FragmentAndViewModelWatcher }\nAppWatcher.manualInstall(\napplication = this,\nwatchersToInstall = watchersToInstall\n)\n</code></pre> <p>To customize the heap dumping & analysis, update LeakCanary.config:</p> <pre><code>LeakCanary.config = LeakCanary.config.copy(retainedVisibleThreshold = 3)\n</code></pre> <p>Java</p> <p>In Java, use LeakCanary.Config.Builder instead:</p> <pre><code>LeakCanary.Config config = LeakCanary.getConfig().newBuilder()\n.retainedVisibleThreshold(3)\n.build();\nLeakCanary.setConfig(config);\n</code></pre> <p>Configure the LeakCanary UI by overriding the following resources:</p> <ul> <li><code>mipmap/leak_canary_icon</code> see Icon and label</li> <li><code>string/leak_canary_display_activity_label</code> see Icon and label</li> <li><code>bool/leak_canary_add_dynamic_shortcut</code> see Disabling LeakCanary</li> <li><code>bool/leak_canary_add_launcher_icon</code> see Disabling LeakCanary</li> <li><code>layout/leak_canary_heap_dump_toast</code> the layout for the toast shown when the heap is dumped</li> </ul>"},{"location":"recipes/#disabling-leakcanary","title":"Disabling LeakCanary","text":"<p>Sometimes it\u2019s necessary to disable LeakCanary temporarily, for example for a product demo or when running performance tests. You have different options, depending on what you\u2019re trying to achieve:</p> <ul> <li>Create a build variant that does not include the LeakCanary dependencies, see Setting up LeakCanary for different product flavors.</li> <li>Disable the heap dumping & analysis: <code>LeakCanary.config = LeakCanary.config.copy(dumpHeap = false)</code>.</li> <li>Hide the leak display activity launcher icon: override <code>R.bool.leak_canary_add_launcher_icon</code> or call <code>LeakCanary.showLeakDisplayActivityLauncherIcon(false)</code></li> </ul> <p>Info</p> <p>When you set <code>LeakCanary.Config.dumpHeap</code> to <code>false</code>, <code>AppWatcher.objectWatcher</code> will still keep track of retained objects, and LeakCanary will look for these objects when you change <code>LeakCanary.Config.dumpHeap</code> back to <code>true</code>.</p>"},{"location":"recipes/#leakcanary-test-environment-detection","title":"LeakCanary test environment detection","text":"<p>By default, LeakCanary will look for the <code>org.junit.Test</code> class in your classpath and if found, will disable itself to avoid running in tests. However, some apps may ship JUnit in their debug classpaths (for example, when using OkHttp\u2019s MockWebServer) so we offer a way to customise the class that is used to determine that the app is running in a test environment.</p> <pre><code><resources>\n<string name=\"leak_canary_test_class_name\">assertk.Assert</string>\n</resources>\n</code></pre>"},{"location":"recipes/#counting-retained-instances-in-release-builds","title":"Counting retained instances in release builds","text":"<p>The <code>com.squareup.leakcanary:leakcanary-android</code> dependency should only be used in debug builds. It depends on <code>com.squareup.leakcanary:leakcanary-object-watcher-android</code> which you can use in release builds to track and count retained instances.</p> <p>In your <code>build.gradle</code>:</p> <pre><code>dependencies {\n implementation 'com.squareup.leakcanary:leakcanary-object-watcher-android:2.14'\n}\n</code></pre> <p>In your leak reporting code: <pre><code>val retainedInstanceCount = AppWatcher.objectWatcher.retainedObjectCount\n</code></pre></p>"},{"location":"recipes/#leakcanary-in-release-builds","title":"LeakCanary in release builds","text":"<p>We do not recommend including LeakCanary in release builds, as it could negatively impact the experience of your customers. To avoid accidentally including the <code>com.squareup.leakcanary:leakcanary-android</code> dependency in a release build, LeakCanary crashes during initialization if the APK is not debuggable. You may have a good reason to create a non debuggable build that includes LeakCanary, for example for a QA build. If necessary, the crashing check can be disabled by overriding the <code>bool/leak_canary_allow_in_non_debuggable_build</code> resource, e.g. by creating a file under <code>res/values</code> with the following contents:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<bool name=\"leak_canary_allow_in_non_debuggable_build\">true</bool>\n</resources>\n</code></pre>"},{"location":"recipes/#android-tv","title":"Android TV","text":"<p>LeakCanary works on Android TV devices (FireTV, Nexus player, Nvidia Shield, MiBox, etc.) without any additional setup. However, there are couple things you need to be aware of:</p> <ul> <li>Android TV doesn\u2019t have notifications. LeakCanary will display Toast messages when objects become retained and when leak analysis completes. You can also check Logcat for more details.</li> <li>Due to lack of notifications, the only way to manually trigger a heap dump is to background the app.</li> <li>There\u2019s a bug on API 26+ devices that prevents the activity that displays leaks from appearing in apps list. As a workaround, LeakCanary prints an <code>adb shell</code> command in Logcat after heap dump analysis that launches leak list activity: <pre><code>adb shell am start -n \"com.your.package.name/leakcanary.internal.activity.LeakLauncherActivity\"\n</code></pre></li> <li>Some Android TV devices have very little memory available per app process and this might impact LeakCanary. Running the LeakCanary analysis in a separate process might help in such cases.</li> </ul>"},{"location":"recipes/#icon-and-label","title":"Icon and label","text":"<p>The activity that displays leaks comes with a default icon and label, which you can change by providing <code>R.mipmap.leak_canary_icon</code> and <code>R.string.leak_canary_display_activity_label</code> in your app:</p> <pre><code>res/\n mipmap-hdpi/\n leak_canary_icon.png\n mipmap-mdpi/\n leak_canary_icon.png\n mipmap-xhdpi/\n leak_canary_icon.png\n mipmap-xxhdpi/\n leak_canary_icon.png\n mipmap-xxxhdpi/\n leak_canary_icon.png\n mipmap-anydpi-v26/\n leak_canary_icon.xml\n</code></pre> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<string name=\"leak_canary_display_activity_label\">MyLeaks</string>\n</resources>\n</code></pre>"},{"location":"recipes/#matching-known-library-leaks","title":"Matching known library leaks","text":"<p>Set LeakCanary.Config.referenceMatchers to a list that builds on top of AndroidReferenceMatchers.appDefaults:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nLeakCanary.config = LeakCanary.config.copy(\nreferenceMatchers = AndroidReferenceMatchers.appDefaults +\nAndroidReferenceMatchers.staticFieldLeak(\nclassName = \"com.samsing.SomeSingleton\",\nfieldName = \"sContext\",\ndescription = \"SomeSingleton has a static field leaking a context.\",\npatternApplies = {\nmanufacturer == \"Samsing\" && sdkInt == 26\n}\n)\n)\n}\n}\n</code></pre>"},{"location":"recipes/#ignoring-specific-activities-or-fragment-classes","title":"Ignoring specific activities or fragment classes","text":"<p>Sometimes a 3rd party library provides its own activities or fragments which contain a number of bugs leading to leaks of those specific 3rd party activities and fragments. You should push hard on that library to fix their memory leaks as it\u2019s directly impacting your application. That being said, until those are fixed, you have two options:</p> <ol> <li>Add the specific leaks as known library leaks (see Matching known library leaks). LeakCanary will run when those leaks are detected and then report them as known library leaks.</li> <li>Disable LeakCanary automatic activity or fragment watching (e.g. <code>AppWatcher.config = AppWatcher.config.copy(watchActivities = false)</code>) and then manually pass objects to <code>AppWatcher.objectWatcher.watch</code>.</li> </ol>"},{"location":"recipes/#identifying-leaking-objects-and-labeling-objects","title":"Identifying leaking objects and labeling objects","text":"<pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nval addEntityIdLabel = ObjectInspector { reporter ->\nreporter.whenInstanceOf(\"com.example.DbEntity\") { instance ->\nval databaseIdField = instance[\"com.example.DbEntity\", \"databaseId\"]!!\nval databaseId = databaseIdField.value.asInt!!\nlabels += \"DbEntity.databaseId = $databaseId\"\n}\n}\n\nval singletonsInspector =\nAppSingletonInspector(\"com.example.MySingleton\", \"com.example.OtherSingleton\")\n\nval mmvmInspector = ObjectInspector { reporter ->\nreporter.whenInstanceOf(\"com.mmvm.SomeViewModel\") { instance ->\nval destroyedField = instance[\"com.mmvm.SomeViewModel\", \"destroyed\"]!!\nif (destroyedField.value.asBoolean!!) {\nleakingReasons += \"SomeViewModel.destroyed is true\"\n} else {\nnotLeakingReasons += \"SomeViewModel.destroyed is false\"\n}\n}\n}\n\nLeakCanary.config = LeakCanary.config.copy(\nobjectInspectors = AndroidObjectInspectors.appDefaults +\nlistOf(addObjectIdLabel, singletonsInspector, mmvmInspector)\n)\n}\n}\n</code></pre>"},{"location":"recipes/#running-the-leakcanary-analysis-in-a-separate-process","title":"Running the LeakCanary analysis in a separate process","text":"<p>LeakCanary runs in your main app process. LeakCanary 2 is optimized to keep memory usage low while analysing and runs in a background thread with priority <code>Process.THREAD_PRIORITY_BACKGROUND</code>. If you find that LeakCanary is still using too much memory or impacting the app process performance, you can configure it to run the analysis in a separate process.</p> <p>All you have to do is replace the <code>leakcanary-android</code> dependency with <code>leakcanary-android-process</code>:</p> <pre><code>dependencies {\n// debugImplementation 'com.squareup.leakcanary:leakcanary-android:${version}'\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android-process:${version}'\n}\n</code></pre> <p>You can call LeakCanaryProcess.isInAnalyzerProcess to check if your Application class is being created in the LeakCanary process. This is useful when configuring libraries like Firebase that may crash when running in an unexpected process.</p>"},{"location":"recipes/#setting-up-leakcanary-for-different-product-flavors","title":"Setting up LeakCanary for different product flavors","text":"<p>You can setup LeakCanary to run in a specific product flavors of your app. For example, create:</p> <pre><code>android {\n flavorDimensions \"default\"\n productFlavors {\n prod {\n // ...\n }\n qa {\n // ...\n }\n dev {\n // ...\n }\n }\n}\n</code></pre> <p>Then, define a custom configuration for the flavor for which you want to enable LeakCanary:</p> <pre><code>android {\n // ...\n}\nconfigurations {\n devDebugImplementation {}\n}\n</code></pre> <p>You can now add the LeakCanary dependency for that configuration:</p> <pre><code>dependencies {\n devDebugImplementation \"com.squareup.leakcanary:leakcanary-android:${version}\"\n}\n</code></pre>"},{"location":"recipes/#extracting-metadata-from-the-heap-dump","title":"Extracting metadata from the heap dump","text":"<p>LeakCanary.Config.metadataExtractor extracts metadata from a heap dump. The metadata is then available in <code>HeapAnalysisSuccess.metadata</code>. <code>LeakCanary.Config.metadataExtractor</code> defaults to <code>AndroidMetadataExtractor</code> but you can replace it to extract additional metadata from the hprof.</p> <p>For example, if you want to include the app version name in your heap analysis reports, you need to first store it in memory (e.g. in a static field) and then you can retrieve it in <code>MetadataExtractor</code>.</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\ncompanion object {\n@JvmStatic\nlateinit var savedVersionName: String\n}\n\noverride fun onCreate() {\nsuper.onCreate()\n\nval packageInfo = packageManager.getPackageInfo(packageName, 0)\nsavedVersionName = packageInfo.versionName\n\nLeakCanary.config = LeakCanary.config.copy(\nmetadataExtractor = MetadataExtractor { graph ->\nval companionClass =\ngraph.findClassByName(\"com.example.DebugExampleApplication\")!!\n\nval versionNameField = companionClass[\"savedVersionName\"]!!\nval versionName = versionNameField.valueAsInstance!!.readAsJavaString()!!\n\nval defaultMetadata = AndroidMetadataExtractor.extractMetadata(graph)\n\nmapOf(\"App Version Name\" to versionName) + defaultMetadata\n})\n}\n}\n</code></pre>"},{"location":"recipes/#using-leakcanary-with-obfuscated-apps","title":"Using LeakCanary with obfuscated apps","text":"<p>If obfuscation is turned on then leak traces will be obfuscated. It\u2019s possible to automatically deobfuscate leak traces by using a deobfuscation gradle plugin provided by LeakCanary.</p> <p>You have to add a plugin dependency in your root <code>build.gradle</code> file:</p> <pre><code>buildscript {\ndependencies {\nclasspath 'com.squareup.leakcanary:leakcanary-deobfuscation-gradle-plugin:${version}'\n}\n}\n</code></pre> <p>And then you need to apply and configure the plugin in your app (or library) specific <code>build.gradle</code> file:</p> <pre><code>apply plugin: 'com.android.application'\napply plugin: 'com.squareup.leakcanary.deobfuscation'\n\nleakCanary {\n// LeakCanary needs to know which variants have obfuscation turned on\nfilterObfuscatedVariants { variant ->\nvariant.name == \"debug\"\n}\n}\n</code></pre> <p>Now you can run LeakCanary on an obfuscated app and leak traces will be automatically deobfuscated.</p> <p>Important: never use this plugin on a release variant. This plugin copies obfuscation mapping file and puts it inside the .apk, so if you use it on release build then the obfuscation becomes pointless because the code can be easily deobfuscated using mapping file.</p> <p>Warning: R8 (Google Proguard replacement) can now understand Kotlin language constructs but the side effect is that mapping files can get very large (a couple dozen megabytes). It means that the size of .apk containing copied mapping file will increase as well. This is another reason for not using this plugin on a release variant.</p>"},{"location":"recipes/#detecting-leaks-in-jvm-applications","title":"Detecting leaks in JVM applications","text":"<p>While LeakCanary was designed to work out of the box on Android, it can run on any JVM with a bit of configuration.</p> <p>Add the ObjectWatcher and Shark dependencies to your build file:</p> <pre><code>dependencies {\nimplementation 'com.squareup.leakcanary:leakcanary-object-watcher:2.14'\nimplementation 'com.squareup.leakcanary:shark:2.14'\n}\n</code></pre> <p>Define a <code>HotSpotHeapDumper</code> to dump the heap:</p> <pre><code>import com.sun.management.HotSpotDiagnosticMXBean\nimport java.lang.management.ManagementFactory\n\nobject HotSpotHeapDumper {\nprivate val mBean: HotSpotDiagnosticMXBean by lazy {\nval server = ManagementFactory.getPlatformMBeanServer()\nManagementFactory.newPlatformMXBeanProxy(\nserver,\n\"com.sun.management:type=HotSpotDiagnostic\",\nHotSpotDiagnosticMXBean::class.java\n)\n}\n\nfun dumpHeap(fileName: String) {\nmBean.dumpHeap(fileName, LIVE)\n}\n\nprivate const val LIVE = true\n}\n</code></pre> <p>Define a <code>JvmHeapAnalyzer</code> to analyze the heap when objects are retained and print the result to the console:</p> <pre><code>import leakcanary.GcTrigger\nimport leakcanary.ObjectWatcher\nimport leakcanary.OnObjectRetainedListener\nimport java.io.File\nimport java.text.SimpleDateFormat\nimport java.util.Date\nimport java.util.Locale.US\n\nclass JvmHeapAnalyzer(private val objectWatcher: ObjectWatcher) :\nOnObjectRetainedListener {\n\nprivate val fileNameFormat = SimpleDateFormat(DATE_PATTERN, US)\n\noverride fun onObjectRetained() {\nGcTrigger.Default.runGc()\nif (objectWatcher.retainedObjectCount == 0) {\nreturn\n}\nval fileName = fileNameFormat.format(Date())\nval hprofFile = File(fileName)\n\nprintln(\"Dumping the heap to ${hprofFile.absolutePath}\")\nHotSpotHeapDumper.dumpHeap(hprofFile.absolutePath)\n\nval analyzer = HeapAnalyzer(\nOnAnalysisProgressListener { step ->\nprintln(\"Analysis in progress, working on: ${step.name}\")\n})\n\nval heapDumpAnalysis = analyzer.analyze(\nheapDumpFile = hprofFile,\nleakingObjectFinder = KeyedWeakReferenceFinder,\ncomputeRetainedHeapSize = true,\nobjectInspectors = ObjectInspectors.jdkDefaults\n)\nprintln(heapDumpAnalysis)\n}\ncompanion object {\nprivate const val DATE_PATTERN = \"yyyy-MM-dd_HH-mm-ss_SSS'.hprof'\"\n}\n}\n</code></pre> <p>Create an <code>ObjectWatcher</code> instance and configure it to watch objects for 5 seconds before notifying a <code>JvmHeapAnalyzer</code> instance:</p> <pre><code>val scheduledExecutor = Executors.newSingleThreadScheduledExecutor()\nval objectWatcher = ObjectWatcher(\nclock = Clock {\nSystem.currentTimeMillis()\n},\ncheckRetainedExecutor = Executor { command ->\nscheduledExecutor.schedule(command, 5, SECONDS)\n}\n)\n\nval heapAnalyzer = JvmHeapAnalyzer(objectWatcher)\nobjectWatcher.addOnObjectRetainedListener(heapAnalyzer)\n</code></pre> <p>Pass objects that you expect to be garbage collected (e.g. closed resources) to the <code>ObjectWatcher</code> instance:</p> <pre><code>objectWatcher.watch(\nwatchedObject = closedResource,\ndescription = \"$closedResource is closed and should be garbage collected\"\n)\n</code></pre> <p>If you end up using LeakCanary on a JVM, the community will definitely benefit from your experience, so don\u2019t hesitate to let us know!</p>"},{"location":"recipes/#packagemanagergetlaunchintentforpackage-returns-leaklauncheractivity","title":"PackageManager.getLaunchIntentForPackage() returns LeakLauncherActivity","text":"<p>LeakCanary adds a main activity that has a Intent#CATEGORY_LAUNCHER category. PackageManager.getLaunchIntentForPackage() looks for a main activity in the category <code>Intent#CATEGORY_INFO</code>, and next for a main activity in the category <code>Intent#CATEGORY_LAUNCHER</code>. <code>PackageManager.getLaunchIntentForPackage()</code> returns the first activity that matches in the merged manifest of your app. If your app relies on <code>PackageManager.getLaunchIntentForPackage()</code>, you have two options:</p> <ul> <li>Add <code>Intent#CATEGORY_INFO</code> to your main activity intent filter, so that it gets picked up first. This is what the Android documentation recommends.</li> <li>Disable the leakcanary launcher activity by setting the <code>leak_canary_add_launcher_icon</code> resource boolean to false.</li> </ul>"},{"location":"recorded-presentations/","title":"Recorded Presentations","text":"<ul> <li>Live leak investigations, investigating leaks on Stack Overflow and fixes for AOSP leaks</li> <li>Fixing leaks in Firefox</li> <li>Shark: Diving into the guts of LeakCanary\u2019s Hprof parser</li> <li>LeakCanary 2: Leaner, Better, Faster, Kotliner!</li> <li>LeakCanary, then what? Nuking Nasty Memory Leaks</li> <li>Memory Leak Hunt, a live investigation.</li> <li>Installing LeakCanary (LeakCanary 1.5)</li> <li>How to use LeakCanary</li> </ul> <p>Your presentation should be here, please update this list! Any technical level welcome.</p>"},{"location":"releasing/","title":"Releasing LeakCanary","text":""},{"location":"releasing/#preparing-the-release-environment","title":"Preparing the release environment","text":""},{"location":"releasing/#set-up-your-sonatype-ossrh-account","title":"Set up your Sonatype OSSRH account","text":"<ul> <li>Create a Sonatype OSSRH JIRA account.</li> <li>Create a ticket to request access to the <code>com.squareup.leakcanary</code> project. Here\u2019s an example: OSSRH-54959.</li> <li>Then ask someone with deployer role from the LeakCanary team to confirm access.</li> </ul>"},{"location":"releasing/#set-up-your-signing-key","title":"Set up your signing key","text":"<pre><code># Create a new key\ngpg --gen-key\n# List local keys. Key id is last 8 characters\ngpg -K\ncd ~/.gnupg\n# Export key locally\ngpg --export-secret-keys -o secring.gpg\n# Upload key to Ubuntu servers\ngpg --send-keys --keyserver keyserver.ubuntu.com <KEY ID>\n# Confirm the key can now be found\ngpg --recv-keys --keyserver keyserver.ubuntu.com <KEY ID>\n</code></pre>"},{"location":"releasing/#set-up-your-home-gradleproperties","title":"Set up your home gradle.properties","text":"<p>Add this to your <code>~/.gradle/gradle.properties</code>:</p> <pre><code>signing.keyId=<KEY ID>\nsigning.password=<KEY PASSWORD>\nsigning.secretKeyRingFile=/Users/YOUR_USERNAME_/.gnupg/secring.gpg\nSONATYPE_NEXUS_USERNAME=<SONATYPE_USERNAME>\nSONATYPE_NEXUS_PASSWORD=<SONATYPE_PASSWORD>\n</code></pre>"},{"location":"releasing/#set-up-the-google-analytics-docs-key","title":"Set up the Google Analytics docs key","text":"<p>Add this to your <code>~/.bashrc</code>:</p> <pre><code>export LEAKCANARY_GOOGLE_ANALYTICS_KEY=\"UA-142834539-1\"\n</code></pre>"},{"location":"releasing/#set-up-github-cli","title":"Set up GitHub CLI","text":"<p>Install GitHub CLI</p> <pre><code>brew install gh\n</code></pre> <p>Install jq, a CLI Json processor</p> <pre><code>brew install jq\n</code></pre> <p>Set up aliases for milestone management:</p> <pre><code>gh alias set listOpenMilestones \"api graphql -F owner=':owner' -F name=':repo' -f query='\n query ListOpenMilestones(\\$name: String\\!, \\$owner: String\\!) {\n repository(owner: \\$owner, name: \\$name) {\n milestones(first: 100, states: OPEN) {\n nodes {\n title\n number\n description\n dueOn\n url\n state\n closed\n closedAt\n updatedAt\n }\n }\n }\n }\n'\"\n\ngh alias set --shell createMilestone \"gh api --method POST repos/:owner/:repo/milestones --input - | jq '{ html_url: .html_url, state: .state, created_at: .created_at }'\"\n\ngh alias set --shell closeMilestone \"echo '{\\\"state\\\": \\\"closed\\\"}' | gh api --method PATCH repos/:owner/:repo/milestones/\\$1 --input - | jq '{ html_url: .html_url, state: .state, closed_at: .closed_at }'\"\n</code></pre>"},{"location":"releasing/#install-or-update-the-doc-generation-dependencies","title":"Install or update the doc generation dependencies","text":"<pre><code>python3 -m venv venv\nsource venv/bin/activate\npip3 install --requirement docs/requirements.txt\n</code></pre>"},{"location":"releasing/#releasing","title":"Releasing","text":"<ul> <li> <p>Create a local release branch from <code>main</code> <pre><code>git checkout main && \\\ngit pull && \\\ngit checkout -b release_3.0-alpha-9\n</code></pre></p> </li> <li> <p>Update <code>VERSION_NAME</code> in <code>gradle.properties</code> (remove <code>-SNAPSHOT</code>) <pre><code>sed -i '' 's/VERSION_NAME=3.0-alpha-9-SNAPSHOT/VERSION_NAME=3.0-alpha-9/' gradle.properties\n</code></pre></p> </li> <li> <p>Update the current version and next version in <code>mkdocs.yml</code> <pre><code>sed -i '' 's/3.0-alpha-9/NEXT/' mkdocs.yml\nsed -i '' 's/2.14/3.0-alpha-9/' mkdocs.yml\n</code></pre></p> </li> <li> <p>Create the release <pre><code>git commit -am \"Prepare 3.0-alpha-9 release\" && \\\n./gradlew clean && \\\n./gradlew build && \\\ngit tag v3.0-alpha-9 && \\\ngit push origin v3.0-alpha-9 && \\\n./gradlew publish --no-daemon --no-parallel && \\\n./gradlew closeAndReleaseRepository && \\\n./gradlew shark:shark-cli:distZip\n</code></pre></p> </li> </ul> <p>Note: if anything goes wrong, you can manually drop the release at https://s01.oss.sonatype.org/</p> <ul> <li>Merge back to main <pre><code>git checkout main && \\\ngit pull && \\\ngit merge --no-ff release_3.0-alpha-9\n</code></pre></li> <li> <p>Update <code>VERSION_NAME</code> in <code>gradle.properties</code> (increase version and add <code>-SNAPSHOT</code>) <pre><code>sed -i '' 's/VERSION_NAME=3.0-alpha-9/VERSION_NAME=NEXT-SNAPSHOT/' gradle.properties\n</code></pre></p> </li> <li> <p>Generate the Dokka docs <pre><code>rm -rf docs/api && ./gradlew siteDokka\n</code></pre></p> </li> <li> <p>Update the changelog (commit list) <pre><code>mate docs/changelog.md\n</code></pre></p> </li> <li> <p>Deploy the docs locally then open the changelog and check everything looks good <pre><code>source venv/bin/activate && \\\nmkdocs serve\n</code></pre></p> </li> <li> <p>Finish up the release</p> </li> </ul> <pre><code>git commit -am \"Prepare for next development iteration\" && \\\ngit push && \\\nsource venv/bin/activate && \\\nmkdocs gh-deploy && \\\ngh release create v3.0-alpha-9 ./shark/shark-cli/build/distributions/shark-cli-3.0-alpha-9.zip --title v3.0-alpha-9 --notes 'See [Change Log](https://square.github.io/leakcanary/changelog)' && \\\ngh listOpenMilestones | jq '.data.repository.milestones.nodes[0].number' | xargs gh closeMilestone && \\\necho '{\n \"title\": \"REPLACE_WITH_NEXT_VERSION_NUMBER\",\n \"state\": \"open\",\n \"description\": \"\"\n}' | gh createMilestone\n</code></pre> <ul> <li> <p>Open the v3.0-alpha-9 release to confirm everything looks good.</p> </li> <li> <p>Upload shark-cli to brew: <pre><code>brew bump-formula-pr --url https://github.com/square/leakcanary/releases/download/v3.0-alpha-9/shark-cli-3.0-alpha-9.zip leakcanary-shark\n</code></pre></p> </li> <li> <p>Wait for the release to be available on Maven Central.</p> </li> <li>Tell your friends, update all of your apps, and tweet the new release. As a nice extra touch, mention external contributions.</li> </ul>"},{"location":"shark/","title":"Shark \ud83e\udd88","text":"<p>Shark: Smart Heap Analysis Reports for Kotlin</p> <p> </p> <p>Shark is the heap analyzer that powers LeakCanary 2. It\u2019s a Kotlin standalone heap analysis library that runs at high speed with a low memory footprint.</p> <p>Shark is released in layers:</p> <ol> <li>Shark Hprof: Read and write records in hprof files.</li> <li>Shark Graph: Navigate the heap object graph.</li> <li>Shark: Generate heap analysis reports.</li> <li>Shark Android: Android heuristics to generate tailored heap analysis reports.</li> <li>Shark CLI: Analyze the heap of debuggable apps installed on an Android device connected to your desktop. The output is similar to the output of LeakCanary, except you don\u2019t have to add the LeakCanary dependency to your app.</li> <li>LeakCanary: Builds on top. It automatically watches destroyed activities and fragments, triggers a heap dump, runs Shark Android and then displays the result.</li> </ol> <p>A few more things:</p> <ul> <li>Shark is built on top of Okio. Okio makes it easy to parse heap dumps efficiently.</li> <li>Shark is a 100% Kotlin library, and Kotlin is essential to its design, because Shark relies heavily on sealed classes and sequences to save memory.</li> <li>Shark has the unique ability to help narrow down the cause of memory leaks through platform specific heuristics.</li> <li>Shark is heavily tested (80% test coverage).</li> <li>Shark can run in both Java and Android VMs, with no other dependency than Okio and Kotlin.</li> <li>Shark can analyze both Java and Android VM hprof files.</li> <li>Shark can deobfuscate hprof records if it has access to obfuscation mapping file.</li> </ul>"},{"location":"shark/#shark-cli","title":"Shark CLI","text":"<p>The Shark Command Line Interface (CLI) enables you to analyze heaps directly from your computer. It can dump the heap of an app installed on a connected Android device, analyze it, and even strip a heap dump of any sensitive data (e.g. PII, passwords or encryption keys) which is useful when sharing a heap dump.</p> <p>Install it via Homebrew:</p> <pre><code>brew install leakcanary-shark\n</code></pre> <p>You can also download it here.</p> <p>You can then look for leaks in apps on any connected device, for example: </p> <pre><code>$ shark-cli --device emulator-5554 --process com.example.app.debug analyze\n</code></pre> <p>Info</p> <p><code>shark-cli</code> works with all debuggable apps, even if they don\u2019t include the <code>leakcanary-android</code> dependency.</p> <p>Run <code>shark-cli</code> to see usage instructions:</p> <pre><code>$ shark-cli\n\nUsage: shark-cli [OPTIONS] COMMAND [ARGS]...\n\n ^`. .=\"\"=.\n ^_ \\ \\ / _ _ \\\n \\ \\ { \\ | d b |\n { \\ / `~~~--__ \\ /\\ /\n { \\___----~~' `~~-_/'-=\\/=-'\\,\n \\ /// a `~. \\ \\\n / /~~~~-, ,__. , /// __,,,,) \\ |\n \\/ \\/ `~~~; ,---~~-_`/ \\ / \\/\n / / '. .'\n '._.' _|`~~`|_\n /|\\ /|\\\n\nOptions:\n -p, --process TEXT Full or partial name of a process, e.g.\n \"example\" would match \"com.example.app\"\n -d, --device ID device/emulator id\n -m, --obfuscation-mapping PATH path to obfuscation mapping file\n --verbose / --no-verbose provide additional details as to what\n shark-cli is doing\n -h, --hprof FILE path to a .hprof file\n --help Show this message and exit\n\nCommands:\n interactive Explore a heap dump.\n analyze Analyze a heap dump.\n dump-process Dump the heap and pull the hprof file.\n strip-hprof Replace all primitive arrays from the provided heap dump with\n arrays of zeroes and generate a new \"-stripped.hprof\" file.\n</code></pre>"},{"location":"shark/#shark-code-examples","title":"Shark code examples","text":""},{"location":"shark/#reading-records-in-a-hprof-file","title":"Reading records in a hprof file","text":"<pre><code>// build.gradle\ndependencies {\nimplementation 'com.squareup.leakcanary:shark-hprof:$sharkVersion'\n}\n</code></pre> <pre><code>import java.io.File\nimport shark.Hprof\nimport shark.HprofRecord.StringRecord\nimport shark.OnHprofRecordListener\n\nfun main(args: Array<String>) {\nval heapDumpFile = File(args[0])\n\n// Prints all class and field names\nHprof.open(heapDumpFile).use { hprof ->\nhprof.reader.readHprofRecords(\nrecordTypes = setOf(StringRecord::class),\nlistener =\nOnHprofRecordListener { position, record -> println((record as StringRecord).string) },\n)\n}\n}\n</code></pre>"},{"location":"shark/#navigating-the-heap-object-graph","title":"Navigating the heap object graph","text":"<pre><code>// build.gradle\ndependencies {\nimplementation 'com.squareup.leakcanary:shark-graph:$sharkVersion'\n}\n</code></pre> <pre><code>import java.io.File\nimport shark.Hprof\nimport shark.HprofHeapGraph\n\nfun main(args: Array<String>) {\nval heapDumpFile = File(args[0])\n\n// Prints all thread names\nHprof.open(heapDumpFile).use { hprof ->\nval heapGraph = HprofHeapGraph.indexHprof(hprof)\nval threadClass = heapGraph.findClassByName(\"java.lang.Thread\")!!\nval threadNames: Sequence<String> =\nthreadClass.instances.map { instance ->\nval nameField = instance[\"java.lang.Thread\", \"name\"]!!\nnameField.value.readAsJavaString()!!\n}\nthreadNames.forEach { println(it) }\n}\n}\n</code></pre>"},{"location":"shark/#generating-a-heap-analysis-report","title":"Generating a heap analysis report","text":"<pre><code>// build.gradle\ndependencies {\nimplementation 'com.squareup.leakcanary:shark:$sharkVersion'\n}\n</code></pre> <pre><code>import java.io.File\nimport shark.FilteringLeakingObjectFinder\nimport shark.FilteringLeakingObjectFinder.LeakingObjectFilter\nimport shark.HeapAnalyzer\nimport shark.HeapObject\nimport shark.HeapObject.HeapInstance\nimport shark.Hprof\nimport shark.HprofHeapGraph\n\n// Marks any instance of com.example.ThingWithLifecycle with\n// ThingWithLifecycle.destroyed=true as leaking\nval leakingObjectFilter =\nobject : LeakingObjectFilter {\noverride fun isLeakingObject(heapObject: HeapObject): Boolean {\nreturn if (\nheapObject is HeapInstance && heapObject instanceOf \"com.example.ThingWithLifecycle\"\n) {\nval destroyedField = heapObject[\"com.example.ThingWithLifecycle\", \"destroyed\"]!!\ndestroyedField.value.asBoolean!!\n} else false\n}\n}\n\nval leakingObjectFinder = FilteringLeakingObjectFinder(listOf(leakingObjectFilter))\n\nfun main(args: Array<String>) {\nval heapDumpFile = File(args[0])\nval heapAnalysis =\nHprof.open(heapDumpFile).use { hprof ->\nval heapGraph = HprofHeapGraph.indexHprof(hprof)\nval heapAnalyzer = HeapAnalyzer({})\nheapAnalyzer.analyze(\nheapDumpFile = heapDumpFile,\ngraph = heapGraph,\nleakingObjectFinder = leakingObjectFinder,\n)\n}\nprintln(heapAnalysis)\n}\n</code></pre>"},{"location":"shark/#generating-an-android-heap-analysis-report","title":"Generating an Android heap analysis report","text":"<pre><code>// build.gradle\ndependencies {\nimplementation 'com.squareup.leakcanary:shark-android:$sharkVersion'\n}\n</code></pre> <pre><code>import java.io.File\nimport shark.AndroidObjectInspectors\nimport shark.AndroidReferenceMatchers\nimport shark.FilteringLeakingObjectFinder\nimport shark.FilteringLeakingObjectFinder.LeakingObjectFilter\nimport shark.HeapAnalyzer\nimport shark.HeapObject\nimport shark.HeapObject.HeapInstance\nimport shark.Hprof\nimport shark.HprofHeapGraph\n\n// Marks any instance of com.example.ThingWithLifecycle with\n// ThingWithLifecycle.destroyed=true as leaking\nval leakingObjectFilter =\nobject : LeakingObjectFilter {\noverride fun isLeakingObject(heapObject: HeapObject): Boolean {\nreturn if (\nheapObject is HeapInstance && heapObject instanceOf \"com.example.ThingWithLifecycle\"\n) {\nval instance = heapObject as HeapInstance\nval destroyedField = instance[\"com.example.ThingWithLifecycle\", \"destroyed\"]!!\ndestroyedField.value.asBoolean!!\n} else false\n}\n}\n\nval leakingObjectFinder = FilteringLeakingObjectFinder(listOf(leakingObjectFilter))\n\nfun main(args: Array<String>) {\nval heapDumpFile = File(args[0])\n\nval heapAnalysis =\nHprof.open(heapDumpFile).use { hprof ->\nval heapGraph = HprofHeapGraph.indexHprof(hprof)\nval heapAnalyzer = HeapAnalyzer({})\nheapAnalyzer.analyze(\nheapDumpFile = heapDumpFile,\ngraph = heapGraph,\nleakingObjectFinder = leakingObjectFinder,\nreferenceMatchers = AndroidReferenceMatchers.appDefaults,\nobjectInspectors = AndroidObjectInspectors.appDefaults,\n)\n}\n\nprintln(heapAnalysis)\n}\n</code></pre>"},{"location":"support/","title":"LeakCanary Support","text":"<p>If you\u2019re looking for help with LeakCanary:</p> <ul> <li>Learn the Fundamentals</li> <li>Try the code recipes</li> <li>Read the FAQ</li> <li>Watch recorded presentations</li> <li>Read blog articles</li> <li>Ask a question on StackOverflow</li> </ul>"},{"location":"ui-tests/","title":"Leak detection in UI tests","text":"<p>Running leak detection in UI tests means you can detect memory leaks automatically in Continuous Integration prior to new leaks being merged into the codebase.</p> <p>Test environment detection</p> <p>In debug builds, LeakCanary looks for retained instances continuously, freezes the VM to take a heap dump after a watched object has been retained for 5 seconds, then performs the analysis in a background thread and reports the result using notifications. That behavior isn\u2019t well suited for UI tests, so LeakCanary is automatically disabled when JUnit is on the runtime classpath (see test environment detection).</p>"},{"location":"ui-tests/#getting-started","title":"Getting started","text":"<p>LeakCanary provides an artifact dedicated to detecting leaks in UI tests:</p> <pre><code>androidTestImplementation 'com.squareup.leakcanary:leakcanary-android-instrumentation:2.14'\n// You still need to include the LeakCanary artifact in your app:\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'\n</code></pre> <p>You can then call <code>LeakAssertions.assertNoLeaks()</code> at any point in your tests to check for leaks:</p> <pre><code>class CartTest {\n\n@Test\nfun addItemToCart() {\n// ...\nLeakAssertions.assertNoLeaks()\n}\n}\n</code></pre> <p>If retained instances are detected, LeakCanary will dump and analyze the heap. If application leaks are found, <code>LeakAssertions.assertNoLeaks()</code> will throw a <code>NoLeakAssertionFailedError</code>.</p> <pre><code>leakcanary.NoLeakAssertionFailedError: Application memory leaks were detected:\n====================================\nHEAP ANALYSIS RESULT\n====================================\n1 APPLICATION LEAKS\n\n\u252c\u2500\u2500\u2500\n\u2502 GC Root: System class\n\u2502\n\u251c\u2500 com.example.MySingleton class\n\u2502 Leaking: NO (a class is never leaking)\n\u2502 \u2193 static MySingleton.leakedView\n\u2502 ~~~~~~~~~~\n\u251c\u2500 android.widget.TextView instance\n\u2502 Leaking: YES (View.mContext references a destroyed activity)\n\u2502 \u2193 TextView.mContext\n\u2570\u2192 com.example.MainActivity instance\n Leaking: YES (Activity#mDestroyed is true)\n====================================\n at leakcanary.AndroidDetectLeaksAssert.assertNoLeaks(AndroidDetectLeaksAssert.kt:34)\n at leakcanary.LeakAssertions.assertNoLeaks(LeakAssertions.kt:21)\n at com.example.CartTest.addItemToCart(TuPeuxPasTest.kt:41)\n</code></pre> <p>Obfuscated instrumentation tests</p> <p>When running instrumentation tests against obfuscated release builds, the LeakCanary classes end up spread over the test APK and the main APK. Unfortunately there is a bug in the Android Gradle Plugin that leads to runtime crashes when running tests, because code from the main APK is changed without the using code in the test APK being updated accordingly. If you run into this issue, setting up the Keeper plugin should fix it.</p>"},{"location":"ui-tests/#test-rule","title":"Test rule","text":"<p>You can use the <code>DetectLeaksAfterTestSuccess</code> test rule to automatically call <code>LeakAssertions.assertNoLeaks()</code> at the end of a test:</p> <pre><code>class CartTest {\n@get:Rule\nval rule = DetectLeaksAfterTestSuccess()\n\n@Test\nfun addItemToCart() {\n// ...\n}\n}\n</code></pre> <p>You can call also <code>LeakAssertions.assertNoLeaks()</code> as many times as you want in a single test:</p> <pre><code>class CartTest {\n@get:Rule\nval rule = DetectLeaksAfterTestSuccess()\n\n// This test has 3 leak assertions (2 in the test + 1 from the rule).\n@Test\nfun addItemToCart() {\n// ...\nLeakAssertions.assertNoLeaks()\n// ...\nLeakAssertions.assertNoLeaks()\n// ...\n}\n}\n</code></pre>"},{"location":"ui-tests/#skipping-leak-detection","title":"Skipping leak detection","text":"<p>Use <code>@SkipLeakDetection</code> to disable <code>LeakAssertions.assertNoLeaks()</code> calls:</p> <pre><code>class CartTest {\n@get:Rule\nval rule = DetectLeaksAfterTestSuccess()\n\n// This test will not perform any leak assertion.\n@SkipLeakDetection(\"See issue #1234\")\n@Test\nfun addItemToCart() {\n// ...\nLeakAssertions.assertNoLeaks()\n// ...\nLeakAssertions.assertNoLeaks()\n// ...\n}\n}\n</code></pre> <p>You can use tags to identify each <code>LeakAssertions.assertNoLeaks()</code> call and disable only a subset of these calls:</p> <pre><code>class CartTest {\n@get:Rule\nval rule = DetectLeaksAfterTestSuccess(tag = \"EndOfTest\")\n\n// This test will only perform the second leak assertion.\n@SkipLeakDetection(\"See issue #1234\", \"First Assertion\", \"EndOfTest\")\n@Test\nfun addItemToCart() {\n// ...\nLeakAssertions.assertNoLeak(tag = \"First Assertion\")\n// ...\nLeakAssertions.assertNoLeak(tag = \"Second Assertion\")\n// ...\n}\n}\n</code></pre> <p>Tags can be retrieved by calling <code>HeapAnalysisSuccess.assertionTag</code> and are also reported in the heap analysis result metadata:</p> <pre><code>====================================\nMETADATA\n\nPlease include this in bug reports and Stack Overflow questions.\n\nBuild.VERSION.SDK_INT: 23\n...\nassertionTag: Second Assertion\n</code></pre>"},{"location":"ui-tests/#test-rule-chains","title":"Test rule chains","text":"<pre><code>// Example test rule chain\n@get:Rule\nval rule = RuleChain.outerRule(LoginRule())\n.around(ActivityScenarioRule(CartActivity::class.java))\n.around(LoadingScreenRule())\n</code></pre> <p>If you use a test rule chain, the position of the <code>DetectLeaksAfterTestSuccess</code> rule in that chain could be significant. For example, if you use an <code>ActivityScenarioRule</code> that automatically finishes the activity at the end of a test, having <code>DetectLeaksAfterTestSuccess</code> around <code>ActivityScenarioRule</code> will detect leaks after the activity is destroyed and therefore detect any activity leak. But then <code>DetectLeaksAfterTestSuccess</code> will not detect fragment leaks that go away when the activity is destroyed.</p> <pre><code>@get:Rule\nval rule = RuleChain.outerRule(LoginRule())\n// Detect leaks AFTER activity is destroyed\n.around(DetectLeaksAfterTestSuccess(tag = \"AfterActivityDestroyed\"))\n.around(ActivityScenarioRule())\n.around(LoadingScreenRule())\n</code></pre> <p>If instead you set up <code>ActivityScenarioRule</code> around <code>DetectLeaksAfterTestSuccess</code>, destroyed activity leaks will not be detected as the activity will still be created when the leak assertion rule runs, but more fragment leaks might be detected.</p> <pre><code>@get:Rule\nval rule = RuleChain.outerRule(LoginRule())\n.around(ActivityScenarioRule(CartActivity::class.java))\n// Detect leaks BEFORE activity is destroyed\n.around(DetectLeaksAfterTestSuccess(tag = \"BeforeActivityDestroyed\"))\n.around(LoadingScreenRule())\n</code></pre> <p>To detect all leaks, the best option is to set up the <code>DetectLeaksAfterTestSuccess</code> rule twice, before and after the <code>ActivityScenarioRule</code> rule.</p> <pre><code>// Detect leaks BEFORE and AFTER activity is destroyed\n@get:Rule\nval rule = RuleChain.outerRule(LoginRule())\n.around(DetectLeaksAfterTestSuccess(tag = \"AfterActivityDestroyed\"))\n.around(ActivityScenarioRule(CartActivity::class.java))\n.around(DetectLeaksAfterTestSuccess(tag = \"BeforeActivityDestroyed\"))\n.around(LoadingScreenRule())\n</code></pre> <p><code>RuleChain.detectLeaksAfterTestSuccessWrapping()</code> is a helper for doing just that:</p> <pre><code>// Detect leaks BEFORE and AFTER activity is destroyed\n@get:Rule\nval rule = RuleChain.outerRule(LoginRule())\n// The tag will be suffixed with \"Before\" and \"After\".\n.detectLeaksAfterTestSuccessWrapping(tag = \"ActivitiesDestroyed\") {\naround(ActivityScenarioRule(CartActivity::class.java))\n}\n.around(LoadingScreenRule())\n</code></pre>"},{"location":"ui-tests/#customizing-assertnoleaks","title":"Customizing <code>assertNoLeaks()</code>","text":"<p><code>LeakAssertions.assertNoLeaks()</code> delegates calls to a global <code>DetectLeaksAssert</code> implementation, which by default is an instance of <code>AndroidDetectLeaksAssert</code>. You can change the <code>DetectLeaksAssert</code> implementation by calling <code>DetectLeaksAssert.update(customLeaksAssert)</code>.</p> <p>The <code>AndroidDetectLeaksAssert</code> implementation performs a heap dump when retained instances are detected, analyzes the heap, then passes the result to a <code>HeapAnalysisReporter</code>. The default <code>HeapAnalysisReporter</code> is <code>NoLeakAssertionFailedError.throwOnApplicationLeaks()</code> which throws a <code>NoLeakAssertionFailedError</code> if an application leak is detected.</p> <p>You could provide a custom implementation to also upload heap analysis results to a central place before failing the test: <pre><code>val throwingReporter = NoLeakAssertionFailedError.throwOnApplicationLeaks()\n\nDetectLeaksAssert.update(AndroidDetectLeaksAssert(\nheapAnalysisReporter = { heapAnalysis ->\n// Upload the heap analysis result\nheapAnalysisUploader.upload(heapAnalysis)\n// Fail the test if there are application leaks\nthrowingReporter.reportHeapAnalysis(heapAnalysis)\n}\n))\n</code></pre></p>"},{"location":"upgrading-to-leakcanary-2.0/","title":"Upgrading to LeakCanary 2","text":"<p>LeakCanary 2 is a major rewrite. High level changes:</p> <ul> <li>New heap analyzer, reimplemented from scratch to use 10 times less memory (see Shark).</li> <li>APIs updated to simplify configuration and provide access to the new heap analyzer.</li> <li>Internals rewritten to 100% Kotlin.</li> <li>Multiple leaks detected in one analysis, grouped per leak type</li> </ul>"},{"location":"upgrading-to-leakcanary-2.0/#dependencies","title":"Dependencies","text":""},{"location":"upgrading-to-leakcanary-2.0/#before","title":"Before","text":"<pre><code>dependencies {\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'\nreleaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'\n// Optional, if you use support library fragments:\ndebugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.3'\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now","title":"Now","text":"<pre><code>dependencies {\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#worth-noting","title":"Worth noting","text":"<ul> <li>The <code>leakcanary-android-no-op</code> artifact is gone. If you have compile errors, see below.</li> <li>Question: if there\u2019s no no-op anymore, how do I ensure none of this runs during release builds?</li> <li>Answer: as long as you add <code>leakcanary-android</code> as <code>debugImplementation</code>, there won\u2019t be any code referencing LeakCanary in your release builds.</li> <li>LeakCanary does not depend on the support library anymore, and it doesn\u2019t depend on AndroidX either.</li> <li>Detection of AndroidX fragments is automatic if you have the AndroidX fragments dependency.</li> </ul>"},{"location":"upgrading-to-leakcanary-2.0/#default-setup-code","title":"Default setup code","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_1","title":"Before","text":"<pre><code>public class ExampleApplication extends Application {\n\n@Override public void onCreate() {\nsuper.onCreate();\nif (LeakCanary.isInAnalyzerProcess(this)) {\n// This process is dedicated to LeakCanary for heap analysis.\n// You should not init your app in this process.\nreturn;\n}\nLeakCanary.install(this);\n// Normal app init code...\n}\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_1","title":"Now","text":"<p>There is no more code for default setup.</p>"},{"location":"upgrading-to-leakcanary-2.0/#worth-noting_1","title":"Worth noting","text":"<ul> <li>LeakCanary auto installs itself</li> <li>LeakCanary analysis now runs in the main process so there is no need to call <code>LeakCanary.isInAnalyzerProcess()</code>.</li> </ul>"},{"location":"upgrading-to-leakcanary-2.0/#retrieve-the-refwatcher","title":"Retrieve the RefWatcher","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_2","title":"Before","text":"<pre><code>val refWatcher: RefWatcher = LeakCanary.installedRefWatcher()\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_2","title":"Now","text":"<pre><code>val objectWatcher: ObjectWatcher = AppWatcher.objectWatcher\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#compile-errors-because-refwatcher-is-used-in-release-code","title":"Compile errors because RefWatcher is used in release code","text":"<p>If you were using <code>RefWatcher</code> in non debug code, you now get a compile error because the no-op artifact is gone. ObjectWatcher now lives in the <code>object-watcher</code> artifact, which is suitable for release builds. You have two options:</p>"},{"location":"upgrading-to-leakcanary-2.0/#option-1-add-object-watcher-android-to-release-builds","title":"Option 1: Add <code>object-watcher-android</code> to release builds.","text":"<pre><code>dependencies {\nimplementation 'com.squareup.leakcanary:leakcanary-object-watcher-android:2.14'\n}\n</code></pre> <ul> <li>It will automatically keep weak references to destroyed activities, fragments, and any instance you pass to AppWatcher.objectWatcher.</li> <li>It will not trigger heap dumps or anything else that LeakCanary does.</li> <li>It\u2019s very little code and should have a no impact on your release app.</li> <li>You can use it to count how many objects are retained, for example to add metadata to OutOfMemoryError crashes:</li> </ul> <pre><code>val retainedObjectCount = AppWatcher.objectWatcher.retainedObjectCount\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#option-2-make-your-own-objectwatcher-interface","title":"Option 2: Make your own <code>ObjectWatcher</code> interface","text":"<pre><code>// In shared code\ninterface MaybeObjectWatcher {\nfun watch(watchedObject: Any, description: String)\n\nobject None : MaybeObjectWatcher {\noverride fun watch(watchedObject: Any, description: String) {\n}\n}\n}\n\n// In debug code\nclass RealObjectWatcher : MaybeObjectWatcher {\noverride fun watch(watchedObject: Any, description: String) {\nAppWatcher.objectWatcher.watch(watchedObject, description)\n}\n}\n</code></pre> <p>Use <code>MaybeObjectWatcher.None</code> in release code and <code>RealObjectWatcher</code> in debug code.</p>"},{"location":"upgrading-to-leakcanary-2.0/#configuring-leakcanary","title":"Configuring LeakCanary","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_3","title":"Before","text":"<pre><code>public class DebugExampleApplication extends ExampleApplication {\n\n@Override protected void installLeakCanary() {\nRefWatcher refWatcher = LeakCanary.refWatcher(this)\n.watchActivities(false)\n.buildAndInstall();\n}\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_3","title":"Now","text":"<p>AppWatcher is in charge of detecting retained objects. Its configuration can be updated at any time by replacing AppWatcher.config:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nAppWatcher.config = AppWatcher.config.copy(watchFragmentViews = false)\n}\n}\n</code></pre> <p>LeakCanary is in charge of taking heap dumps and analyzing them. Its configuration can be updated at any time by replacing LeakCanary.config:</p> <pre><code>disableLeakCanaryButton.setOnClickListener {\nLeakCanary.config = LeakCanary.config.copy(dumpHeap = false)\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#running-leakcanary-in-instrumentation-tests","title":"Running LeakCanary in instrumentation tests","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_4","title":"Before","text":"<p>In your <code>build.gradle</code> file:</p> <pre><code>dependencies {\nandroidTestImplementation \"com.squareup.leakcanary:leakcanary-android-instrumentation:${leakCanaryVersion}\"\n}\n\nandroid {\ndefaultConfig {\n// ...\n\ntestInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\ntestInstrumentationRunnerArgument \"listener\", \"com.squareup.leakcanary.FailTestOnLeakRunListener\"\n}\n}\n</code></pre> <p>In your test <code>Application</code> class:</p> <pre><code>public class InstrumentationTestExampleApplication extends DebugExampleApplication {\n@Override protected void installLeakCanary() {\nInstrumentationLeakDetector.instrumentationRefWatcher(this)\n.buildAndInstall();\n}\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_4","title":"Now","text":"<p>Remove all the previous test related leak detection code then follow Leak detection in UI tests.</p>"},{"location":"upgrading-to-leakcanary-2.0/#analysis-listener-uploading-to-a-server","title":"Analysis listener / uploading to a server","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_5","title":"Before","text":"<pre><code>public class LeakUploadService extends DisplayLeakService {\n@Override protected void afterDefaultHandling(HeapDump heapDump, AnalysisResult result, String leakInfo) {\n// TODO Upload result to server\n}\n}\n</code></pre> <pre><code>RefWatcher refWatcher = LeakCanary.refWatcher(this)\n.listenerServiceClass(LeakUploadService.class)\n.buildAndInstall();\n</code></pre> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n<application android:name=\"com.example.DebugExampleApplication\">\n<service android:name=\"com.example.LeakUploadService\" />\n</application>\n</manifest>\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_5","title":"Now","text":"<pre><code>class LeakUploader : OnHeapAnalyzedListener {\n\nval defaultListener = DefaultOnHeapAnalyzedListener.create()\n\noverride fun onHeapAnalyzed(heapAnalysis: HeapAnalysis) {\nTODO(\"Upload heap analysis to server\")\n\n// Delegate to default behavior (notification and saving result)\ndefaultListener.onHeapAnalyzed(heapAnalysis)\n}\n}\n\nclass DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nLeakCanary.config = LeakCanary.config.copy(\nonHeapAnalyzedListener = LeakUploader()\n)\n}\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#matching-known-library-leaks","title":"Matching known library leaks","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_6","title":"Before","text":"<pre><code>ExcludedRefs excludedRefs = AndroidExcludedRefs.createAppDefaults()\n.staticField(\"com.samsing.SomeSingleton\", \"sContext\")\n.build();\nRefWatcher refWatcher = LeakCanary.refWatcher(this)\n.excludedRefs(excludedRefs)\n.buildAndInstall();\n}\n</code></pre>"},{"location":"upgrading-to-leakcanary-2.0/#now_6","title":"Now","text":"<pre><code>LeakCanary.config = LeakCanary.config.copy(\nreferenceMatchers = AndroidReferenceMatchers.appDefaults +\nAndroidReferenceMatchers.staticFieldLeak(\n\"com.samsing.SomeSingleton\",\n\"sContext\"\n)\n)\n</code></pre> <p>Info</p> <p>There is no equivalent API to <code>ExcludedRefs.Builder.clazz()</code> because it led to abuses. Instead see Ignoring specific activities or fragment classes.</p>"},{"location":"upgrading-to-leakcanary-2.0/#public-api-packages","title":"Public API packages","text":""},{"location":"upgrading-to-leakcanary-2.0/#before_7","title":"Before","text":"<p>All public APIs were in <code>com.squareup.leakcanary.*</code></p>"},{"location":"upgrading-to-leakcanary-2.0/#now_7","title":"Now","text":"<p>All public APIs are in <code>leakcanary.*</code></p>"},{"location":"uploading/","title":"Uploading analysis results","text":"<p>You can add an <code>EventListener</code> to upload the analysis result to a server of your choosing:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nval analysisUploadListener = EventListener { event ->\nif (event is HeapAnalysisSucceeded) {\nval heapAnalysis = event.heapAnalysis\nTODO(\"Upload heap analysis to server\")\n}\n}\n\nLeakCanary.config = LeakCanary.config.run {\ncopy(eventListeners = eventListeners + analysisUploadListener)\n}\n}\n}\n</code></pre>"},{"location":"uploading/#uploading-to-bugsnag","title":"Uploading to Bugsnag","text":"<p>A leak trace has a lot in common with a stack trace, so if you lack the engineering resources to build a backend for LeakCanary, you can instead upload leak traces to a crash reporting backend. The client needs to support grouping via custom client-side hashing as well as custom metadata with support for newlines.</p> <p>Info</p> <p>As of this writing, the only known library suitable for uploading leaks is the Bugsnag client. If you managed to make it work with another library, please file an issue.</p> <p>Create a Bugsnag account, create a new project for leak reporting and grab an API key. Make sure the app has the <code>android.permission.INTERNET</code> permission then add the latest version of the Bugsnag Android client library to <code>build.gradle</code>:</p> <pre><code>dependencies {\n// debugImplementation because LeakCanary should only run in debug builds.\ndebugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'\ndebugImplementation \"com.bugsnag:bugsnag-android:$bugsnagVersion\"\n}\n</code></pre> <p>Info</p> <p>If you\u2019re only using Bugsnag for uploading leaks, then you do not need to set up the Bugsnag Gradle plugin or to configure the API key in your app manifest.</p> <p>Create a new <code>BugsnagLeakUploader</code>:</p> <pre><code>import android.app.Application\nimport com.bugsnag.android.Bugsnag\nimport com.bugsnag.android.Configuration\nimport com.bugsnag.android.ErrorTypes\nimport com.bugsnag.android.Event\nimport com.bugsnag.android.ThreadSendPolicy\nimport shark.HeapAnalysis\nimport shark.HeapAnalysisFailure\nimport shark.HeapAnalysisSuccess\nimport shark.Leak\nimport shark.LeakTrace\nimport shark.LeakTraceReference\nimport shark.LibraryLeak\n\nclass BugsnagLeakUploader(applicationContext: Application) {\n\nprivate val bugsnagClient = Bugsnag.start(\napplicationContext,\nConfiguration(\"YOUR_BUGSNAG_API_KEY\").apply {\nenabledErrorTypes = ErrorTypes(\nanrs = false,\nndkCrashes = false,\nunhandledExceptions = false,\nunhandledRejections = false\n)\nsendThreads = ThreadSendPolicy.NEVER\n}\n)\n\nfun upload(heapAnalysis: HeapAnalysis) {\nwhen (heapAnalysis) {\nis HeapAnalysisSuccess -> {\nval allLeakTraces = heapAnalysis\n.allLeaks\n.toList()\n.flatMap { leak ->\nleak.leakTraces.map { leakTrace -> leak to leakTrace }\n}\nif (allLeakTraces.isEmpty()) {\n// Track how often we perform a heap analysis that yields no result.\nbugsnagClient.notify(NoLeakException()) { event ->\nevent.addHeapAnalysis(heapAnalysis)\ntrue\n}\n} else {\nallLeakTraces.forEach { (leak, leakTrace) ->\nval message = \"Memory leak: ${leak.shortDescription}. See LEAK tab.\"\nval exception = leakTrace.asFakeException(message)\nbugsnagClient.notify(exception) { event ->\nevent.addHeapAnalysis(heapAnalysis)\nevent.addLeak(leak)\nevent.addLeakTrace(leakTrace)\nevent.groupingHash = leak.signature\ntrue\n}\n}\n}\n}\nis HeapAnalysisFailure -> {\n// Please file any reported failure to\n// https://github.com/square/leakcanary/issues\nbugsnagClient.notify(heapAnalysis.exception)\n}\n}\n}\n\nclass NoLeakException : RuntimeException()\n\nprivate fun Event.addHeapAnalysis(heapAnalysis: HeapAnalysisSuccess) {\naddMetadata(\"Leak\", \"heapDumpPath\", heapAnalysis.heapDumpFile.absolutePath)\nheapAnalysis.metadata.forEach { (key, value) ->\naddMetadata(\"Leak\", key, value)\n}\naddMetadata(\"Leak\", \"analysisDurationMs\", heapAnalysis.analysisDurationMillis)\n}\n\nprivate fun Event.addLeak(leak: Leak) {\naddMetadata(\"Leak\", \"libraryLeak\", leak is LibraryLeak)\nif (leak is LibraryLeak) {\naddMetadata(\"Leak\", \"libraryLeakPattern\", leak.pattern.toString())\naddMetadata(\"Leak\", \"libraryLeakDescription\", leak.description)\n}\n}\n\nprivate fun Event.addLeakTrace(leakTrace: LeakTrace) {\naddMetadata(\"Leak\", \"retainedHeapByteSize\", leakTrace.retainedHeapByteSize)\naddMetadata(\"Leak\", \"signature\", leakTrace.signature)\naddMetadata(\"Leak\", \"leakTrace\", leakTrace.toString())\n}\n\nprivate fun LeakTrace.asFakeException(message: String): RuntimeException {\nval exception = RuntimeException(message)\nval stackTrace = mutableListOf<StackTraceElement>()\nstackTrace.add(StackTraceElement(\"GcRoot\", gcRootType.name, \"GcRoot.kt\", 42))\nfor (cause in referencePath) {\nstackTrace.add(buildStackTraceElement(cause))\n}\nexception.stackTrace = stackTrace.toTypedArray()\nreturn exception\n}\n\nprivate fun buildStackTraceElement(reference: LeakTraceReference): StackTraceElement {\nval file = reference.owningClassName.substringAfterLast(\".\") + \".kt\"\nreturn StackTraceElement(reference.owningClassName, reference.referenceDisplayName, file, 42)\n}\n}\n</code></pre> <p>Then add an <code>EventListener</code> to upload the analysis result to Bugsnag:</p> <pre><code>class DebugExampleApplication : ExampleApplication() {\n\noverride fun onCreate() {\nsuper.onCreate()\nLeakCanary.config = LeakCanary.config.copy(\nonHeapAnalyzedListener = BugsnagLeakUploader(applicationContext = this)\n)\n}\n}\n</code></pre> <p>You should start seeing leaks reported into Bugsnag, grouped by their leak signature:</p> <p></p> <p>The <code>LEAK</code> tab contains the leak trace:</p> <p></p>"},{"location":"api/leakcanary/","title":"LeakCanary API","text":"<p>//leakcanary-repo/leakcanary</p>"},{"location":"api/leakcanary/#package-level-declarations","title":"Package-level declarations","text":""},{"location":"api/leakcanary/#types","title":"Types","text":"Name Summary ActivityWatcher [androidJvm]class ActivityWatcher(application: Application, deletableObjectReporter: DeletableObjectReporter) : InstallableWatcherExpects activities to become weakly reachable soon after they receive the Activity.onDestroy callback. AndroidDebugHeapDumper [androidJvm]object AndroidDebugHeapDumper : HeapDumperDumps the Android heap using Debug.dumpHprofData. AndroidDetectLeaksAssert [androidJvm]class AndroidDetectLeaksAssert(detectLeaksInterceptor: DetectLeaksInterceptor = AndroidDetectLeaksInterceptor(), heapAnalysisReporter: HeapAnalysisReporter = NoLeakAssertionFailedError.throwOnApplicationLeaks()) : DetectLeaksAssertDefault DetectLeaksAssert implementation. Uses public helpers so you should be able to create our own implementation if needed. AndroidDetectLeaksInterceptor [androidJvm]class AndroidDetectLeaksInterceptor(instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(), retainedObjectTracker: RetainedObjectTracker = AppWatcher.objectWatcher, retainedDelayMillis: Long = AppWatcher.retainedDelayMillis) : DetectLeaksInterceptor AndroidDeviceTempHeapDumpDirectoryProvider [androidJvm]class AndroidDeviceTempHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider AndroidLeakFixes [androidJvm]enum AndroidLeakFixes : Enum<AndroidLeakFixes> A collection of hacks to fix leaks in the Android Framework and other Google Android libraries. AppWatcher [androidJvm]object AppWatcherThe entry point API for using ObjectWatcher in an Android app. AppWatcher.objectWatcher is in charge of detecting retained objects, and AppWatcher is auto configured on app start to pass it activity and fragment instances. Call ObjectWatcher.watch on objectWatcher to watch any other object that you expect to be unreachable. AppWatcherStartupInitializer [androidJvm]class AppWatcherStartupInitializer : Initializer<AppWatcherStartupInitializer> BackgroundThreadHeapAnalyzer [androidJvm]object BackgroundThreadHeapAnalyzer : EventListenerStarts heap analysis on a background HandlerThread when receiving a HeapDump event. BackgroundTrigger [androidJvm]class BackgroundTrigger(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, processInfo: ProcessInfo = ProcessInfo.Real, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } }) ConditionalInterceptor [androidJvm]class ConditionalInterceptor(delegate: HeapAnalysisInterceptor, evaluateCondition: (HeapAnalysisJob) -> Boolean) : HeapAnalysisInterceptorAn interceptor that runs only when evaluateCondition returns true. DatetimeFormattedHeapDumpFileProvider [jvm]class DatetimeFormattedHeapDumpFileProvider(heapDumpDirectoryProvider: HeapDumpDirectoryProvider, dateProvider: () -> Date = { Date() }, prefixProvider: () -> String = { \"\" }, suffixProvider: () -> String = { \"\" }) : HeapDumpFileProvider DefaultDelayDeletableObjectReporter [jvm]class DefaultDelayDeletableObjectReporter(defaultDelay: Duration, delayedReporter: DelayedDeletableObjectReporter) : DeletableObjectReporter DelayedDeletableObjectReporter [jvm]class DelayedDeletableObjectReporter(deletableObjectReporter: TriggeredDeletableObjectReporter, delayedExecutor: DelayedExecutor) DelayedExecutor [jvm]fun interface DelayedExecutor DeletableObjectReporter [jvm]fun interface DeletableObjectReporter DetectLeaksAfterTestSuccess [androidJvm]class DetectLeaksAfterTestSuccess(tag: String = DetectLeaksAfterTestSuccess::class.java.simpleName) : TestRuleTestRule that invokes LeakAssertions.assertNoLeaks after the test successfully evaluates. Pay attention to where you set up this rule in the rule chain as you might detect different leaks (e.g. around vs wrapped by the activity rule). It\u2019s also possible to use this rule several times in a rule chain. DetectLeaksAssert [androidJvm]fun interface DetectLeaksAssertThe interface for the implementation that LeakAssertions.assertNoLeaks delegates to. You can call DetectLeaksAssert.update to provide your own implementation. DetectLeaksInterceptor [androidJvm]fun interface DetectLeaksInterceptorDecides whether to dump & analyze the heap to look for leaks in instrumentation tests. The implementation might block for a while to allow temporary leaks to be flushed out, as those aren\u2019t that interesting to report and heap analysis increases test duration significantly. DumpingRepeatingScenarioObjectGrowthDetector [jvm]class DumpingRepeatingScenarioObjectGrowthDetector(objectGrowthDetector: ObjectGrowthDetector, heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpStorageStrategy: HeapDumpStorageStrategy) : RepeatingScenarioObjectGrowthDetectorA RepeatingScenarioObjectGrowthDetector suitable for junit based automated tests that can dump the heap. EventListener [androidJvm]fun interface EventListener FinalizingInProcessGcTrigger [jvm]object FinalizingInProcessGcTrigger : GcTriggerA GcTrigger that attempts to perform a GC by invoking the corresponding JDK API then waiting and then running finalization. Based on FinalizationTest in AOSP. FragmentAndViewModelWatcher [androidJvm]class FragmentAndViewModelWatcher(application: Application, deletableObjectReporter: DeletableObjectReporter) : InstallableWatcherExpects: GcTrigger [jvm]fun interface GcTrigger GoodAndroidVersionInterceptor [androidJvm]class GoodAndroidVersionInterceptor : HeapAnalysisInterceptor HeapAnalysisClient [androidJvm]class HeapAnalysisClient(heapDumpDirectoryProvider: () -> File, config: HeapAnalysisConfig, interceptors: List<HeapAnalysisInterceptor>) HeapAnalysisConfig [androidJvm]data class HeapAnalysisConfig(val referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, val objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, val metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, val computeRetainedHeapSize: Boolean = true, val leakingObjectFinder: LeakingObjectFinder = FilteringLeakingObjectFinder( AndroidObjectInspectors.appLeakingObjectFilters ), val stripHeapDump: Boolean = false, val proguardMappingProvider: () -> ProguardMapping? = { null }) HeapAnalysisDecision [androidJvm]sealed class HeapAnalysisDecision HeapAnalysisInterceptor [androidJvm]fun interface HeapAnalysisInterceptor HeapAnalysisJob [androidJvm]interface HeapAnalysisJobA HeapAnalysisJob represents a single prepared request to analyze the heap. It cannot be executed twice. HeapAnalysisReporter [androidJvm]fun interface HeapAnalysisReporterReports the results of a heap analysis created by AndroidDetectLeaksAssert. HeapDumpDirectoryProvider [jvm]fun interface HeapDumpDirectoryProvider HeapDumper [jvm]fun interface HeapDumper HeapDumpFileProvider [jvm]fun interface HeapDumpFileProvider HeapDumpStorageStrategy [jvm]interface HeapDumpStorageStrategy HotSpotHeapDumper [jvm]object HotSpotHeapDumper : HeapDumper InstallableWatcher [androidJvm]interface InstallableWatcher JobContext [androidJvm]class JobContext(val starter: Class<*>? = null)In memory store that can be used to store objects in a given HeapAnalysisJob instance. This is a simple MutableMap of String to Any, but with unsafe generics access. KeyedWeakReference [jvm]class KeyedWeakReference(referent: Any, val key: String, val description: String, val watchUptimeMillis: Long, referenceQueue: ReferenceQueue<Any>) : WeakReference<Any> A weak reference used by ReferenceQueueRetainedObjectTracker to determine which objects become weakly reachable and which don\u2019t. ReferenceQueueRetainedObjectTracker uses key to keep track of KeyedWeakReference instances that haven\u2019t made it into the associated ReferenceQueue yet. LazyForwardingEventListener [androidJvm]class LazyForwardingEventListener(lazyEventListener: () -> EventListener) : EventListenerForwards events to the EventListener provided by lazyEventListener which is evaluated lazily, when the first comes in. LeakAssertions [androidJvm]object LeakAssertions LeakCanary [androidJvm]object LeakCanaryThe entry point API for LeakCanary. LeakCanary builds on top of AppWatcher. AppWatcher notifies LeakCanary of retained instances, which in turns dumps the heap, analyses it and publishes the results. LeakCanaryProcess [androidJvm]object LeakCanaryProcessUsed to determine whether the current process is the LeakCanary analyzer process. By depending on the <code>leakcanary-android-process</code> artifact instead of the <code>leakcanary-android</code>, LeakCanary will automatically run its analysis in a separate process. LogcatEventListener [androidJvm]object LogcatEventListener : EventListener LogcatSharkLog [androidJvm]class LogcatSharkLog : SharkLog.Logger MinimumDiskSpaceInterceptor [androidJvm]class MinimumDiskSpaceInterceptor(application: Application, minimumDiskSpaceBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor MinimumElapsedSinceStartInterceptor [androidJvm]class MinimumElapsedSinceStartInterceptor(minimumElapsedSinceStartMillis: Long = TimeUnit.SECONDS.toMillis(30), processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor MinimumMemoryInterceptor [androidJvm]class MinimumMemoryInterceptor(application: Application, minimumRequiredAvailableMemoryBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor NoLeakAssertionFailedError [androidJvm]class NoLeakAssertionFailedError(val heapAnalysis: HeapAnalysisSuccess) : AssertionErrorThrown when using the NoLeakAssertionFailedError.throwOnApplicationLeaks HeapAnalysisReporter NotificationEventListener [androidJvm]object NotificationEventListener : EventListener ObjectGrowthWarmupHeapDumper [jvm]class ObjectGrowthWarmupHeapDumper(objectGrowthDetector: ObjectGrowthDetector, delegate: HeapDumper, androidHeap: Boolean) : HeapDumper OncePerPeriodInterceptor [androidJvm]class OncePerPeriodInterceptor(application: Application, periodMillis: Long = TimeUnit.DAYS.toMillis(1)) : HeapAnalysisInterceptorProceeds once per period (of time) and then cancels all follow up jobs until period has passed. OnObjectRetainedListener [jvm]fun interface OnObjectRetainedListenerListener used by ReferenceQueueRetainedObjectTracker to report retained objects. PlumberStartupInitializer [androidJvm]class PlumberStartupInitializer : Initializer<PlumberStartupInitializer> ProcessInfo [androidJvm]interface ProcessInfo ReferenceQueueRetainedObjectTracker [jvm]class ReferenceQueueRetainedObjectTracker(clock: UptimeClock, onObjectRetainedListener: OnObjectRetainedListener) : RetainedObjectTracker, TriggeredDeletableObjectReporterReferenceQueueRetainedObjectTracker can be passed objects to expectDeletionOnTriggerFor. It will create KeyedWeakReference instances that reference tracked objects, and check if those references have been cleared as expected. If not, these objects are considered retained and ReferenceQueueRetainedObjectTracker will then notify registered OnObjectRetainedListeners. ReferenceQueueRetainedObjectTracker is thread safe. RemoteWorkManagerHeapAnalyzer [androidJvm]object RemoteWorkManagerHeapAnalyzer : EventListenerWhen receiving a HeapDump event, starts a WorkManager worker that performs heap analysis in a dedicated :leakcanary process RepositoryRootHeapDumpDirectoryProvider [jvm]class RepositoryRootHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider RetainedObjectTracker [jvm]interface RetainedObjectTrackerHelper util for tracking retained objects. RootViewWatcher [androidJvm]class RootViewWatcher(deletableObjectReporter: DeletableObjectReporter, rootViewFilter: RootViewWatcher.Filter = WindowTypeFilter(watchDismissedDialogs = false)) : InstallableWatcherExpects root views to become weakly reachable soon after they are removed from the window manager. SaveResourceIdsInterceptor [androidJvm]class SaveResourceIdsInterceptor(resources: Resources) : HeapAnalysisInterceptorInterceptor that saves the names of R.id.* entries and their associated int values to a static field that can then be read from the heap dump. ScreenOffTrigger [androidJvm]class ScreenOffTrigger(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } }) ServiceWatcher [androidJvm]class ServiceWatcher(deletableObjectReporter: DeletableObjectReporter) : InstallableWatcherExpects services to become weakly reachable soon after they receive the Service.onDestroy callback. SkipLeakDetection [androidJvm]@Target(allowedTargets = [AnnotationTarget.CLASS, AnnotationTarget.FUNCTION])annotation class SkipLeakDetection(val message: String, val assertionTags: String)Annotation for skipping leak detection in a UI test that calls LeakAssertions.assertNoLeaks. This annotation is useful to skip a leak detection in a test until the leaks are fixed. TargetContextHeapDumpDirectoryProvider [androidJvm]class TargetContextHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider TestDescriptionHolder [jvm]object TestDescriptionHolder : TestRuleA TestRule that holds onto the test Description in a thread local while evaluating, making it possible to retrieve that test Description from the test thread via testDescription. TestHeapDumpFileProvider [jvm]class TestHeapDumpFileProvider(heapDumpDirectoryProvider: HeapDumpDirectoryProvider) : HeapDumpFileProvider TestName [jvm]interface TestName TestNameProvider [jvm]object TestNameProvider ToastEventListener [androidJvm]object ToastEventListener : EventListener TrackedObjectReachability [jvm]interface TrackedObjectReachability TriggeredDeletableObjectReporter [jvm]interface TriggeredDeletableObjectReporterTracks deletion of target objects, marking them retained on trigger. TvEventListener [androidJvm]object TvEventListener : EventListener UiAutomatorShellFileDeleter [androidJvm]object UiAutomatorShellFileDeleter UiAutomatorShellHeapDumper [androidJvm]class UiAutomatorShellHeapDumper(withGc: Boolean, dumpedAppPackageName: String) : HeapDumper UptimeClock [jvm]fun interface UptimeClockAn interface to abstract the clock to get the system uptime. ViewLocationHolderLeakFix [androidJvm]object ViewLocationHolderLeakFix WorkManagerHeapAnalyzer [androidJvm]object WorkManagerHeapAnalyzer : EventListenerWhen receiving a HeapDump event, starts a WorkManager worker that performs heap analysis."},{"location":"api/leakcanary/#functions","title":"Functions","text":"Name Summary filteringInstances [jvm]inline fun <T> DeletableObjectReporter.filteringInstances(crossinline apply: (T) -> Boolean): DeletableObjectReporterCreates a wrapper around DeletableObjectReporter that will run any instance of T by apply to decide whether to forward to DeletableObjectReporter.expectDeletionFor calls. Objects that do not extend T will always be forwarded. forAndroidInProcess [androidJvm]fun HeapDumper.Companion.forAndroidInProcess(): AndroidDebugHeapDumper forJvmInProcess [jvm]fun HeapDumper.Companion.forJvmInProcess(): HotSpotHeapDumper forUiAutomatorAsShell [androidJvm]fun HeapDumper.Companion.forUiAutomatorAsShell(withGc: Boolean, dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName): UiAutomatorShellHeapDumper inProcess [jvm]fun GcTrigger.Companion.inProcess(): FinalizingInProcessGcTrigger repeatingAndroidInProcessScenario [androidJvm]fun HeapDiff.Companion.repeatingAndroidInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = TargetContextHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forAndroidInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = true), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for Android in process tests, such as Espresso tests. repeatingJvmInProcessScenario [jvm]fun HeapDiff.Companion.repeatingJvmInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forJvmHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = RepositoryRootHeapDumpDirectoryProvider( \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forJvmInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = false), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for JVM in process tests. repeatingUiAutomatorScenario [androidJvm]fun HeapDiff.Companion.repeatingUiAutomatorScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName, heapDumpDirectoryProvider: HeapDumpDirectoryProvider = AndroidDeviceTempHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth_$dumpedAppPackageName\" ), heapDumper: HeapDumper = HeapDumper.forUiAutomatorAsShell( withGc = true, dumpedAppPackageName = dumpedAppPackageName ), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose { heapDumpFile -> UiAutomatorShellFileDeleter.deleteFileUsingShell(heapDumpFile) }): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for Android UI Automator tests. withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/datetime-formatted/","title":"Datetime formatted","text":"<p>//leakcanary-repo/leakcanary/datetimeFormatted</p>"},{"location":"api/leakcanary/datetime-formatted/#datetimeformatted","title":"datetimeFormatted","text":"<p>[jvm]\\ fun HeapDumpFileProvider.Companion.datetimeFormatted(directory: File, prefix: String = \"\", suffix: String = \"\", dateProvider: () -> Date = { Date() }): HeapDumpFileProvider</p>"},{"location":"api/leakcanary/dumping-and-deleting/","title":"Dumping and deleting","text":"<p>//leakcanary-repo/leakcanary/dumpingAndDeleting</p>"},{"location":"api/leakcanary/dumping-and-deleting/#dumpinganddeleting","title":"dumpingAndDeleting","text":"<p>[jvm]\\ fun HeapGraphProvider.Companion.dumpingAndDeleting(heapDumper: HeapDumper, heapDumpFileProvider: HeapDumpFileProvider = TempHeapDumpFileProvider, fileDeleter: FileDeleter = FileDeleter { it.delete() }): DumpingAndDeletingHeapGraphProvider</p>"},{"location":"api/leakcanary/filtering-instances/","title":"Filtering instances","text":"<p>//leakcanary-repo/leakcanary/filteringInstances</p>"},{"location":"api/leakcanary/filtering-instances/#filteringinstances","title":"filteringInstances","text":"<p>[jvm]\\ inline fun <T> DeletableObjectReporter.filteringInstances(crossinline apply: (T) -> Boolean): DeletableObjectReporter</p> <p>Creates a wrapper around DeletableObjectReporter that will run any instance of T by apply to decide whether to forward to DeletableObjectReporter.expectDeletionFor calls. Objects that do not extend T will always be forwarded.</p>"},{"location":"api/leakcanary/for-android-in-process/","title":"For android in process","text":"<p>//leakcanary-repo/leakcanary/forAndroidInProcess</p>"},{"location":"api/leakcanary/for-android-in-process/#forandroidinprocess","title":"forAndroidInProcess","text":"<p>[androidJvm]\\ fun HeapDumper.Companion.forAndroidInProcess(): AndroidDebugHeapDumper</p>"},{"location":"api/leakcanary/for-jvm-in-process/","title":"For jvm in process","text":"<p>//leakcanary-repo/leakcanary/forJvmInProcess</p>"},{"location":"api/leakcanary/for-jvm-in-process/#forjvminprocess","title":"forJvmInProcess","text":"<p>[jvm]\\ fun HeapDumper.Companion.forJvmInProcess(): HotSpotHeapDumper</p>"},{"location":"api/leakcanary/for-ui-automator-as-shell/","title":"For ui automator as shell","text":"<p>//leakcanary-repo/leakcanary/forUiAutomatorAsShell</p>"},{"location":"api/leakcanary/for-ui-automator-as-shell/#foruiautomatorasshell","title":"forUiAutomatorAsShell","text":"<p>[androidJvm]\\ fun HeapDumper.Companion.forUiAutomatorAsShell(withGc: Boolean, dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName): UiAutomatorShellHeapDumper</p>"},{"location":"api/leakcanary/in-process/","title":"In process","text":"<p>//leakcanary-repo/leakcanary/inProcess</p>"},{"location":"api/leakcanary/in-process/#inprocess","title":"inProcess","text":"<p>[jvm]\\ fun GcTrigger.Companion.inProcess(): FinalizingInProcessGcTrigger</p>"},{"location":"api/leakcanary/repeating-android-in-process-scenario/","title":"Repeating android in process scenario","text":"<p>//leakcanary-repo/leakcanary/repeatingAndroidInProcessScenario</p>"},{"location":"api/leakcanary/repeating-android-in-process-scenario/#repeatingandroidinprocessscenario","title":"repeatingAndroidInProcessScenario","text":"<p>[androidJvm]\\ fun HeapDiff.Companion.repeatingAndroidInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = TargetContextHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forAndroidInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = true), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetector</p> <p>Creates a RepeatingScenarioObjectGrowthDetector suitable for Android in process tests, such as Espresso tests.</p> <p>Dumps the heap by leveraging Android APIs, running an in process GC right before dumping.</p>"},{"location":"api/leakcanary/repeating-android-in-process-scenario/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/leakcanary/repeating-dumping-test-scenario/","title":"Repeating dumping test scenario","text":"<p>//leakcanary-repo/leakcanary/repeatingDumpingTestScenario</p>"},{"location":"api/leakcanary/repeating-dumping-test-scenario/#repeatingdumpingtestscenario","title":"repeatingDumpingTestScenario","text":"<p>[jvm]\\ fun HeapDiff.Companion.repeatingDumpingTestScenario(objectGrowthDetector: ObjectGrowthDetector, heapDumpDirectoryProvider: HeapDumpDirectoryProvider, heapDumper: HeapDumper, heapDumpStorageStrategy: HeapDumpStorageStrategy): RepeatingScenarioObjectGrowthDetector</p> <p>Creates a RepeatingScenarioObjectGrowthDetector suitable for junit based automated tests that can dump the heap.</p>"},{"location":"api/leakcanary/repeating-dumping-test-scenario/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/leakcanary/repeating-jvm-in-process-scenario/","title":"Repeating jvm in process scenario","text":"<p>//leakcanary-repo/leakcanary/repeatingJvmInProcessScenario</p>"},{"location":"api/leakcanary/repeating-jvm-in-process-scenario/#repeatingjvminprocessscenario","title":"repeatingJvmInProcessScenario","text":"<p>[jvm]\\ fun HeapDiff.Companion.repeatingJvmInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forJvmHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = RepositoryRootHeapDumpDirectoryProvider( \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forJvmInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = false), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetector</p> <p>Creates a RepeatingScenarioObjectGrowthDetector suitable for JVM in process tests.</p> <p>Dumps the heap by leveraging Hotspot APIs, running an in process GC right before dumping. Deletes the heap dump file as soon as we\u2019re done traversing it.</p>"},{"location":"api/leakcanary/repeating-jvm-in-process-scenario/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/leakcanary/repeating-ui-automator-scenario/","title":"Repeating ui automator scenario","text":"<p>//leakcanary-repo/leakcanary/repeatingUiAutomatorScenario</p>"},{"location":"api/leakcanary/repeating-ui-automator-scenario/#repeatinguiautomatorscenario","title":"repeatingUiAutomatorScenario","text":"<p>[androidJvm]\\ fun HeapDiff.Companion.repeatingUiAutomatorScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName, heapDumpDirectoryProvider: HeapDumpDirectoryProvider = AndroidDeviceTempHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth_$dumpedAppPackageName\" ), heapDumper: HeapDumper = HeapDumper.forUiAutomatorAsShell( withGc = true, dumpedAppPackageName = dumpedAppPackageName ), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose { heapDumpFile -> UiAutomatorShellFileDeleter.deleteFileUsingShell(heapDumpFile) }): RepeatingScenarioObjectGrowthDetector</p> <p>Creates a RepeatingScenarioObjectGrowthDetector suitable for Android UI Automator tests.</p> <p>Dumps the heap by leveraging adb, running a GC on API 27+ right before dumping.</p>"},{"location":"api/leakcanary/repeating-ui-automator-scenario/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/leakcanary/temp-file/","title":"Temp file","text":"<p>//leakcanary-repo/leakcanary/tempFile</p>"},{"location":"api/leakcanary/temp-file/#tempfile","title":"tempFile","text":"<p>[jvm]\\ fun HeapDumpFileProvider.Companion.tempFile(): HeapDumpFileProvider</p>"},{"location":"api/leakcanary/with-detector-warmup/","title":"With detector warmup","text":"<p>//leakcanary-repo/leakcanary/withDetectorWarmup</p>"},{"location":"api/leakcanary/with-detector-warmup/#withdetectorwarmup","title":"withDetectorWarmup","text":"<p>[jvm]\\ fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper</p>"},{"location":"api/leakcanary/with-gc/","title":"With gc","text":"<p>//leakcanary-repo/leakcanary/withGc</p>"},{"location":"api/leakcanary/with-gc/#withgc","title":"withGc","text":"<p>[jvm]\\ fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper</p>"},{"location":"api/leakcanary/-activity-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ActivityWatcher</p>"},{"location":"api/leakcanary/-activity-watcher/#activitywatcher","title":"ActivityWatcher","text":"<p>[androidJvm]\\ class ActivityWatcher(application: Application, deletableObjectReporter: DeletableObjectReporter) : InstallableWatcher</p> <p>Expects activities to become weakly reachable soon after they receive the Activity.onDestroy callback.</p>"},{"location":"api/leakcanary/-activity-watcher/#constructors","title":"Constructors","text":"ActivityWatcher [androidJvm]constructor(application: Application, reachabilityWatcher: ReachabilityWatcher)constructor(application: Application, deletableObjectReporter: DeletableObjectReporter)"},{"location":"api/leakcanary/-activity-watcher/#functions","title":"Functions","text":"Name Summary install [androidJvm]open override fun install() uninstall [androidJvm]open override fun uninstall()"},{"location":"api/leakcanary/-activity-watcher/-activity-watcher/","title":"activity watcher","text":"<p>//leakcanary-repo/leakcanary/ActivityWatcher/ActivityWatcher</p>"},{"location":"api/leakcanary/-activity-watcher/-activity-watcher/#activitywatcher","title":"ActivityWatcher","text":"<p>[androidJvm]\\ constructor(application: Application, reachabilityWatcher: ReachabilityWatcher)</p> <p>constructor(application: Application, deletableObjectReporter: DeletableObjectReporter)</p>"},{"location":"api/leakcanary/-activity-watcher/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/ActivityWatcher/install</p>"},{"location":"api/leakcanary/-activity-watcher/install/#install","title":"install","text":"<p>[androidJvm]\\ open override fun install()</p>"},{"location":"api/leakcanary/-activity-watcher/uninstall/","title":"Uninstall","text":"<p>//leakcanary-repo/leakcanary/ActivityWatcher/uninstall</p>"},{"location":"api/leakcanary/-activity-watcher/uninstall/#uninstall","title":"uninstall","text":"<p>[androidJvm]\\ open override fun uninstall()</p>"},{"location":"api/leakcanary/-android-debug-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidDebugHeapDumper</p>"},{"location":"api/leakcanary/-android-debug-heap-dumper/#androiddebugheapdumper","title":"AndroidDebugHeapDumper","text":"<p>[androidJvm]\\ object AndroidDebugHeapDumper : HeapDumper</p> <p>Dumps the Android heap using Debug.dumpHprofData.</p> <p>Note: despite being part of the Debug class, Debug.dumpHprofData can be called from non debuggable non profileable builds.</p>"},{"location":"api/leakcanary/-android-debug-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [androidJvm]open override fun dumpHeap(heapDumpFile: File) withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/-android-debug-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/AndroidDebugHeapDumper/dumpHeap</p>"},{"location":"api/leakcanary/-android-debug-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[androidJvm]\\ open override fun dumpHeap(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/#androiddetectleaksassert","title":"AndroidDetectLeaksAssert","text":"<p>[androidJvm]\\ class AndroidDetectLeaksAssert(detectLeaksInterceptor: DetectLeaksInterceptor = AndroidDetectLeaksInterceptor(), heapAnalysisReporter: HeapAnalysisReporter = NoLeakAssertionFailedError.throwOnApplicationLeaks()) : DetectLeaksAssert</p> <p>Default DetectLeaksAssert implementation. Uses public helpers so you should be able to create our own implementation if needed.</p> <p>Leak detection can be skipped by annotating tests with SkipLeakDetection which requires the TestDescriptionHolder test rule be applied and evaluating when assertNoLeaks is called.</p> <p>For improved leak detection, you should consider updating LeakCanary.Config.leakingObjectFinder to <code>FilteringLeakingObjectFinder(AndroidObjectInspectors.appLeakingObjectFilters)</code> when running in instrumentation tests. This changes leak detection from being incremental (based on AppWatcher to also scanning for all objects of known types in the heap).</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/#constructors","title":"Constructors","text":"AndroidDetectLeaksAssert [androidJvm]constructor(detectLeaksInterceptor: DetectLeaksInterceptor = AndroidDetectLeaksInterceptor(), heapAnalysisReporter: HeapAnalysisReporter = NoLeakAssertionFailedError.throwOnApplicationLeaks())"},{"location":"api/leakcanary/-android-detect-leaks-assert/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-android-detect-leaks-assert/#functions","title":"Functions","text":"Name Summary assertNoLeaks [androidJvm]open override fun assertNoLeaks(tag: String)"},{"location":"api/leakcanary/-android-detect-leaks-assert/-android-detect-leaks-assert/","title":"android detect leaks assert","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/AndroidDetectLeaksAssert</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-android-detect-leaks-assert/#androiddetectleaksassert","title":"AndroidDetectLeaksAssert","text":"<p>[androidJvm]\\ constructor(detectLeaksInterceptor: DetectLeaksInterceptor = AndroidDetectLeaksInterceptor(), heapAnalysisReporter: HeapAnalysisReporter = NoLeakAssertionFailedError.throwOnApplicationLeaks())</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/assert-no-leaks/","title":"Assert no leaks","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/assertNoLeaks</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/assert-no-leaks/#assertnoleaks","title":"assertNoLeaks","text":"<p>[androidJvm]\\ open override fun assertNoLeaks(tag: String)</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/Companion</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/#properties","title":"Properties","text":"Name Summary assertionTag [androidJvm]val HeapAnalysisSuccess.assertionTag: String? totalDurationMillis [androidJvm]val HeapAnalysisSuccess.totalDurationMillis: Int? waitForRetainedDurationMillis [androidJvm]val HeapAnalysisSuccess.waitForRetainedDurationMillis: Int?"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/assertion-tag/","title":"Assertion tag","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/Companion/assertionTag</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/assertion-tag/#assertiontag","title":"assertionTag","text":"<p>[androidJvm]\\ val HeapAnalysisSuccess.assertionTag: String?</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/total-duration-millis/","title":"Total duration millis","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/Companion/totalDurationMillis</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/total-duration-millis/#totaldurationmillis","title":"totalDurationMillis","text":"<p>[androidJvm]\\ val HeapAnalysisSuccess.totalDurationMillis: Int?</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/wait-for-retained-duration-millis/","title":"Wait for retained duration millis","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksAssert/Companion/waitForRetainedDurationMillis</p>"},{"location":"api/leakcanary/-android-detect-leaks-assert/-companion/wait-for-retained-duration-millis/#waitforretaineddurationmillis","title":"waitForRetainedDurationMillis","text":"<p>[androidJvm]\\ val HeapAnalysisSuccess.waitForRetainedDurationMillis: Int?</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksInterceptor</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/#androiddetectleaksinterceptor","title":"AndroidDetectLeaksInterceptor","text":"<p>[androidJvm]\\ class AndroidDetectLeaksInterceptor(instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(), retainedObjectTracker: RetainedObjectTracker = AppWatcher.objectWatcher, retainedDelayMillis: Long = AppWatcher.retainedDelayMillis) : DetectLeaksInterceptor</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/#constructors","title":"Constructors","text":"AndroidDetectLeaksInterceptor [androidJvm]constructor(instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(), retainedObjectTracker: RetainedObjectTracker = AppWatcher.objectWatcher, retainedDelayMillis: Long = AppWatcher.retainedDelayMillis)"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/#functions","title":"Functions","text":"Name Summary waitUntilReadyForHeapAnalysis [androidJvm]open override fun waitUntilReadyForHeapAnalysis(): HeapAnalysisDecision"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/-android-detect-leaks-interceptor/","title":"android detect leaks interceptor","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksInterceptor/AndroidDetectLeaksInterceptor</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/-android-detect-leaks-interceptor/#androiddetectleaksinterceptor","title":"AndroidDetectLeaksInterceptor","text":"<p>[androidJvm]\\ constructor(instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(), retainedObjectTracker: RetainedObjectTracker = AppWatcher.objectWatcher, retainedDelayMillis: Long = AppWatcher.retainedDelayMillis)</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/wait-until-ready-for-heap-analysis/","title":"Wait until ready for heap analysis","text":"<p>//leakcanary-repo/leakcanary/AndroidDetectLeaksInterceptor/waitUntilReadyForHeapAnalysis</p>"},{"location":"api/leakcanary/-android-detect-leaks-interceptor/wait-until-ready-for-heap-analysis/#waituntilreadyforheapanalysis","title":"waitUntilReadyForHeapAnalysis","text":"<p>[androidJvm]\\ open override fun waitUntilReadyForHeapAnalysis(): HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidDeviceTempHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/#androiddevicetempheapdumpdirectoryprovider","title":"AndroidDeviceTempHeapDumpDirectoryProvider","text":"<p>[androidJvm]\\ class AndroidDeviceTempHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/#constructors","title":"Constructors","text":"AndroidDeviceTempHeapDumpDirectoryProvider [androidJvm]constructor(heapDumpDirectoryName: String)"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/#functions","title":"Functions","text":"Name Summary heapDumpDirectory [androidJvm]open override fun heapDumpDirectory(): File"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/-android-device-temp-heap-dump-directory-provider/","title":"android device temp heap dump directory provider","text":"<p>//leakcanary-repo/leakcanary/AndroidDeviceTempHeapDumpDirectoryProvider/AndroidDeviceTempHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/-android-device-temp-heap-dump-directory-provider/#androiddevicetempheapdumpdirectoryprovider","title":"AndroidDeviceTempHeapDumpDirectoryProvider","text":"<p>[androidJvm]\\ constructor(heapDumpDirectoryName: String)</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/heap-dump-directory/","title":"Heap dump directory","text":"<p>//leakcanary-repo/leakcanary/AndroidDeviceTempHeapDumpDirectoryProvider/heapDumpDirectory</p>"},{"location":"api/leakcanary/-android-device-temp-heap-dump-directory-provider/heap-dump-directory/#heapdumpdirectory","title":"heapDumpDirectory","text":"<p>[androidJvm]\\ open override fun heapDumpDirectory(): File</p>"},{"location":"api/leakcanary/-android-leak-fixes/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes</p>"},{"location":"api/leakcanary/-android-leak-fixes/#androidleakfixes","title":"AndroidLeakFixes","text":"<p>[androidJvm]\\ enum AndroidLeakFixes : Enum<AndroidLeakFixes> </p> <p>A collection of hacks to fix leaks in the Android Framework and other Google Android libraries.</p>"},{"location":"api/leakcanary/-android-leak-fixes/#entries","title":"Entries","text":"MEDIA_SESSION_LEGACY_HELPER [androidJvm]MEDIA_SESSION_LEGACY_HELPERMediaSessionLegacyHelper is a static singleton and did not use the application context. Introduced in android-5.0.1_r1, fixed in Android 5.1.0_r1. https://github.com/android/platform_frameworks_base/commit/9b5257c9c99c4cb541d8e8e78fb04f008b1a9091 TEXT_LINE_POOL [androidJvm]TEXT_LINE_POOLThis flushes the TextLine pool when an activity is destroyed, to prevent memory leaks. USER_MANAGER [androidJvm]USER_MANAGERObtaining the UserManager service ends up calling the hidden UserManager.get() method which stores the context in a singleton UserManager instance and then stores that instance in a static field. FLUSH_HANDLER_THREADS [androidJvm]FLUSH_HANDLER_THREADSHandlerThread instances keep local reference to their last handled message after recycling it. That message is obtained by a dialog which sets on an OnClickListener on it and then never recycles it, expecting it to be garbage collected but it ends up being held by the HandlerThread. ACCESSIBILITY_NODE_INFO [androidJvm]ACCESSIBILITY_NODE_INFOUntil API 28, AccessibilityNodeInfo has a mOriginalText field that was not properly cleared when instance were put back in the pool. Leak introduced here: https://android.googlesource.com/platform/frameworks/base/+/193520e3dff5248ddcf8435203bf99d2ba667219%5E%21/core/java/android/view/accessibility/AccessibilityNodeInfo.java CONNECTIVITY_MANAGER [androidJvm]CONNECTIVITY_MANAGERConnectivityManager has a sInstance field that is set when the first ConnectivityManager instance is created. ConnectivityManager has a mContext field. When calling activity.getSystemService(Context.CONNECTIVITY_SERVICE) , the first ConnectivityManager instance is created with the activity context and stored in sInstance. That activity context then leaks forever. SAMSUNG_CLIPBOARD_MANAGER [androidJvm]SAMSUNG_CLIPBOARD_MANAGERClipboardUIManager is a static singleton that leaks an activity context. This fix makes sure the manager is called with an application context. BUBBLE_POPUP [androidJvm]BUBBLE_POPUPA static helper for EditText bubble popups leaks a reference to the latest focused view. LAST_HOVERED_VIEW [androidJvm]LAST_HOVERED_VIEWmLastHoveredView is a static field in TextView that leaks the last hovered view. ACTIVITY_MANAGER [androidJvm]ACTIVITY_MANAGERSamsung added a static mContext field to ActivityManager, holding a reference to the activity. VIEW_LOCATION_HOLDER [androidJvm]VIEW_LOCATION_HOLDERIn Android P, ViewLocationHolder has an mRoot field that is not cleared in its clear() method. Introduced in https://github.com/aosp-mirror/platform_frameworks_base/commit/86b326012813f09d8f1de7d6d26c986a909d IMM_FOCUSED_VIEW [androidJvm]IMM_FOCUSED_VIEWFix for https://code.google.com/p/android/issues/detail?id=171190 . IMM_CUR_ROOT_VIEW [androidJvm]IMM_CUR_ROOT_VIEWWhen an activity is destroyed, the corresponding ViewRootImpl instance is released and ready to be garbage collected. Some time after that, ViewRootImpl#W receives a windowfocusChanged() callback, which it normally delegates to ViewRootImpl which in turn calls InputMethodManager#onPreWindowFocus which clears InputMethodManager#mCurRootView. SPELL_CHECKER [androidJvm]SPELL_CHECKEREvery editable TextView has an Editor instance which has a SpellChecker instance. SpellChecker is in charge of displaying the little squiggle spans that show typos. SpellChecker starts a SpellCheckerSession as needed and then closes it when the TextView is detached from the window. A SpellCheckerSession is in charge of communicating with the spell checker service (which lives in another process) through TextServicesManager. PERMISSION_CONTROLLER_MANAGER [androidJvm]PERMISSION_CONTROLLER_MANAGERPermissionControllerManager stores the first context it\u2019s initialized with forever. Sometimes it\u2019s an Activity context which then leaks after Activity is destroyed."},{"location":"api/leakcanary/-android-leak-fixes/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-android-leak-fixes/#functions","title":"Functions","text":"Name Summary valueOf [androidJvm]fun valueOf(value: String): AndroidLeakFixesReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [androidJvm]fun values(): Array<AndroidLeakFixes>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/leakcanary/-android-leak-fixes/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/value-of/","title":"Value of","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/valueOf</p>"},{"location":"api/leakcanary/-android-leak-fixes/value-of/#valueof","title":"valueOf","text":"<p>[androidJvm]\\ fun valueOf(value: String): AndroidLeakFixes</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/leakcanary/-android-leak-fixes/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/leakcanary/-android-leak-fixes/values/","title":"Values","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/values</p>"},{"location":"api/leakcanary/-android-leak-fixes/values/#values","title":"values","text":"<p>[androidJvm]\\ fun values(): Array<AndroidLeakFixes></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/ACCESSIBILITY_NODE_INFO</p>"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o/#accessibility_node_info","title":"ACCESSIBILITY_NODE_INFO","text":"<p>[androidJvm]\\ ACCESSIBILITY_NODE_INFO</p> <p>Until API 28, AccessibilityNodeInfo has a mOriginalText field that was not properly cleared when instance were put back in the pool. Leak introduced here: https://android.googlesource.com/platform/frameworks/base/+/193520e3dff5248ddcf8435203bf99d2ba667219%5E%21/core/java/android/view/accessibility/AccessibilityNodeInfo.java</p> <p>Fixed here: https://android.googlesource.com/platform/frameworks/base/+/6f8ec1fd8c159b09d617ed6d9132658051443c0c</p>"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/ACTIVITY_MANAGER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/#activity_manager","title":"ACTIVITY_MANAGER","text":"<p>[androidJvm]\\ ACTIVITY_MANAGER</p> <p>Samsung added a static mContext field to ActivityManager, holding a reference to the activity.</p> <p>This fix clears the field when an activity is destroyed if it refers to this specific activity.</p> <p>Observed here: https://github.com/square/leakcanary/issues/177</p>"},{"location":"api/leakcanary/-android-leak-fixes/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-b-u-b-b-l-e_-p-o-p-u-p/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/BUBBLE_POPUP</p>"},{"location":"api/leakcanary/-android-leak-fixes/-b-u-b-b-l-e_-p-o-p-u-p/#bubble_popup","title":"BUBBLE_POPUP","text":"<p>[androidJvm]\\ BUBBLE_POPUP</p> <p>A static helper for EditText bubble popups leaks a reference to the latest focused view.</p> <p>This fix clears it when the activity is destroyed.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-b-u-b-b-l-e_-p-o-p-u-p/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/CONNECTIVITY_MANAGER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/#connectivity_manager","title":"CONNECTIVITY_MANAGER","text":"<p>[androidJvm]\\ CONNECTIVITY_MANAGER</p> <p>ConnectivityManager has a sInstance field that is set when the first ConnectivityManager instance is created. ConnectivityManager has a mContext field. When calling activity.getSystemService(Context.CONNECTIVITY_SERVICE) , the first ConnectivityManager instance is created with the activity context and stored in sInstance. That activity context then leaks forever.</p> <p>This fix makes sure the connectivity manager is created with the application context.</p> <p>Tracked here: https://code.google.com/p/android/issues/detail?id=198852 Introduced here: https://github.com/android/platform_frameworks_base/commit/e0bef71662d81caaaa0d7214fb0bef5d39996a69</p>"},{"location":"api/leakcanary/-android-leak-fixes/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/Companion</p>"},{"location":"api/leakcanary/-android-leak-fixes/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-android-leak-fixes/-companion/#functions","title":"Functions","text":"Name Summary applyFixes [androidJvm]fun applyFixes(application: Application, fixes: Set<AndroidLeakFixes> = EnumSet.allOf(AndroidLeakFixes::class.java))"},{"location":"api/leakcanary/-android-leak-fixes/-companion/apply-fixes/","title":"Apply fixes","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/Companion/applyFixes</p>"},{"location":"api/leakcanary/-android-leak-fixes/-companion/apply-fixes/#applyfixes","title":"applyFixes","text":"<p>[androidJvm]\\ fun applyFixes(application: Application, fixes: Set<AndroidLeakFixes> = EnumSet.allOf(AndroidLeakFixes::class.java))</p>"},{"location":"api/leakcanary/-android-leak-fixes/-f-l-u-s-h_-h-a-n-d-l-e-r_-t-h-r-e-a-d-s/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/FLUSH_HANDLER_THREADS</p>"},{"location":"api/leakcanary/-android-leak-fixes/-f-l-u-s-h_-h-a-n-d-l-e-r_-t-h-r-e-a-d-s/#flush_handler_threads","title":"FLUSH_HANDLER_THREADS","text":"<p>[androidJvm]\\ FLUSH_HANDLER_THREADS</p> <p>HandlerThread instances keep local reference to their last handled message after recycling it. That message is obtained by a dialog which sets on an OnClickListener on it and then never recycles it, expecting it to be garbage collected but it ends up being held by the HandlerThread.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-f-l-u-s-h_-h-a-n-d-l-e-r_-t-h-r-e-a-d-s/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-c-u-r_-r-o-o-t_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/IMM_CUR_ROOT_VIEW</p>"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-c-u-r_-r-o-o-t_-v-i-e-w/#imm_cur_root_view","title":"IMM_CUR_ROOT_VIEW","text":"<p>[androidJvm]\\ IMM_CUR_ROOT_VIEW</p> <p>When an activity is destroyed, the corresponding ViewRootImpl instance is released and ready to be garbage collected. Some time after that, ViewRootImpl#W receives a windowfocusChanged() callback, which it normally delegates to ViewRootImpl which in turn calls InputMethodManager#onPreWindowFocus which clears InputMethodManager#mCurRootView.</p> <p>Unfortunately, since the ViewRootImpl instance is garbage collectable it may be garbage collected before that happens. ViewRootImpl#W has a weak reference on ViewRootImpl, so that weak reference will then return null and the windowfocusChanged() callback will be ignored, leading to InputMethodManager#mCurRootView not being cleared.</p> <p>Filed here: https://issuetracker.google.com/u/0/issues/116078227 Fixed here: https://android.googlesource.com/platform/frameworks/base/+/dff365ef4dc61239fac70953b631e92972a9f41f%5E%21/#F0 InputMethodManager.mCurRootView is part of the unrestricted grey list on Android 9: https://android.googlesource.com/platform/frameworks/base/+/pie-release/config/hiddenapi-light-greylist.txt#6057</p>"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-c-u-r_-r-o-o-t_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-f-o-c-u-s-e-d_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/IMM_FOCUSED_VIEW</p>"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-f-o-c-u-s-e-d_-v-i-e-w/#imm_focused_view","title":"IMM_FOCUSED_VIEW","text":"<p>[androidJvm]\\ IMM_FOCUSED_VIEW</p> <p>Fix for https://code.google.com/p/android/issues/detail?id=171190 .</p> <p>When a view that has focus gets detached, we wait for the main thread to be idle and then check if the InputMethodManager is leaking a view. If yes, we tell it that the decor view got focus, which is what happens if you press home and come back from recent apps. This replaces the reference to the detached view with a reference to the decor view.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-i-m-m_-f-o-c-u-s-e-d_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/LAST_HOVERED_VIEW</p>"},{"location":"api/leakcanary/-android-leak-fixes/-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/#last_hovered_view","title":"LAST_HOVERED_VIEW","text":"<p>[androidJvm]\\ LAST_HOVERED_VIEW</p> <p>mLastHoveredView is a static field in TextView that leaks the last hovered view.</p> <p>This fix clears it when the activity is destroyed.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/MEDIA_SESSION_LEGACY_HELPER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r/#media_session_legacy_helper","title":"MEDIA_SESSION_LEGACY_HELPER","text":"<p>[androidJvm]\\ MEDIA_SESSION_LEGACY_HELPER</p> <p>MediaSessionLegacyHelper is a static singleton and did not use the application context. Introduced in android-5.0.1_r1, fixed in Android 5.1.0_r1. https://github.com/android/platform_frameworks_base/commit/9b5257c9c99c4cb541d8e8e78fb04f008b1a9091</p> <p>We fix this leak by invoking MediaSessionLegacyHelper.getHelper() early in the app lifecycle.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/PERMISSION_CONTROLLER_MANAGER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/#permission_controller_manager","title":"PERMISSION_CONTROLLER_MANAGER","text":"<p>[androidJvm]\\ PERMISSION_CONTROLLER_MANAGER</p> <p>PermissionControllerManager stores the first context it\u2019s initialized with forever. Sometimes it\u2019s an Activity context which then leaks after Activity is destroyed.</p> <p>This fix makes sure the PermissionControllerManager is created with the application context.</p> <p>For Pixel devices the issue can be tracked here https://issuetracker.google.com/issues/318415056</p>"},{"location":"api/leakcanary/-android-leak-fixes/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-s-a-m-s-u-n-g_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/SAMSUNG_CLIPBOARD_MANAGER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-s-a-m-s-u-n-g_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r/#samsung_clipboard_manager","title":"SAMSUNG_CLIPBOARD_MANAGER","text":"<p>[androidJvm]\\ SAMSUNG_CLIPBOARD_MANAGER</p> <p>ClipboardUIManager is a static singleton that leaks an activity context. This fix makes sure the manager is called with an application context.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-s-a-m-s-u-n-g_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-s-p-e-l-l_-c-h-e-c-k-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/SPELL_CHECKER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-s-p-e-l-l_-c-h-e-c-k-e-r/#spell_checker","title":"SPELL_CHECKER","text":"<p>[androidJvm]\\ SPELL_CHECKER</p> <p>Every editable TextView has an Editor instance which has a SpellChecker instance. SpellChecker is in charge of displaying the little squiggle spans that show typos. SpellChecker starts a SpellCheckerSession as needed and then closes it when the TextView is detached from the window. A SpellCheckerSession is in charge of communicating with the spell checker service (which lives in another process) through TextServicesManager.</p> <p>The SpellChecker sends the TextView content to the spell checker service every 400ms, ie every time the service calls back with a result the SpellChecker schedules another check for 400ms later.</p> <p>When the TextView is detached from the window, the spell checker closes the session. In practice, SpellCheckerSessionListenerImpl.mHandler is set to null and when the service calls SpellCheckerSessionListenerImpl.onGetSuggestions or SpellCheckerSessionListenerImpl.onGetSentenceSuggestions back from another process, there\u2019s a null check for SpellCheckerSessionListenerImpl.mHandler and the callback is dropped.</p> <p>Unfortunately, on Android M there\u2019s a race condition in how that\u2019s done. When the service calls back into our app process, the IPC call is received on a binder thread. That\u2019s when the null check happens. If the session is not closed at this point (mHandler not null), the callback is then posted to the main thread. If on the main thread the session is closed after that post but prior to that post being handled, then the post will still be processed, after the session has been closed.</p> <p>When the post is processed, SpellCheckerSession calls back into SpellChecker which in turns schedules a new spell check to be ran in 400ms. The check is an anonymous inner class (SpellChecker$1) stored as SpellChecker.mSpellRunnable and implementing Runnable. It is scheduled by calling View.postDelayed. As we\u2019ve seen, at this point the session may be closed which means that the view has been detached. View.postDelayed behaves differently when a view is detached: instead of posting to the single Handler used by the view hierarchy, it enqueues the Runnable into ViewRootImpl.RunQueue, a static queue that holds on to \"actions\" to be executed. As soon as a view hierarchy is attached, the ViewRootImpl.RunQueue is processed and emptied.</p> <p>Unfortunately, that means that as long as no view hierarchy is attached, ie as long as there are no activities alive, the actions stay in ViewRootImpl.RunQueue. That means SpellChecker$1 ends up being kept in memory. It holds on to SpellChecker which in turns holds on to the detached TextView and corresponding destroyed activity & view hierarchy.</p> <p>We have a fix for this! When the spell check session is closed, we replace SpellCheckerSession.mSpellCheckerSessionListener (which normally is the SpellChecker) with a no-op implementation. So even if callbacks are enqueued to the main thread handler, these callbacks will call the no-op implementation and SpellChecker will not be scheduling a spell check.</p> <p>Sources to corroborate:</p> <p>https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release/core/java/android/view/textservice/SpellCheckerSession.java https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release/core/java/android/view/textservice/TextServicesManager.java https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release/core/java/android/widget/SpellChecker.java https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release/core/java/android/view/ViewRootImpl.java</p>"},{"location":"api/leakcanary/-android-leak-fixes/-s-p-e-l-l_-c-h-e-c-k-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-t-e-x-t_-l-i-n-e_-p-o-o-l/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/TEXT_LINE_POOL</p>"},{"location":"api/leakcanary/-android-leak-fixes/-t-e-x-t_-l-i-n-e_-p-o-o-l/#text_line_pool","title":"TEXT_LINE_POOL","text":"<p>[androidJvm]\\ TEXT_LINE_POOL</p> <p>This flushes the TextLine pool when an activity is destroyed, to prevent memory leaks.</p> <p>The first memory leak has been fixed in android-5.1.0_r1 https://github.com/android/platform_frameworks_base/commit/893d6fe48d37f71e683f722457bea646994a10bf</p> <p>Second memory leak: https://github.com/android/platform_frameworks_base/commit/b3a9bc038d3a218b1dbdf7b5668e3d6c12be5ee4</p>"},{"location":"api/leakcanary/-android-leak-fixes/-t-e-x-t_-l-i-n-e_-p-o-o-l/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-u-s-e-r_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/USER_MANAGER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-u-s-e-r_-m-a-n-a-g-e-r/#user_manager","title":"USER_MANAGER","text":"<p>[androidJvm]\\ USER_MANAGER</p> <p>Obtaining the UserManager service ends up calling the hidden UserManager.get() method which stores the context in a singleton UserManager instance and then stores that instance in a static field.</p> <p>We obtain the user manager from an activity context, so if it hasn\u2019t been created yet it will leak that activity forever.</p> <p>This fix makes sure the UserManager is created and holds on to the Application context.</p> <p>Issue: https://code.google.com/p/android/issues/detail?id=173789</p> <p>Fixed in https://android.googlesource.com/platform/frameworks/base/+/5200e1cb07190a1f6874d72a4561064cad3ee3e0%5E%21/#F0 (Android O)</p>"},{"location":"api/leakcanary/-android-leak-fixes/-u-s-e-r_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-android-leak-fixes/-v-i-e-w_-l-o-c-a-t-i-o-n_-h-o-l-d-e-r/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AndroidLeakFixes/VIEW_LOCATION_HOLDER</p>"},{"location":"api/leakcanary/-android-leak-fixes/-v-i-e-w_-l-o-c-a-t-i-o-n_-h-o-l-d-e-r/#view_location_holder","title":"VIEW_LOCATION_HOLDER","text":"<p>[androidJvm]\\ VIEW_LOCATION_HOLDER</p> <p>In Android P, ViewLocationHolder has an mRoot field that is not cleared in its clear() method. Introduced in https://github.com/aosp-mirror/platform_frameworks_base/commit/86b326012813f09d8f1de7d6d26c986a909d</p> <p>This leaks triggers very often when accessibility is on. To fix this leak we need to clear the ViewGroup.ViewLocationHolder.sPool pool. Unfortunately Android P prevents accessing that field through reflection. So instead, we call ViewGroup#addChildrenForAccessibility with a view group that has 32 children (32 being the pool size), which as result fills in the pool with 32 dumb views that reference a dummy context instead of an activity context.</p> <p>This fix empties the pool on every activity destroy and every AndroidX fragment view destroy. You can support other cases where views get detached by calling directly ViewLocationHolderLeakFix.clearStaticPool.</p>"},{"location":"api/leakcanary/-android-leak-fixes/-v-i-e-w_-l-o-c-a-t-i-o-n_-h-o-l-d-e-r/#properties","title":"Properties","text":"Name Summary name [androidJvm]val name: String ordinal [androidJvm]val ordinal: Int"},{"location":"api/leakcanary/-app-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AppWatcher</p>"},{"location":"api/leakcanary/-app-watcher/#appwatcher","title":"AppWatcher","text":"<p>[androidJvm]\\ object AppWatcher</p> <p>The entry point API for using ObjectWatcher in an Android app. AppWatcher.objectWatcher is in charge of detecting retained objects, and AppWatcher is auto configured on app start to pass it activity and fragment instances. Call ObjectWatcher.watch on objectWatcher to watch any other object that you expect to be unreachable.</p>"},{"location":"api/leakcanary/-app-watcher/#functions","title":"Functions","text":"Name Summary appDefaultWatchers [androidJvm]fun appDefaultWatchers(application: Application, deletableObjectReporter: DeletableObjectReporter = objectWatcher.asDeletableObjectReporter()): List<InstallableWatcher>Creates a new list of default app InstallableWatcher, created with the passed in deletableObjectReporter (which defaults to objectWatcher). Once installed, these watchers will pass in to deletableObjectReporter objects that they expect to become weakly reachable. manualInstall [androidJvm]@JvmOverloadsfun manualInstall(application: Application, retainedDelayMillis: Long = TimeUnit.SECONDS.toMillis(5), watchersToInstall: List<InstallableWatcher> = appDefaultWatchers(application))Enables usage of AppWatcher.objectWatcher which will expect passed in objects to become weakly reachable within retainedDelayMillis ms and if not will trigger LeakCanary (if LeakCanary is in the classpath)."},{"location":"api/leakcanary/-app-watcher/#properties","title":"Properties","text":"Name Summary isInstalled [androidJvm]val isInstalled: Boolean objectWatcher [androidJvm]val objectWatcher: ObjectWatcherThe ObjectWatcher used by AppWatcher to detect retained objects. Only set when isInstalled is true. retainedDelayMillis [androidJvm]@Volatilevar retainedDelayMillis: Long"},{"location":"api/leakcanary/-app-watcher/app-default-watchers/","title":"App default watchers","text":"<p>//leakcanary-repo/leakcanary/AppWatcher/appDefaultWatchers</p>"},{"location":"api/leakcanary/-app-watcher/app-default-watchers/#appdefaultwatchers","title":"appDefaultWatchers","text":"<p>[androidJvm]\\ fun appDefaultWatchers(application: Application, deletableObjectReporter: DeletableObjectReporter = objectWatcher.asDeletableObjectReporter()): List<InstallableWatcher></p> <p>Creates a new list of default app InstallableWatcher, created with the passed in deletableObjectReporter (which defaults to objectWatcher). Once installed, these watchers will pass in to deletableObjectReporter objects that they expect to become weakly reachable.</p> <p>The passed in deletableObjectReporter should probably delegate to objectWatcher but can be used to filter out specific instances.</p>"},{"location":"api/leakcanary/-app-watcher/is-installed/","title":"Is installed","text":"<p>//leakcanary-repo/leakcanary/AppWatcher/isInstalled</p>"},{"location":"api/leakcanary/-app-watcher/is-installed/#isinstalled","title":"isInstalled","text":"<p>[androidJvm]\\ val isInstalled: Boolean</p>"},{"location":"api/leakcanary/-app-watcher/is-installed/#see-also","title":"See also","text":"AppWatcher.manualInstall"},{"location":"api/leakcanary/-app-watcher/manual-install/","title":"Manual install","text":"<p>//leakcanary-repo/leakcanary/AppWatcher/manualInstall</p>"},{"location":"api/leakcanary/-app-watcher/manual-install/#manualinstall","title":"manualInstall","text":"<p>[androidJvm]\\</p> <p>@JvmOverloads</p> <p>fun manualInstall(application: Application, retainedDelayMillis: Long = TimeUnit.SECONDS.toMillis(5), watchersToInstall: List<InstallableWatcher> = appDefaultWatchers(application))</p> <p>Enables usage of AppWatcher.objectWatcher which will expect passed in objects to become weakly reachable within retainedDelayMillis ms and if not will trigger LeakCanary (if LeakCanary is in the classpath).</p> <p>In the main process, this method is automatically called with default parameter values on app startup. You can call this method directly to customize the installation, however you must first disable the automatic call by overriding the <code>leak_canary_watcher_auto_install</code> boolean resource:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<bool name=\"leak_canary_watcher_auto_install\">false</bool>\n</resources>\n</code></pre> <p>watchersToInstall can be customized to a subset of the default app watchers:</p> <pre><code>val watchersToInstall = AppWatcher.appDefaultWatchers(application)\n.filter { it !is RootViewWatcher }\nAppWatcher.manualInstall(\napplication = application,\nwatchersToInstall = watchersToInstall\n)\n</code></pre> <p>watchersToInstall can also be customized to ignore specific instances (e.g. here ignoring leaks of BadSdkLeakingFragment):</p> <pre><code>val watchersToInstall = AppWatcher.appDefaultWatchers(application, ReachabilityWatcher { watchedObject, description ->\nif (watchedObject !is BadSdkLeakingFragment) {\nAppWatcher.objectWatcher.expectWeaklyReachable(watchedObject, description)\n}\n})\nAppWatcher.manualInstall(\napplication = application,\nwatchersToInstall = watchersToInstall\n)\n</code></pre>"},{"location":"api/leakcanary/-app-watcher/object-watcher/","title":"Object watcher","text":"<p>//leakcanary-repo/leakcanary/AppWatcher/objectWatcher</p>"},{"location":"api/leakcanary/-app-watcher/object-watcher/#objectwatcher","title":"objectWatcher","text":"<p>[androidJvm]\\ val objectWatcher: ObjectWatcher</p> <p>The ObjectWatcher used by AppWatcher to detect retained objects. Only set when isInstalled is true.</p>"},{"location":"api/leakcanary/-app-watcher/retained-delay-millis/","title":"Retained delay millis","text":"<p>//leakcanary-repo/leakcanary/AppWatcher/retainedDelayMillis</p>"},{"location":"api/leakcanary/-app-watcher/retained-delay-millis/#retaineddelaymillis","title":"retainedDelayMillis","text":"<p>[androidJvm]\\</p> <p>@Volatile</p> <p>var retainedDelayMillis: Long</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/AppWatcherStartupInitializer</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/#appwatcherstartupinitializer","title":"AppWatcherStartupInitializer","text":"<p>[androidJvm]\\ class AppWatcherStartupInitializer : Initializer<AppWatcherStartupInitializer></p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/#constructors","title":"Constructors","text":"AppWatcherStartupInitializer [androidJvm]constructor()"},{"location":"api/leakcanary/-app-watcher-startup-initializer/#functions","title":"Functions","text":"Name Summary create [androidJvm]open override fun create(context: Context): AppWatcherStartupInitializer dependencies [androidJvm]open override fun dependencies(): List<Class<out Initializer<*>>>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/-app-watcher-startup-initializer/","title":"app watcher startup initializer","text":"<p>//leakcanary-repo/leakcanary/AppWatcherStartupInitializer/AppWatcherStartupInitializer</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/-app-watcher-startup-initializer/#appwatcherstartupinitializer","title":"AppWatcherStartupInitializer","text":"<p>[androidJvm]\\ constructor()</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/create/","title":"Create","text":"<p>//leakcanary-repo/leakcanary/AppWatcherStartupInitializer/create</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/create/#create","title":"create","text":"<p>[androidJvm]\\ open override fun create(context: Context): AppWatcherStartupInitializer</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/dependencies/","title":"Dependencies","text":"<p>//leakcanary-repo/leakcanary/AppWatcherStartupInitializer/dependencies</p>"},{"location":"api/leakcanary/-app-watcher-startup-initializer/dependencies/#dependencies","title":"dependencies","text":"<p>[androidJvm]\\ open override fun dependencies(): List<Class<out Initializer<*>>></p>"},{"location":"api/leakcanary/-background-thread-heap-analyzer/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/BackgroundThreadHeapAnalyzer</p>"},{"location":"api/leakcanary/-background-thread-heap-analyzer/#backgroundthreadheapanalyzer","title":"BackgroundThreadHeapAnalyzer","text":"<p>[androidJvm]\\ object BackgroundThreadHeapAnalyzer : EventListener</p> <p>Starts heap analysis on a background HandlerThread when receiving a HeapDump event.</p>"},{"location":"api/leakcanary/-background-thread-heap-analyzer/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-background-thread-heap-analyzer/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/BackgroundThreadHeapAnalyzer/onEvent</p>"},{"location":"api/leakcanary/-background-thread-heap-analyzer/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-background-trigger/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/BackgroundTrigger</p>"},{"location":"api/leakcanary/-background-trigger/#backgroundtrigger","title":"BackgroundTrigger","text":"<p>[androidJvm]\\ class BackgroundTrigger(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, processInfo: ProcessInfo = ProcessInfo.Real, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })</p>"},{"location":"api/leakcanary/-background-trigger/#constructors","title":"Constructors","text":"BackgroundTrigger [androidJvm]constructor(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, processInfo: ProcessInfo = ProcessInfo.Real, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })"},{"location":"api/leakcanary/-background-trigger/#functions","title":"Functions","text":"Name Summary start [androidJvm]fun start() stop [androidJvm]fun stop()"},{"location":"api/leakcanary/-background-trigger/-background-trigger/","title":"background trigger","text":"<p>//leakcanary-repo/leakcanary/BackgroundTrigger/BackgroundTrigger</p>"},{"location":"api/leakcanary/-background-trigger/-background-trigger/#backgroundtrigger","title":"BackgroundTrigger","text":"<p>[androidJvm]\\ constructor(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, processInfo: ProcessInfo = ProcessInfo.Real, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })</p>"},{"location":"api/leakcanary/-background-trigger/start/","title":"Start","text":"<p>//leakcanary-repo/leakcanary/BackgroundTrigger/start</p>"},{"location":"api/leakcanary/-background-trigger/start/#start","title":"start","text":"<p>[androidJvm]\\ fun start()</p>"},{"location":"api/leakcanary/-background-trigger/stop/","title":"Stop","text":"<p>//leakcanary-repo/leakcanary/BackgroundTrigger/stop</p>"},{"location":"api/leakcanary/-background-trigger/stop/#stop","title":"stop","text":"<p>[androidJvm]\\ fun stop()</p>"},{"location":"api/leakcanary/-conditional-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ConditionalInterceptor</p>"},{"location":"api/leakcanary/-conditional-interceptor/#conditionalinterceptor","title":"ConditionalInterceptor","text":"<p>[androidJvm]\\ class ConditionalInterceptor(delegate: HeapAnalysisInterceptor, evaluateCondition: (HeapAnalysisJob) -> Boolean) : HeapAnalysisInterceptor</p> <p>An interceptor that runs only when evaluateCondition returns true.</p>"},{"location":"api/leakcanary/-conditional-interceptor/#constructors","title":"Constructors","text":"ConditionalInterceptor [androidJvm]constructor(delegate: HeapAnalysisInterceptor, evaluateCondition: (HeapAnalysisJob) -> Boolean)"},{"location":"api/leakcanary/-conditional-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-conditional-interceptor/-conditional-interceptor/","title":"conditional interceptor","text":"<p>//leakcanary-repo/leakcanary/ConditionalInterceptor/ConditionalInterceptor</p>"},{"location":"api/leakcanary/-conditional-interceptor/-conditional-interceptor/#conditionalinterceptor","title":"ConditionalInterceptor","text":"<p>[androidJvm]\\ constructor(delegate: HeapAnalysisInterceptor, evaluateCondition: (HeapAnalysisJob) -> Boolean)</p>"},{"location":"api/leakcanary/-conditional-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/ConditionalInterceptor/intercept</p>"},{"location":"api/leakcanary/-conditional-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DateFormatHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/#dateformatheapdumpfileprovider","title":"DateFormatHeapDumpFileProvider","text":"<p>[jvm]\\ class DateFormatHeapDumpFileProvider(heapDumpDirectory: File, dateProvider: () -> Date = { Date() }, prefix: String = \"\", suffix: String = \"\") : HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/#constructors","title":"Constructors","text":"DateFormatHeapDumpFileProvider [jvm]constructor(heapDumpDirectory: File, dateProvider: () -> Date = { Date() }, prefix: String = \"\", suffix: String = \"\")"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/#functions","title":"Functions","text":"Name Summary newHeapDumpFile [jvm]open override fun newHeapDumpFile(): FileReturns a File that can be passed to a HeapDumper to dump the heap."},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-date-format-heap-dump-file-provider/","title":"date format heap dump file provider","text":"<p>//leakcanary-repo/leakcanary/DateFormatHeapDumpFileProvider/DateFormatHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-date-format-heap-dump-file-provider/#dateformatheapdumpfileprovider","title":"DateFormatHeapDumpFileProvider","text":"<p>[jvm]\\ constructor(heapDumpDirectory: File, dateProvider: () -> Date = { Date() }, prefix: String = \"\", suffix: String = \"\")</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/new-heap-dump-file/","title":"New heap dump file","text":"<p>//leakcanary-repo/leakcanary/DateFormatHeapDumpFileProvider/newHeapDumpFile</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/new-heap-dump-file/#newheapdumpfile","title":"newHeapDumpFile","text":"<p>[jvm]\\ open override fun newHeapDumpFile(): File</p> <p>Returns a File that can be passed to a HeapDumper to dump the heap.</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DateFormatHeapDumpFileProvider/Companion</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-companion/#properties","title":"Properties","text":"Name Summary TIME_PATTERN [jvm]const val TIME_PATTERN: String"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-companion/-t-i-m-e_-p-a-t-t-e-r-n/","title":"t i m e p a t t e r n","text":"<p>//leakcanary-repo/leakcanary/DateFormatHeapDumpFileProvider/Companion/TIME_PATTERN</p>"},{"location":"api/leakcanary/-date-format-heap-dump-file-provider/-companion/-t-i-m-e_-p-a-t-t-e-r-n/#time_pattern","title":"TIME_PATTERN","text":"<p>[jvm]\\ const val TIME_PATTERN: String</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DatetimeFormattedHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/#datetimeformattedheapdumpfileprovider","title":"DatetimeFormattedHeapDumpFileProvider","text":"<p>[jvm]\\ class DatetimeFormattedHeapDumpFileProvider(heapDumpDirectoryProvider: HeapDumpDirectoryProvider, dateProvider: () -> Date = { Date() }, prefixProvider: () -> String = { \"\" }, suffixProvider: () -> String = { \"\" }) : HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/#constructors","title":"Constructors","text":"DatetimeFormattedHeapDumpFileProvider [jvm]constructor(heapDumpDirectoryProvider: HeapDumpDirectoryProvider, dateProvider: () -> Date = { Date() }, prefixProvider: () -> String = { \"\" }, suffixProvider: () -> String = { \"\" })"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/#functions","title":"Functions","text":"Name Summary newHeapDumpFile [jvm]open override fun newHeapDumpFile(): FileReturns a File that can be passed to a HeapDumper to dump the heap."},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-datetime-formatted-heap-dump-file-provider/","title":"datetime formatted heap dump file provider","text":"<p>//leakcanary-repo/leakcanary/DatetimeFormattedHeapDumpFileProvider/DatetimeFormattedHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-datetime-formatted-heap-dump-file-provider/#datetimeformattedheapdumpfileprovider","title":"DatetimeFormattedHeapDumpFileProvider","text":"<p>[jvm]\\ constructor(heapDumpDirectoryProvider: HeapDumpDirectoryProvider, dateProvider: () -> Date = { Date() }, prefixProvider: () -> String = { \"\" }, suffixProvider: () -> String = { \"\" })</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/new-heap-dump-file/","title":"New heap dump file","text":"<p>//leakcanary-repo/leakcanary/DatetimeFormattedHeapDumpFileProvider/newHeapDumpFile</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/new-heap-dump-file/#newheapdumpfile","title":"newHeapDumpFile","text":"<p>[jvm]\\ open override fun newHeapDumpFile(): File</p> <p>Returns a File that can be passed to a HeapDumper to dump the heap.</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DatetimeFormattedHeapDumpFileProvider/Companion</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-companion/#properties","title":"Properties","text":"Name Summary TIME_PATTERN [jvm]const val TIME_PATTERN: String"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-companion/-t-i-m-e_-p-a-t-t-e-r-n/","title":"t i m e p a t t e r n","text":"<p>//leakcanary-repo/leakcanary/DatetimeFormattedHeapDumpFileProvider/Companion/TIME_PATTERN</p>"},{"location":"api/leakcanary/-datetime-formatted-heap-dump-file-provider/-companion/-t-i-m-e_-p-a-t-t-e-r-n/#time_pattern","title":"TIME_PATTERN","text":"<p>[jvm]\\ const val TIME_PATTERN: String</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DefaultDelayDeletableObjectReporter</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/#defaultdelaydeletableobjectreporter","title":"DefaultDelayDeletableObjectReporter","text":"<p>[jvm]\\ class DefaultDelayDeletableObjectReporter(defaultDelay: Duration, delayedReporter: DelayedDeletableObjectReporter) : DeletableObjectReporter</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/#constructors","title":"Constructors","text":"DefaultDelayDeletableObjectReporter [jvm]constructor(defaultDelay: Duration, delayedReporter: DelayedDeletableObjectReporter)"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/#functions","title":"Functions","text":"Name Summary expectDeletionFor [jvm]open override fun expectDeletionFor(target: Any, reason: String): TrackedObjectReachabilityStart tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. stop being strongly reachable soon. If target stays strongly reachable, target will be considered retained. The time at which target is considered retained is determined by the DeletableObjectReporter implementation. filteringInstances [jvm]inline fun <T> DeletableObjectReporter.filteringInstances(crossinline apply: (T) -> Boolean): DeletableObjectReporterCreates a wrapper around DeletableObjectReporter that will run any instance of T by apply to decide whether to forward to DeletableObjectReporter.expectDeletionFor calls. Objects that do not extend T will always be forwarded."},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/-default-delay-deletable-object-reporter/","title":"default delay deletable object reporter","text":"<p>//leakcanary-repo/leakcanary/DefaultDelayDeletableObjectReporter/DefaultDelayDeletableObjectReporter</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/-default-delay-deletable-object-reporter/#defaultdelaydeletableobjectreporter","title":"DefaultDelayDeletableObjectReporter","text":"<p>[jvm]\\ constructor(defaultDelay: Duration, delayedReporter: DelayedDeletableObjectReporter)</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/expect-deletion-for/","title":"Expect deletion for","text":"<p>//leakcanary-repo/leakcanary/DefaultDelayDeletableObjectReporter/expectDeletionFor</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/expect-deletion-for/#expectdeletionfor","title":"expectDeletionFor","text":"<p>[jvm]\\ open override fun expectDeletionFor(target: Any, reason: String): TrackedObjectReachability</p> <p>Start tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. stop being strongly reachable soon. If target stays strongly reachable, target will be considered retained. The time at which target is considered retained is determined by the DeletableObjectReporter implementation.</p>"},{"location":"api/leakcanary/-default-delay-deletable-object-reporter/expect-deletion-for/#parameters","title":"Parameters","text":"<p>jvm</p> target an object expected to not be strongly reachable soon. reason reason why the passed in object should be deleted. For example, \"MyPresenter received the destroy() callback\"."},{"location":"api/leakcanary/-delayed-deletable-object-reporter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DelayedDeletableObjectReporter</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/#delayeddeletableobjectreporter","title":"DelayedDeletableObjectReporter","text":"<p>[jvm]\\ class DelayedDeletableObjectReporter(deletableObjectReporter: TriggeredDeletableObjectReporter, delayedExecutor: DelayedExecutor)</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/#constructors","title":"Constructors","text":"DelayedDeletableObjectReporter [jvm]constructor(deletableObjectReporter: TriggeredDeletableObjectReporter, delayedExecutor: DelayedExecutor)"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/#functions","title":"Functions","text":"Name Summary expectDelayedDeletionFor [jvm]fun expectDelayedDeletionFor(target: Any, reason: String, delayUptime: Duration): TrackedObjectReachabilitySame as DeletableObjectReporter.expectDeletionFor but allows providing a delay for when target is expected to be deleted."},{"location":"api/leakcanary/-delayed-deletable-object-reporter/-delayed-deletable-object-reporter/","title":"delayed deletable object reporter","text":"<p>//leakcanary-repo/leakcanary/DelayedDeletableObjectReporter/DelayedDeletableObjectReporter</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/-delayed-deletable-object-reporter/#delayeddeletableobjectreporter","title":"DelayedDeletableObjectReporter","text":"<p>[jvm]\\ constructor(deletableObjectReporter: TriggeredDeletableObjectReporter, delayedExecutor: DelayedExecutor)</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/expect-delayed-deletion-for/","title":"Expect delayed deletion for","text":"<p>//leakcanary-repo/leakcanary/DelayedDeletableObjectReporter/expectDelayedDeletionFor</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/expect-delayed-deletion-for/#expectdelayeddeletionfor","title":"expectDelayedDeletionFor","text":"<p>[jvm]\\ fun expectDelayedDeletionFor(target: Any, reason: String, delayUptime: Duration): TrackedObjectReachability</p> <p>Same as DeletableObjectReporter.expectDeletionFor but allows providing a delay for when target is expected to be deleted.</p>"},{"location":"api/leakcanary/-delayed-deletable-object-reporter/expect-delayed-deletion-for/#parameters","title":"Parameters","text":"<p>jvm</p> delayUptime how long to wait until target is considered retained. Should be a significant enough delay for the GC to get a chance to run and update reachability status. You should generally use DefaultDelayDeletableObjectReporter, this is only useful if target is a special object that you know needs more time to stop being strongly reachable."},{"location":"api/leakcanary/-delayed-executor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DelayedExecutor</p>"},{"location":"api/leakcanary/-delayed-executor/#delayedexecutor","title":"DelayedExecutor","text":"<p>[jvm]\\ fun interface DelayedExecutor</p>"},{"location":"api/leakcanary/-delayed-executor/#functions","title":"Functions","text":"Name Summary executeWithDelay [jvm]abstract fun executeWithDelay(delayUptime: Duration, runnable: Runnable)"},{"location":"api/leakcanary/-delayed-executor/execute-with-delay/","title":"Execute with delay","text":"<p>//leakcanary-repo/leakcanary/DelayedExecutor/executeWithDelay</p>"},{"location":"api/leakcanary/-delayed-executor/execute-with-delay/#executewithdelay","title":"executeWithDelay","text":"<p>[jvm]\\ abstract fun executeWithDelay(delayUptime: Duration, runnable: Runnable)</p>"},{"location":"api/leakcanary/-deletable-object-reporter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DeletableObjectReporter</p>"},{"location":"api/leakcanary/-deletable-object-reporter/#deletableobjectreporter","title":"DeletableObjectReporter","text":"<p>fun interface DeletableObjectReporter</p>"},{"location":"api/leakcanary/-deletable-object-reporter/#inheritors","title":"Inheritors","text":"DefaultDelayDeletableObjectReporter"},{"location":"api/leakcanary/-deletable-object-reporter/#functions","title":"Functions","text":"Name Summary expectDeletionFor [jvm]abstract fun expectDeletionFor(target: Any, reason: String): TrackedObjectReachabilityStart tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. stop being strongly reachable soon. If target stays strongly reachable, target will be considered retained. The time at which target is considered retained is determined by the DeletableObjectReporter implementation. filteringInstances [jvm]inline fun <T> DeletableObjectReporter.filteringInstances(crossinline apply: (T) -> Boolean): DeletableObjectReporterCreates a wrapper around DeletableObjectReporter that will run any instance of T by apply to decide whether to forward to DeletableObjectReporter.expectDeletionFor calls. Objects that do not extend T will always be forwarded."},{"location":"api/leakcanary/-deletable-object-reporter/expect-deletion-for/","title":"Expect deletion for","text":"<p>//leakcanary-repo/leakcanary/DeletableObjectReporter/expectDeletionFor</p>"},{"location":"api/leakcanary/-deletable-object-reporter/expect-deletion-for/#expectdeletionfor","title":"expectDeletionFor","text":"<p>[jvm]\\ abstract fun expectDeletionFor(target: Any, reason: String): TrackedObjectReachability</p> <p>Start tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. stop being strongly reachable soon. If target stays strongly reachable, target will be considered retained. The time at which target is considered retained is determined by the DeletableObjectReporter implementation.</p>"},{"location":"api/leakcanary/-deletable-object-reporter/expect-deletion-for/#parameters","title":"Parameters","text":"<p>jvm</p> target an object expected to not be strongly reachable soon. reason reason why the passed in object should be deleted. For example, \"MyPresenter received the destroy() callback\"."},{"location":"api/leakcanary/-detect-leaks-after-test-success/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAfterTestSuccess</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/#detectleaksaftertestsuccess","title":"DetectLeaksAfterTestSuccess","text":"<p>[androidJvm]\\ class DetectLeaksAfterTestSuccess(tag: String = DetectLeaksAfterTestSuccess::class.java.simpleName) : TestRule</p> <p>TestRule that invokes LeakAssertions.assertNoLeaks after the test successfully evaluates. Pay attention to where you set up this rule in the rule chain as you might detect different leaks (e.g. around vs wrapped by the activity rule). It\u2019s also possible to use this rule several times in a rule chain.</p> <p>This rule automatically applies the TestDescriptionHolder rule.</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/#constructors","title":"Constructors","text":"DetectLeaksAfterTestSuccess [androidJvm]constructor(tag: String = DetectLeaksAfterTestSuccess::class.java.simpleName)"},{"location":"api/leakcanary/-detect-leaks-after-test-success/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-detect-leaks-after-test-success/#functions","title":"Functions","text":"Name Summary apply [androidJvm]open override fun apply(base: Statement, description: Description): Statement"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-detect-leaks-after-test-success/","title":"detect leaks after test success","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAfterTestSuccess/DetectLeaksAfterTestSuccess</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-detect-leaks-after-test-success/#detectleaksaftertestsuccess","title":"DetectLeaksAfterTestSuccess","text":"<p>[androidJvm]\\ constructor(tag: String = DetectLeaksAfterTestSuccess::class.java.simpleName)</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/apply/","title":"Apply","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAfterTestSuccess/apply</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/apply/#apply","title":"apply","text":"<p>[androidJvm]\\ open override fun apply(base: Statement, description: Description): Statement</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAfterTestSuccess/Companion</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-companion/#functions","title":"Functions","text":"Name Summary detectLeaksAfterTestSuccessWrapping [androidJvm]fun RuleChain.detectLeaksAfterTestSuccessWrapping(tag: String, wrapped: RuleChain.() -> RuleChain): RuleChainA helper function to trigger leak detection twice during test tear down, before and after the tear down of a set of wrapped rule chains. For example, this can be useful to detect leaks both right before and right after the activity under test is destroyed. Before means we can detect detached fragment leaks that go away when the activity is destroyed. After means we can detect activity leaks."},{"location":"api/leakcanary/-detect-leaks-after-test-success/-companion/detect-leaks-after-test-success-wrapping/","title":"Detect leaks after test success wrapping","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAfterTestSuccess/Companion/detectLeaksAfterTestSuccessWrapping</p>"},{"location":"api/leakcanary/-detect-leaks-after-test-success/-companion/detect-leaks-after-test-success-wrapping/#detectleaksaftertestsuccesswrapping","title":"detectLeaksAfterTestSuccessWrapping","text":"<p>[androidJvm]\\ fun RuleChain.detectLeaksAfterTestSuccessWrapping(tag: String, wrapped: RuleChain.() -> RuleChain): RuleChain</p> <p>A helper function to trigger leak detection twice during test tear down, before and after the tear down of a set of wrapped rule chains. For example, this can be useful to detect leaks both right before and right after the activity under test is destroyed. Before means we can detect detached fragment leaks that go away when the activity is destroyed. After means we can detect activity leaks.</p> <pre><code>RuleChain.outerRule(LoginRule())\n.detectLeaksAfterTestSuccessWrapping(\"ActivitiesDestroyed\") {\naround(ActivityScenarioRule(MyActivity::class.java))\n}\n.around(LoadingScreenRule())\n</code></pre>"},{"location":"api/leakcanary/-detect-leaks-assert/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAssert</p>"},{"location":"api/leakcanary/-detect-leaks-assert/#detectleaksassert","title":"DetectLeaksAssert","text":"<p>fun interface DetectLeaksAssert</p> <p>The interface for the implementation that LeakAssertions.assertNoLeaks delegates to. You can call DetectLeaksAssert.update to provide your own implementation.</p> <p>The default implementation is AndroidDetectLeaksAssert.</p>"},{"location":"api/leakcanary/-detect-leaks-assert/#inheritors","title":"Inheritors","text":"AndroidDetectLeaksAssert"},{"location":"api/leakcanary/-detect-leaks-assert/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-detect-leaks-assert/#functions","title":"Functions","text":"Name Summary assertNoLeaks [androidJvm]abstract fun assertNoLeaks(tag: String)"},{"location":"api/leakcanary/-detect-leaks-assert/assert-no-leaks/","title":"Assert no leaks","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAssert/assertNoLeaks</p>"},{"location":"api/leakcanary/-detect-leaks-assert/assert-no-leaks/#assertnoleaks","title":"assertNoLeaks","text":"<p>[androidJvm]\\ abstract fun assertNoLeaks(tag: String)</p>"},{"location":"api/leakcanary/-detect-leaks-assert/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAssert/Companion</p>"},{"location":"api/leakcanary/-detect-leaks-assert/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-detect-leaks-assert/-companion/#functions","title":"Functions","text":"Name Summary update [androidJvm]fun update(delegate: DetectLeaksAssert)"},{"location":"api/leakcanary/-detect-leaks-assert/-companion/update/","title":"Update","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksAssert/Companion/update</p>"},{"location":"api/leakcanary/-detect-leaks-assert/-companion/update/#update","title":"update","text":"<p>[androidJvm]\\ fun update(delegate: DetectLeaksAssert)</p>"},{"location":"api/leakcanary/-detect-leaks-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksInterceptor</p>"},{"location":"api/leakcanary/-detect-leaks-interceptor/#detectleaksinterceptor","title":"DetectLeaksInterceptor","text":"<p>fun interface DetectLeaksInterceptor</p> <p>Decides whether to dump & analyze the heap to look for leaks in instrumentation tests. The implementation might block for a while to allow temporary leaks to be flushed out, as those aren\u2019t that interesting to report and heap analysis increases test duration significantly.</p>"},{"location":"api/leakcanary/-detect-leaks-interceptor/#inheritors","title":"Inheritors","text":"AndroidDetectLeaksInterceptor"},{"location":"api/leakcanary/-detect-leaks-interceptor/#functions","title":"Functions","text":"Name Summary waitUntilReadyForHeapAnalysis [androidJvm]abstract fun waitUntilReadyForHeapAnalysis(): HeapAnalysisDecision"},{"location":"api/leakcanary/-detect-leaks-interceptor/wait-until-ready-for-heap-analysis/","title":"Wait until ready for heap analysis","text":"<p>//leakcanary-repo/leakcanary/DetectLeaksInterceptor/waitUntilReadyForHeapAnalysis</p>"},{"location":"api/leakcanary/-detect-leaks-interceptor/wait-until-ready-for-heap-analysis/#waituntilreadyforheapanalysis","title":"waitUntilReadyForHeapAnalysis","text":"<p>[androidJvm]\\ abstract fun waitUntilReadyForHeapAnalysis(): HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DumpingAndDeletingHeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/#dumpinganddeletingheapgraphprovider","title":"DumpingAndDeletingHeapGraphProvider","text":"<p>[jvm]\\ class DumpingAndDeletingHeapGraphProvider(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, fileDeleter: FileDeleter) : HeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/#constructors","title":"Constructors","text":"DumpingAndDeletingHeapGraphProvider [jvm]constructor(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, fileDeleter: FileDeleter)"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]open override fun openHeapGraph(): CloseableHeapGraph"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/-dumping-and-deleting-heap-graph-provider/","title":"dumping and deleting heap graph provider","text":"<p>//leakcanary-repo/leakcanary/DumpingAndDeletingHeapGraphProvider/DumpingAndDeletingHeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/-dumping-and-deleting-heap-graph-provider/#dumpinganddeletingheapgraphprovider","title":"DumpingAndDeletingHeapGraphProvider","text":"<p>[jvm]\\ constructor(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, fileDeleter: FileDeleter)</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/open-heap-graph/","title":"Open heap graph","text":"<p>//leakcanary-repo/leakcanary/DumpingAndDeletingHeapGraphProvider/openHeapGraph</p>"},{"location":"api/leakcanary/-dumping-and-deleting-heap-graph-provider/open-heap-graph/#openheapgraph","title":"openHeapGraph","text":"<p>[jvm]\\ open override fun openHeapGraph(): CloseableHeapGraph</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DumpingHeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/#dumpingheapgraphprovider","title":"DumpingHeapGraphProvider","text":"<p>[jvm]\\ class DumpingHeapGraphProvider(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpClosedListener: DumpingHeapGraphProvider.HeapDumpClosedListener = HeapDumpClosedListener {}) : HeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/#constructors","title":"Constructors","text":"DumpingHeapGraphProvider [jvm]constructor(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpClosedListener: DumpingHeapGraphProvider.HeapDumpClosedListener = HeapDumpClosedListener {})"},{"location":"api/leakcanary/-dumping-heap-graph-provider/#types","title":"Types","text":"Name Summary HeapDumpClosedListener [jvm]fun interface HeapDumpClosedListener"},{"location":"api/leakcanary/-dumping-heap-graph-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]open override fun openHeapGraph(): CloseableHeapGraph"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-dumping-heap-graph-provider/","title":"dumping heap graph provider","text":"<p>//leakcanary-repo/leakcanary/DumpingHeapGraphProvider/DumpingHeapGraphProvider</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-dumping-heap-graph-provider/#dumpingheapgraphprovider","title":"DumpingHeapGraphProvider","text":"<p>[jvm]\\ constructor(heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpClosedListener: DumpingHeapGraphProvider.HeapDumpClosedListener = HeapDumpClosedListener {})</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/open-heap-graph/","title":"Open heap graph","text":"<p>//leakcanary-repo/leakcanary/DumpingHeapGraphProvider/openHeapGraph</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/open-heap-graph/#openheapgraph","title":"openHeapGraph","text":"<p>[jvm]\\ open override fun openHeapGraph(): CloseableHeapGraph</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DumpingHeapGraphProvider/HeapDumpClosedListener</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/#heapdumpclosedlistener","title":"HeapDumpClosedListener","text":"<p>fun interface HeapDumpClosedListener</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/#functions","title":"Functions","text":"Name Summary onHeapDumpClosed [jvm]abstract fun onHeapDumpClosed(heapDumpFile: File)"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/on-heap-dump-closed/","title":"On heap dump closed","text":"<p>//leakcanary-repo/leakcanary/DumpingHeapGraphProvider/HeapDumpClosedListener/onHeapDumpClosed</p>"},{"location":"api/leakcanary/-dumping-heap-graph-provider/-heap-dump-closed-listener/on-heap-dump-closed/#onheapdumpclosed","title":"onHeapDumpClosed","text":"<p>[jvm]\\ abstract fun onHeapDumpClosed(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-dumping-repeating-scenario-object-growth-detector/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/DumpingRepeatingScenarioObjectGrowthDetector</p>"},{"location":"api/leakcanary/-dumping-repeating-scenario-object-growth-detector/#dumpingrepeatingscenarioobjectgrowthdetector","title":"DumpingRepeatingScenarioObjectGrowthDetector","text":"<p>class DumpingRepeatingScenarioObjectGrowthDetector(objectGrowthDetector: ObjectGrowthDetector, heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpStorageStrategy: HeapDumpStorageStrategy) : RepeatingScenarioObjectGrowthDetector</p> <p>A RepeatingScenarioObjectGrowthDetector suitable for junit based automated tests that can dump the heap.</p>"},{"location":"api/leakcanary/-dumping-repeating-scenario-object-growth-detector/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/leakcanary/-dumping-repeating-scenario-object-growth-detector/#constructors","title":"Constructors","text":"DumpingRepeatingScenarioObjectGrowthDetector [jvm]constructor(objectGrowthDetector: ObjectGrowthDetector, heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpStorageStrategy: HeapDumpStorageStrategy)"},{"location":"api/leakcanary/-dumping-repeating-scenario-object-growth-detector/#functions","title":"Functions","text":"Name Summary findRepeatedlyGrowingObjects [jvm]open override fun findRepeatedlyGrowingObjects(maxHeapDumps: Int, scenarioLoopsPerDump: Int, roundTripScenario: () -> Unit): HeapDiff"},{"location":"api/leakcanary/-dumping-repeating-scenario-object-growth-detector/-dumping-repeating-scenario-object-growth-detector/","title":"dumping repeating scenario object growth detector","text":"<p>//leakcanary-repo/leakcanary/DumpingRepeatingScenarioObjectGrowthDetector/DumpingRepeatingScenarioObjectGrowthDetector</p>"},{"location":"api/leakcanary/-dumping-repeating-scenario-object-growth-detector/-dumping-repeating-scenario-object-growth-detector/#dumpingrepeatingscenarioobjectgrowthdetector","title":"DumpingRepeatingScenarioObjectGrowthDetector","text":"<p>[jvm]\\ constructor(objectGrowthDetector: ObjectGrowthDetector, heapDumpFileProvider: HeapDumpFileProvider, heapDumper: HeapDumper, heapDumpStorageStrategy: HeapDumpStorageStrategy)</p>"},{"location":"api/leakcanary/-dumping-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/","title":"Find repeatedly growing objects","text":"<p>//leakcanary-repo/leakcanary/DumpingRepeatingScenarioObjectGrowthDetector/findRepeatedlyGrowingObjects</p>"},{"location":"api/leakcanary/-dumping-repeating-scenario-object-growth-detector/find-repeatedly-growing-objects/#findrepeatedlygrowingobjects","title":"findRepeatedlyGrowingObjects","text":"<p>[jvm]\\ open override fun findRepeatedlyGrowingObjects(maxHeapDumps: Int, scenarioLoopsPerDump: Int, roundTripScenario: () -> Unit): HeapDiff</p>"},{"location":"api/leakcanary/-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener</p>"},{"location":"api/leakcanary/-event-listener/#eventlistener","title":"EventListener","text":"<p>fun interface EventListener</p>"},{"location":"api/leakcanary/-event-listener/#inheritors","title":"Inheritors","text":"BackgroundThreadHeapAnalyzer LazyForwardingEventListener LogcatEventListener NotificationEventListener RemoteWorkManagerHeapAnalyzer ToastEventListener TvEventListener WorkManagerHeapAnalyzer"},{"location":"api/leakcanary/-event-listener/#types","title":"Types","text":"Name Summary Event [androidJvm]sealed class Event : SerializableNote: Event is Serializable for convenience but we currently make no guarantee that the Serialization is backward / forward compatible across LeakCanary versions, so plan accordingly. This is convenient for passing events around processes, and shouldn\u2019t be used to store them."},{"location":"api/leakcanary/-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]abstract fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/EventListener/onEvent</p>"},{"location":"api/leakcanary/-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ abstract fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-event-listener/-event/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event</p>"},{"location":"api/leakcanary/-event-listener/-event/#event","title":"Event","text":"<p>sealed class Event : Serializable</p> <p>Note: Event is Serializable for convenience but we currently make no guarantee that the Serialization is backward / forward compatible across LeakCanary versions, so plan accordingly. This is convenient for passing events around processes, and shouldn\u2019t be used to store them.</p>"},{"location":"api/leakcanary/-event-listener/-event/#inheritors","title":"Inheritors","text":"DumpingHeap HeapDump HeapDumpFailed HeapAnalysisProgress HeapAnalysisDone"},{"location":"api/leakcanary/-event-listener/-event/#types","title":"Types","text":"Name Summary DumpingHeap [androidJvm]class DumpingHeap(val uniqueId: String) : EventListener.EventSent from the \"LeakCanary-Heap-Dump\" HandlerThread. HeapAnalysisDone [androidJvm]sealed class HeapAnalysisDone<T : HeapAnalysis> : EventListener.EventSent from the thread performing the analysis. HeapAnalysisProgress [androidJvm]class HeapAnalysisProgress(val uniqueId: String, val step: OnAnalysisProgressListener.Step, val progressPercent: Double) : EventListener.EventprogressPercent is a value between 0..1 HeapDump [androidJvm]class HeapDump(val uniqueId: String, val file: File, val durationMillis: Long, val reason: String) : EventListener.EventSent from the \"LeakCanary-Heap-Dump\" HandlerThread. HeapDumpFailed [androidJvm]class HeapDumpFailed(val uniqueId: String, val exception: Throwable, val willRetryLater: Boolean) : EventListener.EventSent from the \"LeakCanary-Heap-Dump\" HandlerThread."},{"location":"api/leakcanary/-event-listener/-event/#properties","title":"Properties","text":"Name Summary uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/unique-id/","title":"Unique id","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/uniqueId</p>"},{"location":"api/leakcanary/-event-listener/-event/unique-id/#uniqueid","title":"uniqueId","text":"<p>[androidJvm]\\ val uniqueId: String</p> <p>Unique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent.</p>"},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/DumpingHeap</p>"},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/#dumpingheap","title":"DumpingHeap","text":"<p>[androidJvm]\\ class DumpingHeap(val uniqueId: String) : EventListener.Event</p> <p>Sent from the \"LeakCanary-Heap-Dump\" HandlerThread.</p>"},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/#constructors","title":"Constructors","text":"DumpingHeap [androidJvm]constructor(uniqueId: String)"},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/#properties","title":"Properties","text":"Name Summary uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/-dumping-heap/","title":"dumping heap","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/DumpingHeap/DumpingHeap</p>"},{"location":"api/leakcanary/-event-listener/-event/-dumping-heap/-dumping-heap/#dumpingheap","title":"DumpingHeap","text":"<p>[androidJvm]\\ constructor(uniqueId: String)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/#heapanalysisdone","title":"HeapAnalysisDone","text":"<p>sealed class HeapAnalysisDone<T : HeapAnalysis> : EventListener.Event</p> <p>Sent from the thread performing the analysis.</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/#inheritors","title":"Inheritors","text":"HeapAnalysisSucceeded HeapAnalysisFailed"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/#types","title":"Types","text":"Name Summary HeapAnalysisFailed [androidJvm]class HeapAnalysisFailed(uniqueId: String, heapAnalysis: HeapAnalysisFailure, showIntent: Intent) : EventListener.Event.HeapAnalysisDone<HeapAnalysisFailure> HeapAnalysisSucceeded [androidJvm]class HeapAnalysisSucceeded(uniqueId: String, heapAnalysis: HeapAnalysisSuccess, val unreadLeakSignatures: Set<String>, showIntent: Intent) : EventListener.Event.HeapAnalysisDone<HeapAnalysisSuccess>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/#properties","title":"Properties","text":"Name Summary heapAnalysis [androidJvm]val heapAnalysis: T showIntent [androidJvm]val showIntent: Intent uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/heap-analysis/","title":"Heap analysis","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/heapAnalysis</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/heap-analysis/#heapanalysis","title":"heapAnalysis","text":"<p>[androidJvm]\\ val heapAnalysis: T</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/show-intent/","title":"Show intent","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/showIntent</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/show-intent/#showintent","title":"showIntent","text":"<p>[androidJvm]\\ val showIntent: Intent</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/HeapAnalysisFailed</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/#heapanalysisfailed","title":"HeapAnalysisFailed","text":"<p>[androidJvm]\\ class HeapAnalysisFailed(uniqueId: String, heapAnalysis: HeapAnalysisFailure, showIntent: Intent) : EventListener.Event.HeapAnalysisDone<HeapAnalysisFailure></p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/#constructors","title":"Constructors","text":"HeapAnalysisFailed [androidJvm]constructor(uniqueId: String, heapAnalysis: HeapAnalysisFailure, showIntent: Intent)"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/#properties","title":"Properties","text":"Name Summary heapAnalysis [androidJvm]val heapAnalysis: HeapAnalysisFailure showIntent [androidJvm]val showIntent: Intent uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/-heap-analysis-failed/","title":"heap analysis failed","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/HeapAnalysisFailed/HeapAnalysisFailed</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-failed/-heap-analysis-failed/#heapanalysisfailed","title":"HeapAnalysisFailed","text":"<p>[androidJvm]\\ constructor(uniqueId: String, heapAnalysis: HeapAnalysisFailure, showIntent: Intent)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/HeapAnalysisSucceeded</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/#heapanalysissucceeded","title":"HeapAnalysisSucceeded","text":"<p>[androidJvm]\\ class HeapAnalysisSucceeded(uniqueId: String, heapAnalysis: HeapAnalysisSuccess, val unreadLeakSignatures: Set<String>, showIntent: Intent) : EventListener.Event.HeapAnalysisDone<HeapAnalysisSuccess></p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/#constructors","title":"Constructors","text":"HeapAnalysisSucceeded [androidJvm]constructor(uniqueId: String, heapAnalysis: HeapAnalysisSuccess, unreadLeakSignatures: Set<String>, showIntent: Intent)"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/#properties","title":"Properties","text":"Name Summary heapAnalysis [androidJvm]val heapAnalysis: HeapAnalysisSuccess showIntent [androidJvm]val showIntent: Intent uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent. unreadLeakSignatures [androidJvm]val unreadLeakSignatures: Set<String>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/-heap-analysis-succeeded/","title":"heap analysis succeeded","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/HeapAnalysisSucceeded/HeapAnalysisSucceeded</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/-heap-analysis-succeeded/#heapanalysissucceeded","title":"HeapAnalysisSucceeded","text":"<p>[androidJvm]\\ constructor(uniqueId: String, heapAnalysis: HeapAnalysisSuccess, unreadLeakSignatures: Set<String>, showIntent: Intent)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/unread-leak-signatures/","title":"Unread leak signatures","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisDone/HeapAnalysisSucceeded/unreadLeakSignatures</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-done/-heap-analysis-succeeded/unread-leak-signatures/#unreadleaksignatures","title":"unreadLeakSignatures","text":"<p>[androidJvm]\\ val unreadLeakSignatures: Set<String></p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisProgress</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/#heapanalysisprogress","title":"HeapAnalysisProgress","text":"<p>[androidJvm]\\ class HeapAnalysisProgress(val uniqueId: String, val step: OnAnalysisProgressListener.Step, val progressPercent: Double) : EventListener.Event</p> <p>progressPercent is a value between 0..1</p> <p>Sent from the thread performing the analysis.</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/#constructors","title":"Constructors","text":"HeapAnalysisProgress [androidJvm]constructor(uniqueId: String, step: OnAnalysisProgressListener.Step, progressPercent: Double)"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/#properties","title":"Properties","text":"Name Summary progressPercent [androidJvm]val progressPercent: Double step [androidJvm]val step: OnAnalysisProgressListener.Step uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/-heap-analysis-progress/","title":"heap analysis progress","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisProgress/HeapAnalysisProgress</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/-heap-analysis-progress/#heapanalysisprogress","title":"HeapAnalysisProgress","text":"<p>[androidJvm]\\ constructor(uniqueId: String, step: OnAnalysisProgressListener.Step, progressPercent: Double)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/progress-percent/","title":"Progress percent","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisProgress/progressPercent</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/progress-percent/#progresspercent","title":"progressPercent","text":"<p>[androidJvm]\\ val progressPercent: Double</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/step/","title":"Step","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapAnalysisProgress/step</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-analysis-progress/step/#step","title":"step","text":"<p>[androidJvm]\\ val step: OnAnalysisProgressListener.Step</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDump</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/#heapdump","title":"HeapDump","text":"<p>[androidJvm]\\ class HeapDump(val uniqueId: String, val file: File, val durationMillis: Long, val reason: String) : EventListener.Event</p> <p>Sent from the \"LeakCanary-Heap-Dump\" HandlerThread.</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/#constructors","title":"Constructors","text":"HeapDump [androidJvm]constructor(uniqueId: String, file: File, durationMillis: Long, reason: String)"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/#properties","title":"Properties","text":"Name Summary durationMillis [androidJvm]val durationMillis: Long file [androidJvm]val file: File reason [androidJvm]val reason: String uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent."},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/-heap-dump/","title":"heap dump","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDump/HeapDump</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/-heap-dump/#heapdump","title":"HeapDump","text":"<p>[androidJvm]\\ constructor(uniqueId: String, file: File, durationMillis: Long, reason: String)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/duration-millis/","title":"Duration millis","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDump/durationMillis</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/duration-millis/#durationmillis","title":"durationMillis","text":"<p>[androidJvm]\\ val durationMillis: Long</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/file/","title":"File","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDump/file</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/file/#file","title":"file","text":"<p>[androidJvm]\\ val file: File</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/reason/","title":"Reason","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDump/reason</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump/reason/#reason","title":"reason","text":"<p>[androidJvm]\\ val reason: String</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDumpFailed</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/#heapdumpfailed","title":"HeapDumpFailed","text":"<p>[androidJvm]\\ class HeapDumpFailed(val uniqueId: String, val exception: Throwable, val willRetryLater: Boolean) : EventListener.Event</p> <p>Sent from the \"LeakCanary-Heap-Dump\" HandlerThread.</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/#constructors","title":"Constructors","text":"HeapDumpFailed [androidJvm]constructor(uniqueId: String, exception: Throwable, willRetryLater: Boolean)"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/#properties","title":"Properties","text":"Name Summary exception [androidJvm]val exception: Throwable uniqueId [androidJvm]val uniqueId: StringUnique identifier for a related chain of event. The identifier for the events that run before HeapDump gets reset right before HeapDump is sent. willRetryLater [androidJvm]val willRetryLater: Boolean"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/-heap-dump-failed/","title":"heap dump failed","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDumpFailed/HeapDumpFailed</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/-heap-dump-failed/#heapdumpfailed","title":"HeapDumpFailed","text":"<p>[androidJvm]\\ constructor(uniqueId: String, exception: Throwable, willRetryLater: Boolean)</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/exception/","title":"Exception","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDumpFailed/exception</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/exception/#exception","title":"exception","text":"<p>[androidJvm]\\ val exception: Throwable</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/will-retry-later/","title":"Will retry later","text":"<p>//leakcanary-repo/leakcanary/EventListener/Event/HeapDumpFailed/willRetryLater</p>"},{"location":"api/leakcanary/-event-listener/-event/-heap-dump-failed/will-retry-later/#willretrylater","title":"willRetryLater","text":"<p>[androidJvm]\\ val willRetryLater: Boolean</p>"},{"location":"api/leakcanary/-file-deleter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/FileDeleter</p>"},{"location":"api/leakcanary/-file-deleter/#filedeleter","title":"FileDeleter","text":"<p>fun interface FileDeleter</p>"},{"location":"api/leakcanary/-file-deleter/#functions","title":"Functions","text":"Name Summary delete [jvm]abstract fun delete(file: File)"},{"location":"api/leakcanary/-file-deleter/delete/","title":"Delete","text":"<p>//leakcanary-repo/leakcanary/FileDeleter/delete</p>"},{"location":"api/leakcanary/-file-deleter/delete/#delete","title":"delete","text":"<p>[jvm]\\ abstract fun delete(file: File)</p>"},{"location":"api/leakcanary/-finalizing-in-process-gc-trigger/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/FinalizingInProcessGcTrigger</p>"},{"location":"api/leakcanary/-finalizing-in-process-gc-trigger/#finalizinginprocessgctrigger","title":"FinalizingInProcessGcTrigger","text":"<p>[jvm]\\ object FinalizingInProcessGcTrigger : GcTrigger</p> <p>A GcTrigger that attempts to perform a GC by invoking the corresponding JDK API then waiting and then running finalization. Based on FinalizationTest in AOSP.</p>"},{"location":"api/leakcanary/-finalizing-in-process-gc-trigger/#functions","title":"Functions","text":"Name Summary runGc [jvm]open override fun runGc()Attempts to run garbage collection."},{"location":"api/leakcanary/-finalizing-in-process-gc-trigger/run-gc/","title":"Run gc","text":"<p>//leakcanary-repo/leakcanary/FinalizingInProcessGcTrigger/runGc</p>"},{"location":"api/leakcanary/-finalizing-in-process-gc-trigger/run-gc/#rungc","title":"runGc","text":"<p>[jvm]\\ open override fun runGc()</p> <p>Attempts to run garbage collection.</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/FragmentAndViewModelWatcher</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/#fragmentandviewmodelwatcher","title":"FragmentAndViewModelWatcher","text":"<p>[androidJvm]\\ class FragmentAndViewModelWatcher(application: Application, deletableObjectReporter: DeletableObjectReporter) : InstallableWatcher</p> <p>Expects:</p> <ul> <li>Fragments (Support Library, Android X and AOSP) to become weakly reachable soon after they receive the Fragment#onDestroy() callback.</li> <li>Fragment views (Support Library, Android X and AOSP) to become weakly reachable soon after fragments receive the Fragment#onDestroyView() callback.</li> <li>Android X view models (both activity and fragment view models) to become weakly reachable soon after they received the ViewModel#onCleared() callback.</li> </ul>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/#constructors","title":"Constructors","text":"FragmentAndViewModelWatcher [androidJvm]constructor(application: Application, deletableObjectReporter: DeletableObjectReporter)"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/#functions","title":"Functions","text":"Name Summary install [androidJvm]open override fun install() uninstall [androidJvm]open override fun uninstall()"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/-fragment-and-view-model-watcher/","title":"fragment and view model watcher","text":"<p>//leakcanary-repo/leakcanary/FragmentAndViewModelWatcher/FragmentAndViewModelWatcher</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/-fragment-and-view-model-watcher/#fragmentandviewmodelwatcher","title":"FragmentAndViewModelWatcher","text":"<p>[androidJvm]\\ constructor(application: Application, deletableObjectReporter: DeletableObjectReporter)</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/FragmentAndViewModelWatcher/install</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/install/#install","title":"install","text":"<p>[androidJvm]\\ open override fun install()</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/uninstall/","title":"Uninstall","text":"<p>//leakcanary-repo/leakcanary/FragmentAndViewModelWatcher/uninstall</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/uninstall/#uninstall","title":"uninstall","text":"<p>[androidJvm]\\ open override fun uninstall()</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/FragmentAndViewModelWatcher/Companion</p>"},{"location":"api/leakcanary/-fragment-and-view-model-watcher/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-gc-trigger/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/GcTrigger</p>"},{"location":"api/leakcanary/-gc-trigger/#gctrigger","title":"GcTrigger","text":"<p>fun interface GcTrigger</p>"},{"location":"api/leakcanary/-gc-trigger/#inheritors","title":"Inheritors","text":"FinalizingInProcessGcTrigger"},{"location":"api/leakcanary/-gc-trigger/#types","title":"Types","text":"Name Summary Companion [jvm]object CompanionThis allows external modules to add factory methods for implementations of this interface as extension functions of this companion object."},{"location":"api/leakcanary/-gc-trigger/#functions","title":"Functions","text":"Name Summary runGc [jvm]abstract fun runGc()Attempts to run garbage collection."},{"location":"api/leakcanary/-gc-trigger/run-gc/","title":"Run gc","text":"<p>//leakcanary-repo/leakcanary/GcTrigger/runGc</p>"},{"location":"api/leakcanary/-gc-trigger/run-gc/#rungc","title":"runGc","text":"<p>[jvm]\\ abstract fun runGc()</p> <p>Attempts to run garbage collection.</p>"},{"location":"api/leakcanary/-gc-trigger/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/GcTrigger/Companion</p>"},{"location":"api/leakcanary/-gc-trigger/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p> <p>This allows external modules to add factory methods for implementations of this interface as extension functions of this companion object.</p>"},{"location":"api/leakcanary/-gc-trigger/-companion/#functions","title":"Functions","text":"Name Summary inProcess [jvm]fun GcTrigger.Companion.inProcess(): FinalizingInProcessGcTrigger"},{"location":"api/leakcanary/-good-android-version-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/GoodAndroidVersionInterceptor</p>"},{"location":"api/leakcanary/-good-android-version-interceptor/#goodandroidversioninterceptor","title":"GoodAndroidVersionInterceptor","text":"<p>[androidJvm]\\ class GoodAndroidVersionInterceptor : HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-good-android-version-interceptor/#constructors","title":"Constructors","text":"GoodAndroidVersionInterceptor [androidJvm]constructor()"},{"location":"api/leakcanary/-good-android-version-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-good-android-version-interceptor/-good-android-version-interceptor/","title":"good android version interceptor","text":"<p>//leakcanary-repo/leakcanary/GoodAndroidVersionInterceptor/GoodAndroidVersionInterceptor</p>"},{"location":"api/leakcanary/-good-android-version-interceptor/-good-android-version-interceptor/#goodandroidversioninterceptor","title":"GoodAndroidVersionInterceptor","text":"<p>[androidJvm]\\ constructor()</p>"},{"location":"api/leakcanary/-good-android-version-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/GoodAndroidVersionInterceptor/intercept</p>"},{"location":"api/leakcanary/-good-android-version-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-heap-analysis-client/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient</p>"},{"location":"api/leakcanary/-heap-analysis-client/#heapanalysisclient","title":"HeapAnalysisClient","text":"<p>[androidJvm]\\ class HeapAnalysisClient(heapDumpDirectoryProvider: () -> File, config: HeapAnalysisConfig, interceptors: List<HeapAnalysisInterceptor>)</p>"},{"location":"api/leakcanary/-heap-analysis-client/#constructors","title":"Constructors","text":"HeapAnalysisClient [androidJvm]constructor(heapDumpDirectoryProvider: () -> File, config: HeapAnalysisConfig, interceptors: List<HeapAnalysisInterceptor>)"},{"location":"api/leakcanary/-heap-analysis-client/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-heap-analysis-client/#functions","title":"Functions","text":"Name Summary deleteHeapDumpFiles [androidJvm]fun deleteHeapDumpFiles() newJob [androidJvm]fun newJob(context: JobContext = JobContext()): HeapAnalysisJob"},{"location":"api/leakcanary/-heap-analysis-client/-heap-analysis-client/","title":"heap analysis client","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient/HeapAnalysisClient</p>"},{"location":"api/leakcanary/-heap-analysis-client/-heap-analysis-client/#heapanalysisclient","title":"HeapAnalysisClient","text":"<p>[androidJvm]\\ constructor(heapDumpDirectoryProvider: () -> File, config: HeapAnalysisConfig, interceptors: List<HeapAnalysisInterceptor>)</p>"},{"location":"api/leakcanary/-heap-analysis-client/delete-heap-dump-files/","title":"Delete heap dump files","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient/deleteHeapDumpFiles</p>"},{"location":"api/leakcanary/-heap-analysis-client/delete-heap-dump-files/#deleteheapdumpfiles","title":"deleteHeapDumpFiles","text":"<p>[androidJvm]\\ fun deleteHeapDumpFiles()</p>"},{"location":"api/leakcanary/-heap-analysis-client/new-job/","title":"New job","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient/newJob</p>"},{"location":"api/leakcanary/-heap-analysis-client/new-job/#newjob","title":"newJob","text":"<p>[androidJvm]\\ fun newJob(context: JobContext = JobContext()): HeapAnalysisJob</p>"},{"location":"api/leakcanary/-heap-analysis-client/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient/Companion</p>"},{"location":"api/leakcanary/-heap-analysis-client/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-heap-analysis-client/-companion/#functions","title":"Functions","text":"Name Summary defaultInterceptors [androidJvm]fun defaultInterceptors(application: Application): List<HeapAnalysisInterceptor>"},{"location":"api/leakcanary/-heap-analysis-client/-companion/default-interceptors/","title":"Default interceptors","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisClient/Companion/defaultInterceptors</p>"},{"location":"api/leakcanary/-heap-analysis-client/-companion/default-interceptors/#defaultinterceptors","title":"defaultInterceptors","text":"<p>[androidJvm]\\ fun defaultInterceptors(application: Application): List<HeapAnalysisInterceptor></p>"},{"location":"api/leakcanary/-heap-analysis-config/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig</p>"},{"location":"api/leakcanary/-heap-analysis-config/#heapanalysisconfig","title":"HeapAnalysisConfig","text":"<p>[androidJvm]\\ data class HeapAnalysisConfig(val referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, val objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, val metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, val computeRetainedHeapSize: Boolean = true, val leakingObjectFinder: LeakingObjectFinder = FilteringLeakingObjectFinder( AndroidObjectInspectors.appLeakingObjectFilters ), val stripHeapDump: Boolean = false, val proguardMappingProvider: () -> ProguardMapping? = { null })</p>"},{"location":"api/leakcanary/-heap-analysis-config/#constructors","title":"Constructors","text":"HeapAnalysisConfig [androidJvm]constructor(referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: Boolean = true, leakingObjectFinder: LeakingObjectFinder = FilteringLeakingObjectFinder( AndroidObjectInspectors.appLeakingObjectFilters ), stripHeapDump: Boolean = false, proguardMappingProvider: () -> ProguardMapping? = { null })"},{"location":"api/leakcanary/-heap-analysis-config/#properties","title":"Properties","text":"Name Summary computeRetainedHeapSize [androidJvm]val computeRetainedHeapSize: Boolean = trueWhether to compute the retained heap size, which is the total number of bytes in memory that would be reclaimed if the detected leaks didn\u2019t happen. This includes native memory associated to Java objects (e.g. Android bitmaps). leakingObjectFinder [androidJvm]val leakingObjectFinder: LeakingObjectFinderFinds the objects that are leaking, for which LeakCanary will compute leak traces. metadataExtractor [androidJvm]val metadataExtractor: MetadataExtractorExtracts metadata from a hprof to be reported in shark.HeapAnalysisSuccess.metadata. Called on a background thread during heap analysis. objectInspectors [androidJvm]val objectInspectors: List<ObjectInspector>List of ObjectInspector that provide LeakCanary with insights about objects found in the heap. You can create your own ObjectInspector implementations, and also add a shark.AppSingletonInspector instance created with the list of internal singletons. proguardMappingProvider [androidJvm]val proguardMappingProvider: () -> ProguardMapping? referenceMatchers [androidJvm]val referenceMatchers: List<ReferenceMatcher>Known patterns of references in the heap, added here either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher). stripHeapDump [androidJvm]val stripHeapDump: Boolean = falseWhether the first step after a heap dump should be to replace the content of all arrays with zeroes. This increases the overall processing time but limits the amount of time the heap dump exists on disk with potential PII."},{"location":"api/leakcanary/-heap-analysis-config/-heap-analysis-config/","title":"heap analysis config","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/HeapAnalysisConfig</p>"},{"location":"api/leakcanary/-heap-analysis-config/-heap-analysis-config/#heapanalysisconfig","title":"HeapAnalysisConfig","text":"<p>[androidJvm]\\ constructor(referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: Boolean = true, leakingObjectFinder: LeakingObjectFinder = FilteringLeakingObjectFinder( AndroidObjectInspectors.appLeakingObjectFilters ), stripHeapDump: Boolean = false, proguardMappingProvider: () -> ProguardMapping? = { null })</p>"},{"location":"api/leakcanary/-heap-analysis-config/compute-retained-heap-size/","title":"Compute retained heap size","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/computeRetainedHeapSize</p>"},{"location":"api/leakcanary/-heap-analysis-config/compute-retained-heap-size/#computeretainedheapsize","title":"computeRetainedHeapSize","text":"<p>[androidJvm]\\ val computeRetainedHeapSize: Boolean = true</p> <p>Whether to compute the retained heap size, which is the total number of bytes in memory that would be reclaimed if the detected leaks didn\u2019t happen. This includes native memory associated to Java objects (e.g. Android bitmaps).</p> <p>Computing the retained heap size can slow down the analysis because it requires navigating from GC roots through the entire object graph, whereas shark.HeapAnalyzer would otherwise stop as soon as all leaking instances are found.</p> <p>Defaults to true.</p>"},{"location":"api/leakcanary/-heap-analysis-config/leaking-object-finder/","title":"Leaking object finder","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/leakingObjectFinder</p>"},{"location":"api/leakcanary/-heap-analysis-config/leaking-object-finder/#leakingobjectfinder","title":"leakingObjectFinder","text":"<p>[androidJvm]\\ val leakingObjectFinder: LeakingObjectFinder</p> <p>Finds the objects that are leaking, for which LeakCanary will compute leak traces.</p> <p>Defaults to a FilteringLeakingObjectFinder that scans all objects in the heap dump and delegates the decision to AndroidObjectInspectors.appLeakingObjectFilters.</p>"},{"location":"api/leakcanary/-heap-analysis-config/metadata-extractor/","title":"Metadata extractor","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/metadataExtractor</p>"},{"location":"api/leakcanary/-heap-analysis-config/metadata-extractor/#metadataextractor","title":"metadataExtractor","text":"<p>[androidJvm]\\ val metadataExtractor: MetadataExtractor</p> <p>Extracts metadata from a hprof to be reported in shark.HeapAnalysisSuccess.metadata. Called on a background thread during heap analysis.</p> <p>Defaults to AndroidMetadataExtractor</p>"},{"location":"api/leakcanary/-heap-analysis-config/object-inspectors/","title":"Object inspectors","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/objectInspectors</p>"},{"location":"api/leakcanary/-heap-analysis-config/object-inspectors/#objectinspectors","title":"objectInspectors","text":"<p>[androidJvm]\\ val objectInspectors: List<ObjectInspector></p> <p>List of ObjectInspector that provide LeakCanary with insights about objects found in the heap. You can create your own ObjectInspector implementations, and also add a shark.AppSingletonInspector instance created with the list of internal singletons.</p> <p>Defaults to AndroidObjectInspectors.appDefaults</p>"},{"location":"api/leakcanary/-heap-analysis-config/proguard-mapping-provider/","title":"Proguard mapping provider","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/proguardMappingProvider</p>"},{"location":"api/leakcanary/-heap-analysis-config/proguard-mapping-provider/#proguardmappingprovider","title":"proguardMappingProvider","text":"<p>[androidJvm]\\ val proguardMappingProvider: () -> ProguardMapping?</p>"},{"location":"api/leakcanary/-heap-analysis-config/reference-matchers/","title":"Reference matchers","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/referenceMatchers</p>"},{"location":"api/leakcanary/-heap-analysis-config/reference-matchers/#referencematchers","title":"referenceMatchers","text":"<p>[androidJvm]\\ val referenceMatchers: List<ReferenceMatcher></p> <p>Known patterns of references in the heap, added here either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher).</p> <p>When adding your own custom LibraryLeakReferenceMatcher instances, you\u2019ll most likely want to set LibraryLeakReferenceMatcher.patternApplies with a filter that checks for the Android OS version and manufacturer. The build information can be obtained by calling shark.AndroidBuildMirror.fromHeapGraph.</p> <p>Defaults to AndroidReferenceMatchers.appDefaults</p>"},{"location":"api/leakcanary/-heap-analysis-config/strip-heap-dump/","title":"Strip heap dump","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisConfig/stripHeapDump</p>"},{"location":"api/leakcanary/-heap-analysis-config/strip-heap-dump/#stripheapdump","title":"stripHeapDump","text":"<p>[androidJvm]\\ val stripHeapDump: Boolean = false</p> <p>Whether the first step after a heap dump should be to replace the content of all arrays with zeroes. This increases the overall processing time but limits the amount of time the heap dump exists on disk with potential PII.</p>"},{"location":"api/leakcanary/-heap-analysis-decision/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-heap-analysis-decision/#heapanalysisdecision","title":"HeapAnalysisDecision","text":"<p>sealed class HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-heap-analysis-decision/#inheritors","title":"Inheritors","text":"AnalyzeHeap NoHeapAnalysis"},{"location":"api/leakcanary/-heap-analysis-decision/#types","title":"Types","text":"Name Summary AnalyzeHeap [androidJvm]object AnalyzeHeap : HeapAnalysisDecision NoHeapAnalysis [androidJvm]class NoHeapAnalysis(val reason: String) : HeapAnalysisDecision"},{"location":"api/leakcanary/-heap-analysis-decision/-analyze-heap/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisDecision/AnalyzeHeap</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-analyze-heap/#analyzeheap","title":"AnalyzeHeap","text":"<p>[androidJvm]\\ object AnalyzeHeap : HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisDecision/NoHeapAnalysis</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/#noheapanalysis","title":"NoHeapAnalysis","text":"<p>[androidJvm]\\ class NoHeapAnalysis(val reason: String) : HeapAnalysisDecision</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/#constructors","title":"Constructors","text":"NoHeapAnalysis [androidJvm]constructor(reason: String)"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/#properties","title":"Properties","text":"Name Summary reason [androidJvm]val reason: String"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/-no-heap-analysis/","title":"no heap analysis","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisDecision/NoHeapAnalysis/NoHeapAnalysis</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/-no-heap-analysis/#noheapanalysis","title":"NoHeapAnalysis","text":"<p>[androidJvm]\\ constructor(reason: String)</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/reason/","title":"Reason","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisDecision/NoHeapAnalysis/reason</p>"},{"location":"api/leakcanary/-heap-analysis-decision/-no-heap-analysis/reason/#reason","title":"reason","text":"<p>[androidJvm]\\ val reason: String</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/#heapanalysisinterceptor","title":"HeapAnalysisInterceptor","text":"<p>fun interface HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/#inheritors","title":"Inheritors","text":"ConditionalInterceptor GoodAndroidVersionInterceptor MinimumDiskSpaceInterceptor MinimumElapsedSinceStartInterceptor MinimumMemoryInterceptor OncePerPeriodInterceptor SaveResourceIdsInterceptor"},{"location":"api/leakcanary/-heap-analysis-interceptor/#types","title":"Types","text":"Name Summary Chain [androidJvm]interface Chain"},{"location":"api/leakcanary/-heap-analysis-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]abstract fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-heap-analysis-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisInterceptor/intercept</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ abstract fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisInterceptor/Chain</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/#chain","title":"Chain","text":"<p>[androidJvm]\\ interface Chain</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/#functions","title":"Functions","text":"Name Summary proceed [androidJvm]abstract fun proceed(): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/#properties","title":"Properties","text":"Name Summary job [androidJvm]abstract val job: HeapAnalysisJob"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/job/","title":"Job","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisInterceptor/Chain/job</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/job/#job","title":"job","text":"<p>[androidJvm]\\ abstract val job: HeapAnalysisJob</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/proceed/","title":"Proceed","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisInterceptor/Chain/proceed</p>"},{"location":"api/leakcanary/-heap-analysis-interceptor/-chain/proceed/#proceed","title":"proceed","text":"<p>[androidJvm]\\ abstract fun proceed(): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-heap-analysis-job/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob</p>"},{"location":"api/leakcanary/-heap-analysis-job/#heapanalysisjob","title":"HeapAnalysisJob","text":"<p>[androidJvm]\\ interface HeapAnalysisJob</p> <p>A HeapAnalysisJob represents a single prepared request to analyze the heap. It cannot be executed twice.</p>"},{"location":"api/leakcanary/-heap-analysis-job/#types","title":"Types","text":"Name Summary Result [androidJvm]sealed class Result"},{"location":"api/leakcanary/-heap-analysis-job/#functions","title":"Functions","text":"Name Summary cancel [androidJvm]abstract fun cancel(cancelReason: String)Cancels the job, if possible. Jobs that are already complete cannot be canceled. execute [androidJvm]abstract fun execute(): HeapAnalysisJob.ResultStarts the analysis job immediately, and blocks until a result is available."},{"location":"api/leakcanary/-heap-analysis-job/#properties","title":"Properties","text":"Name Summary canceled [androidJvm]abstract val canceled: Booleantrue of cancel has been called or if an HeapAnalysisInterceptor has returned Result.Canceled from HeapAnalysisInterceptor.intercept. context [androidJvm]abstract val context: JobContextIn memory store, mutable and thread safe. This allows passing data to interceptors. executed [androidJvm]abstract val executed: Booleantrue if execute has been called. It is an error to call execute more than once."},{"location":"api/leakcanary/-heap-analysis-job/cancel/","title":"Cancel","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/cancel</p>"},{"location":"api/leakcanary/-heap-analysis-job/cancel/#cancel","title":"cancel","text":"<p>[androidJvm]\\ abstract fun cancel(cancelReason: String)</p> <p>Cancels the job, if possible. Jobs that are already complete cannot be canceled.</p>"},{"location":"api/leakcanary/-heap-analysis-job/canceled/","title":"Canceled","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/canceled</p>"},{"location":"api/leakcanary/-heap-analysis-job/canceled/#canceled","title":"canceled","text":"<p>[androidJvm]\\ abstract val canceled: Boolean</p> <p>true of cancel has been called or if an HeapAnalysisInterceptor has returned Result.Canceled from HeapAnalysisInterceptor.intercept.</p>"},{"location":"api/leakcanary/-heap-analysis-job/context/","title":"Context","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/context</p>"},{"location":"api/leakcanary/-heap-analysis-job/context/#context","title":"context","text":"<p>[androidJvm]\\ abstract val context: JobContext</p> <p>In memory store, mutable and thread safe. This allows passing data to interceptors.</p>"},{"location":"api/leakcanary/-heap-analysis-job/execute/","title":"Execute","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/execute</p>"},{"location":"api/leakcanary/-heap-analysis-job/execute/#execute","title":"execute","text":"<p>[androidJvm]\\ abstract fun execute(): HeapAnalysisJob.Result</p> <p>Starts the analysis job immediately, and blocks until a result is available.</p>"},{"location":"api/leakcanary/-heap-analysis-job/execute/#return","title":"Return","text":"<p>Either Result.Done if the analysis was attempted or Result.Canceled</p>"},{"location":"api/leakcanary/-heap-analysis-job/executed/","title":"Executed","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/executed</p>"},{"location":"api/leakcanary/-heap-analysis-job/executed/#executed","title":"executed","text":"<p>[androidJvm]\\ abstract val executed: Boolean</p> <p>true if execute has been called. It is an error to call execute more than once.</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/#result","title":"Result","text":"<p>sealed class Result</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/#inheritors","title":"Inheritors","text":"Done Canceled"},{"location":"api/leakcanary/-heap-analysis-job/-result/#types","title":"Types","text":"Name Summary Canceled [androidJvm]data class Canceled(val cancelReason: String) : HeapAnalysisJob.Result Done [androidJvm]data class Done(val analysis: HeapAnalysis, val stripHeapDumpDurationMillis: Long? = null) : HeapAnalysisJob.Result"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Canceled</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/#canceled","title":"Canceled","text":"<p>[androidJvm]\\ data class Canceled(val cancelReason: String) : HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/#constructors","title":"Constructors","text":"Canceled [androidJvm]constructor(cancelReason: String)"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/#properties","title":"Properties","text":"Name Summary cancelReason [androidJvm]val cancelReason: String"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/-canceled/","title":"canceled","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Canceled/Canceled</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/-canceled/#canceled","title":"Canceled","text":"<p>[androidJvm]\\ constructor(cancelReason: String)</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/cancel-reason/","title":"Cancel reason","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Canceled/cancelReason</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-canceled/cancel-reason/#cancelreason","title":"cancelReason","text":"<p>[androidJvm]\\ val cancelReason: String</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Done</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/#done","title":"Done","text":"<p>[androidJvm]\\ data class Done(val analysis: HeapAnalysis, val stripHeapDumpDurationMillis: Long? = null) : HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/#constructors","title":"Constructors","text":"Done [androidJvm]constructor(analysis: HeapAnalysis, stripHeapDumpDurationMillis: Long? = null)"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/#properties","title":"Properties","text":"Name Summary analysis [androidJvm]val analysis: HeapAnalysis stripHeapDumpDurationMillis [androidJvm]val stripHeapDumpDurationMillis: Long? = nullThe time spent stripping the hprof of any data if HeapAnalysisConfig.stripHeapDump is true, null otherwise."},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/-done/","title":"done","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Done/Done</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/-done/#done","title":"Done","text":"<p>[androidJvm]\\ constructor(analysis: HeapAnalysis, stripHeapDumpDurationMillis: Long? = null)</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/analysis/","title":"Analysis","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Done/analysis</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/analysis/#analysis","title":"analysis","text":"<p>[androidJvm]\\ val analysis: HeapAnalysis</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/strip-heap-dump-duration-millis/","title":"Strip heap dump duration millis","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisJob/Result/Done/stripHeapDumpDurationMillis</p>"},{"location":"api/leakcanary/-heap-analysis-job/-result/-done/strip-heap-dump-duration-millis/#stripheapdumpdurationmillis","title":"stripHeapDumpDurationMillis","text":"<p>[androidJvm]\\ val stripHeapDumpDurationMillis: Long? = null</p> <p>The time spent stripping the hprof of any data if HeapAnalysisConfig.stripHeapDump is true, null otherwise.</p>"},{"location":"api/leakcanary/-heap-analysis-reporter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisReporter</p>"},{"location":"api/leakcanary/-heap-analysis-reporter/#heapanalysisreporter","title":"HeapAnalysisReporter","text":"<p>[androidJvm]\\ fun interface HeapAnalysisReporter</p> <p>Reports the results of a heap analysis created by AndroidDetectLeaksAssert.</p>"},{"location":"api/leakcanary/-heap-analysis-reporter/#functions","title":"Functions","text":"Name Summary reportHeapAnalysis [androidJvm]abstract fun reportHeapAnalysis(heapAnalysis: HeapAnalysis)"},{"location":"api/leakcanary/-heap-analysis-reporter/report-heap-analysis/","title":"Report heap analysis","text":"<p>//leakcanary-repo/leakcanary/HeapAnalysisReporter/reportHeapAnalysis</p>"},{"location":"api/leakcanary/-heap-analysis-reporter/report-heap-analysis/#reportheapanalysis","title":"reportHeapAnalysis","text":"<p>[androidJvm]\\ abstract fun reportHeapAnalysis(heapAnalysis: HeapAnalysis)</p>"},{"location":"api/leakcanary/-heap-dump-directory-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-heap-dump-directory-provider/#heapdumpdirectoryprovider","title":"HeapDumpDirectoryProvider","text":"<p>fun interface HeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-heap-dump-directory-provider/#functions","title":"Functions","text":"Name Summary heapDumpDirectory [jvm]abstract fun heapDumpDirectory(): FileExpected to be called only once per HeapDumpFileProvider implementation instance."},{"location":"api/leakcanary/-heap-dump-directory-provider/heap-dump-directory/","title":"Heap dump directory","text":"<p>//leakcanary-repo/leakcanary/HeapDumpDirectoryProvider/heapDumpDirectory</p>"},{"location":"api/leakcanary/-heap-dump-directory-provider/heap-dump-directory/#heapdumpdirectory","title":"heapDumpDirectory","text":"<p>[jvm]\\ abstract fun heapDumpDirectory(): File</p> <p>Expected to be called only once per HeapDumpFileProvider implementation instance.</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/#heapdumpfileprovider","title":"HeapDumpFileProvider","text":"<p>fun interface HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/#inheritors","title":"Inheritors","text":"DatetimeFormattedHeapDumpFileProvider"},{"location":"api/leakcanary/-heap-dump-file-provider/#functions","title":"Functions","text":"Name Summary newHeapDumpFile [jvm]abstract fun newHeapDumpFile(): FileReturns a File that can be passed to a HeapDumper to dump the heap."},{"location":"api/leakcanary/-heap-dump-file-provider/new-heap-dump-file/","title":"New heap dump file","text":"<p>//leakcanary-repo/leakcanary/HeapDumpFileProvider/newHeapDumpFile</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/new-heap-dump-file/#newheapdumpfile","title":"newHeapDumpFile","text":"<p>[jvm]\\ abstract fun newHeapDumpFile(): File</p> <p>Returns a File that can be passed to a HeapDumper to dump the heap.</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpFileProvider/Companion</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p> <p>This allows external modules to add factory methods for implementations of this interface as extension functions of this companion object.</p>"},{"location":"api/leakcanary/-heap-dump-file-provider/-companion/#functions","title":"Functions","text":"Name Summary datetimeFormatted [jvm]fun HeapDumpFileProvider.Companion.datetimeFormatted(directory: File, prefix: String = \"\", suffix: String = \"\", dateProvider: () -> Date = { Date() }): HeapDumpFileProvider tempFile [jvm]fun HeapDumpFileProvider.Companion.tempFile(): HeapDumpFileProvider"},{"location":"api/leakcanary/-heap-dump-storage-strategy/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/#heapdumpstoragestrategy","title":"HeapDumpStorageStrategy","text":"<p>interface HeapDumpStorageStrategy</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/#inheritors","title":"Inheritors","text":"DeleteOnHeapDumpClose KeepHeapDumps KeepHeapDumpsOnObjectsGrowing KeepZippedHeapDumpsOnObjectsGrowing"},{"location":"api/leakcanary/-heap-dump-storage-strategy/#types","title":"Types","text":"Name Summary DeleteOnHeapDumpClose [jvm]class DeleteOnHeapDumpClose(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategyDeletes heap dumps as soon as we\u2019re done traversing them. This is the most disk space efficient strategy. KeepHeapDumps [jvm]object KeepHeapDumps : HeapDumpStorageStrategyNo deletion of heap dump files. This is useful if you intend to open up the heap dumps directly or re run the analysis no matter the outcome. KeepHeapDumpsOnObjectsGrowing [jvm]class KeepHeapDumpsOnObjectsGrowing(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategyKeeps the heap dumps until we\u2019re done diffing, then delete them only if there are no growing objects. This is useful if you intend to open up the heap dumps directly or re run the analysis on failure. KeepZippedHeapDumpsOnObjectsGrowing [jvm]class KeepZippedHeapDumpsOnObjectsGrowing(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategyKeeps the heap dumps until we\u2019re done diffing, then on completion creates a zip for each heap dump if there are growing object, and delete all the source heap dumps. This is useful if you intend to upload the heap dumps on failure in CI and you want to keep disk space, network usage and cloud storage low. Zipped heap dumps are typically 4x smaller so this is worth it, although the trade off is that zipping can add a few seconds per heap dump to the runtime duration of a test."},{"location":"api/leakcanary/-heap-dump-storage-strategy/#functions","title":"Functions","text":"Name Summary onHeapDiffResult [jvm]open fun onHeapDiffResult(result: Result<HeapDiff>) onHeapDumpClosed [jvm]open fun onHeapDumpClosed(heapDumpFile: File) onHeapDumped [jvm]open fun onHeapDumped(heapDumpFile: File)"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-heap-diff-result/","title":"On heap diff result","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/onHeapDiffResult</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-heap-diff-result/#onheapdiffresult","title":"onHeapDiffResult","text":"<p>[jvm]\\ open fun onHeapDiffResult(result: Result<HeapDiff>)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-heap-dump-closed/","title":"On heap dump closed","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/onHeapDumpClosed</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-heap-dump-closed/#onheapdumpclosed","title":"onHeapDumpClosed","text":"<p>[jvm]\\ open fun onHeapDumpClosed(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-heap-dumped/","title":"On heap dumped","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/onHeapDumped</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-heap-dumped/#onheapdumped","title":"onHeapDumped","text":"<p>[jvm]\\ open fun onHeapDumped(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-object-growth-detection-complete/","title":"On object growth detection complete","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/onObjectGrowthDetectionComplete</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/on-object-growth-detection-complete/#onobjectgrowthdetectioncomplete","title":"onObjectGrowthDetectionComplete","text":"<p>[jvm]\\ open override fun onObjectGrowthDetectionComplete(result: HeapDiff)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/DeleteOnHeapDumpClose</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/#deleteonheapdumpclose","title":"DeleteOnHeapDumpClose","text":"<p>[jvm]\\ class DeleteOnHeapDumpClose(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategy</p> <p>Deletes heap dumps as soon as we\u2019re done traversing them. This is the most disk space efficient strategy.</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/#constructors","title":"Constructors","text":"DeleteOnHeapDumpClose [jvm]constructor(deleteFile: (File) -> Unit = { it.delete() })"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/#functions","title":"Functions","text":"Name Summary onHeapDiffResult [jvm]open fun onHeapDiffResult(result: Result<HeapDiff>) onHeapDumpClosed [jvm]open override fun onHeapDumpClosed(heapDumpFile: File) onHeapDumped [jvm]open fun onHeapDumped(heapDumpFile: File)"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/-delete-on-heap-dump-close/","title":"delete on heap dump close","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/DeleteOnHeapDumpClose/DeleteOnHeapDumpClose</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/-delete-on-heap-dump-close/#deleteonheapdumpclose","title":"DeleteOnHeapDumpClose","text":"<p>[jvm]\\ constructor(deleteFile: (File) -> Unit = { it.delete() })</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/on-heap-dump-closed/","title":"On heap dump closed","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/DeleteOnHeapDumpClose/onHeapDumpClosed</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-delete-on-heap-dump-close/on-heap-dump-closed/#onheapdumpclosed","title":"onHeapDumpClosed","text":"<p>[jvm]\\ open override fun onHeapDumpClosed(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumps</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/#keepheapdumps","title":"KeepHeapDumps","text":"<p>[jvm]\\ object KeepHeapDumps : HeapDumpStorageStrategy</p> <p>No deletion of heap dump files. This is useful if you intend to open up the heap dumps directly or re run the analysis no matter the outcome.</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps/#functions","title":"Functions","text":"Name Summary onHeapDiffResult [jvm]open fun onHeapDiffResult(result: Result<HeapDiff>) onHeapDumpClosed [jvm]open fun onHeapDumpClosed(heapDumpFile: File) onHeapDumped [jvm]open fun onHeapDumped(heapDumpFile: File)"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumpsOnObjectsGrowing</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/#keepheapdumpsonobjectsgrowing","title":"KeepHeapDumpsOnObjectsGrowing","text":"<p>[jvm]\\ class KeepHeapDumpsOnObjectsGrowing(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategy</p> <p>Keeps the heap dumps until we\u2019re done diffing, then delete them only if there are no growing objects. This is useful if you intend to open up the heap dumps directly or re run the analysis on failure.</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/#constructors","title":"Constructors","text":"KeepHeapDumpsOnObjectsGrowing [jvm]constructor(deleteFile: (File) -> Unit = { it.delete() })"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/#functions","title":"Functions","text":"Name Summary onHeapDiffResult [jvm]open override fun onHeapDiffResult(result: Result<HeapDiff>) onHeapDumpClosed [jvm]open fun onHeapDumpClosed(heapDumpFile: File) onHeapDumped [jvm]open override fun onHeapDumped(heapDumpFile: File)"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/-keep-heap-dumps-on-objects-growing/","title":"keep heap dumps on objects growing","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumpsOnObjectsGrowing/KeepHeapDumpsOnObjectsGrowing</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/-keep-heap-dumps-on-objects-growing/#keepheapdumpsonobjectsgrowing","title":"KeepHeapDumpsOnObjectsGrowing","text":"<p>[jvm]\\ constructor(deleteFile: (File) -> Unit = { it.delete() })</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-diff-result/","title":"On heap diff result","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumpsOnObjectsGrowing/onHeapDiffResult</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-diff-result/#onheapdiffresult","title":"onHeapDiffResult","text":"<p>[jvm]\\ open override fun onHeapDiffResult(result: Result<HeapDiff>)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dump-closed/","title":"On heap dump closed","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumpsOnObjectsGrowing/onHeapDumpClosed</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dump-closed/#onheapdumpclosed","title":"onHeapDumpClosed","text":"<p>[jvm]\\ open override fun onHeapDumpClosed(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dumped/","title":"On heap dumped","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumpsOnObjectsGrowing/onHeapDumped</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-heap-dumped/#onheapdumped","title":"onHeapDumped","text":"<p>[jvm]\\ open override fun onHeapDumped(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-object-growth-detection-complete/","title":"On object growth detection complete","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepHeapDumpsOnObjectsGrowing/onObjectGrowthDetectionComplete</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-heap-dumps-on-objects-growing/on-object-growth-detection-complete/#onobjectgrowthdetectioncomplete","title":"onObjectGrowthDetectionComplete","text":"<p>[jvm]\\ open override fun onObjectGrowthDetectionComplete(result: HeapDiff)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepZippedHeapDumpsOnObjectsGrowing</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/#keepzippedheapdumpsonobjectsgrowing","title":"KeepZippedHeapDumpsOnObjectsGrowing","text":"<p>[jvm]\\ class KeepZippedHeapDumpsOnObjectsGrowing(deleteFile: (File) -> Unit = { it.delete() }) : HeapDumpStorageStrategy</p> <p>Keeps the heap dumps until we\u2019re done diffing, then on completion creates a zip for each heap dump if there are growing object, and delete all the source heap dumps. This is useful if you intend to upload the heap dumps on failure in CI and you want to keep disk space, network usage and cloud storage low. Zipped heap dumps are typically 4x smaller so this is worth it, although the trade off is that zipping can add a few seconds per heap dump to the runtime duration of a test.</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/#constructors","title":"Constructors","text":"KeepZippedHeapDumpsOnObjectsGrowing [jvm]constructor(deleteFile: (File) -> Unit = { it.delete() })"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/#functions","title":"Functions","text":"Name Summary onHeapDiffResult [jvm]open override fun onHeapDiffResult(result: Result<HeapDiff>) onHeapDumpClosed [jvm]open fun onHeapDumpClosed(heapDumpFile: File) onHeapDumped [jvm]open override fun onHeapDumped(heapDumpFile: File)"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/-keep-zipped-heap-dumps-on-objects-growing/","title":"keep zipped heap dumps on objects growing","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepZippedHeapDumpsOnObjectsGrowing/KeepZippedHeapDumpsOnObjectsGrowing</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/-keep-zipped-heap-dumps-on-objects-growing/#keepzippedheapdumpsonobjectsgrowing","title":"KeepZippedHeapDumpsOnObjectsGrowing","text":"<p>[jvm]\\ constructor(deleteFile: (File) -> Unit = { it.delete() })</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-diff-result/","title":"On heap diff result","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepZippedHeapDumpsOnObjectsGrowing/onHeapDiffResult</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-diff-result/#onheapdiffresult","title":"onHeapDiffResult","text":"<p>[jvm]\\ open override fun onHeapDiffResult(result: Result<HeapDiff>)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dump-closed/","title":"On heap dump closed","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepZippedHeapDumpsOnObjectsGrowing/onHeapDumpClosed</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dump-closed/#onheapdumpclosed","title":"onHeapDumpClosed","text":"<p>[jvm]\\ open override fun onHeapDumpClosed(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dumped/","title":"On heap dumped","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepZippedHeapDumpsOnObjectsGrowing/onHeapDumped</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-heap-dumped/#onheapdumped","title":"onHeapDumped","text":"<p>[jvm]\\ open override fun onHeapDumped(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-object-growth-detection-complete/","title":"On object growth detection complete","text":"<p>//leakcanary-repo/leakcanary/HeapDumpStorageStrategy/KeepZippedHeapDumpsOnObjectsGrowing/onObjectGrowthDetectionComplete</p>"},{"location":"api/leakcanary/-heap-dump-storage-strategy/-keep-zipped-heap-dumps-on-objects-growing/on-object-growth-detection-complete/#onobjectgrowthdetectioncomplete","title":"onObjectGrowthDetectionComplete","text":"<p>[jvm]\\ open override fun onObjectGrowthDetectionComplete(result: HeapDiff)</p>"},{"location":"api/leakcanary/-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumper</p>"},{"location":"api/leakcanary/-heap-dumper/#heapdumper","title":"HeapDumper","text":"<p>fun interface HeapDumper</p>"},{"location":"api/leakcanary/-heap-dumper/#inheritors","title":"Inheritors","text":"ObjectGrowthWarmupHeapDumper"},{"location":"api/leakcanary/-heap-dumper/#types","title":"Types","text":"Name Summary Companion [jvm]object CompanionThis allows external modules to add factory methods for implementations of this interface as extension functions of this companion object."},{"location":"api/leakcanary/-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [jvm]abstract fun dumpHeap(heapDumpFile: File)Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed. withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/HeapDumper/dumpHeap</p>"},{"location":"api/leakcanary/-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ abstract fun dumpHeap(heapDumpFile: File)</p> <p>Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed.</p> <p>Implementations can throw a runtime exception if heap dumping failed.</p>"},{"location":"api/leakcanary/-heap-dumper/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HeapDumper/Companion</p>"},{"location":"api/leakcanary/-heap-dumper/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p> <p>This allows external modules to add factory methods for implementations of this interface as extension functions of this companion object.</p>"},{"location":"api/leakcanary/-heap-dumper/-companion/#functions","title":"Functions","text":"Name Summary forAndroidInProcess [androidJvm]fun HeapDumper.Companion.forAndroidInProcess(): AndroidDebugHeapDumper forJvmInProcess [jvm]fun HeapDumper.Companion.forJvmInProcess(): HotSpotHeapDumper forUiAutomatorAsShell [androidJvm]fun HeapDumper.Companion.forUiAutomatorAsShell(withGc: Boolean, dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName): UiAutomatorShellHeapDumper"},{"location":"api/leakcanary/-hot-spot-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/HotSpotHeapDumper</p>"},{"location":"api/leakcanary/-hot-spot-heap-dumper/#hotspotheapdumper","title":"HotSpotHeapDumper","text":"<p>[jvm]\\ object HotSpotHeapDumper : HeapDumper</p>"},{"location":"api/leakcanary/-hot-spot-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [jvm]open override fun dumpHeap(heapDumpFile: File) withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/-hot-spot-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/HotSpotHeapDumper/dumpHeap</p>"},{"location":"api/leakcanary/-hot-spot-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ open override fun dumpHeap(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-installable-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/InstallableWatcher</p>"},{"location":"api/leakcanary/-installable-watcher/#installablewatcher","title":"InstallableWatcher","text":"<p>interface InstallableWatcher</p>"},{"location":"api/leakcanary/-installable-watcher/#inheritors","title":"Inheritors","text":"ActivityWatcher FragmentAndViewModelWatcher RootViewWatcher ServiceWatcher"},{"location":"api/leakcanary/-installable-watcher/#functions","title":"Functions","text":"Name Summary install [androidJvm]abstract fun install() uninstall [androidJvm]abstract fun uninstall()"},{"location":"api/leakcanary/-installable-watcher/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/InstallableWatcher/install</p>"},{"location":"api/leakcanary/-installable-watcher/install/#install","title":"install","text":"<p>[androidJvm]\\ abstract fun install()</p>"},{"location":"api/leakcanary/-installable-watcher/uninstall/","title":"Uninstall","text":"<p>//leakcanary-repo/leakcanary/InstallableWatcher/uninstall</p>"},{"location":"api/leakcanary/-installable-watcher/uninstall/#uninstall","title":"uninstall","text":"<p>[androidJvm]\\ abstract fun uninstall()</p>"},{"location":"api/leakcanary/-job-context/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/JobContext</p>"},{"location":"api/leakcanary/-job-context/#jobcontext","title":"JobContext","text":"<p>[androidJvm]\\ class JobContext(val starter: Class<*>? = null)</p> <p>In memory store that can be used to store objects in a given HeapAnalysisJob instance. This is a simple MutableMap of String to Any, but with unsafe generics access.</p> <p>By convention, starter should be the class that triggered the start of the job.</p>"},{"location":"api/leakcanary/-job-context/#constructors","title":"Constructors","text":"JobContext [androidJvm]constructor(starter: KClass<>)constructor(starter: Class<>? = null)"},{"location":"api/leakcanary/-job-context/#functions","title":"Functions","text":"Name Summary contains [androidJvm]operator fun contains(key: String): Boolean get [androidJvm]operator fun <T> get(key: String): T? getOrPut [androidJvm]fun <T> getOrPut(key: String, defaultValue: () -> T): T minusAssign [androidJvm]operator fun minusAssign(key: String) set [androidJvm]operator fun <T> set(key: String, value: T)"},{"location":"api/leakcanary/-job-context/#properties","title":"Properties","text":"Name Summary starter [androidJvm]val starter: Class<*>? = null"},{"location":"api/leakcanary/-job-context/-job-context/","title":"job context","text":"<p>//leakcanary-repo/leakcanary/JobContext/JobContext</p>"},{"location":"api/leakcanary/-job-context/-job-context/#jobcontext","title":"JobContext","text":"<p>[androidJvm]\\ constructor(starter: KClass<*>)</p> <p>constructor(starter: Class<*>? = null)</p>"},{"location":"api/leakcanary/-job-context/contains/","title":"Contains","text":"<p>//leakcanary-repo/leakcanary/JobContext/contains</p>"},{"location":"api/leakcanary/-job-context/contains/#contains","title":"contains","text":"<p>[androidJvm]\\ operator fun contains(key: String): Boolean</p>"},{"location":"api/leakcanary/-job-context/contains/#see-also","title":"See also","text":"MutableMap.containsKey"},{"location":"api/leakcanary/-job-context/get-or-put/","title":"Get or put","text":"<p>//leakcanary-repo/leakcanary/JobContext/getOrPut</p>"},{"location":"api/leakcanary/-job-context/get-or-put/#getorput","title":"getOrPut","text":"<p>[androidJvm]\\ fun <T> getOrPut(key: String, defaultValue: () -> T): T</p>"},{"location":"api/leakcanary/-job-context/get-or-put/#see-also","title":"See also","text":"getOrPut"},{"location":"api/leakcanary/-job-context/get/","title":"Get","text":"<p>//leakcanary-repo/leakcanary/JobContext/get</p>"},{"location":"api/leakcanary/-job-context/get/#get","title":"get","text":"<p>[androidJvm]\\ operator fun <T> get(key: String): T?</p>"},{"location":"api/leakcanary/-job-context/minus-assign/","title":"Minus assign","text":"<p>//leakcanary-repo/leakcanary/JobContext/minusAssign</p>"},{"location":"api/leakcanary/-job-context/minus-assign/#minusassign","title":"minusAssign","text":"<p>[androidJvm]\\ operator fun minusAssign(key: String)</p>"},{"location":"api/leakcanary/-job-context/minus-assign/#see-also","title":"See also","text":"MutableMap.remove"},{"location":"api/leakcanary/-job-context/set/","title":"Set","text":"<p>//leakcanary-repo/leakcanary/JobContext/set</p>"},{"location":"api/leakcanary/-job-context/set/#set","title":"set","text":"<p>[androidJvm]\\ operator fun <T> set(key: String, value: T)</p>"},{"location":"api/leakcanary/-job-context/set/#see-also","title":"See also","text":"set"},{"location":"api/leakcanary/-job-context/starter/","title":"Starter","text":"<p>//leakcanary-repo/leakcanary/JobContext/starter</p>"},{"location":"api/leakcanary/-job-context/starter/#starter","title":"starter","text":"<p>[androidJvm]\\ val starter: Class<*>? = null</p>"},{"location":"api/leakcanary/-keyed-weak-reference/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference</p>"},{"location":"api/leakcanary/-keyed-weak-reference/#keyedweakreference","title":"KeyedWeakReference","text":"<p>[jvm]\\ class KeyedWeakReference(referent: Any, val key: String, val description: String, val watchUptimeMillis: Long, referenceQueue: ReferenceQueue<Any>) : WeakReference<Any> </p> <p>A weak reference used by ReferenceQueueRetainedObjectTracker to determine which objects become weakly reachable and which don\u2019t. ReferenceQueueRetainedObjectTracker uses key to keep track of KeyedWeakReference instances that haven\u2019t made it into the associated ReferenceQueue yet.</p> <p>heapDumpUptimeMillis should be set with the current time from UptimeClock.uptime right before dumping the heap, so that we can later determine how long an object was retained.</p>"},{"location":"api/leakcanary/-keyed-weak-reference/#constructors","title":"Constructors","text":"KeyedWeakReference [jvm]constructor(referent: Any, key: String, description: String, watchUptimeMillis: Long, referenceQueue: ReferenceQueue<Any>)"},{"location":"api/leakcanary/-keyed-weak-reference/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/leakcanary/-keyed-weak-reference/#functions","title":"Functions","text":"Name Summary clear [jvm]open override fun clear() enqueue [jvm]open fun enqueue(): Boolean get [jvm]open override fun get(): Any? getAndLeakReferent [jvm]fun getAndLeakReferent(): Any?Same as WeakReference.get but does not trigger an intentional crash. refersTo [jvm]fun refersTo(p0: Any): Boolean"},{"location":"api/leakcanary/-keyed-weak-reference/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String key [jvm]val key: String retained [jvm]val retained: Boolean retainedUptimeMillis [jvm]@Volatilevar retainedUptimeMillis: LongTime at which the associated object (referent) was considered retained, or -1 if it hasn\u2019t been yet. watchUptimeMillis [jvm]val watchUptimeMillis: Long"},{"location":"api/leakcanary/-keyed-weak-reference/-keyed-weak-reference/","title":"keyed weak reference","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/KeyedWeakReference</p>"},{"location":"api/leakcanary/-keyed-weak-reference/-keyed-weak-reference/#keyedweakreference","title":"KeyedWeakReference","text":"<p>[jvm]\\ constructor(referent: Any, key: String, description: String, watchUptimeMillis: Long, referenceQueue: ReferenceQueue<Any>)</p>"},{"location":"api/leakcanary/-keyed-weak-reference/clear/","title":"Clear","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/clear</p>"},{"location":"api/leakcanary/-keyed-weak-reference/clear/#clear","title":"clear","text":"<p>[jvm]\\ open override fun clear()</p>"},{"location":"api/leakcanary/-keyed-weak-reference/description/","title":"Description","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/description</p>"},{"location":"api/leakcanary/-keyed-weak-reference/description/#description","title":"description","text":"<p>[jvm]\\ val description: String</p>"},{"location":"api/leakcanary/-keyed-weak-reference/get-and-leak-referent/","title":"Get and leak referent","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/getAndLeakReferent</p>"},{"location":"api/leakcanary/-keyed-weak-reference/get-and-leak-referent/#getandleakreferent","title":"getAndLeakReferent","text":"<p>[jvm]\\ fun getAndLeakReferent(): Any?</p> <p>Same as WeakReference.get but does not trigger an intentional crash.</p> <p>Calling this method will end up creating local references to the objects, preventing them from becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>"},{"location":"api/leakcanary/-keyed-weak-reference/get/","title":"Get","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/get</p>"},{"location":"api/leakcanary/-keyed-weak-reference/get/#get","title":"get","text":"<p>[jvm]\\ open override fun get(): Any?</p>"},{"location":"api/leakcanary/-keyed-weak-reference/key/","title":"Key","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/key</p>"},{"location":"api/leakcanary/-keyed-weak-reference/key/#key","title":"key","text":"<p>[jvm]\\ val key: String</p>"},{"location":"api/leakcanary/-keyed-weak-reference/retained-uptime-millis/","title":"Retained uptime millis","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/retainedUptimeMillis</p>"},{"location":"api/leakcanary/-keyed-weak-reference/retained-uptime-millis/#retaineduptimemillis","title":"retainedUptimeMillis","text":"<p>[jvm]\\</p> <p>@Volatile</p> <p>var retainedUptimeMillis: Long</p> <p>Time at which the associated object (referent) was considered retained, or -1 if it hasn\u2019t been yet.</p>"},{"location":"api/leakcanary/-keyed-weak-reference/retained/","title":"Retained","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/retained</p>"},{"location":"api/leakcanary/-keyed-weak-reference/retained/#retained","title":"retained","text":"<p>[jvm]\\ val retained: Boolean</p>"},{"location":"api/leakcanary/-keyed-weak-reference/watch-uptime-millis/","title":"Watch uptime millis","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/watchUptimeMillis</p>"},{"location":"api/leakcanary/-keyed-weak-reference/watch-uptime-millis/#watchuptimemillis","title":"watchUptimeMillis","text":"<p>[jvm]\\ val watchUptimeMillis: Long</p>"},{"location":"api/leakcanary/-keyed-weak-reference/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/Companion</p>"},{"location":"api/leakcanary/-keyed-weak-reference/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/leakcanary/-keyed-weak-reference/-companion/#properties","title":"Properties","text":"Name Summary heapDumpUptimeMillis [jvm]@JvmStatic@Volatilevar heapDumpUptimeMillis: Long"},{"location":"api/leakcanary/-keyed-weak-reference/-companion/heap-dump-uptime-millis/","title":"Heap dump uptime millis","text":"<p>//leakcanary-repo/leakcanary/KeyedWeakReference/Companion/heapDumpUptimeMillis</p>"},{"location":"api/leakcanary/-keyed-weak-reference/-companion/heap-dump-uptime-millis/#heapdumpuptimemillis","title":"heapDumpUptimeMillis","text":"<p>[jvm]\\</p> <p>@JvmStatic</p> <p>@Volatile</p> <p>var heapDumpUptimeMillis: Long</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LazyForwardingEventListener</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/#lazyforwardingeventlistener","title":"LazyForwardingEventListener","text":"<p>[androidJvm]\\ class LazyForwardingEventListener(lazyEventListener: () -> EventListener) : EventListener</p> <p>Forwards events to the EventListener provided by lazyEventListener which is evaluated lazily, when the first comes in.</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/#constructors","title":"Constructors","text":"LazyForwardingEventListener [androidJvm]constructor(lazyEventListener: () -> EventListener)"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-lazy-forwarding-event-listener/-lazy-forwarding-event-listener/","title":"lazy forwarding event listener","text":"<p>//leakcanary-repo/leakcanary/LazyForwardingEventListener/LazyForwardingEventListener</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/-lazy-forwarding-event-listener/#lazyforwardingeventlistener","title":"LazyForwardingEventListener","text":"<p>[androidJvm]\\ constructor(lazyEventListener: () -> EventListener)</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/LazyForwardingEventListener/onEvent</p>"},{"location":"api/leakcanary/-lazy-forwarding-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-leak-assertions/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LeakAssertions</p>"},{"location":"api/leakcanary/-leak-assertions/#leakassertions","title":"LeakAssertions","text":"<p>[androidJvm]\\ object LeakAssertions</p>"},{"location":"api/leakcanary/-leak-assertions/#functions","title":"Functions","text":"Name Summary assertNoLeaks [androidJvm]fun assertNoLeaks(tag: String = NO_TAG)Asserts that there are no leak in the heap at this point in time."},{"location":"api/leakcanary/-leak-assertions/#properties","title":"Properties","text":"Name Summary NO_TAG [androidJvm]const val NO_TAG: String"},{"location":"api/leakcanary/-leak-assertions/-n-o_-t-a-g/","title":"n o t a g","text":"<p>//leakcanary-repo/leakcanary/LeakAssertions/NO_TAG</p>"},{"location":"api/leakcanary/-leak-assertions/-n-o_-t-a-g/#no_tag","title":"NO_TAG","text":"<p>[androidJvm]\\ const val NO_TAG: String</p>"},{"location":"api/leakcanary/-leak-assertions/assert-no-leaks/","title":"Assert no leaks","text":"<p>//leakcanary-repo/leakcanary/LeakAssertions/assertNoLeaks</p>"},{"location":"api/leakcanary/-leak-assertions/assert-no-leaks/#assertnoleaks","title":"assertNoLeaks","text":"<p>[androidJvm]\\ fun assertNoLeaks(tag: String = NO_TAG)</p> <p>Asserts that there are no leak in the heap at this point in time.</p> <p>This method should be called on the instrumentation thread.</p> <p>This method is may block the current thread for a significant amount of time, as it might need to dump the heap and analyze it.</p> <p>If leaks are found, this method is expected to throw an exception, which will fail the test.</p> <p>The specific details depend on what you configured in DetectLeaksAssert.update.</p> <p>tag identifies the calling code, which can then be used for reporting purposes or to skip leak detection for specific tags in a subset of tests (see SkipLeakDetection).</p>"},{"location":"api/leakcanary/-leak-canary/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LeakCanary</p>"},{"location":"api/leakcanary/-leak-canary/#leakcanary","title":"LeakCanary","text":"<p>[androidJvm]\\ object LeakCanary</p> <p>The entry point API for LeakCanary. LeakCanary builds on top of AppWatcher. AppWatcher notifies LeakCanary of retained instances, which in turns dumps the heap, analyses it and publishes the results.</p> <p>LeakCanary can be configured by updating config.</p>"},{"location":"api/leakcanary/-leak-canary/#types","title":"Types","text":"Name Summary Config [androidJvm]data class Config(val dumpHeap: Boolean = true, val dumpHeapWhenDebugging: Boolean = false, val retainedVisibleThreshold: Int = 5, val referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, val objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, val metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, val computeRetainedHeapSize: Boolean = true, val maxStoredHeapDumps: Int = 7, val requestWriteExternalStoragePermission: Boolean = false, val leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, val heapDumper: HeapDumper = AndroidDebugHeapDumper, val eventListeners: List<EventListener> = listOf( LogcatEventListener, ToastEventListener, LazyForwardingEventListener { if (InternalLeakCanary.formFactor == TV) TvEventListener else NotificationEventListener }, when { RemoteWorkManagerHeapAnalyzer.remoteLeakCanaryServiceInClasspath -> RemoteWorkManagerHeapAnalyzer WorkManagerHeapAnalyzer.validWorkManagerInClasspath -> WorkManagerHeapAnalyzer else -> BackgroundThreadHeapAnalyzer } ), val showNotifications: Boolean = true)LeakCanary configuration data class. Properties can be updated via copy."},{"location":"api/leakcanary/-leak-canary/#functions","title":"Functions","text":"Name Summary dumpHeap [androidJvm]fun dumpHeap()Immediately triggers a heap dump and analysis, if there is at least one retained instance tracked by AppWatcher.objectWatcher. If there are no retained instances then the heap will not be dumped and a notification will be shown instead. newLeakDisplayActivityIntent [androidJvm]fun newLeakDisplayActivityIntent(): IntentReturns a new Intent that can be used to programmatically launch the leak display activity. showLeakDisplayActivityLauncherIcon [androidJvm]fun showLeakDisplayActivityLauncherIcon(showLauncherIcon: Boolean)Dynamically shows / hides the launcher icon for the leak display activity. Note: you can change the default value by overriding the <code>leak_canary_add_launcher_icon</code> boolean resource:"},{"location":"api/leakcanary/-leak-canary/#properties","title":"Properties","text":"Name Summary config [androidJvm]@JvmStatic@Volatilevar config: LeakCanary.ConfigThe current LeakCanary configuration. Can be updated at any time, usually by replacing it with a mutated copy, e.g.:"},{"location":"api/leakcanary/-leak-canary/config/","title":"Config","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/config</p>"},{"location":"api/leakcanary/-leak-canary/config/#config","title":"config","text":"<p>[androidJvm]\\</p> <p>@JvmStatic</p> <p>@Volatile</p> <p>var config: LeakCanary.Config</p> <p>The current LeakCanary configuration. Can be updated at any time, usually by replacing it with a mutated copy, e.g.:</p> <pre><code>LeakCanary.config = LeakCanary.config.copy(retainedVisibleThreshold = 3)\n</code></pre> <p>In Java, use LeakCanary.Config.Builder instead:</p> <pre><code>LeakCanary.Config config = LeakCanary.getConfig().newBuilder()\n.retainedVisibleThreshold(3)\n.build();\nLeakCanary.setConfig(config);\n</code></pre>"},{"location":"api/leakcanary/-leak-canary/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/dumpHeap</p>"},{"location":"api/leakcanary/-leak-canary/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[androidJvm]\\ fun dumpHeap()</p> <p>Immediately triggers a heap dump and analysis, if there is at least one retained instance tracked by AppWatcher.objectWatcher. If there are no retained instances then the heap will not be dumped and a notification will be shown instead.</p>"},{"location":"api/leakcanary/-leak-canary/new-leak-display-activity-intent/","title":"New leak display activity intent","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/newLeakDisplayActivityIntent</p>"},{"location":"api/leakcanary/-leak-canary/new-leak-display-activity-intent/#newleakdisplayactivityintent","title":"newLeakDisplayActivityIntent","text":"<p>[androidJvm]\\ fun newLeakDisplayActivityIntent(): Intent</p> <p>Returns a new Intent that can be used to programmatically launch the leak display activity.</p>"},{"location":"api/leakcanary/-leak-canary/show-leak-display-activity-launcher-icon/","title":"Show leak display activity launcher icon","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/showLeakDisplayActivityLauncherIcon</p>"},{"location":"api/leakcanary/-leak-canary/show-leak-display-activity-launcher-icon/#showleakdisplayactivitylaunchericon","title":"showLeakDisplayActivityLauncherIcon","text":"<p>[androidJvm]\\ fun showLeakDisplayActivityLauncherIcon(showLauncherIcon: Boolean)</p> <p>Dynamically shows / hides the launcher icon for the leak display activity. Note: you can change the default value by overriding the <code>leak_canary_add_launcher_icon</code> boolean resource:</p> <pre><code><?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n<bool name=\"leak_canary_add_launcher_icon\">false</bool>\n</resources>\n</code></pre>"},{"location":"api/leakcanary/-leak-canary/-config/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config</p>"},{"location":"api/leakcanary/-leak-canary/-config/#config","title":"Config","text":"<p>data class Config(val dumpHeap: Boolean = true, val dumpHeapWhenDebugging: Boolean = false, val retainedVisibleThreshold: Int = 5, val referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, val objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, val metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, val computeRetainedHeapSize: Boolean = true, val maxStoredHeapDumps: Int = 7, val requestWriteExternalStoragePermission: Boolean = false, val leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, val heapDumper: HeapDumper = AndroidDebugHeapDumper, val eventListeners: List<EventListener> = listOf( LogcatEventListener, ToastEventListener, LazyForwardingEventListener { if (InternalLeakCanary.formFactor == TV) TvEventListener else NotificationEventListener }, when { RemoteWorkManagerHeapAnalyzer.remoteLeakCanaryServiceInClasspath -> RemoteWorkManagerHeapAnalyzer WorkManagerHeapAnalyzer.validWorkManagerInClasspath -> WorkManagerHeapAnalyzer else -> BackgroundThreadHeapAnalyzer } ), val showNotifications: Boolean = true)</p> <p>LeakCanary configuration data class. Properties can be updated via copy.</p>"},{"location":"api/leakcanary/-leak-canary/-config/#see-also","title":"See also","text":"LeakCanary.config"},{"location":"api/leakcanary/-leak-canary/-config/#constructors","title":"Constructors","text":"Config [androidJvm]constructor(dumpHeap: Boolean = true, dumpHeapWhenDebugging: Boolean = false, retainedVisibleThreshold: Int = 5, referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: Boolean = true, maxStoredHeapDumps: Int = 7, requestWriteExternalStoragePermission: Boolean = false, leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, heapDumper: HeapDumper = AndroidDebugHeapDumper, eventListeners: List<EventListener> = listOf( LogcatEventListener, ToastEventListener, LazyForwardingEventListener { if (InternalLeakCanary.formFactor == TV) TvEventListener else NotificationEventListener }, when { RemoteWorkManagerHeapAnalyzer.remoteLeakCanaryServiceInClasspath -> RemoteWorkManagerHeapAnalyzer WorkManagerHeapAnalyzer.validWorkManagerInClasspath -> WorkManagerHeapAnalyzer else -> BackgroundThreadHeapAnalyzer } ), showNotifications: Boolean = true)"},{"location":"api/leakcanary/-leak-canary/-config/#types","title":"Types","text":"Name Summary Builder [androidJvm]class BuilderBuilder for LeakCanary.Config intended to be used only from Java code."},{"location":"api/leakcanary/-leak-canary/-config/#functions","title":"Functions","text":"Name Summary newBuilder [androidJvm]fun newBuilder(): LeakCanary.Config.BuilderConstruct a new Config via LeakCanary.Config.Builder. Note: this method is intended to be used from Java code only. For idiomatic Kotlin use <code>copy()</code> to modify LeakCanary.config."},{"location":"api/leakcanary/-leak-canary/-config/#properties","title":"Properties","text":"Name Summary computeRetainedHeapSize [androidJvm]val computeRetainedHeapSize: Boolean = trueWhether to compute the retained heap size, which is the total number of bytes in memory that would be reclaimed if the detected leaks didn\u2019t happen. This includes native memory associated to Java objects (e.g. Android bitmaps). dumpHeap [androidJvm]val dumpHeap: Boolean = trueWhether LeakCanary should dump the heap when enough retained instances are found. This needs to be true for LeakCanary to work, but sometimes you may want to temporarily disable LeakCanary (e.g. for a product demo). dumpHeapWhenDebugging [androidJvm]val dumpHeapWhenDebugging: Boolean = falseIf dumpHeapWhenDebugging is false then LeakCanary will not dump the heap when the debugger is attached. The debugger can create temporary memory leaks (for instance if a thread is blocked on a breakpoint). eventListeners [androidJvm]val eventListeners: List<EventListener>Listeners for LeakCanary events. See EventListener.Event for the list of events and which thread they\u2019re sent from. You most likely want to keep this list and add to it, or remove a few entries but not all entries. Each listener is independent and provides additional behavior which you can disable by not excluding it: heapDumper [androidJvm]val heapDumper: HeapDumperDumps the Java heap. You may replace this with your own implementation if you wish to change the core heap dumping implementation. leakingObjectFinder [androidJvm]val leakingObjectFinder: LeakingObjectFinderFinds the objects that are leaking, for which LeakCanary will compute leak traces. maxStoredHeapDumps [androidJvm]val maxStoredHeapDumps: Int = 7How many heap dumps are kept on the Android device for this app package. When this threshold is reached LeakCanary deletes the older heap dumps. As several heap dumps may be enqueued you should avoid going down to 1 or 2. metadataExtractor [androidJvm]val metadataExtractor: MetadataExtractorExtracts metadata from a hprof to be reported in HeapAnalysisSuccess.metadata. Called on a background thread during heap analysis. objectInspectors [androidJvm]val objectInspectors: List<ObjectInspector>List of ObjectInspector that provide LeakCanary with insights about objects found in the heap. You can create your own ObjectInspector implementations, and also add a shark.AppSingletonInspector instance created with the list of internal singletons. referenceMatchers [androidJvm]val referenceMatchers: List<ReferenceMatcher>Known patterns of references in the heap, added here either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher). requestWriteExternalStoragePermission [androidJvm]val requestWriteExternalStoragePermission: Boolean = falseLeakCanary always attempts to store heap dumps on the external storage if the WRITE_EXTERNAL_STORAGE is already granted, and otherwise uses the app storage. If the WRITE_EXTERNAL_STORAGE permission is not granted and requestWriteExternalStoragePermission is true, then LeakCanary will display a notification to ask for that permission. retainedVisibleThreshold [androidJvm]val retainedVisibleThreshold: Int = 5When the app is visible, LeakCanary will wait for at least retainedVisibleThreshold retained instances before dumping the heap. Dumping the heap freezes the UI and can be frustrating for developers who are trying to work. This is especially frustrating as the Android Framework has a number of leaks that cannot easily be fixed. showNotifications [androidJvm]val showNotifications: Boolean = trueWhether to show LeakCanary notifications. When showNotifications is true, LeakCanary will only display notifications if the app is in foreground and is not an instant, TV or Wear app."},{"location":"api/leakcanary/-leak-canary/-config/-config/","title":"config","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Config</p>"},{"location":"api/leakcanary/-leak-canary/-config/-config/#config","title":"Config","text":"<p>[androidJvm]\\ constructor(dumpHeap: Boolean = true, dumpHeapWhenDebugging: Boolean = false, retainedVisibleThreshold: Int = 5, referenceMatchers: List<ReferenceMatcher> = AndroidReferenceMatchers.appDefaults, objectInspectors: List<ObjectInspector> = AndroidObjectInspectors.appDefaults, metadataExtractor: MetadataExtractor = AndroidMetadataExtractor, computeRetainedHeapSize: Boolean = true, maxStoredHeapDumps: Int = 7, requestWriteExternalStoragePermission: Boolean = false, leakingObjectFinder: LeakingObjectFinder = KeyedWeakReferenceFinder, heapDumper: HeapDumper = AndroidDebugHeapDumper, eventListeners: List<EventListener> = listOf( LogcatEventListener, ToastEventListener, LazyForwardingEventListener { if (InternalLeakCanary.formFactor == TV) TvEventListener else NotificationEventListener }, when { RemoteWorkManagerHeapAnalyzer.remoteLeakCanaryServiceInClasspath -> RemoteWorkManagerHeapAnalyzer WorkManagerHeapAnalyzer.validWorkManagerInClasspath -> WorkManagerHeapAnalyzer else -> BackgroundThreadHeapAnalyzer } ), showNotifications: Boolean = true)</p>"},{"location":"api/leakcanary/-leak-canary/-config/compute-retained-heap-size/","title":"Compute retained heap size","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/computeRetainedHeapSize</p>"},{"location":"api/leakcanary/-leak-canary/-config/compute-retained-heap-size/#computeretainedheapsize","title":"computeRetainedHeapSize","text":"<p>[androidJvm]\\ val computeRetainedHeapSize: Boolean = true</p> <p>Whether to compute the retained heap size, which is the total number of bytes in memory that would be reclaimed if the detected leaks didn\u2019t happen. This includes native memory associated to Java objects (e.g. Android bitmaps).</p> <p>Computing the retained heap size can slow down the analysis because it requires navigating from GC roots through the entire object graph, whereas shark.HeapAnalyzer would otherwise stop as soon as all leaking instances are found.</p> <p>Defaults to true.</p>"},{"location":"api/leakcanary/-leak-canary/-config/dump-heap-when-debugging/","title":"Dump heap when debugging","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/dumpHeapWhenDebugging</p>"},{"location":"api/leakcanary/-leak-canary/-config/dump-heap-when-debugging/#dumpheapwhendebugging","title":"dumpHeapWhenDebugging","text":"<p>[androidJvm]\\ val dumpHeapWhenDebugging: Boolean = false</p> <p>If dumpHeapWhenDebugging is false then LeakCanary will not dump the heap when the debugger is attached. The debugger can create temporary memory leaks (for instance if a thread is blocked on a breakpoint).</p> <p>Defaults to false.</p>"},{"location":"api/leakcanary/-leak-canary/-config/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/dumpHeap</p>"},{"location":"api/leakcanary/-leak-canary/-config/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[androidJvm]\\ val dumpHeap: Boolean = true</p> <p>Whether LeakCanary should dump the heap when enough retained instances are found. This needs to be true for LeakCanary to work, but sometimes you may want to temporarily disable LeakCanary (e.g. for a product demo).</p> <p>Defaults to true.</p>"},{"location":"api/leakcanary/-leak-canary/-config/event-listeners/","title":"Event listeners","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/eventListeners</p>"},{"location":"api/leakcanary/-leak-canary/-config/event-listeners/#eventlisteners","title":"eventListeners","text":"<p>[androidJvm]\\ val eventListeners: List<EventListener></p> <p>Listeners for LeakCanary events. See EventListener.Event for the list of events and which thread they\u2019re sent from. You most likely want to keep this list and add to it, or remove a few entries but not all entries. Each listener is independent and provides additional behavior which you can disable by not excluding it:</p> <pre><code>// No cute canary toast (very sad!)\nLeakCanary.config = LeakCanary.config.run {\ncopy(\neventListeners = eventListeners.filter {\nit !is ToastEventListener\n}\n)\n}\n</code></pre>"},{"location":"api/leakcanary/-leak-canary/-config/heap-dumper/","title":"Heap dumper","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/heapDumper</p>"},{"location":"api/leakcanary/-leak-canary/-config/heap-dumper/#heapdumper","title":"heapDumper","text":"<p>[androidJvm]\\ val heapDumper: HeapDumper</p> <p>Dumps the Java heap. You may replace this with your own implementation if you wish to change the core heap dumping implementation.</p>"},{"location":"api/leakcanary/-leak-canary/-config/leaking-object-finder/","title":"Leaking object finder","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/leakingObjectFinder</p>"},{"location":"api/leakcanary/-leak-canary/-config/leaking-object-finder/#leakingobjectfinder","title":"leakingObjectFinder","text":"<p>[androidJvm]\\ val leakingObjectFinder: LeakingObjectFinder</p> <p>Finds the objects that are leaking, for which LeakCanary will compute leak traces.</p> <p>Defaults to KeyedWeakReferenceFinder which finds all objects tracked by a KeyedWeakReference, ie all objects that were passed to ObjectWatcher.expectWeaklyReachable.</p> <p>You could instead replace it with a FilteringLeakingObjectFinder, which scans all objects in the heap dump and delegates the decision to a list of FilteringLeakingObjectFinder.LeakingObjectFilter. This can lead to finding more leaks than the default and shorter leak traces. This also means that every analysis during a given process life will bring up the same leaking objects over and over again, unlike when using KeyedWeakReferenceFinder (because KeyedWeakReference instances are cleared after each heap dump).</p> <p>The list of filters can be built from AndroidObjectInspectors:</p> <pre><code>LeakCanary.config = LeakCanary.config.copy(\nleakingObjectFinder = FilteringLeakingObjectFinder(\nAndroidObjectInspectors.appLeakingObjectFilters\n)\n)\n</code></pre>"},{"location":"api/leakcanary/-leak-canary/-config/max-stored-heap-dumps/","title":"Max stored heap dumps","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/maxStoredHeapDumps</p>"},{"location":"api/leakcanary/-leak-canary/-config/max-stored-heap-dumps/#maxstoredheapdumps","title":"maxStoredHeapDumps","text":"<p>[androidJvm]\\ val maxStoredHeapDumps: Int = 7</p> <p>How many heap dumps are kept on the Android device for this app package. When this threshold is reached LeakCanary deletes the older heap dumps. As several heap dumps may be enqueued you should avoid going down to 1 or 2.</p> <p>Defaults to 7.</p>"},{"location":"api/leakcanary/-leak-canary/-config/metadata-extractor/","title":"Metadata extractor","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/metadataExtractor</p>"},{"location":"api/leakcanary/-leak-canary/-config/metadata-extractor/#metadataextractor","title":"metadataExtractor","text":"<p>[androidJvm]\\ val metadataExtractor: MetadataExtractor</p> <p>Extracts metadata from a hprof to be reported in HeapAnalysisSuccess.metadata. Called on a background thread during heap analysis.</p> <p>Defaults to AndroidMetadataExtractor</p>"},{"location":"api/leakcanary/-leak-canary/-config/new-builder/","title":"New builder","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/newBuilder</p>"},{"location":"api/leakcanary/-leak-canary/-config/new-builder/#newbuilder","title":"newBuilder","text":"<p>[androidJvm]\\ fun newBuilder(): LeakCanary.Config.Builder</p> <p>Construct a new Config via LeakCanary.Config.Builder. Note: this method is intended to be used from Java code only. For idiomatic Kotlin use <code>copy()</code> to modify LeakCanary.config.</p>"},{"location":"api/leakcanary/-leak-canary/-config/object-inspectors/","title":"Object inspectors","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/objectInspectors</p>"},{"location":"api/leakcanary/-leak-canary/-config/object-inspectors/#objectinspectors","title":"objectInspectors","text":"<p>[androidJvm]\\ val objectInspectors: List<ObjectInspector></p> <p>List of ObjectInspector that provide LeakCanary with insights about objects found in the heap. You can create your own ObjectInspector implementations, and also add a shark.AppSingletonInspector instance created with the list of internal singletons.</p> <p>Defaults to AndroidObjectInspectors.appDefaults</p>"},{"location":"api/leakcanary/-leak-canary/-config/reference-matchers/","title":"Reference matchers","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/referenceMatchers</p>"},{"location":"api/leakcanary/-leak-canary/-config/reference-matchers/#referencematchers","title":"referenceMatchers","text":"<p>[androidJvm]\\ val referenceMatchers: List<ReferenceMatcher></p> <p>Known patterns of references in the heap, added here either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher).</p> <p>When adding your own custom LibraryLeakReferenceMatcher instances, you\u2019ll most likely want to set LibraryLeakReferenceMatcher.patternApplies with a filter that checks for the Android OS version and manufacturer. The build information can be obtained by calling shark.AndroidBuildMirror.fromHeapGraph.</p> <p>Defaults to AndroidReferenceMatchers.appDefaults</p>"},{"location":"api/leakcanary/-leak-canary/-config/request-write-external-storage-permission/","title":"Request write external storage permission","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/requestWriteExternalStoragePermission</p>"},{"location":"api/leakcanary/-leak-canary/-config/request-write-external-storage-permission/#requestwriteexternalstoragepermission","title":"requestWriteExternalStoragePermission","text":"<p>[androidJvm]\\ val requestWriteExternalStoragePermission: Boolean = false</p> <p>LeakCanary always attempts to store heap dumps on the external storage if the WRITE_EXTERNAL_STORAGE is already granted, and otherwise uses the app storage. If the WRITE_EXTERNAL_STORAGE permission is not granted and requestWriteExternalStoragePermission is true, then LeakCanary will display a notification to ask for that permission.</p> <p>Defaults to false because that permission notification can be annoying.</p>"},{"location":"api/leakcanary/-leak-canary/-config/retained-visible-threshold/","title":"Retained visible threshold","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/retainedVisibleThreshold</p>"},{"location":"api/leakcanary/-leak-canary/-config/retained-visible-threshold/#retainedvisiblethreshold","title":"retainedVisibleThreshold","text":"<p>[androidJvm]\\ val retainedVisibleThreshold: Int = 5</p> <p>When the app is visible, LeakCanary will wait for at least retainedVisibleThreshold retained instances before dumping the heap. Dumping the heap freezes the UI and can be frustrating for developers who are trying to work. This is especially frustrating as the Android Framework has a number of leaks that cannot easily be fixed.</p> <p>When the app becomes invisible, LeakCanary dumps the heap after AppWatcher.retainedDelayMillis ms.</p> <p>The app is considered visible if it has at least one activity in started state.</p> <p>A higher threshold means LeakCanary will dump the heap less often, therefore it won\u2019t be bothering developers as much but it could miss some leaks.</p> <p>Defaults to 5.</p>"},{"location":"api/leakcanary/-leak-canary/-config/show-notifications/","title":"Show notifications","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/showNotifications</p>"},{"location":"api/leakcanary/-leak-canary/-config/show-notifications/#shownotifications","title":"showNotifications","text":"<p>[androidJvm]\\ val showNotifications: Boolean = true</p> <p>Whether to show LeakCanary notifications. When showNotifications is true, LeakCanary will only display notifications if the app is in foreground and is not an instant, TV or Wear app.</p> <p>Defaults to true.</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/#builder","title":"Builder","text":"<p>[androidJvm]\\ class Builder</p> <p>Builder for LeakCanary.Config intended to be used only from Java code.</p> <p>Usage:</p> <pre><code>LeakCanary.Config config = LeakCanary.getConfig().newBuilder()\n.retainedVisibleThreshold(3)\n.build();\nLeakCanary.setConfig(config);\n</code></pre> <p>For idiomatic Kotlin use <code>copy()</code> method instead:</p> <pre><code>LeakCanary.config = LeakCanary.config.copy(retainedVisibleThreshold = 3)\n</code></pre>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/#functions","title":"Functions","text":"Name Summary build [androidJvm]fun build(): LeakCanary.Config computeRetainedHeapSize [androidJvm]fun computeRetainedHeapSize(computeRetainedHeapSize: Boolean): LeakCanary.Config.Builder dumpHeap [androidJvm]fun dumpHeap(dumpHeap: Boolean): LeakCanary.Config.Builder dumpHeapWhenDebugging [androidJvm]fun dumpHeapWhenDebugging(dumpHeapWhenDebugging: Boolean): LeakCanary.Config.Builder eventListeners [androidJvm]fun eventListeners(eventListeners: List<EventListener>): LeakCanary.Config.Builder heapDumper [androidJvm]fun heapDumper(heapDumper: HeapDumper): LeakCanary.Config.Builder leakingObjectFinder [androidJvm]fun leakingObjectFinder(leakingObjectFinder: LeakingObjectFinder): LeakCanary.Config.Builder maxStoredHeapDumps [androidJvm]fun maxStoredHeapDumps(maxStoredHeapDumps: Int): LeakCanary.Config.Builder metadataExtractor [androidJvm]fun metadataExtractor(metadataExtractor: MetadataExtractor): LeakCanary.Config.Builder objectInspectors [androidJvm]fun objectInspectors(objectInspectors: List<ObjectInspector>): LeakCanary.Config.Builder referenceMatchers [androidJvm]fun referenceMatchers(referenceMatchers: List<ReferenceMatcher>): LeakCanary.Config.Builder requestWriteExternalStoragePermission [androidJvm]fun requestWriteExternalStoragePermission(requestWriteExternalStoragePermission: Boolean): LeakCanary.Config.Builder retainedVisibleThreshold [androidJvm]fun retainedVisibleThreshold(retainedVisibleThreshold: Int): LeakCanary.Config.Builder showNotifications [androidJvm]fun showNotifications(showNotifications: Boolean): LeakCanary.Config.Builder"},{"location":"api/leakcanary/-leak-canary/-config/-builder/build/","title":"Build","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/build</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/build/#build","title":"build","text":"<p>[androidJvm]\\ fun build(): LeakCanary.Config</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/compute-retained-heap-size/","title":"Compute retained heap size","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/computeRetainedHeapSize</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/compute-retained-heap-size/#computeretainedheapsize","title":"computeRetainedHeapSize","text":"<p>[androidJvm]\\ fun computeRetainedHeapSize(computeRetainedHeapSize: Boolean): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/compute-retained-heap-size/#see-also","title":"See also","text":"LeakCanary.Config.computeRetainedHeapSize"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap-when-debugging/","title":"Dump heap when debugging","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/dumpHeapWhenDebugging</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap-when-debugging/#dumpheapwhendebugging","title":"dumpHeapWhenDebugging","text":"<p>[androidJvm]\\ fun dumpHeapWhenDebugging(dumpHeapWhenDebugging: Boolean): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap-when-debugging/#see-also","title":"See also","text":"LeakCanary.Config.dumpHeapWhenDebugging"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/dumpHeap</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[androidJvm]\\ fun dumpHeap(dumpHeap: Boolean): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/dump-heap/#see-also","title":"See also","text":"LeakCanary.Config.dumpHeap"},{"location":"api/leakcanary/-leak-canary/-config/-builder/event-listeners/","title":"Event listeners","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/eventListeners</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/event-listeners/#eventlisteners","title":"eventListeners","text":"<p>[androidJvm]\\ fun eventListeners(eventListeners: List<EventListener>): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/event-listeners/#see-also","title":"See also","text":"LeakCanary.Config.eventListeners"},{"location":"api/leakcanary/-leak-canary/-config/-builder/heap-dumper/","title":"Heap dumper","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/heapDumper</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/heap-dumper/#heapdumper","title":"heapDumper","text":"<p>[androidJvm]\\ fun heapDumper(heapDumper: HeapDumper): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/heap-dumper/#see-also","title":"See also","text":"LeakCanary.Config.heapDumper"},{"location":"api/leakcanary/-leak-canary/-config/-builder/leaking-object-finder/","title":"Leaking object finder","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/leakingObjectFinder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/leaking-object-finder/#leakingobjectfinder","title":"leakingObjectFinder","text":"<p>[androidJvm]\\ fun leakingObjectFinder(leakingObjectFinder: LeakingObjectFinder): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/leaking-object-finder/#see-also","title":"See also","text":"LeakCanary.Config.leakingObjectFinder"},{"location":"api/leakcanary/-leak-canary/-config/-builder/max-stored-heap-dumps/","title":"Max stored heap dumps","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/maxStoredHeapDumps</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/max-stored-heap-dumps/#maxstoredheapdumps","title":"maxStoredHeapDumps","text":"<p>[androidJvm]\\ fun maxStoredHeapDumps(maxStoredHeapDumps: Int): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/max-stored-heap-dumps/#see-also","title":"See also","text":"LeakCanary.Config.maxStoredHeapDumps"},{"location":"api/leakcanary/-leak-canary/-config/-builder/metadata-extractor/","title":"Metadata extractor","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/metadataExtractor</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/metadata-extractor/#metadataextractor","title":"metadataExtractor","text":"<p>[androidJvm]\\ fun metadataExtractor(metadataExtractor: MetadataExtractor): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/metadata-extractor/#see-also","title":"See also","text":"LeakCanary.Config.metadataExtractor"},{"location":"api/leakcanary/-leak-canary/-config/-builder/object-inspectors/","title":"Object inspectors","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/objectInspectors</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/object-inspectors/#objectinspectors","title":"objectInspectors","text":"<p>[androidJvm]\\ fun objectInspectors(objectInspectors: List<ObjectInspector>): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/object-inspectors/#see-also","title":"See also","text":"LeakCanary.Config.objectInspectors"},{"location":"api/leakcanary/-leak-canary/-config/-builder/reference-matchers/","title":"Reference matchers","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/referenceMatchers</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/reference-matchers/#referencematchers","title":"referenceMatchers","text":"<p>[androidJvm]\\ fun referenceMatchers(referenceMatchers: List<ReferenceMatcher>): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/reference-matchers/#see-also","title":"See also","text":"LeakCanary.Config.referenceMatchers"},{"location":"api/leakcanary/-leak-canary/-config/-builder/request-write-external-storage-permission/","title":"Request write external storage permission","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/requestWriteExternalStoragePermission</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/request-write-external-storage-permission/#requestwriteexternalstoragepermission","title":"requestWriteExternalStoragePermission","text":"<p>[androidJvm]\\ fun requestWriteExternalStoragePermission(requestWriteExternalStoragePermission: Boolean): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/request-write-external-storage-permission/#see-also","title":"See also","text":"LeakCanary.Config.requestWriteExternalStoragePermission"},{"location":"api/leakcanary/-leak-canary/-config/-builder/retained-visible-threshold/","title":"Retained visible threshold","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/retainedVisibleThreshold</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/retained-visible-threshold/#retainedvisiblethreshold","title":"retainedVisibleThreshold","text":"<p>[androidJvm]\\ fun retainedVisibleThreshold(retainedVisibleThreshold: Int): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/retained-visible-threshold/#see-also","title":"See also","text":"LeakCanary.Config.retainedVisibleThreshold"},{"location":"api/leakcanary/-leak-canary/-config/-builder/show-notifications/","title":"Show notifications","text":"<p>//leakcanary-repo/leakcanary/LeakCanary/Config/Builder/showNotifications</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/show-notifications/#shownotifications","title":"showNotifications","text":"<p>[androidJvm]\\ fun showNotifications(showNotifications: Boolean): LeakCanary.Config.Builder</p>"},{"location":"api/leakcanary/-leak-canary/-config/-builder/show-notifications/#see-also","title":"See also","text":"LeakCanary.Config.showNotifications"},{"location":"api/leakcanary/-leak-canary-process/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LeakCanaryProcess</p>"},{"location":"api/leakcanary/-leak-canary-process/#leakcanaryprocess","title":"LeakCanaryProcess","text":"<p>[androidJvm]\\ object LeakCanaryProcess</p> <p>Used to determine whether the current process is the LeakCanary analyzer process. By depending on the <code>leakcanary-android-process</code> artifact instead of the <code>leakcanary-android</code>, LeakCanary will automatically run its analysis in a separate process.</p> <p>As such, you\u2019ll need to be careful to do any custom configuration of LeakCanary in both the main process and the analyzer process.</p>"},{"location":"api/leakcanary/-leak-canary-process/#functions","title":"Functions","text":"Name Summary isInAnalyzerProcess [androidJvm]fun isInAnalyzerProcess(context: Context): BooleanWhether the current process is the process running the heap analyzer, which is a different process than the normal app process."},{"location":"api/leakcanary/-leak-canary-process/is-in-analyzer-process/","title":"Is in analyzer process","text":"<p>//leakcanary-repo/leakcanary/LeakCanaryProcess/isInAnalyzerProcess</p>"},{"location":"api/leakcanary/-leak-canary-process/is-in-analyzer-process/#isinanalyzerprocess","title":"isInAnalyzerProcess","text":"<p>[androidJvm]\\ fun isInAnalyzerProcess(context: Context): Boolean</p> <p>Whether the current process is the process running the heap analyzer, which is a different process than the normal app process.</p>"},{"location":"api/leakcanary/-logcat-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LogcatEventListener</p>"},{"location":"api/leakcanary/-logcat-event-listener/#logcateventlistener","title":"LogcatEventListener","text":"<p>[androidJvm]\\ object LogcatEventListener : EventListener</p>"},{"location":"api/leakcanary/-logcat-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-logcat-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/LogcatEventListener/onEvent</p>"},{"location":"api/leakcanary/-logcat-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-logcat-shark-log/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LogcatSharkLog</p>"},{"location":"api/leakcanary/-logcat-shark-log/#logcatsharklog","title":"LogcatSharkLog","text":"<p>[androidJvm]\\ class LogcatSharkLog : SharkLog.Logger</p>"},{"location":"api/leakcanary/-logcat-shark-log/#constructors","title":"Constructors","text":"LogcatSharkLog [androidJvm]constructor()"},{"location":"api/leakcanary/-logcat-shark-log/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-logcat-shark-log/#functions","title":"Functions","text":"Name Summary d [androidJvm]open override fun d(message: String)open override fun d(throwable: Throwable, message: String)"},{"location":"api/leakcanary/-logcat-shark-log/-logcat-shark-log/","title":"logcat shark log","text":"<p>//leakcanary-repo/leakcanary/LogcatSharkLog/LogcatSharkLog</p>"},{"location":"api/leakcanary/-logcat-shark-log/-logcat-shark-log/#logcatsharklog","title":"LogcatSharkLog","text":"<p>[androidJvm]\\ constructor()</p>"},{"location":"api/leakcanary/-logcat-shark-log/d/","title":"D","text":"<p>//leakcanary-repo/leakcanary/LogcatSharkLog/d</p>"},{"location":"api/leakcanary/-logcat-shark-log/d/#d","title":"d","text":"<p>[androidJvm]\\ open override fun d(message: String)</p> <p>open override fun d(throwable: Throwable, message: String)</p>"},{"location":"api/leakcanary/-logcat-shark-log/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/LogcatSharkLog/Companion</p>"},{"location":"api/leakcanary/-logcat-shark-log/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-logcat-shark-log/-companion/#functions","title":"Functions","text":"Name Summary install [androidJvm]fun install()"},{"location":"api/leakcanary/-logcat-shark-log/-companion/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/LogcatSharkLog/Companion/install</p>"},{"location":"api/leakcanary/-logcat-shark-log/-companion/install/#install","title":"install","text":"<p>[androidJvm]\\ fun install()</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/MinimumDiskSpaceInterceptor</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/#minimumdiskspaceinterceptor","title":"MinimumDiskSpaceInterceptor","text":"<p>[androidJvm]\\ class MinimumDiskSpaceInterceptor(application: Application, minimumDiskSpaceBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/#constructors","title":"Constructors","text":"MinimumDiskSpaceInterceptor [androidJvm]constructor(application: Application, minimumDiskSpaceBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real)"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/-minimum-disk-space-interceptor/","title":"minimum disk space interceptor","text":"<p>//leakcanary-repo/leakcanary/MinimumDiskSpaceInterceptor/MinimumDiskSpaceInterceptor</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/-minimum-disk-space-interceptor/#minimumdiskspaceinterceptor","title":"MinimumDiskSpaceInterceptor","text":"<p>[androidJvm]\\ constructor(application: Application, minimumDiskSpaceBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real)</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/MinimumDiskSpaceInterceptor/intercept</p>"},{"location":"api/leakcanary/-minimum-disk-space-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/MinimumElapsedSinceStartInterceptor</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/#minimumelapsedsincestartinterceptor","title":"MinimumElapsedSinceStartInterceptor","text":"<p>[androidJvm]\\ class MinimumElapsedSinceStartInterceptor(minimumElapsedSinceStartMillis: Long = TimeUnit.SECONDS.toMillis(30), processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/#constructors","title":"Constructors","text":"MinimumElapsedSinceStartInterceptor [androidJvm]constructor(minimumElapsedSinceStartMillis: Long = TimeUnit.SECONDS.toMillis(30), processInfo: ProcessInfo = ProcessInfo.Real)"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/-minimum-elapsed-since-start-interceptor/","title":"minimum elapsed since start interceptor","text":"<p>//leakcanary-repo/leakcanary/MinimumElapsedSinceStartInterceptor/MinimumElapsedSinceStartInterceptor</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/-minimum-elapsed-since-start-interceptor/#minimumelapsedsincestartinterceptor","title":"MinimumElapsedSinceStartInterceptor","text":"<p>[androidJvm]\\ constructor(minimumElapsedSinceStartMillis: Long = TimeUnit.SECONDS.toMillis(30), processInfo: ProcessInfo = ProcessInfo.Real)</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/MinimumElapsedSinceStartInterceptor/intercept</p>"},{"location":"api/leakcanary/-minimum-elapsed-since-start-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/MinimumMemoryInterceptor</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/#minimummemoryinterceptor","title":"MinimumMemoryInterceptor","text":"<p>[androidJvm]\\ class MinimumMemoryInterceptor(application: Application, minimumRequiredAvailableMemoryBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real) : HeapAnalysisInterceptor</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/#constructors","title":"Constructors","text":"MinimumMemoryInterceptor [androidJvm]constructor(application: Application, minimumRequiredAvailableMemoryBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real)"},{"location":"api/leakcanary/-minimum-memory-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-minimum-memory-interceptor/-minimum-memory-interceptor/","title":"minimum memory interceptor","text":"<p>//leakcanary-repo/leakcanary/MinimumMemoryInterceptor/MinimumMemoryInterceptor</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/-minimum-memory-interceptor/#minimummemoryinterceptor","title":"MinimumMemoryInterceptor","text":"<p>[androidJvm]\\ constructor(application: Application, minimumRequiredAvailableMemoryBytes: Long, processInfo: ProcessInfo = ProcessInfo.Real)</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/MinimumMemoryInterceptor/intercept</p>"},{"location":"api/leakcanary/-minimum-memory-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/NoLeakAssertionFailedError</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/#noleakassertionfailederror","title":"NoLeakAssertionFailedError","text":"<p>[androidJvm]\\ class NoLeakAssertionFailedError(val heapAnalysis: HeapAnalysisSuccess) : AssertionError</p> <p>Thrown when using the NoLeakAssertionFailedError.throwOnApplicationLeaks HeapAnalysisReporter</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/#constructors","title":"Constructors","text":"NoLeakAssertionFailedError [androidJvm]constructor(heapAnalysis: HeapAnalysisSuccess)"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/#functions","title":"Functions","text":"Name Summary addSuppressed [androidJvm]fun addSuppressed(p0: Throwable) fillInStackTrace [androidJvm]open fun fillInStackTrace(): Throwable getLocalizedMessage [androidJvm]open fun getLocalizedMessage(): String getStackTrace [androidJvm]open fun getStackTrace(): Array<StackTraceElement> getSuppressed [androidJvm]fun getSuppressed(): Array<Throwable> initCause [androidJvm]open fun initCause(p0: Throwable): Throwable printStackTrace [androidJvm]open fun printStackTrace()open fun printStackTrace(p0: PrintStream)open fun printStackTrace(p0: PrintWriter) setStackTrace [androidJvm]open fun setStackTrace(p0: Array<StackTraceElement>)"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/#properties","title":"Properties","text":"Name Summary cause [androidJvm]open val cause: Throwable? heapAnalysis [androidJvm]val heapAnalysis: HeapAnalysisSuccess message [androidJvm]open val message: String?"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-no-leak-assertion-failed-error/","title":"no leak assertion failed error","text":"<p>//leakcanary-repo/leakcanary/NoLeakAssertionFailedError/NoLeakAssertionFailedError</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-no-leak-assertion-failed-error/#noleakassertionfailederror","title":"NoLeakAssertionFailedError","text":"<p>[androidJvm]\\ constructor(heapAnalysis: HeapAnalysisSuccess)</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/heap-analysis/","title":"Heap analysis","text":"<p>//leakcanary-repo/leakcanary/NoLeakAssertionFailedError/heapAnalysis</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/heap-analysis/#heapanalysis","title":"heapAnalysis","text":"<p>[androidJvm]\\ val heapAnalysis: HeapAnalysisSuccess</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/NoLeakAssertionFailedError/Companion</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-companion/#functions","title":"Functions","text":"Name Summary throwOnApplicationLeaks [androidJvm]fun throwOnApplicationLeaks(): HeapAnalysisReporterA HeapAnalysisReporter that throws a NoLeakAssertionFailedError when the heap analysis has application leaks."},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-companion/throw-on-application-leaks/","title":"Throw on application leaks","text":"<p>//leakcanary-repo/leakcanary/NoLeakAssertionFailedError/Companion/throwOnApplicationLeaks</p>"},{"location":"api/leakcanary/-no-leak-assertion-failed-error/-companion/throw-on-application-leaks/#throwonapplicationleaks","title":"throwOnApplicationLeaks","text":"<p>[androidJvm]\\ fun throwOnApplicationLeaks(): HeapAnalysisReporter</p> <p>A HeapAnalysisReporter that throws a NoLeakAssertionFailedError when the heap analysis has application leaks.</p>"},{"location":"api/leakcanary/-notification-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/NotificationEventListener</p>"},{"location":"api/leakcanary/-notification-event-listener/#notificationeventlistener","title":"NotificationEventListener","text":"<p>[androidJvm]\\ object NotificationEventListener : EventListener</p>"},{"location":"api/leakcanary/-notification-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-notification-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/NotificationEventListener/onEvent</p>"},{"location":"api/leakcanary/-notification-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ObjectGrowthWarmupHeapDumper</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/#objectgrowthwarmupheapdumper","title":"ObjectGrowthWarmupHeapDumper","text":"<p>[jvm]\\ class ObjectGrowthWarmupHeapDumper(objectGrowthDetector: ObjectGrowthDetector, delegate: HeapDumper, androidHeap: Boolean) : HeapDumper</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/#constructors","title":"Constructors","text":"ObjectGrowthWarmupHeapDumper [jvm]constructor(objectGrowthDetector: ObjectGrowthDetector, delegate: HeapDumper, androidHeap: Boolean)"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [jvm]open override fun dumpHeap(heapDumpFile: File)Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed. withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/-object-growth-warmup-heap-dumper/","title":"object growth warmup heap dumper","text":"<p>//leakcanary-repo/leakcanary/ObjectGrowthWarmupHeapDumper/ObjectGrowthWarmupHeapDumper</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/-object-growth-warmup-heap-dumper/#objectgrowthwarmupheapdumper","title":"ObjectGrowthWarmupHeapDumper","text":"<p>[jvm]\\ constructor(objectGrowthDetector: ObjectGrowthDetector, delegate: HeapDumper, androidHeap: Boolean)</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/ObjectGrowthWarmupHeapDumper/dumpHeap</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ open override fun dumpHeap(heapDumpFile: File)</p> <p>Dumps the heap. The implementation is expected to be blocking until the heap is dumped or heap dumping failed.</p> <p>Implementations can throw a runtime exception if heap dumping failed.</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ObjectGrowthWarmupHeapDumper/Companion</p>"},{"location":"api/leakcanary/-object-growth-warmup-heap-dumper/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/leakcanary/-on-object-retained-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/OnObjectRetainedListener</p>"},{"location":"api/leakcanary/-on-object-retained-listener/#onobjectretainedlistener","title":"OnObjectRetainedListener","text":"<p>[jvm]\\ fun interface OnObjectRetainedListener</p> <p>Listener used by ReferenceQueueRetainedObjectTracker to report retained objects.</p>"},{"location":"api/leakcanary/-on-object-retained-listener/#functions","title":"Functions","text":"Name Summary onObjectRetained [jvm]abstract fun onObjectRetained()A tracked object became retained."},{"location":"api/leakcanary/-on-object-retained-listener/on-object-retained/","title":"On object retained","text":"<p>//leakcanary-repo/leakcanary/OnObjectRetainedListener/onObjectRetained</p>"},{"location":"api/leakcanary/-on-object-retained-listener/on-object-retained/#onobjectretained","title":"onObjectRetained","text":"<p>[jvm]\\ abstract fun onObjectRetained()</p> <p>A tracked object became retained.</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/OncePerPeriodInterceptor</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/#onceperperiodinterceptor","title":"OncePerPeriodInterceptor","text":"<p>[androidJvm]\\ class OncePerPeriodInterceptor(application: Application, periodMillis: Long = TimeUnit.DAYS.toMillis(1)) : HeapAnalysisInterceptor</p> <p>Proceeds once per period (of time) and then cancels all follow up jobs until period has passed.</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/#constructors","title":"Constructors","text":"OncePerPeriodInterceptor [androidJvm]constructor(application: Application, periodMillis: Long = TimeUnit.DAYS.toMillis(1))"},{"location":"api/leakcanary/-once-per-period-interceptor/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-once-per-period-interceptor/#functions","title":"Functions","text":"Name Summary forget [androidJvm]fun forget() intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-once-per-period-interceptor/-once-per-period-interceptor/","title":"once per period interceptor","text":"<p>//leakcanary-repo/leakcanary/OncePerPeriodInterceptor/OncePerPeriodInterceptor</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/-once-per-period-interceptor/#onceperperiodinterceptor","title":"OncePerPeriodInterceptor","text":"<p>[androidJvm]\\ constructor(application: Application, periodMillis: Long = TimeUnit.DAYS.toMillis(1))</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/forget/","title":"Forget","text":"<p>//leakcanary-repo/leakcanary/OncePerPeriodInterceptor/forget</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/forget/#forget","title":"forget","text":"<p>[androidJvm]\\ fun forget()</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/OncePerPeriodInterceptor/intercept</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/OncePerPeriodInterceptor/Companion</p>"},{"location":"api/leakcanary/-once-per-period-interceptor/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/PlumberStartupInitializer</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/#plumberstartupinitializer","title":"PlumberStartupInitializer","text":"<p>[androidJvm]\\ class PlumberStartupInitializer : Initializer<PlumberStartupInitializer></p>"},{"location":"api/leakcanary/-plumber-startup-initializer/#constructors","title":"Constructors","text":"PlumberStartupInitializer [androidJvm]constructor()"},{"location":"api/leakcanary/-plumber-startup-initializer/#functions","title":"Functions","text":"Name Summary create [androidJvm]open override fun create(context: Context): PlumberStartupInitializer dependencies [androidJvm]open override fun dependencies(): List<Class<out Initializer<*>>>"},{"location":"api/leakcanary/-plumber-startup-initializer/-plumber-startup-initializer/","title":"plumber startup initializer","text":"<p>//leakcanary-repo/leakcanary/PlumberStartupInitializer/PlumberStartupInitializer</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/-plumber-startup-initializer/#plumberstartupinitializer","title":"PlumberStartupInitializer","text":"<p>[androidJvm]\\ constructor()</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/create/","title":"Create","text":"<p>//leakcanary-repo/leakcanary/PlumberStartupInitializer/create</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/create/#create","title":"create","text":"<p>[androidJvm]\\ open override fun create(context: Context): PlumberStartupInitializer</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/dependencies/","title":"Dependencies","text":"<p>//leakcanary-repo/leakcanary/PlumberStartupInitializer/dependencies</p>"},{"location":"api/leakcanary/-plumber-startup-initializer/dependencies/#dependencies","title":"dependencies","text":"<p>[androidJvm]\\ open override fun dependencies(): List<Class<out Initializer<*>>></p>"},{"location":"api/leakcanary/-process-info/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo</p>"},{"location":"api/leakcanary/-process-info/#processinfo","title":"ProcessInfo","text":"<p>interface ProcessInfo</p>"},{"location":"api/leakcanary/-process-info/#inheritors","title":"Inheritors","text":"Real"},{"location":"api/leakcanary/-process-info/#types","title":"Types","text":"Name Summary AvailableRam [androidJvm]sealed class AvailableRam Real [androidJvm]object Real : ProcessInfo"},{"location":"api/leakcanary/-process-info/#functions","title":"Functions","text":"Name Summary availableDiskSpaceBytes [androidJvm]abstract fun availableDiskSpaceBytes(path: File): Long availableRam [androidJvm]abstract fun availableRam(context: Context): ProcessInfo.AvailableRam"},{"location":"api/leakcanary/-process-info/#properties","title":"Properties","text":"Name Summary elapsedMillisSinceStart [androidJvm]abstract val elapsedMillisSinceStart: Long isImportanceBackground [androidJvm]abstract val isImportanceBackground: Boolean"},{"location":"api/leakcanary/-process-info/available-disk-space-bytes/","title":"Available disk space bytes","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/availableDiskSpaceBytes</p>"},{"location":"api/leakcanary/-process-info/available-disk-space-bytes/#availablediskspacebytes","title":"availableDiskSpaceBytes","text":"<p>[androidJvm]\\ abstract fun availableDiskSpaceBytes(path: File): Long</p>"},{"location":"api/leakcanary/-process-info/available-ram/","title":"Available ram","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/availableRam</p>"},{"location":"api/leakcanary/-process-info/available-ram/#availableram","title":"availableRam","text":"<p>[androidJvm]\\ abstract fun availableRam(context: Context): ProcessInfo.AvailableRam</p>"},{"location":"api/leakcanary/-process-info/elapsed-millis-since-start/","title":"Elapsed millis since start","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/elapsedMillisSinceStart</p>"},{"location":"api/leakcanary/-process-info/elapsed-millis-since-start/#elapsedmillissincestart","title":"elapsedMillisSinceStart","text":"<p>[androidJvm]\\ abstract val elapsedMillisSinceStart: Long</p>"},{"location":"api/leakcanary/-process-info/is-importance-background/","title":"Is importance background","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/isImportanceBackground</p>"},{"location":"api/leakcanary/-process-info/is-importance-background/#isimportancebackground","title":"isImportanceBackground","text":"<p>[androidJvm]\\ abstract val isImportanceBackground: Boolean</p>"},{"location":"api/leakcanary/-process-info/-available-ram/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-available-ram/#availableram","title":"AvailableRam","text":"<p>sealed class AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-available-ram/#inheritors","title":"Inheritors","text":"LowRamDevice BelowThreshold Memory"},{"location":"api/leakcanary/-process-info/-available-ram/#types","title":"Types","text":"Name Summary BelowThreshold [androidJvm]object BelowThreshold : ProcessInfo.AvailableRam LowRamDevice [androidJvm]object LowRamDevice : ProcessInfo.AvailableRam Memory [androidJvm]class Memory(val bytes: Long) : ProcessInfo.AvailableRam"},{"location":"api/leakcanary/-process-info/-available-ram/-below-threshold/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam/BelowThreshold</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-below-threshold/#belowthreshold","title":"BelowThreshold","text":"<p>[androidJvm]\\ object BelowThreshold : ProcessInfo.AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-low-ram-device/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam/LowRamDevice</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-low-ram-device/#lowramdevice","title":"LowRamDevice","text":"<p>[androidJvm]\\ object LowRamDevice : ProcessInfo.AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam/Memory</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/#memory","title":"Memory","text":"<p>[androidJvm]\\ class Memory(val bytes: Long) : ProcessInfo.AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/#constructors","title":"Constructors","text":"Memory [androidJvm]constructor(bytes: Long)"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/#properties","title":"Properties","text":"Name Summary bytes [androidJvm]val bytes: Long"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/-memory/","title":"memory","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam/Memory/Memory</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/-memory/#memory","title":"Memory","text":"<p>[androidJvm]\\ constructor(bytes: Long)</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/bytes/","title":"Bytes","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/AvailableRam/Memory/bytes</p>"},{"location":"api/leakcanary/-process-info/-available-ram/-memory/bytes/#bytes","title":"bytes","text":"<p>[androidJvm]\\ val bytes: Long</p>"},{"location":"api/leakcanary/-process-info/-real/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/Real</p>"},{"location":"api/leakcanary/-process-info/-real/#real","title":"Real","text":"<p>[androidJvm]\\ object Real : ProcessInfo</p>"},{"location":"api/leakcanary/-process-info/-real/#functions","title":"Functions","text":"Name Summary availableDiskSpaceBytes [androidJvm]open override fun availableDiskSpaceBytes(path: File): Long availableRam [androidJvm]open override fun availableRam(context: Context): ProcessInfo.AvailableRam"},{"location":"api/leakcanary/-process-info/-real/#properties","title":"Properties","text":"Name Summary elapsedMillisSinceStart [androidJvm]open override val elapsedMillisSinceStart: Long isImportanceBackground [androidJvm]open override val isImportanceBackground: Boolean"},{"location":"api/leakcanary/-process-info/-real/available-disk-space-bytes/","title":"Available disk space bytes","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/Real/availableDiskSpaceBytes</p>"},{"location":"api/leakcanary/-process-info/-real/available-disk-space-bytes/#availablediskspacebytes","title":"availableDiskSpaceBytes","text":"<p>[androidJvm]\\ open override fun availableDiskSpaceBytes(path: File): Long</p>"},{"location":"api/leakcanary/-process-info/-real/available-ram/","title":"Available ram","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/Real/availableRam</p>"},{"location":"api/leakcanary/-process-info/-real/available-ram/#availableram","title":"availableRam","text":"<p>[androidJvm]\\ open override fun availableRam(context: Context): ProcessInfo.AvailableRam</p>"},{"location":"api/leakcanary/-process-info/-real/elapsed-millis-since-start/","title":"Elapsed millis since start","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/Real/elapsedMillisSinceStart</p>"},{"location":"api/leakcanary/-process-info/-real/elapsed-millis-since-start/#elapsedmillissincestart","title":"elapsedMillisSinceStart","text":"<p>[androidJvm]\\ open override val elapsedMillisSinceStart: Long</p>"},{"location":"api/leakcanary/-process-info/-real/is-importance-background/","title":"Is importance background","text":"<p>//leakcanary-repo/leakcanary/ProcessInfo/Real/isImportanceBackground</p>"},{"location":"api/leakcanary/-process-info/-real/is-importance-background/#isimportancebackground","title":"isImportanceBackground","text":"<p>[androidJvm]\\ open override val isImportanceBackground: Boolean</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/#referencequeueretainedobjecttracker","title":"ReferenceQueueRetainedObjectTracker","text":"<p>[jvm]\\ class ReferenceQueueRetainedObjectTracker(clock: UptimeClock, onObjectRetainedListener: OnObjectRetainedListener) : RetainedObjectTracker, TriggeredDeletableObjectReporter</p> <p>ReferenceQueueRetainedObjectTracker can be passed objects to expectDeletionOnTriggerFor. It will create KeyedWeakReference instances that reference tracked objects, and check if those references have been cleared as expected. If not, these objects are considered retained and ReferenceQueueRetainedObjectTracker will then notify registered OnObjectRetainedListeners. ReferenceQueueRetainedObjectTracker is thread safe.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/#constructors","title":"Constructors","text":"ReferenceQueueRetainedObjectTracker [jvm]constructor(clock: UptimeClock, onObjectRetainedListener: OnObjectRetainedListener)"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/#functions","title":"Functions","text":"Name Summary clearAllObjectsTracked [jvm]open override fun clearAllObjectsTracked()Clears all KeyedWeakReference clearObjectsTrackedBefore [jvm]open override fun clearObjectsTrackedBefore(uptime: Duration)Clears weak reachability expectations for objects that were created before uptime. expectDeletionOnTriggerFor [jvm]open override fun expectDeletionOnTriggerFor(target: Any, reason: String): TriggeredDeletableObjectReporter.RetainTriggerStart tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. that it should not be strongly reachable by the time RetainTrigger.markRetainedIfStronglyReachable is called on the returned RetainTrigger."},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/#properties","title":"Properties","text":"Name Summary hasRetainedObjects [jvm]open override val hasRetainedObjects: BooleanReturns true if any of the tracked objects are currently retained. hasTrackedObjects [jvm]open override val hasTrackedObjects: BooleanReturns true if there are any tracked objects that aren\u2019t currently weakly reachable. retainedObjectCount [jvm]open override val retainedObjectCount: IntReturns the number of retained objects. retainedWeakReferences [jvm]val retainedWeakReferences: List<KeyedWeakReference>Subset of trackedWeakReferences that have been marked as retained. trackedObjectCount [jvm]open override val trackedObjectCount: IntReturns the number of tracked objects that aren\u2019t weakly reachable. trackedWeakReferences [jvm]val trackedWeakReferences: List<KeyedWeakReference>List of KeyedWeakReference that have not been enqueued in the reference queue yet, which means their referent is most likely still strongly reachable."},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/-reference-queue-retained-object-tracker/","title":"reference queue retained object tracker","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/ReferenceQueueRetainedObjectTracker</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/-reference-queue-retained-object-tracker/#referencequeueretainedobjecttracker","title":"ReferenceQueueRetainedObjectTracker","text":"<p>[jvm]\\ constructor(clock: UptimeClock, onObjectRetainedListener: OnObjectRetainedListener)</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/clear-all-objects-tracked/","title":"Clear all objects tracked","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/clearAllObjectsTracked</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/clear-all-objects-tracked/#clearallobjectstracked","title":"clearAllObjectsTracked","text":"<p>[jvm]\\ open override fun clearAllObjectsTracked()</p> <p>Clears all KeyedWeakReference</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/clear-objects-tracked-before/","title":"Clear objects tracked before","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/clearObjectsTrackedBefore</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/clear-objects-tracked-before/#clearobjectstrackedbefore","title":"clearObjectsTrackedBefore","text":"<p>[jvm]\\ open override fun clearObjectsTrackedBefore(uptime: Duration)</p> <p>Clears weak reachability expectations for objects that were created before uptime.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/clear-objects-tracked-before/#parameters","title":"Parameters","text":"<p>jvm</p> uptime A time in the past from UptimeClock.uptime."},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/expect-deletion-on-trigger-for/","title":"Expect deletion on trigger for","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/expectDeletionOnTriggerFor</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/expect-deletion-on-trigger-for/#expectdeletionontriggerfor","title":"expectDeletionOnTriggerFor","text":"<p>[jvm]\\ open override fun expectDeletionOnTriggerFor(target: Any, reason: String): TriggeredDeletableObjectReporter.RetainTrigger</p> <p>Start tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. that it should not be strongly reachable by the time RetainTrigger.markRetainedIfStronglyReachable is called on the returned RetainTrigger.</p> <p>If target stays strongly reachable, it will be considered \"retained\".</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/expect-deletion-on-trigger-for/#parameters","title":"Parameters","text":"<p>jvm</p> target See DeletableObjectReporter.expectDeletionFor reason See DeletableObjectReporter.expectDeletionFor"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/has-retained-objects/","title":"Has retained objects","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/hasRetainedObjects</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/has-retained-objects/#hasretainedobjects","title":"hasRetainedObjects","text":"<p>[jvm]\\ open override val hasRetainedObjects: Boolean</p> <p>Returns true if any of the tracked objects are currently retained.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/has-tracked-objects/","title":"Has tracked objects","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/hasTrackedObjects</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/has-tracked-objects/#hastrackedobjects","title":"hasTrackedObjects","text":"<p>[jvm]\\ open override val hasTrackedObjects: Boolean</p> <p>Returns true if there are any tracked objects that aren\u2019t currently weakly reachable.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/retained-object-count/","title":"Retained object count","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/retainedObjectCount</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/retained-object-count/#retainedobjectcount","title":"retainedObjectCount","text":"<p>[jvm]\\ open override val retainedObjectCount: Int</p> <p>Returns the number of retained objects.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/retained-weak-references/","title":"Retained weak references","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/retainedWeakReferences</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/retained-weak-references/#retainedweakreferences","title":"retainedWeakReferences","text":"<p>[jvm]\\ val retainedWeakReferences: List<KeyedWeakReference></p> <p>Subset of trackedWeakReferences that have been marked as retained.</p> <p>DO NOT CALL java.lang.ref.Reference.get on the returned references, otherwise you will end up creating local references to the objects, preventing them from becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/tracked-object-count/","title":"Tracked object count","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/trackedObjectCount</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/tracked-object-count/#trackedobjectcount","title":"trackedObjectCount","text":"<p>[jvm]\\ open override val trackedObjectCount: Int</p> <p>Returns the number of tracked objects that aren\u2019t weakly reachable.</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/tracked-weak-references/","title":"Tracked weak references","text":"<p>//leakcanary-repo/leakcanary/ReferenceQueueRetainedObjectTracker/trackedWeakReferences</p>"},{"location":"api/leakcanary/-reference-queue-retained-object-tracker/tracked-weak-references/#trackedweakreferences","title":"trackedWeakReferences","text":"<p>[jvm]\\ val trackedWeakReferences: List<KeyedWeakReference></p> <p>List of KeyedWeakReference that have not been enqueued in the reference queue yet, which means their referent is most likely still strongly reachable.</p> <p>DO NOT CALL java.lang.ref.Reference.get on the returned references, otherwise you will end up creating local references to the objects, preventing them from be becoming weakly reachable, and creating a leak. If you need to check for identity equality, use Reference.refersTo instead.</p>"},{"location":"api/leakcanary/-remote-work-manager-heap-analyzer/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RemoteWorkManagerHeapAnalyzer</p>"},{"location":"api/leakcanary/-remote-work-manager-heap-analyzer/#remoteworkmanagerheapanalyzer","title":"RemoteWorkManagerHeapAnalyzer","text":"<p>[androidJvm]\\ object RemoteWorkManagerHeapAnalyzer : EventListener</p> <p>When receiving a HeapDump event, starts a WorkManager worker that performs heap analysis in a dedicated :leakcanary process</p>"},{"location":"api/leakcanary/-remote-work-manager-heap-analyzer/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-remote-work-manager-heap-analyzer/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/RemoteWorkManagerHeapAnalyzer/onEvent</p>"},{"location":"api/leakcanary/-remote-work-manager-heap-analyzer/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RepositoryRootHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/#repositoryrootheapdumpdirectoryprovider","title":"RepositoryRootHeapDumpDirectoryProvider","text":"<p>[jvm]\\ class RepositoryRootHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/#constructors","title":"Constructors","text":"RepositoryRootHeapDumpDirectoryProvider [jvm]constructor(heapDumpDirectoryName: String)"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/#functions","title":"Functions","text":"Name Summary heapDumpDirectory [jvm]open override fun heapDumpDirectory(): File"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/-repository-root-heap-dump-directory-provider/","title":"repository root heap dump directory provider","text":"<p>//leakcanary-repo/leakcanary/RepositoryRootHeapDumpDirectoryProvider/RepositoryRootHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/-repository-root-heap-dump-directory-provider/#repositoryrootheapdumpdirectoryprovider","title":"RepositoryRootHeapDumpDirectoryProvider","text":"<p>[jvm]\\ constructor(heapDumpDirectoryName: String)</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/heap-dump-directory/","title":"Heap dump directory","text":"<p>//leakcanary-repo/leakcanary/RepositoryRootHeapDumpDirectoryProvider/heapDumpDirectory</p>"},{"location":"api/leakcanary/-repository-root-heap-dump-directory-provider/heap-dump-directory/#heapdumpdirectory","title":"heapDumpDirectory","text":"<p>[jvm]\\ open override fun heapDumpDirectory(): File</p>"},{"location":"api/leakcanary/-retained-object-tracker/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker</p>"},{"location":"api/leakcanary/-retained-object-tracker/#retainedobjecttracker","title":"RetainedObjectTracker","text":"<p>interface RetainedObjectTracker</p> <p>Helper util for tracking retained objects.</p> <p>A retained object is an object that is expected to be deleted but stays strongly reachable, preventing it from being garbage collected.</p> <ul> <li>A target object is \"tracked\" after being reported to an associated DeletableObjectReporter or TriggeredDeletableObjectReporter.</li> <li>If at any point in time that target object becomes weakly reachable, then RetainedObjectTracker will stop tracking that object.</li> </ul>"},{"location":"api/leakcanary/-retained-object-tracker/#inheritors","title":"Inheritors","text":"ReferenceQueueRetainedObjectTracker"},{"location":"api/leakcanary/-retained-object-tracker/#functions","title":"Functions","text":"Name Summary clearAllObjectsTracked [jvm]abstract fun clearAllObjectsTracked()Clears weak reachability expectations for all tracked objects. clearObjectsTrackedBefore [jvm]abstract fun clearObjectsTrackedBefore(uptime: Duration)Clears weak reachability expectations for objects that were created before uptime."},{"location":"api/leakcanary/-retained-object-tracker/#properties","title":"Properties","text":"Name Summary hasRetainedObjects [jvm]abstract val hasRetainedObjects: BooleanReturns true if any of the tracked objects are currently retained. hasTrackedObjects [jvm]abstract val hasTrackedObjects: BooleanReturns true if there are any tracked objects that aren\u2019t currently weakly reachable. retainedObjectCount [jvm]abstract val retainedObjectCount: IntReturns the number of retained objects. trackedObjectCount [jvm]abstract val trackedObjectCount: IntReturns the number of tracked objects that aren\u2019t weakly reachable."},{"location":"api/leakcanary/-retained-object-tracker/clear-all-objects-tracked/","title":"Clear all objects tracked","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/clearAllObjectsTracked</p>"},{"location":"api/leakcanary/-retained-object-tracker/clear-all-objects-tracked/#clearallobjectstracked","title":"clearAllObjectsTracked","text":"<p>[jvm]\\ abstract fun clearAllObjectsTracked()</p> <p>Clears weak reachability expectations for all tracked objects.</p>"},{"location":"api/leakcanary/-retained-object-tracker/clear-objects-tracked-before/","title":"Clear objects tracked before","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/clearObjectsTrackedBefore</p>"},{"location":"api/leakcanary/-retained-object-tracker/clear-objects-tracked-before/#clearobjectstrackedbefore","title":"clearObjectsTrackedBefore","text":"<p>[jvm]\\ abstract fun clearObjectsTrackedBefore(uptime: Duration)</p> <p>Clears weak reachability expectations for objects that were created before uptime.</p>"},{"location":"api/leakcanary/-retained-object-tracker/clear-objects-tracked-before/#parameters","title":"Parameters","text":"<p>jvm</p> uptime A time in the past from UptimeClock.uptime."},{"location":"api/leakcanary/-retained-object-tracker/has-retained-objects/","title":"Has retained objects","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/hasRetainedObjects</p>"},{"location":"api/leakcanary/-retained-object-tracker/has-retained-objects/#hasretainedobjects","title":"hasRetainedObjects","text":"<p>[jvm]\\ abstract val hasRetainedObjects: Boolean</p> <p>Returns true if any of the tracked objects are currently retained.</p>"},{"location":"api/leakcanary/-retained-object-tracker/has-tracked-objects/","title":"Has tracked objects","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/hasTrackedObjects</p>"},{"location":"api/leakcanary/-retained-object-tracker/has-tracked-objects/#hastrackedobjects","title":"hasTrackedObjects","text":"<p>[jvm]\\ abstract val hasTrackedObjects: Boolean</p> <p>Returns true if there are any tracked objects that aren\u2019t currently weakly reachable.</p>"},{"location":"api/leakcanary/-retained-object-tracker/retained-object-count/","title":"Retained object count","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/retainedObjectCount</p>"},{"location":"api/leakcanary/-retained-object-tracker/retained-object-count/#retainedobjectcount","title":"retainedObjectCount","text":"<p>[jvm]\\ abstract val retainedObjectCount: Int</p> <p>Returns the number of retained objects.</p>"},{"location":"api/leakcanary/-retained-object-tracker/tracked-object-count/","title":"Tracked object count","text":"<p>//leakcanary-repo/leakcanary/RetainedObjectTracker/trackedObjectCount</p>"},{"location":"api/leakcanary/-retained-object-tracker/tracked-object-count/#trackedobjectcount","title":"trackedObjectCount","text":"<p>[jvm]\\ abstract val trackedObjectCount: Int</p> <p>Returns the number of tracked objects that aren\u2019t weakly reachable.</p>"},{"location":"api/leakcanary/-root-view-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher</p>"},{"location":"api/leakcanary/-root-view-watcher/#rootviewwatcher","title":"RootViewWatcher","text":"<p>[androidJvm]\\ class RootViewWatcher(deletableObjectReporter: DeletableObjectReporter, rootViewFilter: RootViewWatcher.Filter = WindowTypeFilter(watchDismissedDialogs = false)) : InstallableWatcher</p> <p>Expects root views to become weakly reachable soon after they are removed from the window manager.</p>"},{"location":"api/leakcanary/-root-view-watcher/#constructors","title":"Constructors","text":"RootViewWatcher [androidJvm]constructor(reachabilityWatcher: ReachabilityWatcher)constructor(deletableObjectReporter: DeletableObjectReporter, rootViewFilter: RootViewWatcher.Filter = WindowTypeFilter(watchDismissedDialogs = false))"},{"location":"api/leakcanary/-root-view-watcher/#types","title":"Types","text":"Name Summary Filter [androidJvm]fun interface Filter WindowTypeFilter [androidJvm]class WindowTypeFilter(watchDismissedDialogs: Boolean) : RootViewWatcher.Filter"},{"location":"api/leakcanary/-root-view-watcher/#functions","title":"Functions","text":"Name Summary install [androidJvm]open override fun install() uninstall [androidJvm]open override fun uninstall()"},{"location":"api/leakcanary/-root-view-watcher/-root-view-watcher/","title":"root view watcher","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/RootViewWatcher</p>"},{"location":"api/leakcanary/-root-view-watcher/-root-view-watcher/#rootviewwatcher","title":"RootViewWatcher","text":"<p>[androidJvm]\\ constructor(reachabilityWatcher: ReachabilityWatcher)</p> <p>constructor(deletableObjectReporter: DeletableObjectReporter, rootViewFilter: RootViewWatcher.Filter = WindowTypeFilter(watchDismissedDialogs = false))</p>"},{"location":"api/leakcanary/-root-view-watcher/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/install</p>"},{"location":"api/leakcanary/-root-view-watcher/install/#install","title":"install","text":"<p>[androidJvm]\\ open override fun install()</p>"},{"location":"api/leakcanary/-root-view-watcher/uninstall/","title":"Uninstall","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/uninstall</p>"},{"location":"api/leakcanary/-root-view-watcher/uninstall/#uninstall","title":"uninstall","text":"<p>[androidJvm]\\ open override fun uninstall()</p>"},{"location":"api/leakcanary/-root-view-watcher/-filter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/Filter</p>"},{"location":"api/leakcanary/-root-view-watcher/-filter/#filter","title":"Filter","text":"<p>fun interface Filter</p>"},{"location":"api/leakcanary/-root-view-watcher/-filter/#inheritors","title":"Inheritors","text":"WindowTypeFilter"},{"location":"api/leakcanary/-root-view-watcher/-filter/#functions","title":"Functions","text":"Name Summary shouldExpectDeletionOnDetached [androidJvm]abstract fun shouldExpectDeletionOnDetached(rootView: View): Boolean"},{"location":"api/leakcanary/-root-view-watcher/-filter/should-expect-deletion-on-detached/","title":"Should expect deletion on detached","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/Filter/shouldExpectDeletionOnDetached</p>"},{"location":"api/leakcanary/-root-view-watcher/-filter/should-expect-deletion-on-detached/#shouldexpectdeletionondetached","title":"shouldExpectDeletionOnDetached","text":"<p>[androidJvm]\\ abstract fun shouldExpectDeletionOnDetached(rootView: View): Boolean</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/WindowTypeFilter</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/#windowtypefilter","title":"WindowTypeFilter","text":"<p>[androidJvm]\\ class WindowTypeFilter(watchDismissedDialogs: Boolean) : RootViewWatcher.Filter</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/#constructors","title":"Constructors","text":"WindowTypeFilter [androidJvm]constructor(watchDismissedDialogs: Boolean)"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/#functions","title":"Functions","text":"Name Summary shouldExpectDeletionOnDetached [androidJvm]open override fun shouldExpectDeletionOnDetached(rootView: View): Boolean"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/-window-type-filter/","title":"window type filter","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/WindowTypeFilter/WindowTypeFilter</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/-window-type-filter/#windowtypefilter","title":"WindowTypeFilter","text":"<p>[androidJvm]\\ constructor(watchDismissedDialogs: Boolean)</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/should-expect-deletion-on-detached/","title":"Should expect deletion on detached","text":"<p>//leakcanary-repo/leakcanary/RootViewWatcher/WindowTypeFilter/shouldExpectDeletionOnDetached</p>"},{"location":"api/leakcanary/-root-view-watcher/-window-type-filter/should-expect-deletion-on-detached/#shouldexpectdeletionondetached","title":"shouldExpectDeletionOnDetached","text":"<p>[androidJvm]\\ open override fun shouldExpectDeletionOnDetached(rootView: View): Boolean</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/SaveResourceIdsInterceptor</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/#saveresourceidsinterceptor","title":"SaveResourceIdsInterceptor","text":"<p>[androidJvm]\\ class SaveResourceIdsInterceptor(resources: Resources) : HeapAnalysisInterceptor</p> <p>Interceptor that saves the names of R.id.* entries and their associated int values to a static field that can then be read from the heap dump.</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/#constructors","title":"Constructors","text":"SaveResourceIdsInterceptor [androidJvm]constructor(resources: Resources)"},{"location":"api/leakcanary/-save-resource-ids-interceptor/#functions","title":"Functions","text":"Name Summary intercept [androidJvm]open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result"},{"location":"api/leakcanary/-save-resource-ids-interceptor/-save-resource-ids-interceptor/","title":"save resource ids interceptor","text":"<p>//leakcanary-repo/leakcanary/SaveResourceIdsInterceptor/SaveResourceIdsInterceptor</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/-save-resource-ids-interceptor/#saveresourceidsinterceptor","title":"SaveResourceIdsInterceptor","text":"<p>[androidJvm]\\ constructor(resources: Resources)</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/intercept/","title":"Intercept","text":"<p>//leakcanary-repo/leakcanary/SaveResourceIdsInterceptor/intercept</p>"},{"location":"api/leakcanary/-save-resource-ids-interceptor/intercept/#intercept","title":"intercept","text":"<p>[androidJvm]\\ open override fun intercept(chain: HeapAnalysisInterceptor.Chain): HeapAnalysisJob.Result</p>"},{"location":"api/leakcanary/-screen-off-trigger/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ScreenOffTrigger</p>"},{"location":"api/leakcanary/-screen-off-trigger/#screenofftrigger","title":"ScreenOffTrigger","text":"<p>[androidJvm]\\ class ScreenOffTrigger(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })</p>"},{"location":"api/leakcanary/-screen-off-trigger/#constructors","title":"Constructors","text":"ScreenOffTrigger [androidJvm]constructor(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })"},{"location":"api/leakcanary/-screen-off-trigger/#functions","title":"Functions","text":"Name Summary start [androidJvm]fun start() stop [androidJvm]fun stop()"},{"location":"api/leakcanary/-screen-off-trigger/-screen-off-trigger/","title":"screen off trigger","text":"<p>//leakcanary-repo/leakcanary/ScreenOffTrigger/ScreenOffTrigger</p>"},{"location":"api/leakcanary/-screen-off-trigger/-screen-off-trigger/#screenofftrigger","title":"ScreenOffTrigger","text":"<p>[androidJvm]\\ constructor(application: Application, analysisClient: HeapAnalysisClient, analysisExecutor: Executor, analysisCallback: (HeapAnalysisJob.Result) -> Unit = { result -> SharkLog.d { \"$result\" } })</p>"},{"location":"api/leakcanary/-screen-off-trigger/start/","title":"Start","text":"<p>//leakcanary-repo/leakcanary/ScreenOffTrigger/start</p>"},{"location":"api/leakcanary/-screen-off-trigger/start/#start","title":"start","text":"<p>[androidJvm]\\ fun start()</p>"},{"location":"api/leakcanary/-screen-off-trigger/stop/","title":"Stop","text":"<p>//leakcanary-repo/leakcanary/ScreenOffTrigger/stop</p>"},{"location":"api/leakcanary/-screen-off-trigger/stop/#stop","title":"stop","text":"<p>[androidJvm]\\ fun stop()</p>"},{"location":"api/leakcanary/-service-watcher/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ServiceWatcher</p>"},{"location":"api/leakcanary/-service-watcher/#servicewatcher","title":"ServiceWatcher","text":"<p>[androidJvm]\\ class ServiceWatcher(deletableObjectReporter: DeletableObjectReporter) : InstallableWatcher</p> <p>Expects services to become weakly reachable soon after they receive the Service.onDestroy callback.</p>"},{"location":"api/leakcanary/-service-watcher/#constructors","title":"Constructors","text":"ServiceWatcher [androidJvm]constructor(reachabilityWatcher: ReachabilityWatcher)constructor(deletableObjectReporter: DeletableObjectReporter)"},{"location":"api/leakcanary/-service-watcher/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-service-watcher/#functions","title":"Functions","text":"Name Summary install [androidJvm]open override fun install() uninstall [androidJvm]open override fun uninstall()"},{"location":"api/leakcanary/-service-watcher/-service-watcher/","title":"service watcher","text":"<p>//leakcanary-repo/leakcanary/ServiceWatcher/ServiceWatcher</p>"},{"location":"api/leakcanary/-service-watcher/-service-watcher/#servicewatcher","title":"ServiceWatcher","text":"<p>[androidJvm]\\ constructor(reachabilityWatcher: ReachabilityWatcher)</p> <p>constructor(deletableObjectReporter: DeletableObjectReporter)</p>"},{"location":"api/leakcanary/-service-watcher/install/","title":"Install","text":"<p>//leakcanary-repo/leakcanary/ServiceWatcher/install</p>"},{"location":"api/leakcanary/-service-watcher/install/#install","title":"install","text":"<p>[androidJvm]\\ open override fun install()</p>"},{"location":"api/leakcanary/-service-watcher/uninstall/","title":"Uninstall","text":"<p>//leakcanary-repo/leakcanary/ServiceWatcher/uninstall</p>"},{"location":"api/leakcanary/-service-watcher/uninstall/#uninstall","title":"uninstall","text":"<p>[androidJvm]\\ open override fun uninstall()</p>"},{"location":"api/leakcanary/-service-watcher/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ServiceWatcher/Companion</p>"},{"location":"api/leakcanary/-service-watcher/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-skip-leak-detection/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/SkipLeakDetection</p>"},{"location":"api/leakcanary/-skip-leak-detection/#skipleakdetection","title":"SkipLeakDetection","text":"<p>[androidJvm]\\ @Target(allowedTargets = [AnnotationTarget.CLASS, AnnotationTarget.FUNCTION])</p> <p>annotation class SkipLeakDetection(val message: String, val assertionTags: String)</p> <p>Annotation for skipping leak detection in a UI test that calls LeakAssertions.assertNoLeaks. This annotation is useful to skip a leak detection in a test until the leaks are fixed.</p> <p>The check is performed by shouldSkipTest which is called by AndroidDetectLeaksAssert, which requires that the TestDescriptionHolder rule be applied and evaluating when LeakAssertions.assertNoLeaks is called.</p> <p>message should contain an explanation of why leak detection is skipped, e.g. a reference to a filed issue.</p> <p>The optional assertionTags allows finer grained filtering based on the tag value passed to LeakAssertions.assertNoLeaks. If assertionTags is empty, then the test will skip leak detection entirely. If assertionTags is not empty, then the test will skip leak detection for any call to LeakAssertions.assertNoLeaks with a tag value contained in assertionTags.</p>"},{"location":"api/leakcanary/-skip-leak-detection/#types","title":"Types","text":"Name Summary Companion [androidJvm]object Companion"},{"location":"api/leakcanary/-skip-leak-detection/#properties","title":"Properties","text":"Name Summary assertionTags [androidJvm]val assertionTags: Array<out String> message [androidJvm]val message: String"},{"location":"api/leakcanary/-skip-leak-detection/assertion-tags/","title":"Assertion tags","text":"<p>//leakcanary-repo/leakcanary/SkipLeakDetection/assertionTags</p>"},{"location":"api/leakcanary/-skip-leak-detection/assertion-tags/#assertiontags","title":"assertionTags","text":"<p>[androidJvm]\\ val assertionTags: Array<out String></p>"},{"location":"api/leakcanary/-skip-leak-detection/message/","title":"Message","text":"<p>//leakcanary-repo/leakcanary/SkipLeakDetection/message</p>"},{"location":"api/leakcanary/-skip-leak-detection/message/#message","title":"message","text":"<p>[androidJvm]\\ val message: String</p>"},{"location":"api/leakcanary/-skip-leak-detection/-companion/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/SkipLeakDetection/Companion</p>"},{"location":"api/leakcanary/-skip-leak-detection/-companion/#companion","title":"Companion","text":"<p>[androidJvm]\\ object Companion</p>"},{"location":"api/leakcanary/-skip-leak-detection/-companion/#functions","title":"Functions","text":"Name Summary shouldSkipTest [androidJvm]fun shouldSkipTest(testDescription: Description, assertionTag: String): Booleanfun shouldSkipTest(testName: String, skipAnnotation: SkipLeakDetection?, assertionTag: String): Boolean"},{"location":"api/leakcanary/-skip-leak-detection/-companion/should-skip-test/","title":"Should skip test","text":"<p>//leakcanary-repo/leakcanary/SkipLeakDetection/Companion/shouldSkipTest</p>"},{"location":"api/leakcanary/-skip-leak-detection/-companion/should-skip-test/#shouldskiptest","title":"shouldSkipTest","text":"<p>[androidJvm]\\ fun shouldSkipTest(testDescription: Description, assertionTag: String): Boolean</p> <p>fun shouldSkipTest(testName: String, skipAnnotation: SkipLeakDetection?, assertionTag: String): Boolean</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TargetContextHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/#targetcontextheapdumpdirectoryprovider","title":"TargetContextHeapDumpDirectoryProvider","text":"<p>[androidJvm]\\ class TargetContextHeapDumpDirectoryProvider(heapDumpDirectoryName: String) : HeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/#constructors","title":"Constructors","text":"TargetContextHeapDumpDirectoryProvider [androidJvm]constructor(heapDumpDirectoryName: String)"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/#functions","title":"Functions","text":"Name Summary heapDumpDirectory [androidJvm]open override fun heapDumpDirectory(): File"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/-target-context-heap-dump-directory-provider/","title":"target context heap dump directory provider","text":"<p>//leakcanary-repo/leakcanary/TargetContextHeapDumpDirectoryProvider/TargetContextHeapDumpDirectoryProvider</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/-target-context-heap-dump-directory-provider/#targetcontextheapdumpdirectoryprovider","title":"TargetContextHeapDumpDirectoryProvider","text":"<p>[androidJvm]\\ constructor(heapDumpDirectoryName: String)</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/heap-dump-directory/","title":"Heap dump directory","text":"<p>//leakcanary-repo/leakcanary/TargetContextHeapDumpDirectoryProvider/heapDumpDirectory</p>"},{"location":"api/leakcanary/-target-context-heap-dump-directory-provider/heap-dump-directory/#heapdumpdirectory","title":"heapDumpDirectory","text":"<p>[androidJvm]\\ open override fun heapDumpDirectory(): File</p>"},{"location":"api/leakcanary/-temp-heap-dump-file-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TempHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-temp-heap-dump-file-provider/#tempheapdumpfileprovider","title":"TempHeapDumpFileProvider","text":"<p>[jvm]\\ object TempHeapDumpFileProvider : HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-temp-heap-dump-file-provider/#functions","title":"Functions","text":"Name Summary newHeapDumpFile [jvm]open override fun newHeapDumpFile(): FileReturns a File that can be passed to a HeapDumper to dump the heap."},{"location":"api/leakcanary/-temp-heap-dump-file-provider/new-heap-dump-file/","title":"New heap dump file","text":"<p>//leakcanary-repo/leakcanary/TempHeapDumpFileProvider/newHeapDumpFile</p>"},{"location":"api/leakcanary/-temp-heap-dump-file-provider/new-heap-dump-file/#newheapdumpfile","title":"newHeapDumpFile","text":"<p>[jvm]\\ open override fun newHeapDumpFile(): File</p> <p>Returns a File that can be passed to a HeapDumper to dump the heap.</p>"},{"location":"api/leakcanary/-test-description-holder/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestDescriptionHolder</p>"},{"location":"api/leakcanary/-test-description-holder/#testdescriptionholder","title":"TestDescriptionHolder","text":"<p>[jvm]\\ object TestDescriptionHolder : TestRule</p> <p>A TestRule that holds onto the test Description in a thread local while evaluating, making it possible to retrieve that test Description from the test thread via testDescription.</p> <p>This rule is automatically applied by DetectLeaksAfterTestSuccess.</p>"},{"location":"api/leakcanary/-test-description-holder/#functions","title":"Functions","text":"Name Summary apply [jvm]open override fun apply(base: Statement, description: Description): Statement isEvaluating [jvm]fun isEvaluating(): Boolean wrap [jvm]fun wrap(base: Statement, description: Description): Statement"},{"location":"api/leakcanary/-test-description-holder/#properties","title":"Properties","text":"Name Summary testDescription [jvm]val testDescription: Description"},{"location":"api/leakcanary/-test-description-holder/apply/","title":"Apply","text":"<p>//leakcanary-repo/leakcanary/TestDescriptionHolder/apply</p>"},{"location":"api/leakcanary/-test-description-holder/apply/#apply","title":"apply","text":"<p>[jvm]\\ open override fun apply(base: Statement, description: Description): Statement</p>"},{"location":"api/leakcanary/-test-description-holder/is-evaluating/","title":"Is evaluating","text":"<p>//leakcanary-repo/leakcanary/TestDescriptionHolder/isEvaluating</p>"},{"location":"api/leakcanary/-test-description-holder/is-evaluating/#isevaluating","title":"isEvaluating","text":"<p>[jvm]\\ fun isEvaluating(): Boolean</p>"},{"location":"api/leakcanary/-test-description-holder/test-description/","title":"Test description","text":"<p>//leakcanary-repo/leakcanary/TestDescriptionHolder/testDescription</p>"},{"location":"api/leakcanary/-test-description-holder/test-description/#testdescription","title":"testDescription","text":"<p>[jvm]\\ val testDescription: Description</p>"},{"location":"api/leakcanary/-test-description-holder/wrap/","title":"Wrap","text":"<p>//leakcanary-repo/leakcanary/TestDescriptionHolder/wrap</p>"},{"location":"api/leakcanary/-test-description-holder/wrap/#wrap","title":"wrap","text":"<p>[jvm]\\ fun wrap(base: Statement, description: Description): Statement</p>"},{"location":"api/leakcanary/-test-heap-dump-file-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-test-heap-dump-file-provider/#testheapdumpfileprovider","title":"TestHeapDumpFileProvider","text":"<p>[jvm]\\ class TestHeapDumpFileProvider(heapDumpDirectoryProvider: HeapDumpDirectoryProvider) : HeapDumpFileProvider</p>"},{"location":"api/leakcanary/-test-heap-dump-file-provider/#constructors","title":"Constructors","text":"TestHeapDumpFileProvider [jvm]constructor(heapDumpDirectoryProvider: HeapDumpDirectoryProvider)"},{"location":"api/leakcanary/-test-heap-dump-file-provider/#functions","title":"Functions","text":"Name Summary newHeapDumpFile [jvm]open override fun newHeapDumpFile(): File"},{"location":"api/leakcanary/-test-heap-dump-file-provider/-test-heap-dump-file-provider/","title":"test heap dump file provider","text":"<p>//leakcanary-repo/leakcanary/TestHeapDumpFileProvider/TestHeapDumpFileProvider</p>"},{"location":"api/leakcanary/-test-heap-dump-file-provider/-test-heap-dump-file-provider/#testheapdumpfileprovider","title":"TestHeapDumpFileProvider","text":"<p>[jvm]\\ constructor(heapDumpDirectoryProvider: HeapDumpDirectoryProvider)</p>"},{"location":"api/leakcanary/-test-heap-dump-file-provider/new-heap-dump-file/","title":"New heap dump file","text":"<p>//leakcanary-repo/leakcanary/TestHeapDumpFileProvider/newHeapDumpFile</p>"},{"location":"api/leakcanary/-test-heap-dump-file-provider/new-heap-dump-file/#newheapdumpfile","title":"newHeapDumpFile","text":"<p>[jvm]\\ open override fun newHeapDumpFile(): File</p>"},{"location":"api/leakcanary/-test-name/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestName</p>"},{"location":"api/leakcanary/-test-name/#testname","title":"TestName","text":"<p>interface TestName</p>"},{"location":"api/leakcanary/-test-name/#inheritors","title":"Inheritors","text":"FromTestDescription FromStackTraceElement"},{"location":"api/leakcanary/-test-name/#types","title":"Types","text":"Name Summary FromStackTraceElement [jvm]class FromStackTraceElement(testStackElement: StackTraceElement) : TestName FromTestDescription [jvm]class FromTestDescription(testDescription: Description) : TestName"},{"location":"api/leakcanary/-test-name/#properties","title":"Properties","text":"Name Summary className [jvm]abstract val className: String classSimpleName [jvm]abstract val classSimpleName: String methodName [jvm]abstract val methodName: String"},{"location":"api/leakcanary/-test-name/class-name/","title":"Class name","text":"<p>//leakcanary-repo/leakcanary/TestName/className</p>"},{"location":"api/leakcanary/-test-name/class-name/#classname","title":"className","text":"<p>[jvm]\\ abstract val className: String</p>"},{"location":"api/leakcanary/-test-name/class-simple-name/","title":"Class simple name","text":"<p>//leakcanary-repo/leakcanary/TestName/classSimpleName</p>"},{"location":"api/leakcanary/-test-name/class-simple-name/#classsimplename","title":"classSimpleName","text":"<p>[jvm]\\ abstract val classSimpleName: String</p>"},{"location":"api/leakcanary/-test-name/method-name/","title":"Method name","text":"<p>//leakcanary-repo/leakcanary/TestName/methodName</p>"},{"location":"api/leakcanary/-test-name/method-name/#methodname","title":"methodName","text":"<p>[jvm]\\ abstract val methodName: String</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestName/FromStackTraceElement</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/#fromstacktraceelement","title":"FromStackTraceElement","text":"<p>[jvm]\\ class FromStackTraceElement(testStackElement: StackTraceElement) : TestName</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/#constructors","title":"Constructors","text":"FromStackTraceElement [jvm]constructor(testStackElement: StackTraceElement)"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/#properties","title":"Properties","text":"Name Summary className [jvm]open override val className: String classSimpleName [jvm]open override val classSimpleName: String methodName [jvm]open override val methodName: String"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/-from-stack-trace-element/","title":"from stack trace element","text":"<p>//leakcanary-repo/leakcanary/TestName/FromStackTraceElement/FromStackTraceElement</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/-from-stack-trace-element/#fromstacktraceelement","title":"FromStackTraceElement","text":"<p>[jvm]\\ constructor(testStackElement: StackTraceElement)</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/class-name/","title":"Class name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromStackTraceElement/className</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/class-name/#classname","title":"className","text":"<p>[jvm]\\ open override val className: String</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/class-simple-name/","title":"Class simple name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromStackTraceElement/classSimpleName</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/class-simple-name/#classsimplename","title":"classSimpleName","text":"<p>[jvm]\\ open override val classSimpleName: String</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/method-name/","title":"Method name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromStackTraceElement/methodName</p>"},{"location":"api/leakcanary/-test-name/-from-stack-trace-element/method-name/#methodname","title":"methodName","text":"<p>[jvm]\\ open override val methodName: String</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestName/FromTestDescription</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/#fromtestdescription","title":"FromTestDescription","text":"<p>[jvm]\\ class FromTestDescription(testDescription: Description) : TestName</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/#constructors","title":"Constructors","text":"FromTestDescription [jvm]constructor(testDescription: Description)"},{"location":"api/leakcanary/-test-name/-from-test-description/#properties","title":"Properties","text":"Name Summary className [jvm]open override val className: String classSimpleName [jvm]open override val classSimpleName: String methodName [jvm]open override val methodName: String"},{"location":"api/leakcanary/-test-name/-from-test-description/-from-test-description/","title":"from test description","text":"<p>//leakcanary-repo/leakcanary/TestName/FromTestDescription/FromTestDescription</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/-from-test-description/#fromtestdescription","title":"FromTestDescription","text":"<p>[jvm]\\ constructor(testDescription: Description)</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/class-name/","title":"Class name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromTestDescription/className</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/class-name/#classname","title":"className","text":"<p>[jvm]\\ open override val className: String</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/class-simple-name/","title":"Class simple name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromTestDescription/classSimpleName</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/class-simple-name/#classsimplename","title":"classSimpleName","text":"<p>[jvm]\\ open override val classSimpleName: String</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/method-name/","title":"Method name","text":"<p>//leakcanary-repo/leakcanary/TestName/FromTestDescription/methodName</p>"},{"location":"api/leakcanary/-test-name/-from-test-description/method-name/#methodname","title":"methodName","text":"<p>[jvm]\\ open override val methodName: String</p>"},{"location":"api/leakcanary/-test-name-provider/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TestNameProvider</p>"},{"location":"api/leakcanary/-test-name-provider/#testnameprovider","title":"TestNameProvider","text":"<p>[jvm]\\ object TestNameProvider</p>"},{"location":"api/leakcanary/-test-name-provider/#functions","title":"Functions","text":"Name Summary currentTestName [jvm]fun currentTestName(): TestName?"},{"location":"api/leakcanary/-test-name-provider/current-test-name/","title":"Current test name","text":"<p>//leakcanary-repo/leakcanary/TestNameProvider/currentTestName</p>"},{"location":"api/leakcanary/-test-name-provider/current-test-name/#currenttestname","title":"currentTestName","text":"<p>[jvm]\\ fun currentTestName(): TestName?</p>"},{"location":"api/leakcanary/-toast-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ToastEventListener</p>"},{"location":"api/leakcanary/-toast-event-listener/#toasteventlistener","title":"ToastEventListener","text":"<p>[androidJvm]\\ object ToastEventListener : EventListener</p>"},{"location":"api/leakcanary/-toast-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-toast-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/ToastEventListener/onEvent</p>"},{"location":"api/leakcanary/-toast-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-tracked-object-reachability/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TrackedObjectReachability</p>"},{"location":"api/leakcanary/-tracked-object-reachability/#trackedobjectreachability","title":"TrackedObjectReachability","text":"<p>interface TrackedObjectReachability</p>"},{"location":"api/leakcanary/-tracked-object-reachability/#inheritors","title":"Inheritors","text":"RetainTrigger"},{"location":"api/leakcanary/-tracked-object-reachability/#properties","title":"Properties","text":"Name Summary isDeletable [jvm]open val isDeletable: BooleanWhether this object is eligible for automatic garbage collection. isRetained [jvm]abstract val isRetained: Booleantrue if the track object has been marked as retained and is currently strongly reachable. isStronglyReachable [jvm]abstract val isStronglyReachable: Booleantrue if the tracked object is currently strongly reachable."},{"location":"api/leakcanary/-tracked-object-reachability/is-deletable/","title":"Is deletable","text":"<p>//leakcanary-repo/leakcanary/TrackedObjectReachability/isDeletable</p>"},{"location":"api/leakcanary/-tracked-object-reachability/is-deletable/#isdeletable","title":"isDeletable","text":"<p>[jvm]\\ open val isDeletable: Boolean</p> <p>Whether this object is eligible for automatic garbage collection.</p>"},{"location":"api/leakcanary/-tracked-object-reachability/is-retained/","title":"Is retained","text":"<p>//leakcanary-repo/leakcanary/TrackedObjectReachability/isRetained</p>"},{"location":"api/leakcanary/-tracked-object-reachability/is-retained/#isretained","title":"isRetained","text":"<p>[jvm]\\ abstract val isRetained: Boolean</p> <p>true if the track object has been marked as retained and is currently strongly reachable.</p>"},{"location":"api/leakcanary/-tracked-object-reachability/is-strongly-reachable/","title":"Is strongly reachable","text":"<p>//leakcanary-repo/leakcanary/TrackedObjectReachability/isStronglyReachable</p>"},{"location":"api/leakcanary/-tracked-object-reachability/is-strongly-reachable/#isstronglyreachable","title":"isStronglyReachable","text":"<p>[jvm]\\ abstract val isStronglyReachable: Boolean</p> <p>true if the tracked object is currently strongly reachable.</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TriggeredDeletableObjectReporter</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/#triggereddeletableobjectreporter","title":"TriggeredDeletableObjectReporter","text":"<p>interface TriggeredDeletableObjectReporter</p> <p>Tracks deletion of target objects, marking them retained on trigger.</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/#inheritors","title":"Inheritors","text":"ReferenceQueueRetainedObjectTracker"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/#types","title":"Types","text":"Name Summary RetainTrigger [jvm]interface RetainTrigger : TrackedObjectReachability"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/#functions","title":"Functions","text":"Name Summary expectDeletionOnTriggerFor [jvm]abstract fun expectDeletionOnTriggerFor(target: Any, reason: String): TriggeredDeletableObjectReporter.RetainTriggerStart tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. that it should not be strongly reachable by the time RetainTrigger.markRetainedIfStronglyReachable is called on the returned RetainTrigger."},{"location":"api/leakcanary/-triggered-deletable-object-reporter/expect-deletion-on-trigger-for/","title":"Expect deletion on trigger for","text":"<p>//leakcanary-repo/leakcanary/TriggeredDeletableObjectReporter/expectDeletionOnTriggerFor</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/expect-deletion-on-trigger-for/#expectdeletionontriggerfor","title":"expectDeletionOnTriggerFor","text":"<p>[jvm]\\ abstract fun expectDeletionOnTriggerFor(target: Any, reason: String): TriggeredDeletableObjectReporter.RetainTrigger</p> <p>Start tracking the provided target object, with the expectation that it should be eligible for automatic garbage collection soon, i.e. that it should not be strongly reachable by the time RetainTrigger.markRetainedIfStronglyReachable is called on the returned RetainTrigger.</p> <p>If target stays strongly reachable, it will be considered \"retained\".</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/expect-deletion-on-trigger-for/#parameters","title":"Parameters","text":"<p>jvm</p> target See DeletableObjectReporter.expectDeletionFor reason See DeletableObjectReporter.expectDeletionFor"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TriggeredDeletableObjectReporter/RetainTrigger</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/#retaintrigger","title":"RetainTrigger","text":"<p>[jvm]\\ interface RetainTrigger : TrackedObjectReachability</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/#functions","title":"Functions","text":"Name Summary markRetainedIfStronglyReachable [jvm]abstract fun markRetainedIfStronglyReachable()Marks the tracked object as \"retained\" if it is still strongly reachable."},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/#properties","title":"Properties","text":"Name Summary isDeletable [jvm]open val isDeletable: BooleanWhether this object is eligible for automatic garbage collection. isRetained [jvm]abstract val isRetained: Booleantrue if the track object has been marked as retained and is currently strongly reachable. isStronglyReachable [jvm]abstract val isStronglyReachable: Booleantrue if the tracked object is currently strongly reachable."},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/mark-retained-if-strongly-reachable/","title":"Mark retained if strongly reachable","text":"<p>//leakcanary-repo/leakcanary/TriggeredDeletableObjectReporter/RetainTrigger/markRetainedIfStronglyReachable</p>"},{"location":"api/leakcanary/-triggered-deletable-object-reporter/-retain-trigger/mark-retained-if-strongly-reachable/#markretainedifstronglyreachable","title":"markRetainedIfStronglyReachable","text":"<p>[jvm]\\ abstract fun markRetainedIfStronglyReachable()</p> <p>Marks the tracked object as \"retained\" if it is still strongly reachable.</p>"},{"location":"api/leakcanary/-tv-event-listener/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/TvEventListener</p>"},{"location":"api/leakcanary/-tv-event-listener/#tveventlistener","title":"TvEventListener","text":"<p>[androidJvm]\\ object TvEventListener : EventListener</p>"},{"location":"api/leakcanary/-tv-event-listener/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-tv-event-listener/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/TvEventListener/onEvent</p>"},{"location":"api/leakcanary/-tv-event-listener/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellFileDeleter</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/#uiautomatorshellfiledeleter","title":"UiAutomatorShellFileDeleter","text":"<p>[androidJvm]\\ object UiAutomatorShellFileDeleter</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/#functions","title":"Functions","text":"Name Summary deleteFileUsingShell [androidJvm]fun deleteFileUsingShell(file: File)"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/delete-file-using-shell/","title":"Delete file using shell","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellFileDeleter/deleteFileUsingShell</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/delete-file-using-shell/#deletefileusingshell","title":"deleteFileUsingShell","text":"<p>[androidJvm]\\ fun deleteFileUsingShell(file: File)</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/delete/","title":"Delete","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellFileDeleter/delete</p>"},{"location":"api/leakcanary/-ui-automator-shell-file-deleter/delete/#delete","title":"delete","text":"<p>[androidJvm]\\ open override fun delete(file: File)</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellHeapDumper</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/#uiautomatorshellheapdumper","title":"UiAutomatorShellHeapDumper","text":"<p>[androidJvm]\\ class UiAutomatorShellHeapDumper(withGc: Boolean, dumpedAppPackageName: String) : HeapDumper</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/#constructors","title":"Constructors","text":"UiAutomatorShellHeapDumper [androidJvm]constructor(withGc: Boolean, dumpedAppPackageName: String)"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [androidJvm]open override fun dumpHeap(heapDumpFile: File) withDetectorWarmup [jvm]fun HeapDumper.withDetectorWarmup(objectGrowthDetector: ObjectGrowthDetector, androidHeap: Boolean): HeapDumper withGc [jvm]fun HeapDumper.withGc(gcTrigger: GcTrigger = GcTrigger.inProcess()): HeapDumper"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/-ui-automator-shell-heap-dumper/","title":"ui automator shell heap dumper","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellHeapDumper/UiAutomatorShellHeapDumper</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/-ui-automator-shell-heap-dumper/#uiautomatorshellheapdumper","title":"UiAutomatorShellHeapDumper","text":"<p>[androidJvm]\\ constructor(withGc: Boolean, dumpedAppPackageName: String)</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/leakcanary/UiAutomatorShellHeapDumper/dumpHeap</p>"},{"location":"api/leakcanary/-ui-automator-shell-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[androidJvm]\\ open override fun dumpHeap(heapDumpFile: File)</p>"},{"location":"api/leakcanary/-uptime-clock/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/UptimeClock</p>"},{"location":"api/leakcanary/-uptime-clock/#uptimeclock","title":"UptimeClock","text":"<p>[jvm]\\ fun interface UptimeClock</p> <p>An interface to abstract the clock to get the system uptime.</p>"},{"location":"api/leakcanary/-uptime-clock/#functions","title":"Functions","text":"Name Summary uptime [jvm]abstract fun uptime(): DurationOn JVMs this should return System.nanoTime as a Duration."},{"location":"api/leakcanary/-uptime-clock/uptime/","title":"Uptime","text":"<p>//leakcanary-repo/leakcanary/UptimeClock/uptime</p>"},{"location":"api/leakcanary/-uptime-clock/uptime/#uptime","title":"uptime","text":"<p>[jvm]\\ abstract fun uptime(): Duration</p> <p>On JVMs this should return System.nanoTime as a Duration.</p> <p>On Android VMs, this should return either System.nanoTime on Android 11 (when the method was annotated with @CriticalNative) or android.os.SystemClock.uptimeMillis() before Android 11.</p>"},{"location":"api/leakcanary/-view-location-holder-leak-fix/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/ViewLocationHolderLeakFix</p>"},{"location":"api/leakcanary/-view-location-holder-leak-fix/#viewlocationholderleakfix","title":"ViewLocationHolderLeakFix","text":"<p>object ViewLocationHolderLeakFix</p>"},{"location":"api/leakcanary/-view-location-holder-leak-fix/#see-also","title":"See also","text":"AndroidLeakFixes.VIEW_LOCATION_HOLDER ."},{"location":"api/leakcanary/-view-location-holder-leak-fix/#functions","title":"Functions","text":"Name Summary clearStaticPool [androidJvm]fun clearStaticPool(application: Application)Clears the ViewGroup.ViewLocationHolder.sPool static pool."},{"location":"api/leakcanary/-view-location-holder-leak-fix/clear-static-pool/","title":"Clear static pool","text":"<p>//leakcanary-repo/leakcanary/ViewLocationHolderLeakFix/clearStaticPool</p>"},{"location":"api/leakcanary/-view-location-holder-leak-fix/clear-static-pool/#clearstaticpool","title":"clearStaticPool","text":"<p>[androidJvm]\\ fun clearStaticPool(application: Application)</p> <p>Clears the ViewGroup.ViewLocationHolder.sPool static pool.</p>"},{"location":"api/leakcanary/-work-manager-heap-analyzer/","title":"Index","text":"<p>//leakcanary-repo/leakcanary/WorkManagerHeapAnalyzer</p>"},{"location":"api/leakcanary/-work-manager-heap-analyzer/#workmanagerheapanalyzer","title":"WorkManagerHeapAnalyzer","text":"<p>[androidJvm]\\ object WorkManagerHeapAnalyzer : EventListener</p> <p>When receiving a HeapDump event, starts a WorkManager worker that performs heap analysis.</p>"},{"location":"api/leakcanary/-work-manager-heap-analyzer/#functions","title":"Functions","text":"Name Summary onEvent [androidJvm]open override fun onEvent(event: EventListener.Event)onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done."},{"location":"api/leakcanary/-work-manager-heap-analyzer/on-event/","title":"On event","text":"<p>//leakcanary-repo/leakcanary/WorkManagerHeapAnalyzer/onEvent</p>"},{"location":"api/leakcanary/-work-manager-heap-analyzer/on-event/#onevent","title":"onEvent","text":"<p>[androidJvm]\\ open override fun onEvent(event: EventListener.Event)</p> <p>onEvent is always called from the thread the events are emitted from, which is documented for each event. This enables you to potentially block a chain of events, waiting for some pre work to be done.</p>"},{"location":"api/shark/","title":"Shark API","text":"<p>//leakcanary-repo/shark</p>"},{"location":"api/shark/#package-level-declarations","title":"Package-level declarations","text":""},{"location":"api/shark/#types","title":"Types","text":"Name Summary ActualMatchingReferenceReaderFactory [jvm]class ActualMatchingReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject> Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, and not creating any virtual reference. AnalyzeCommand [jvm]class AnalyzeCommand : CliktCommand AndroidBuildMirror [jvm]class AndroidBuildMirror(val manufacturer: String, val sdkInt: Int, val id: String)Caches values from the android.os.Build class in the heap dump. Retrieve a cached instances via fromHeapGraph. AndroidMetadataExtractor [jvm]object AndroidMetadataExtractor : MetadataExtractor AndroidNativeSizeMapper [jvm]class AndroidNativeSizeMapper(graph: HeapGraph) AndroidObjectGrowthReferenceMatchers [jvm]enum AndroidObjectGrowthReferenceMatchers : Enum<AndroidObjectGrowthReferenceMatchers> , ReferenceMatcher.ListBuilder AndroidObjectInspectors [jvm]enum AndroidObjectInspectors : Enum<AndroidObjectInspectors> , ObjectInspectorA set of default ObjectInspectors that knows about common AOSP and library classes. AndroidObjectSizeCalculator [jvm]class AndroidObjectSizeCalculator(graph: HeapGraph) : DominatorTree.ObjectSizeCalculator AndroidReferenceMatchers [jvm]enum AndroidReferenceMatchers : Enum<AndroidReferenceMatchers> , ReferenceMatcher.ListBuilderAndroidReferenceMatchers values add ReferenceMatcher instances to a global list via their add method. A ReferenceMatcher is either a IgnoredReferenceMatcher or a LibraryLeakReferenceMatcher. AndroidReferenceReaderFactory [jvm]class AndroidReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject> Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, creating additional virtual instance reference based on known Android classes. AndroidReferenceReaders [jvm]enum AndroidReferenceReaders : Enum<AndroidReferenceReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactory AndroidResourceIdNames [jvm]class AndroidResourceIdNames AndroidServices [jvm]object AndroidServices ApacheHarmonyInstanceRefReaders [jvm]enum ApacheHarmonyInstanceRefReaders : Enum<ApacheHarmonyInstanceRefReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactoryDefines VirtualInstanceReferenceReader factories for common Apache Harmony data structures. ApplicationLeak [jvm]data class ApplicationLeak(val leakTraces: List<LeakTrace>) : LeakA leak found by HeapAnalyzer in your application. AppSingletonInspector [jvm]class AppSingletonInspector(singletonClasses: String) : ObjectInspectorInspector that automatically marks instances of the provided class names as not leaking because they\u2019re app wide singletons. ByteArraySourceProvider [jvm]class ByteArraySourceProvider(byteArray: ByteArray) : DualSourceProvider ByteSize [jvm]@JvmInlinevalue class ByteSize(val inWholeBytes: Long) : Comparable<ByteSize> Inspired by https://github.com/saket/file-size as well as Kotlin\u2019s Duration API. ChainingInstanceReferenceReader [jvm]class ChainingInstanceReferenceReader(virtualRefReaders: List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader>, flatteningInstanceReader: FlatteningPartitionedInstanceReferenceReader?, fieldRefReader: FieldInstanceReferenceReader) : ReferenceReader<HeapObject.HeapInstance> A ReferenceReader that first delegates expanding to virtualRefReaders in order until one matches (or none), and then always proceeds with fieldRefReader. This means any synthetic ref will be on the shortest path, but we still explore the entire data structure so that we correctly track which objects have been visited and correctly compute dominators and retained size. ClassReferenceReader [jvm]class ClassReferenceReader(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ReferenceReader<HeapObject.HeapClass> CloseableHeapGraph [jvm]interface CloseableHeapGraph : HeapGraph, CloseableA HeapGraph that should be closed after being used. ConstantMemoryMetricsDualSourceProvider [jvm]class ConstantMemoryMetricsDualSourceProvider(realSourceProvider: DualSourceProvider) : DualSourceProviderCaptures IO read metrics without using much memory. DecoratedPath [jvm]class DecoratedPath(delegate: Path) : Path DeobfuscateHprofCommand [jvm]class DeobfuscateHprofCommand : CliktCommand Dominators [jvm]class Dominators(val dominatorNodes: Map<Long, ObjectDominators.DominatorNode>) : Serializable DominatorTree [jvm]class DominatorTree(expectedElements: Int = 4) DualSourceProvider [jvm]interface DualSourceProvider : StreamingSourceProvider, RandomAccessSourceProviderBoth a StreamingSourceProvider and a RandomAccessSourceProvider DumpProcessCommand [jvm]class DumpProcessCommand : CliktCommand FieldInstanceReferenceReader [jvm]class FieldInstanceReferenceReader(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ReferenceReader<HeapObject.HeapInstance> Expands instance fields that hold non null references. FileSourceProvider [jvm]class FileSourceProvider(file: File) : DualSourceProvider FilteringLeakingObjectFinder [jvm]class FilteringLeakingObjectFinder(filters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>) : LeakingObjectFinderFinds the objects that are leaking by scanning all objects in the heap dump and delegating the decision to a list of FilteringLeakingObjectFinder.LeakingObjectFilter FindLeakPaths [jvm]class FindLeakPaths FirstHeapTraversal [jvm]class FirstHeapTraversal(val shortestPathTree: ShortestPathObjectNode, previousTraversal: InitialState) : HeapTraversalOutput FlatteningPartitionedInstanceReferenceReader [jvm]class FlatteningPartitionedInstanceReferenceReader(graph: HeapGraph, instanceReferenceReader: FieldInstanceReferenceReader)FlatteningPartitionedInstanceReferenceReader provides a synthetic and stable representation of a data structure that maps how we think about that data structure instead of how it is internally implemented. You can think of it as surfacing additional direct references to entries that the data structure holds. VirtualInstanceReferenceReader implementations scan references based on known patterns rather than through generic traversals. As a result, they do not surface references and objects that are part of the data structure implementations, such as internal arrays or linked lists. This is a problem because the same traversal is also used to compute retained size, so we need to accounts for all reachable objects. GcRoot [jvm]sealed class GcRootA GcRoot as identified by HprofRecord.HeapDumpRecord.GcRootRecord in the heap dump. GcRootProvider [jvm]fun interface GcRootProvider GcRootReference [jvm]class GcRootReference(val gcRoot: GcRoot, val isLowPriority: Boolean, val matchedLibraryLeak: LibraryLeakReferenceMatcher?) GraphContext [jvm]class GraphContextIn memory store that can be used to store objects in a given HeapGraph instance. This is a simple MutableMap of String to Any, but with unsafe generics access. GrowingObjectNodes [jvm]typealias GrowingObjectNodes = List<ShortestPathObjectNode> HeapAnalysis [jvm]sealed class HeapAnalysis : SerializableThe result of an analysis performed by HeapAnalyzer, either a HeapAnalysisSuccess or a HeapAnalysisFailure. This class is serializable however there are no guarantees of forward compatibility. HeapAnalysisException [jvm]class HeapAnalysisException(cause: Throwable) : RuntimeException HeapAnalysisFailure [jvm]data class HeapAnalysisFailure(val heapDumpFile: File, val createdAtTimeMillis: Long, val dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: Long, val exception: HeapAnalysisException) : HeapAnalysisThe analysis performed by HeapAnalyzer did not complete successfully. HeapAnalysisSuccess [jvm]data class HeapAnalysisSuccess(val heapDumpFile: File, val createdAtTimeMillis: Long, val dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: Long, val metadata: Map<String, String>, val applicationLeaks: List<ApplicationLeak>, val libraryLeaks: List<LibraryLeak>, val unreachableObjects: List<LeakTraceObject>) : HeapAnalysisThe result of a successful heap analysis performed by HeapAnalyzer. HeapAnalyzer [jvm]class HeapAnalyzer(listener: OnAnalysisProgressListener)Analyzes heap dumps to look for leaks. HeapDiff [jvm]class HeapDiff(val traversalCount: Int, val shortestPathTree: ShortestPathObjectNode, val growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput) : HeapTraversalOutput HeapDumpRule [jvm]class HeapDumpRule : ExternalResource HeapField [jvm]class HeapField(val declaringClass: HeapObject.HeapClass, val name: String, val value: HeapValue)Represents a static field or an instance field. HeapGraph [jvm]interface HeapGraphEnables navigation through the heap graph of objects. HeapGrowthCommand [jvm]class HeapGrowthCommand : CliktCommand HeapObject [jvm]sealed class HeapObjectAn object in the heap dump. HeapTraversalInput [jvm]interface HeapTraversalInput HeapTraversalOutput [jvm]interface HeapTraversalOutput : HeapTraversalInput HeapValue [jvm]class HeapValue(val graph: HeapGraph, val holder: ValueHolder)Represents a value in the heap dump, which can be an object reference or a primitive type. HprofDeobfuscator [jvm]class HprofDeobfuscatorConverts a Hprof file to another file with deobfuscated class and field names. HprofHeader [jvm]data class HprofHeader(val heapDumpTimestamp: Long = System.currentTimeMillis(), val version: HprofVersion = HprofVersion.ANDROID, val identifierByteSize: Int = 4)Represents the header metadata of a Hprof file. HprofHeapGraph [jvm]class HprofHeapGraph : CloseableHeapGraphA HeapGraph that reads from an Hprof file indexed by HprofIndex. HprofIndex [jvm]class HprofIndexAn index on a Hprof file. See openHeapGraph. HprofPrimitiveArrayStripper [jvm]class HprofPrimitiveArrayStripperConverts a Hprof file to another file with all primitive arrays replaced with arrays of zeroes, which can be useful to remove PII. Char arrays are handled slightly differently because 0 would be the null character so instead these become arrays of \u2018?\u2019. HprofRecord [jvm]sealed class HprofRecordA Hprof record. These data structure map 1:1 with how records are written in hprof files. HprofRecordReader [jvm]class HprofRecordReaderReads hprof content from an Okio BufferedSource. HprofRecordTag [jvm]enum HprofRecordTag : Enum<HprofRecordTag> HprofVersion [jvm]enum HprofVersion : Enum<HprofVersion> Supported hprof versions HprofWriter [jvm]class HprofWriter : CloseableGenerates Hprof files. HprofWriterHelper [jvm]class HprofWriterHelper(writer: HprofWriter) : Closeable IgnoredReferenceMatcher [jvm]class IgnoredReferenceMatcher(val pattern: ReferencePattern, val patternApplies: (HeapGraph) -> Boolean = ALWAYS) : ReferenceMatcherIgnoredReferenceMatcher should be used to match references that cannot ever create leaks. The shortest path finder will never go through matching references. InitialState [jvm]class InitialState(val scenarioLoopsPerGraph: Int = DEFAULT_SCENARIO_LOOPS_PER_GRAPH) : HeapTraversalInput InteractiveCommand [jvm]class InteractiveCommand : CliktCommand JavaLocalReferenceReader [jvm]class JavaLocalReferenceReader(val graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ChainingInstanceReferenceReader.VirtualInstanceReferenceReader JdkReferenceMatchers [jvm]enum JdkReferenceMatchers : Enum<JdkReferenceMatchers> , ReferenceMatcher.ListBuilder JvmObjectGrowthReferenceMatchers [jvm]enum JvmObjectGrowthReferenceMatchers : Enum<JvmObjectGrowthReferenceMatchers> , ReferenceMatcher.ListBuilder JvmTestHeapDumper [jvm]object JvmTestHeapDumper KeyedWeakReferenceFinder [jvm]object KeyedWeakReferenceFinder : LeakingObjectFinderFinds all objects tracked by a KeyedWeakReference, ie all objects that were passed to ObjectWatcher.watch. Leak [jvm]sealed class Leak : SerializableA leak found by HeapAnalyzer, either an ApplicationLeak or a LibraryLeak. LeakingObjectFinder [jvm]fun interface LeakingObjectFinderFinds the objects that are leaking, for which Shark will compute leak traces. LeaksAndUnreachableObjects [jvm]data class LeaksAndUnreachableObjects(val applicationLeaks: List<ApplicationLeak>, val libraryLeaks: List<LibraryLeak>, val unreachableObjects: List<LeakTraceObject>) LeakTrace [jvm]data class LeakTrace(val gcRootType: LeakTrace.GcRootType, val referencePath: List<LeakTraceReference>, val leakingObject: LeakTraceObject) : SerializableThe best strong reference path from a GC root to the leaking object. \"Best\" here means the shortest prioritized path. A large number of distinct paths can generally be found leading to a leaking object. Shark prioritizes paths that don\u2019t go through known LibraryLeakReferenceMatcher (because those are known to create leaks so it\u2019s more interesting to find other paths causing leaks), then it prioritize paths that don\u2019t go through java local gc roots (because those are harder to reason about). Taking those priorities into account, finding the shortest path means there are less LeakTraceReference that can be suspected to cause the leak. LeakTraceObject [jvm]data class LeakTraceObject(val type: LeakTraceObject.ObjectType, val className: String, val labels: Set<String>, val leakingStatus: LeakTraceObject.LeakingStatus, val leakingStatusReason: String, val retainedHeapByteSize: Int?, val retainedObjectCount: Int?) : Serializable LeakTracer [jvm]fun interface LeakTracer LeakTraceReference [jvm]data class LeakTraceReference(val originObject: LeakTraceObject, val referenceType: LeakTraceReference.ReferenceType, val owningClassName: String, val referenceName: String) : SerializableA LeakTraceReference represents an origin LeakTraceObject and either a reference from that object to the LeakTraceObject in the next LeakTraceReference in LeakTrace.referencePath, or to LeakTrace.leakingObject if this is the last LeakTraceReference in LeakTrace.referencePath. LibraryLeak [jvm]data class LibraryLeak(val leakTraces: List<LeakTrace>, val pattern: ReferencePattern, val description: String) : LeakA leak found by HeapAnalyzer, where the only path to the leaking object required going through a reference matched by pattern, as provided to a LibraryLeakReferenceMatcher instance. This is a known leak in library code that is beyond your control. LibraryLeakReferenceMatcher [jvm]data class LibraryLeakReferenceMatcher(val pattern: ReferencePattern, val description: String = \"\", val patternApplies: (HeapGraph) -> Boolean = ALWAYS) : ReferenceMatcherLibraryLeakReferenceMatcher should be used to match references in library code that are known to create leaks and are beyond your control. The shortest path finder will only go through matching references after it has exhausted references that don\u2019t match, prioritizing finding an application leak over a known library leak. Library leaks will be reported as LibraryLeak instead of ApplicationLeak. MatchingGcRootProvider [jvm]class MatchingGcRootProvider(referenceMatchers: List<ReferenceMatcher>) : GcRootProviderTODO Extracted from PathFinder, this should eventually be part of public API surface and we should likely also revisit the gc root type filtering which happens during heap parsing, as that\u2019s not really a concern for the heap parser and more for path finding. There are probably memory concerns as well there though. We could: MetadataExtractor [jvm]fun interface MetadataExtractorExtracts metadata from a hprof to be reported in HeapAnalysisSuccess.metadata. Neo4JCommand [jvm]class Neo4JCommand : CliktCommandExample commands: ObjectArrayReferenceReader [jvm]class ObjectArrayReferenceReader : ReferenceReader<HeapObject.HeapObjectArray> ObjectDominators [jvm]class ObjectDominatorsExposes high level APIs to compute and render a dominator tree. This class needs to be public to be used by other LeakCanary modules but is internal and its API might change at any moment. ObjectGrowthDetector [jvm]class ObjectGrowthDetector(gcRootProvider: GcRootProvider, referenceReaderFactory: ReferenceReader.Factory<HeapObject>)Looks for objects that have grown in outgoing references in a new heap dump compared to a previous heap dump by diffing heap traversals. ObjectInspector [jvm]fun interface ObjectInspectorProvides LeakCanary with insights about objects (classes, instances and arrays) found in the heap. inspect will be called for each object that LeakCanary wants to know more about. The implementation can then use the provided ObjectReporter to provide insights for that object. ObjectInspectors [jvm]enum ObjectInspectors : Enum<ObjectInspectors> , ObjectInspectorA set of default ObjectInspectors that knows about common JDK objects. ObjectReporter [jvm]class ObjectReporter(val heapObject: HeapObject)Enables ObjectInspector implementations to provide insights on heapObject, which is an object (class, instance or array) found in the heap. OnAnalysisProgressListener [jvm]fun interface OnAnalysisProgressListenerReports progress from the HeapAnalyzer as they occur, as Step values. OnHprofRecordListener [jvm]fun interface OnHprofRecordListenerListener passed in to StreamingRecordReaderAdapter.readRecords, gets notified for each HprofRecord found in the heap dump which types is in the set of the recordTypes parameter passed to StreamingRecordReaderAdapter.readRecords. OnHprofRecordTagListener [jvm]fun interface OnHprofRecordTagListenerListener passed in to StreamingHprofReader.readRecords, gets notified for each HprofRecordTag found in the heap dump. OpenJdkInstanceRefReaders [jvm]enum OpenJdkInstanceRefReaders : Enum<OpenJdkInstanceRefReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactoryDefines VirtualInstanceReferenceReader factories for common OpenJDK data structures. OpenJdkReferenceReaderFactory [jvm]class OpenJdkReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject> PathFindingResults [jvm]class PathFindingResults(val pathsToLeakingObjects: List<ReferencePathNode>, val dominatorTree: DominatorTree?) PrimitiveType [jvm]enum PrimitiveType : Enum<PrimitiveType> A primitive type in the prof. PrioritizingShortestPathFinder [jvm]class PrioritizingShortestPathFinder : ShortestPathFinderNot thread safe. ProguardMapping [jvm]class ProguardMapping ProguardMappingHelper [jvm]class ProguardMappingHelper(proguardMapping: ProguardMapping) ProguardMappingReader [jvm]class ProguardMappingReader(proguardMappingInputStream: InputStream) RandomAccessHprofReader [jvm]class RandomAccessHprofReader : CloseableReads records in a Hprof source, one at a time with a specific position and size. Call openReaderFor to obtain a new instance. RandomAccessSource [jvm]interface RandomAccessSource : Closeable RandomAccessSourceProvider [jvm]fun interface RandomAccessSourceProviderCan open RandomAccessSource instances. RealLeakTracerFactory [jvm]class RealLeakTracerFactory(shortestPathFinderFactory: ShortestPathFinder.Factory, objectInspectors: List<ObjectInspector>, listener: RealLeakTracerFactory.Event.Listener) : LeakTracer.Factory Reference [jvm]data class Reference(val valueObjectId: Long, val isLowPriority: Boolean, val isLeafObject: Boolean = false, val lazyDetailsResolver: Reference.LazyDetails.Resolver)TODO Review as public API. ReferenceLocationType [jvm]enum ReferenceLocationType : Enum<ReferenceLocationType> TODO This is quite similar to the leaktrace equivalent ReferenceMatcher [jvm]sealed class ReferenceMatcherUsed to pattern match known patterns of references in the heap, either to ignore them (IgnoredReferenceMatcher) or to mark them as library leaks (LibraryLeakReferenceMatcher), which lowers their traversal priority when exploring the heap. ReferencePattern [jvm]sealed class ReferencePattern : SerializableA pattern that will match references for a given ReferenceMatcher. ReferenceReader [jvm]fun interface ReferenceReader<T : HeapObject> RepeatingScenarioObjectGrowthDetector [jvm]interface RepeatingScenarioObjectGrowthDetector Retained [jvm]@JvmInlinevalue class Retained SharkCliCommand [jvm]class SharkCliCommand : CliktCommand SharkLog [jvm]object SharkLogCentral Logger for all Shark artifacts. Set logger to change where these logs go. ShortestPathFinder [jvm]fun interface ShortestPathFinder ShortestPathObjectNode [jvm]class ShortestPathObjectNode(val name: String, val parent: ShortestPathObjectNode?) StreamingHprofReader [jvm]class StreamingHprofReaderReads the entire content of a Hprof source in one fell swoop. Call readerFor to obtain a new instance. StreamingRecordReaderAdapter [jvm]class StreamingRecordReaderAdapter(streamingHprofReader: StreamingHprofReader)Wraps a StreamingHprofReader to provide a higher level API that streams HprofRecord instances. StreamingSourceProvider [jvm]fun interface StreamingSourceProviderCan open Source instances. StripHprofCommand [jvm]class StripHprofCommand : CliktCommand ThrowingCancelableFileSourceProvider [jvm]class ThrowingCancelableFileSourceProvider(file: File, throwIfCanceled: Runnable) : DualSourceProviderA DualSourceProvider that invokes throwIfCanceled before every read, allowing cancellation of IO based work built on top by throwing an exception. ValueHolder [jvm]sealed class ValueHolderA value in the heap dump, which can be a ReferenceHolder or a primitive type. VirtualizingMatchingReferenceReaderFactory [jvm]class VirtualizingMatchingReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>, virtualRefReadersFactory: ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.ChainFactory) : ReferenceReader.Factory<HeapObject> Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, creating additional virtual instance reference based on the list of VirtualInstanceReferenceReader created by virtualRefReadersFactory."},{"location":"api/shark/#functions","title":"Functions","text":"Name Summary asHprofBytes [jvm]fun List<HprofRecord>.asHprofBytes(): DualSourceProvider create [jvm]fun ProguardMapping.create(block: ProguardMappingHelper.() -> Unit): ProguardMapping dump [jvm]fun dump(hprofHeader: HprofHeader = HprofHeader(), block: HprofWriterHelper.() -> Unit): DualSourceProvider dump [jvm]fun File.dump(block: HprofWriterHelper.() -> Unit) dumpToBytes [jvm]fun dumpToBytes(hprofHeader: HprofHeader = HprofHeader(), block: HprofWriterHelper.() -> Unit): ByteArray forAndroidHeap [jvm]fun ObjectGrowthDetector.Companion.forAndroidHeap(referenceMatchers: List<ReferenceMatcher> = AndroidObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector forJvmHeap [jvm]fun ObjectGrowthDetector.Companion.forJvmHeap(referenceMatchers: List<ReferenceMatcher> = JvmObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector ignored [jvm]fun ReferencePattern.ignored(patternApplies: (HeapGraph) -> Boolean = ALWAYS): IgnoredReferenceMatcher leak [jvm]fun ReferencePattern.leak(description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS): LibraryLeakReferenceMatcher main [jvm]fun main(args: Array<String>) Retained [jvm]inline fun Retained(heapSize: ByteSize, objectCount: Int): RetainedConstructors can\u2019t be inlined so we used a function instead."},{"location":"api/shark/#properties","title":"Properties","text":"Name Summary bytes [jvm]val Int.bytes: ByteSizeval Long.bytes: ByteSize BYTES_PER_GB [jvm]const val BYTES_PER_GB: Long BYTES_PER_KB [jvm]const val BYTES_PER_KB: Long BYTES_PER_MB [jvm]const val BYTES_PER_MB: Long gigabytes [jvm]val Int.gigabytes: ByteSizeval Long.gigabytes: ByteSize hexIdentityHashCode [jvm]val HeapObject.HeapInstance.hexIdentityHashCode: String?The system identity hashCode represented as hex, or null if it couldn\u2019t be found. This is the string identifier you see when calling Object.toString() at runtime on a class that does not override its hashCode() method, e.g. com.example.MyThing@6bd57cf identityHashCode [jvm]val HeapObject.HeapInstance.identityHashCode: Int?The system identity hash code, or null if it couldn\u2019t be found. kilobytes [jvm]val Int.kilobytes: ByteSizeval Long.kilobytes: ByteSize megabytes [jvm]val Int.megabytes: ByteSizeval Long.megabytes: ByteSize UNKNOWN_RETAINED [jvm]val UNKNOWN_RETAINED: Retained ZERO_BYTES [jvm]val ZERO_BYTES: ByteSize ZERO_RETAINED [jvm]val ZERO_RETAINED: Retained"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-g-b/","title":"b y t e s p e r g b","text":"<p>//leakcanary-repo/shark/BYTES_PER_GB</p>"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-g-b/#bytes_per_gb","title":"BYTES_PER_GB","text":"<p>[jvm]\\ const val BYTES_PER_GB: Long</p>"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-k-b/","title":"b y t e s p e r k b","text":"<p>//leakcanary-repo/shark/BYTES_PER_KB</p>"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-k-b/#bytes_per_kb","title":"BYTES_PER_KB","text":"<p>[jvm]\\ const val BYTES_PER_KB: Long</p>"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-m-b/","title":"b y t e s p e r m b","text":"<p>//leakcanary-repo/shark/BYTES_PER_MB</p>"},{"location":"api/shark/-b-y-t-e-s_-p-e-r_-m-b/#bytes_per_mb","title":"BYTES_PER_MB","text":"<p>[jvm]\\ const val BYTES_PER_MB: Long</p>"},{"location":"api/shark/-retained/","title":"retained","text":"<p>//leakcanary-repo/shark/Retained</p>"},{"location":"api/shark/-retained/#retained","title":"Retained","text":"<p>[jvm]\\ inline fun Retained(heapSize: ByteSize, objectCount: Int): Retained</p> <p>Constructors can\u2019t be inlined so we used a function instead.</p>"},{"location":"api/shark/-u-n-k-n-o-w-n_-r-e-t-a-i-n-e-d/","title":"u n k n o w n r e t a i n e d","text":"<p>//leakcanary-repo/shark/UNKNOWN_RETAINED</p>"},{"location":"api/shark/-u-n-k-n-o-w-n_-r-e-t-a-i-n-e-d/#unknown_retained","title":"UNKNOWN_RETAINED","text":"<p>[jvm]\\ val UNKNOWN_RETAINED: Retained</p>"},{"location":"api/shark/-z-e-r-o_-b-y-t-e-s/","title":"z e r o b y t e s","text":"<p>//leakcanary-repo/shark/ZERO_BYTES</p>"},{"location":"api/shark/-z-e-r-o_-b-y-t-e-s/#zero_bytes","title":"ZERO_BYTES","text":"<p>[jvm]\\ val ZERO_BYTES: ByteSize</p>"},{"location":"api/shark/-z-e-r-o_-r-e-t-a-i-n-e-d/","title":"z e r o r e t a i n e d","text":"<p>//leakcanary-repo/shark/ZERO_RETAINED</p>"},{"location":"api/shark/-z-e-r-o_-r-e-t-a-i-n-e-d/#zero_retained","title":"ZERO_RETAINED","text":"<p>[jvm]\\ val ZERO_RETAINED: Retained</p>"},{"location":"api/shark/as-hprof-bytes/","title":"As hprof bytes","text":"<p>//leakcanary-repo/shark/asHprofBytes</p>"},{"location":"api/shark/as-hprof-bytes/#ashprofbytes","title":"asHprofBytes","text":"<p>[jvm]\\ fun List<HprofRecord>.asHprofBytes(): DualSourceProvider</p>"},{"location":"api/shark/bytes/","title":"Bytes","text":"<p>//leakcanary-repo/shark/bytes</p>"},{"location":"api/shark/bytes/#bytes","title":"bytes","text":"<p>[jvm]\\ val Long.bytes: ByteSize</p> <p>val Int.bytes: ByteSize</p>"},{"location":"api/shark/create/","title":"Create","text":"<p>//leakcanary-repo/shark/create</p>"},{"location":"api/shark/create/#create","title":"create","text":"<p>[jvm]\\ fun ProguardMapping.create(block: ProguardMappingHelper.() -> Unit): ProguardMapping</p>"},{"location":"api/shark/dump-to-bytes/","title":"Dump to bytes","text":"<p>//leakcanary-repo/shark/dumpToBytes</p>"},{"location":"api/shark/dump-to-bytes/#dumptobytes","title":"dumpToBytes","text":"<p>[jvm]\\ fun dumpToBytes(hprofHeader: HprofHeader = HprofHeader(), block: HprofWriterHelper.() -> Unit): ByteArray</p>"},{"location":"api/shark/dump/","title":"Dump","text":"<p>//leakcanary-repo/shark/dump</p>"},{"location":"api/shark/dump/#dump","title":"dump","text":"<p>[jvm]\\ fun File.dump(block: HprofWriterHelper.() -> Unit)</p> <p>fun dump(hprofHeader: HprofHeader = HprofHeader(), block: HprofWriterHelper.() -> Unit): DualSourceProvider</p>"},{"location":"api/shark/for-android-heap/","title":"For android heap","text":"<p>//leakcanary-repo/shark/forAndroidHeap</p>"},{"location":"api/shark/for-android-heap/#forandroidheap","title":"forAndroidHeap","text":"<p>[jvm]\\ fun ObjectGrowthDetector.Companion.forAndroidHeap(referenceMatchers: List<ReferenceMatcher> = AndroidObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector</p>"},{"location":"api/shark/for-jvm-heap/","title":"For jvm heap","text":"<p>//leakcanary-repo/shark/forJvmHeap</p>"},{"location":"api/shark/for-jvm-heap/#forjvmheap","title":"forJvmHeap","text":"<p>[jvm]\\ fun ObjectGrowthDetector.Companion.forJvmHeap(referenceMatchers: List<ReferenceMatcher> = JvmObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector</p>"},{"location":"api/shark/gigabytes/","title":"Gigabytes","text":"<p>//leakcanary-repo/shark/gigabytes</p>"},{"location":"api/shark/gigabytes/#gigabytes","title":"gigabytes","text":"<p>[jvm]\\ val Long.gigabytes: ByteSize</p> <p>val Int.gigabytes: ByteSize</p>"},{"location":"api/shark/hex-identity-hash-code/","title":"Hex identity hash code","text":"<p>//leakcanary-repo/shark/hexIdentityHashCode</p>"},{"location":"api/shark/hex-identity-hash-code/#hexidentityhashcode","title":"hexIdentityHashCode","text":"<p>[jvm]\\ val HeapObject.HeapInstance.hexIdentityHashCode: String?</p> <p>The system identity hashCode represented as hex, or null if it couldn\u2019t be found. This is the string identifier you see when calling Object.toString() at runtime on a class that does not override its hashCode() method, e.g. com.example.MyThing@6bd57cf</p>"},{"location":"api/shark/identity-hash-code/","title":"Identity hash code","text":"<p>//leakcanary-repo/shark/identityHashCode</p>"},{"location":"api/shark/identity-hash-code/#identityhashcode","title":"identityHashCode","text":"<p>[jvm]\\ val HeapObject.HeapInstance.identityHashCode: Int?</p> <p>The system identity hash code, or null if it couldn\u2019t be found.</p> <p>Based on the Object.identityHashCode implementation in AOSP.</p> <p>Backing field shadow$monitor was added in API 24. https://cs.android.com/android/_/android/platform/libcore/+ /de626ec8a109ea18283d96c720cc57e2f32f67fa:ojluni/src/main/java/java/lang/Object.java; dlc=ba7cc9f5357c323a1006119a20ce025fd4c57fd2</p>"},{"location":"api/shark/ignored/","title":"Ignored","text":"<p>//leakcanary-repo/shark/ignored</p>"},{"location":"api/shark/ignored/#ignored","title":"ignored","text":"<p>[jvm]\\ fun ReferencePattern.ignored(patternApplies: (HeapGraph) -> Boolean = ALWAYS): IgnoredReferenceMatcher</p>"},{"location":"api/shark/kilobytes/","title":"Kilobytes","text":"<p>//leakcanary-repo/shark/kilobytes</p>"},{"location":"api/shark/kilobytes/#kilobytes","title":"kilobytes","text":"<p>[jvm]\\ val Long.kilobytes: ByteSize</p> <p>val Int.kilobytes: ByteSize</p>"},{"location":"api/shark/leak/","title":"Leak","text":"<p>//leakcanary-repo/shark/leak</p>"},{"location":"api/shark/leak/#leak","title":"leak","text":"<p>[jvm]\\ fun ReferencePattern.leak(description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS): LibraryLeakReferenceMatcher</p>"},{"location":"api/shark/main/","title":"Main","text":"<p>//leakcanary-repo/shark/main</p>"},{"location":"api/shark/main/#main","title":"main","text":"<p>[jvm]\\ fun main(args: Array<String>)</p>"},{"location":"api/shark/megabytes/","title":"Megabytes","text":"<p>//leakcanary-repo/shark/megabytes</p>"},{"location":"api/shark/megabytes/#megabytes","title":"megabytes","text":"<p>[jvm]\\ val Long.megabytes: ByteSize</p> <p>val Int.megabytes: ByteSize</p>"},{"location":"api/shark/repeating-heap-graph/","title":"Repeating heap graph","text":"<p>//leakcanary-repo/shark/repeatingHeapGraph</p>"},{"location":"api/shark/repeating-heap-graph/#repeatingheapgraph","title":"repeatingHeapGraph","text":"<p>[jvm]\\ fun ObjectGrowthDetector.repeatingHeapGraph(): RepeatingHeapGraphObjectGrowthDetector</p>"},{"location":"api/shark/repeating-heap-graph/#see-also","title":"See also","text":"RepeatingHeapGraphObjectGrowthDetector.findRepeatedlyGrowingObjects"},{"location":"api/shark/repeating-scenario/","title":"Repeating scenario","text":"<p>//leakcanary-repo/shark/repeatingScenario</p>"},{"location":"api/shark/repeating-scenario/#repeatingscenario","title":"repeatingScenario","text":"<p>[jvm]\\ fun ObjectGrowthDetector.repeatingScenario(heapGraphProvider: HeapGraphProvider, maxHeapDumps: Int = RepeatingScenarioObjectGrowthDetector.DEFAULT_MAX_HEAP_DUMPS, scenarioLoopsPerDump: Int = RepeatingScenarioObjectGrowthDetector.DEFAULT_SCENARIO_LOOPS_PER_DUMP): RepeatingScenarioObjectGrowthDetector</p>"},{"location":"api/shark/repeating-scenario/#see-also","title":"See also","text":"RepeatingScenarioObjectGrowthDetector.findRepeatedlyGrowingObjects ."},{"location":"api/shark/-actual-matching-reference-reader-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/ActualMatchingReferenceReaderFactory</p>"},{"location":"api/shark/-actual-matching-reference-reader-factory/#actualmatchingreferencereaderfactory","title":"ActualMatchingReferenceReaderFactory","text":"<p>[jvm]\\ class ActualMatchingReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject> </p> <p>Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, and not creating any virtual reference.</p>"},{"location":"api/shark/-actual-matching-reference-reader-factory/#constructors","title":"Constructors","text":"ActualMatchingReferenceReaderFactory [jvm]constructor(referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-actual-matching-reference-reader-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject>"},{"location":"api/shark/-actual-matching-reference-reader-factory/-actual-matching-reference-reader-factory/","title":"actual matching reference reader factory","text":"<p>//leakcanary-repo/shark/ActualMatchingReferenceReaderFactory/ActualMatchingReferenceReaderFactory</p>"},{"location":"api/shark/-actual-matching-reference-reader-factory/-actual-matching-reference-reader-factory/#actualmatchingreferencereaderfactory","title":"ActualMatchingReferenceReaderFactory","text":"<p>[jvm]\\ constructor(referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-actual-matching-reference-reader-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/ActualMatchingReferenceReaderFactory/createFor</p>"},{"location":"api/shark/-actual-matching-reference-reader-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject></p>"},{"location":"api/shark/-analyze-command/","title":"Index","text":"<p>//leakcanary-repo/shark/AnalyzeCommand</p>"},{"location":"api/shark/-analyze-command/#analyzecommand","title":"AnalyzeCommand","text":"<p>[jvm]\\ class AnalyzeCommand : CliktCommand</p>"},{"location":"api/shark/-analyze-command/#constructors","title":"Constructors","text":"AnalyzeCommand [jvm]constructor()"},{"location":"api/shark/-analyze-command/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-analyze-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-analyze-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-analyze-command/-analyze-command/","title":"analyze command","text":"<p>//leakcanary-repo/shark/AnalyzeCommand/AnalyzeCommand</p>"},{"location":"api/shark/-analyze-command/-analyze-command/#analyzecommand","title":"AnalyzeCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-analyze-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/AnalyzeCommand/run</p>"},{"location":"api/shark/-analyze-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-analyze-command/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AnalyzeCommand/Companion</p>"},{"location":"api/shark/-analyze-command/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-analyze-command/-companion/#functions","title":"Functions","text":"Name Summary analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?)"},{"location":"api/shark/-analyze-command/-companion/analyze/","title":"Analyze","text":"<p>//leakcanary-repo/shark/AnalyzeCommand/Companion/analyze</p>"},{"location":"api/shark/-analyze-command/-companion/analyze/#analyze","title":"analyze","text":"<p>[jvm]\\ fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?)</p>"},{"location":"api/shark/-android-build-mirror/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror</p>"},{"location":"api/shark/-android-build-mirror/#androidbuildmirror","title":"AndroidBuildMirror","text":"<p>[jvm]\\ class AndroidBuildMirror(val manufacturer: String, val sdkInt: Int, val id: String)</p> <p>Caches values from the android.os.Build class in the heap dump. Retrieve a cached instances via fromHeapGraph.</p>"},{"location":"api/shark/-android-build-mirror/#constructors","title":"Constructors","text":"AndroidBuildMirror [jvm]constructor(manufacturer: String, sdkInt: Int, id: String)"},{"location":"api/shark/-android-build-mirror/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-build-mirror/#properties","title":"Properties","text":"Name Summary id [jvm]val id: StringValue of android.os.Build.ID manufacturer [jvm]val manufacturer: StringValue of android.os.Build.MANUFACTURER sdkInt [jvm]val sdkInt: IntValue of android.os.Build.VERSION.SDK_INT"},{"location":"api/shark/-android-build-mirror/-android-build-mirror/","title":"android build mirror","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/AndroidBuildMirror</p>"},{"location":"api/shark/-android-build-mirror/-android-build-mirror/#androidbuildmirror","title":"AndroidBuildMirror","text":"<p>[jvm]\\ constructor(manufacturer: String, sdkInt: Int, id: String)</p>"},{"location":"api/shark/-android-build-mirror/id/","title":"Id","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/id</p>"},{"location":"api/shark/-android-build-mirror/id/#id","title":"id","text":"<p>[jvm]\\ val id: String</p> <p>Value of android.os.Build.ID</p>"},{"location":"api/shark/-android-build-mirror/manufacturer/","title":"Manufacturer","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/manufacturer</p>"},{"location":"api/shark/-android-build-mirror/manufacturer/#manufacturer","title":"manufacturer","text":"<p>[jvm]\\ val manufacturer: String</p> <p>Value of android.os.Build.MANUFACTURER</p>"},{"location":"api/shark/-android-build-mirror/sdk-int/","title":"Sdk int","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/sdkInt</p>"},{"location":"api/shark/-android-build-mirror/sdk-int/#sdkint","title":"sdkInt","text":"<p>[jvm]\\ val sdkInt: Int</p> <p>Value of android.os.Build.VERSION.SDK_INT</p>"},{"location":"api/shark/-android-build-mirror/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/Companion</p>"},{"location":"api/shark/-android-build-mirror/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-build-mirror/-companion/#functions","title":"Functions","text":"Name Summary applyIf [jvm]fun applyIf(patternApplies: AndroidBuildMirror.() -> Boolean): (HeapGraph) -> Boolean fromHeapGraph [jvm]fun fromHeapGraph(graph: HeapGraph): AndroidBuildMirror"},{"location":"api/shark/-android-build-mirror/-companion/apply-if/","title":"Apply if","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/Companion/applyIf</p>"},{"location":"api/shark/-android-build-mirror/-companion/apply-if/#applyif","title":"applyIf","text":"<p>[jvm]\\ fun applyIf(patternApplies: AndroidBuildMirror.() -> Boolean): (HeapGraph) -> Boolean</p>"},{"location":"api/shark/-android-build-mirror/-companion/from-heap-graph/","title":"From heap graph","text":"<p>//leakcanary-repo/shark/AndroidBuildMirror/Companion/fromHeapGraph</p>"},{"location":"api/shark/-android-build-mirror/-companion/from-heap-graph/#fromheapgraph","title":"fromHeapGraph","text":"<p>[jvm]\\ fun fromHeapGraph(graph: HeapGraph): AndroidBuildMirror</p>"},{"location":"api/shark/-android-build-mirror/-companion/from-heap-graph/#see-also","title":"See also","text":"AndroidBuildMirror"},{"location":"api/shark/-android-metadata-extractor/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidMetadataExtractor</p>"},{"location":"api/shark/-android-metadata-extractor/#androidmetadataextractor","title":"AndroidMetadataExtractor","text":"<p>[jvm]\\ object AndroidMetadataExtractor : MetadataExtractor</p>"},{"location":"api/shark/-android-metadata-extractor/#functions","title":"Functions","text":"Name Summary extractMetadata [jvm]open override fun extractMetadata(graph: HeapGraph): Map<String, String>"},{"location":"api/shark/-android-metadata-extractor/extract-metadata/","title":"Extract metadata","text":"<p>//leakcanary-repo/shark/AndroidMetadataExtractor/extractMetadata</p>"},{"location":"api/shark/-android-metadata-extractor/extract-metadata/#extractmetadata","title":"extractMetadata","text":"<p>[jvm]\\ open override fun extractMetadata(graph: HeapGraph): Map<String, String></p>"},{"location":"api/shark/-android-native-size-mapper/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidNativeSizeMapper</p>"},{"location":"api/shark/-android-native-size-mapper/#androidnativesizemapper","title":"AndroidNativeSizeMapper","text":"<p>[jvm]\\ class AndroidNativeSizeMapper(graph: HeapGraph)</p>"},{"location":"api/shark/-android-native-size-mapper/#constructors","title":"Constructors","text":"AndroidNativeSizeMapper [jvm]constructor(graph: HeapGraph)"},{"location":"api/shark/-android-native-size-mapper/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-native-size-mapper/#functions","title":"Functions","text":"Name Summary mapNativeSizes [jvm]fun mapNativeSizes(): Map<Long, Int>Returns a map of Object id to native size as tracked by NativeAllocationRegistry$CleanerThunk"},{"location":"api/shark/-android-native-size-mapper/-android-native-size-mapper/","title":"android native size mapper","text":"<p>//leakcanary-repo/shark/AndroidNativeSizeMapper/AndroidNativeSizeMapper</p>"},{"location":"api/shark/-android-native-size-mapper/-android-native-size-mapper/#androidnativesizemapper","title":"AndroidNativeSizeMapper","text":"<p>[jvm]\\ constructor(graph: HeapGraph)</p>"},{"location":"api/shark/-android-native-size-mapper/map-native-sizes/","title":"Map native sizes","text":"<p>//leakcanary-repo/shark/AndroidNativeSizeMapper/mapNativeSizes</p>"},{"location":"api/shark/-android-native-size-mapper/map-native-sizes/#mapnativesizes","title":"mapNativeSizes","text":"<p>[jvm]\\ fun mapNativeSizes(): Map<Long, Int></p> <p>Returns a map of Object id to native size as tracked by NativeAllocationRegistry$CleanerThunk</p>"},{"location":"api/shark/-android-native-size-mapper/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidNativeSizeMapper/Companion</p>"},{"location":"api/shark/-android-native-size-mapper/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-native-size-mapper/-companion/#functions","title":"Functions","text":"Name Summary mapNativeSizes [jvm]fun mapNativeSizes(heapGraph: HeapGraph): Map<Long, Int>"},{"location":"api/shark/-android-native-size-mapper/-companion/map-native-sizes/","title":"Map native sizes","text":"<p>//leakcanary-repo/shark/AndroidNativeSizeMapper/Companion/mapNativeSizes</p>"},{"location":"api/shark/-android-native-size-mapper/-companion/map-native-sizes/#mapnativesizes","title":"mapNativeSizes","text":"<p>[jvm]\\ fun mapNativeSizes(heapGraph: HeapGraph): Map<Long, Int></p>"},{"location":"api/shark/-android-object-growth-reference-matchers/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/#androidobjectgrowthreferencematchers","title":"AndroidObjectGrowthReferenceMatchers","text":"<p>[jvm]\\ enum AndroidObjectGrowthReferenceMatchers : Enum<AndroidObjectGrowthReferenceMatchers> , ReferenceMatcher.ListBuilder</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/#entries","title":"Entries","text":"ANDROID_LEAK_DETECTION_IGNORED_MATCHERS [jvm]ANDROID_LEAK_DETECTION_IGNORED_MATCHERS HEAP_TRAVERSAL [jvm]HEAP_TRAVERSAL STRICT_MODE_VIOLATION_TIME [jvm]STRICT_MODE_VIOLATION_TIME COMPOSE_TEST_CONTEXT_STATES [jvm]COMPOSE_TEST_CONTEXT_STATES RESOURCES_THEME_REFS [jvm]RESOURCES_THEME_REFS VIEW_ROOT_IMPL_W_VIEW_ANCESTOR [jvm]VIEW_ROOT_IMPL_W_VIEW_ANCESTOR BINDER_PROXY [jvm]BINDER_PROXY"},{"location":"api/shark/-android-object-growth-reference-matchers/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-object-growth-reference-matchers/#functions","title":"Functions","text":"Name Summary add [jvm]abstract fun add(references: MutableList<ReferenceMatcher>) valueOf [jvm]fun valueOf(value: String): AndroidObjectGrowthReferenceMatchersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<AndroidObjectGrowthReferenceMatchers>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-android-object-growth-reference-matchers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/valueOf</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): AndroidObjectGrowthReferenceMatchers</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-android-object-growth-reference-matchers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/values</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<AndroidObjectGrowthReferenceMatchers></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/ANDROID_LEAK_DETECTION_IGNORED_MATCHERS</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#android_leak_detection_ignored_matchers","title":"ANDROID_LEAK_DETECTION_IGNORED_MATCHERS","text":"<p>[jvm]\\ ANDROID_LEAK_DETECTION_IGNORED_MATCHERS</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/ANDROID_LEAK_DETECTION_IGNORED_MATCHERS/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-a-n-d-r-o-i-d_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/BINDER_PROXY</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/#binder_proxy","title":"BINDER_PROXY","text":"<p>[jvm]\\ BINDER_PROXY</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/BINDER_PROXY/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-b-i-n-d-e-r_-p-r-o-x-y/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/COMPOSE_TEST_CONTEXT_STATES</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/#compose_test_context_states","title":"COMPOSE_TEST_CONTEXT_STATES","text":"<p>[jvm]\\ COMPOSE_TEST_CONTEXT_STATES</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/COMPOSE_TEST_CONTEXT_STATES/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-c-o-m-p-o-s-e_-t-e-s-t_-c-o-n-t-e-x-t_-s-t-a-t-e-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/Companion</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-companion/#properties","title":"Properties","text":"Name Summary defaults [jvm]val defaults: List<ReferenceMatcher>"},{"location":"api/shark/-android-object-growth-reference-matchers/-companion/defaults/","title":"Defaults","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/Companion/defaults</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-companion/defaults/#defaults","title":"defaults","text":"<p>[jvm]\\ val defaults: List<ReferenceMatcher></p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/HEAP_TRAVERSAL</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#heap_traversal","title":"HEAP_TRAVERSAL","text":"<p>[jvm]\\ HEAP_TRAVERSAL</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/HEAP_TRAVERSAL/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/RESOURCES_THEME_REFS</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/#resources_theme_refs","title":"RESOURCES_THEME_REFS","text":"<p>[jvm]\\ RESOURCES_THEME_REFS</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/RESOURCES_THEME_REFS/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-r-e-s-o-u-r-c-e-s_-t-h-e-m-e_-r-e-f-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/STRICT_MODE_VIOLATION_TIME</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/#strict_mode_violation_time","title":"STRICT_MODE_VIOLATION_TIME","text":"<p>[jvm]\\ STRICT_MODE_VIOLATION_TIME</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/STRICT_MODE_VIOLATION_TIME/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-s-t-r-i-c-t_-m-o-d-e_-v-i-o-l-a-t-i-o-n_-t-i-m-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/VIEW_ROOT_IMPL_W_VIEW_ANCESTOR</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/#view_root_impl_w_view_ancestor","title":"VIEW_ROOT_IMPL_W_VIEW_ANCESTOR","text":"<p>[jvm]\\ VIEW_ROOT_IMPL_W_VIEW_ANCESTOR</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidObjectGrowthReferenceMatchers/VIEW_ROOT_IMPL_W_VIEW_ANCESTOR/add</p>"},{"location":"api/shark/-android-object-growth-reference-matchers/-v-i-e-w_-r-o-o-t_-i-m-p-l_-w_-v-i-e-w_-a-n-c-e-s-t-o-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-object-inspectors/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors</p>"},{"location":"api/shark/-android-object-inspectors/#androidobjectinspectors","title":"AndroidObjectInspectors","text":"<p>[jvm]\\ enum AndroidObjectInspectors : Enum<AndroidObjectInspectors> , ObjectInspector</p> <p>A set of default ObjectInspectors that knows about common AOSP and library classes.</p> <p>These are heuristics based on our experience and knowledge of AOSP and various library internals. We only make a decision if we\u2019re reasonably sure the state of an object is unlikely to be the result of a programmer mistake.</p> <p>For example, no matter how many mistakes we make in our code, the value of Activity.mDestroy will not be influenced by those mistakes.</p> <p>Most developers should use the entire set of default ObjectInspector by calling appDefaults, unless there\u2019s a bug and you temporarily want to remove an inspector.</p>"},{"location":"api/shark/-android-object-inspectors/#entries","title":"Entries","text":"VIEW [jvm]VIEW EDITOR [jvm]EDITOR ACTIVITY [jvm]ACTIVITY SERVICE [jvm]SERVICE CONTEXT_FIELD [jvm]CONTEXT_FIELD CONTEXT_WRAPPER [jvm]CONTEXT_WRAPPER APPLICATION_PACKAGE_MANAGER [jvm]APPLICATION_PACKAGE_MANAGER CONTEXT_IMPL [jvm]CONTEXT_IMPL DIALOG [jvm]DIALOG ACTIVITY_THREAD [jvm]ACTIVITY_THREAD APPLICATION [jvm]APPLICATION INPUT_METHOD_MANAGER [jvm]INPUT_METHOD_MANAGER FRAGMENT [jvm]FRAGMENT SUPPORT_FRAGMENT [jvm]SUPPORT_FRAGMENT ANDROIDX_FRAGMENT [jvm]ANDROIDX_FRAGMENT MESSAGE_QUEUE [jvm]MESSAGE_QUEUE LOADED_APK [jvm]LOADED_APK MORTAR_PRESENTER [jvm]MORTAR_PRESENTER MORTAR_SCOPE [jvm]MORTAR_SCOPE COORDINATOR [jvm]COORDINATOR MAIN_THREAD [jvm]MAIN_THREAD VIEW_ROOT_IMPL [jvm]VIEW_ROOT_IMPL WINDOW [jvm]WINDOW MESSAGE [jvm]MESSAGE TOAST [jvm]TOAST RECOMPOSER [jvm]RECOMPOSER COMPOSITION_IMPL [jvm]COMPOSITION_IMPL ANIMATOR [jvm]ANIMATOR OBJECT_ANIMATOR [jvm]OBJECT_ANIMATOR LIFECYCLE_REGISTRY [jvm]LIFECYCLE_REGISTRY STUB [jvm]STUB"},{"location":"api/shark/-android-object-inspectors/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-object-inspectors/#functions","title":"Functions","text":"Name Summary inspect [jvm]abstract fun inspect(reporter: ObjectReporter) valueOf [jvm]fun valueOf(value: String): AndroidObjectInspectorsReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<AndroidObjectInspectors>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-android-object-inspectors/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/valueOf</p>"},{"location":"api/shark/-android-object-inspectors/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): AndroidObjectInspectors</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-android-object-inspectors/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-android-object-inspectors/values/","title":"Values","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/values</p>"},{"location":"api/shark/-android-object-inspectors/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<AndroidObjectInspectors></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ACTIVITY</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/#activity","title":"ACTIVITY","text":"<p>[jvm]\\ ACTIVITY</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ACTIVITY/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ACTIVITY_THREAD</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/#activity_thread","title":"ACTIVITY_THREAD","text":"<p>[jvm]\\ ACTIVITY_THREAD</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ACTIVITY_THREAD/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ANDROIDX_FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/#androidx_fragment","title":"ANDROIDX_FRAGMENT","text":"<p>[jvm]\\ ANDROIDX_FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ANDROIDX_FRAGMENT/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-d-r-o-i-d-x_-f-r-a-g-m-e-n-t/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ANIMATOR</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/#animator","title":"ANIMATOR","text":"<p>[jvm]\\ ANIMATOR</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/ANIMATOR/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-n-i-m-a-t-o-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/APPLICATION</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/#application","title":"APPLICATION","text":"<p>[jvm]\\ APPLICATION</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/APPLICATION/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/APPLICATION_PACKAGE_MANAGER</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/#application_package_manager","title":"APPLICATION_PACKAGE_MANAGER","text":"<p>[jvm]\\ APPLICATION_PACKAGE_MANAGER</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/APPLICATION_PACKAGE_MANAGER/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/COMPOSITION_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/#composition_impl","title":"COMPOSITION_IMPL","text":"<p>[jvm]\\ COMPOSITION_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/COMPOSITION_IMPL/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-m-p-o-s-i-t-i-o-n_-i-m-p-l/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_FIELD</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/#context_field","title":"CONTEXT_FIELD","text":"<p>[jvm]\\ CONTEXT_FIELD</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_FIELD/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-f-i-e-l-d/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/#context_impl","title":"CONTEXT_IMPL","text":"<p>[jvm]\\ CONTEXT_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_IMPL/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-i-m-p-l/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_WRAPPER</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/#context_wrapper","title":"CONTEXT_WRAPPER","text":"<p>[jvm]\\ CONTEXT_WRAPPER</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/CONTEXT_WRAPPER/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-n-t-e-x-t_-w-r-a-p-p-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/COORDINATOR</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/#coordinator","title":"COORDINATOR","text":"<p>[jvm]\\ COORDINATOR</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/COORDINATOR/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-c-o-o-r-d-i-n-a-t-o-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/Companion</p>"},{"location":"api/shark/-android-object-inspectors/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-object-inspectors/-companion/#functions","title":"Functions","text":"Name Summary createLeakingObjectFilters [jvm]fun createLeakingObjectFilters(inspectors: Set<AndroidObjectInspectors>): List<FilteringLeakingObjectFinder.LeakingObjectFilter>Creates a list of LeakingObjectFilter based on the passed in AndroidObjectInspectors."},{"location":"api/shark/-android-object-inspectors/-companion/#properties","title":"Properties","text":"Name Summary appDefaults [jvm]val appDefaults: List<ObjectInspector> appLeakingObjectFilters [jvm]val appLeakingObjectFilters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>Returns a list of LeakingObjectFilter suitable for apps."},{"location":"api/shark/-android-object-inspectors/-companion/app-defaults/","title":"App defaults","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/Companion/appDefaults</p>"},{"location":"api/shark/-android-object-inspectors/-companion/app-defaults/#appdefaults","title":"appDefaults","text":"<p>[jvm]\\ val appDefaults: List<ObjectInspector></p>"},{"location":"api/shark/-android-object-inspectors/-companion/app-defaults/#see-also","title":"See also","text":"AndroidObjectInspectors"},{"location":"api/shark/-android-object-inspectors/-companion/app-leaking-object-filters/","title":"App leaking object filters","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/Companion/appLeakingObjectFilters</p>"},{"location":"api/shark/-android-object-inspectors/-companion/app-leaking-object-filters/#appleakingobjectfilters","title":"appLeakingObjectFilters","text":"<p>[jvm]\\ val appLeakingObjectFilters: List<FilteringLeakingObjectFinder.LeakingObjectFilter></p> <p>Returns a list of LeakingObjectFilter suitable for apps.</p>"},{"location":"api/shark/-android-object-inspectors/-companion/create-leaking-object-filters/","title":"Create leaking object filters","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/Companion/createLeakingObjectFilters</p>"},{"location":"api/shark/-android-object-inspectors/-companion/create-leaking-object-filters/#createleakingobjectfilters","title":"createLeakingObjectFilters","text":"<p>[jvm]\\ fun createLeakingObjectFilters(inspectors: Set<AndroidObjectInspectors>): List<FilteringLeakingObjectFinder.LeakingObjectFilter></p> <p>Creates a list of LeakingObjectFilter based on the passed in AndroidObjectInspectors.</p>"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/DIALOG</p>"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/#dialog","title":"DIALOG","text":"<p>[jvm]\\ DIALOG</p>"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/DIALOG/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-d-i-a-l-o-g/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/EDITOR</p>"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/#editor","title":"EDITOR","text":"<p>[jvm]\\ EDITOR</p>"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/EDITOR/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-e-d-i-t-o-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/#fragment","title":"FRAGMENT","text":"<p>[jvm]\\ FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/FRAGMENT/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-f-r-a-g-m-e-n-t/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/INPUT_METHOD_MANAGER</p>"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/#input_method_manager","title":"INPUT_METHOD_MANAGER","text":"<p>[jvm]\\ INPUT_METHOD_MANAGER</p>"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/INPUT_METHOD_MANAGER/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/LIFECYCLE_REGISTRY</p>"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/#lifecycle_registry","title":"LIFECYCLE_REGISTRY","text":"<p>[jvm]\\ LIFECYCLE_REGISTRY</p>"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/LIFECYCLE_REGISTRY/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-l-i-f-e-c-y-c-l-e_-r-e-g-i-s-t-r-y/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/LOADED_APK</p>"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/#loaded_apk","title":"LOADED_APK","text":"<p>[jvm]\\ LOADED_APK</p>"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/LOADED_APK/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-l-o-a-d-e-d_-a-p-k/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MAIN_THREAD</p>"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/#main_thread","title":"MAIN_THREAD","text":"<p>[jvm]\\ MAIN_THREAD</p>"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MAIN_THREAD/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-m-a-i-n_-t-h-r-e-a-d/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MESSAGE</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/#message","title":"MESSAGE","text":"<p>[jvm]\\ MESSAGE</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MESSAGE/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MESSAGE_QUEUE</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/#message_queue","title":"MESSAGE_QUEUE","text":"<p>[jvm]\\ MESSAGE_QUEUE</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MESSAGE_QUEUE/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-m-e-s-s-a-g-e_-q-u-e-u-e/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MORTAR_PRESENTER</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/#mortar_presenter","title":"MORTAR_PRESENTER","text":"<p>[jvm]\\ MORTAR_PRESENTER</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MORTAR_PRESENTER/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-p-r-e-s-e-n-t-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MORTAR_SCOPE</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/#mortar_scope","title":"MORTAR_SCOPE","text":"<p>[jvm]\\ MORTAR_SCOPE</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/MORTAR_SCOPE/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-m-o-r-t-a-r_-s-c-o-p-e/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/OBJECT_ANIMATOR</p>"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/#object_animator","title":"OBJECT_ANIMATOR","text":"<p>[jvm]\\ OBJECT_ANIMATOR</p>"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/OBJECT_ANIMATOR/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-o-b-j-e-c-t_-a-n-i-m-a-t-o-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/RECOMPOSER</p>"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/#recomposer","title":"RECOMPOSER","text":"<p>[jvm]\\ RECOMPOSER</p>"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/RECOMPOSER/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-r-e-c-o-m-p-o-s-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/SERVICE</p>"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/#service","title":"SERVICE","text":"<p>[jvm]\\ SERVICE</p>"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/SERVICE/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-s-e-r-v-i-c-e/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/STUB</p>"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/#stub","title":"STUB","text":"<p>[jvm]\\ STUB</p>"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/STUB/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-s-t-u-b/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/SUPPORT_FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/#support_fragment","title":"SUPPORT_FRAGMENT","text":"<p>[jvm]\\ SUPPORT_FRAGMENT</p>"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/SUPPORT_FRAGMENT/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-s-u-p-p-o-r-t_-f-r-a-g-m-e-n-t/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/TOAST</p>"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/#toast","title":"TOAST","text":"<p>[jvm]\\ TOAST</p>"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/TOAST/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-t-o-a-s-t/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/VIEW</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/#view","title":"VIEW","text":"<p>[jvm]\\ VIEW</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/VIEW/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/VIEW_ROOT_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/#view_root_impl","title":"VIEW_ROOT_IMPL","text":"<p>[jvm]\\ VIEW_ROOT_IMPL</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/VIEW_ROOT_IMPL/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-v-i-e-w_-r-o-o-t_-i-m-p-l/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/WINDOW</p>"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/#window","title":"WINDOW","text":"<p>[jvm]\\ WINDOW</p>"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AndroidObjectInspectors/WINDOW/inspect</p>"},{"location":"api/shark/-android-object-inspectors/-w-i-n-d-o-w/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-android-object-size-calculator/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidObjectSizeCalculator</p>"},{"location":"api/shark/-android-object-size-calculator/#androidobjectsizecalculator","title":"AndroidObjectSizeCalculator","text":"<p>[jvm]\\ class AndroidObjectSizeCalculator(graph: HeapGraph) : DominatorTree.ObjectSizeCalculator</p>"},{"location":"api/shark/-android-object-size-calculator/#constructors","title":"Constructors","text":"AndroidObjectSizeCalculator [jvm]constructor(graph: HeapGraph)"},{"location":"api/shark/-android-object-size-calculator/#functions","title":"Functions","text":"Name Summary computeSize [jvm]open override fun computeSize(objectId: Long): Int"},{"location":"api/shark/-android-object-size-calculator/-android-object-size-calculator/","title":"android object size calculator","text":"<p>//leakcanary-repo/shark/AndroidObjectSizeCalculator/AndroidObjectSizeCalculator</p>"},{"location":"api/shark/-android-object-size-calculator/-android-object-size-calculator/#androidobjectsizecalculator","title":"AndroidObjectSizeCalculator","text":"<p>[jvm]\\ constructor(graph: HeapGraph)</p>"},{"location":"api/shark/-android-object-size-calculator/compute-size/","title":"Compute size","text":"<p>//leakcanary-repo/shark/AndroidObjectSizeCalculator/computeSize</p>"},{"location":"api/shark/-android-object-size-calculator/compute-size/#computesize","title":"computeSize","text":"<p>[jvm]\\ open override fun computeSize(objectId: Long): Int</p>"},{"location":"api/shark/-android-reference-matchers/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers</p>"},{"location":"api/shark/-android-reference-matchers/#androidreferencematchers","title":"AndroidReferenceMatchers","text":"<p>[jvm]\\ enum AndroidReferenceMatchers : Enum<AndroidReferenceMatchers> , ReferenceMatcher.ListBuilder</p> <p>AndroidReferenceMatchers values add ReferenceMatcher instances to a global list via their add method. A ReferenceMatcher is either a IgnoredReferenceMatcher or a LibraryLeakReferenceMatcher.</p> <p>AndroidReferenceMatchers is used to build the list of known references that cannot ever create leaks (via IgnoredReferenceMatcher) as well as the list of known leaks in the Android Framework and\u00a0in manufacturer specific Android implementations.</p> <p>This class is a work in progress. You can help by reporting leak traces that seem to be caused by the Android SDK, here: https://github.com/square/leakcanary/issues/new</p> <p>We filter on SDK versions and Manufacturers because many of those leaks are specific to a given manufacturer implementation, they usually share their builds across multiple models, and the leaks eventually get fixed in newer versions.</p> <p>Most app developers should use appDefaults. However, you can also use a subset of AndroidReferenceMatchers by creating an EnumSet that matches your needs and calling buildKnownReferences.</p>"},{"location":"api/shark/-android-reference-matchers/#entries","title":"Entries","text":"PERMISSION_CONTROLLER_MANAGER [jvm]PERMISSION_CONTROLLER_MANAGER IREQUEST_FINISH_CALLBACK [jvm]IREQUEST_FINISH_CALLBACK ACTIVITY_THREAD__M_NEW_ACTIVITIES [jvm]ACTIVITY_THREAD__M_NEW_ACTIVITIESSee AndroidReferenceReaders.ACTIVITY_THREAD__NEW_ACTIVITIES for more context SPAN_CONTROLLER [jvm]SPAN_CONTROLLER MEDIA_SESSION_LEGACY_HELPER__SINSTANCE [jvm]MEDIA_SESSION_LEGACY_HELPER__SINSTANCE TEXT_LINE__SCACHED [jvm]TEXT_LINE__SCACHED BLOCKING_QUEUE [jvm]BLOCKING_QUEUE INPUT_METHOD_MANAGER_IS_TERRIBLE [jvm]INPUT_METHOD_MANAGER_IS_TERRIBLE INPUT_MANAGER__M_LATE_INIT_CONTEXT [jvm]INPUT_MANAGER__M_LATE_INIT_CONTEXT LAYOUT_TRANSITION [jvm]LAYOUT_TRANSITION SPELL_CHECKER_SESSION [jvm]SPELL_CHECKER_SESSION SPELL_CHECKER [jvm]SPELL_CHECKER ACTIVITY_CHOOSE_MODEL [jvm]ACTIVITY_CHOOSE_MODEL MEDIA_PROJECTION_CALLBACK [jvm]MEDIA_PROJECTION_CALLBACK SPEECH_RECOGNIZER [jvm]SPEECH_RECOGNIZER ACCOUNT_MANAGER__AMS_TASK__RESPONSE [jvm]ACCOUNT_MANAGER__AMS_TASK__RESPONSE MEDIA_SCANNER_CONNECTION [jvm]MEDIA_SCANNER_CONNECTION USER_MANAGER__SINSTANCE [jvm]USER_MANAGER__SINSTANCE APP_WIDGET_HOST_CALLBACKS [jvm]APP_WIDGET_HOST_CALLBACKS AUDIO_MANAGER [jvm]AUDIO_MANAGER EDITTEXT_BLINK_MESSAGEQUEUE [jvm]EDITTEXT_BLINK_MESSAGEQUEUE CONNECTIVITY_MANAGER__SINSTANCE [jvm]CONNECTIVITY_MANAGER__SINSTANCE ACCESSIBILITY_NODE_INFO__MORIGINALTEXT [jvm]ACCESSIBILITY_NODE_INFO__MORIGINALTEXT ASSIST_STRUCTURE [jvm]ASSIST_STRUCTURE ACCESSIBILITY_ITERATORS [jvm]ACCESSIBILITY_ITERATORS BIOMETRIC_PROMPT [jvm]BIOMETRIC_PROMPT MAGNIFIER [jvm]MAGNIFIER BACKDROP_FRAME_RENDERER__MDECORVIEW [jvm]BACKDROP_FRAME_RENDERER__MDECORVIEW VIEWLOCATIONHOLDER_ROOT [jvm]VIEWLOCATIONHOLDER_ROOT ACCESSIBILITY_NODE_ID_MANAGER [jvm]ACCESSIBILITY_NODE_ID_MANAGER TEXT_TO_SPEECH [jvm]TEXT_TO_SPEECH CONTROLLED_INPUT_CONNECTION_WRAPPER [jvm]CONTROLLED_INPUT_CONNECTION_WRAPPER TOAST_TN [jvm]TOAST_TN APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY [jvm]APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY COMPANION_DEVICE_SERVICE__STUB [jvm]COMPANION_DEVICE_SERVICE__STUB RENDER_NODE_ANIMATOR [jvm]RENDER_NODE_ANIMATOR PLAYER_BASE [jvm]PLAYER_BASE WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB [jvm]WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB CONNECTIVITY_MANAGER_CALLBACK_HANDLER [jvm]CONNECTIVITY_MANAGER_CALLBACK_HANDLER HOST_ADPU_SERVICE_MSG_HANDLER [jvm]HOST_ADPU_SERVICE_MSG_HANDLER APP_OPS_MANAGER__CALLBACK_STUB [jvm]APP_OPS_MANAGER__CALLBACK_STUB VIEW_GROUP__M_PRE_SORTED_CHILDREN [jvm]VIEW_GROUP__M_PRE_SORTED_CHILDREN VIEW_GROUP__M_CURRENT_DRAG_CHILD [jvm]VIEW_GROUP__M_CURRENT_DRAG_CHILD VIEW_TOOLTIP_CALLBACK [jvm]VIEW_TOOLTIP_CALLBACK ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW [jvm]ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW ANIMATION_HANDLER__ANIMATOR_REQUESTORS [jvm]ANIMATION_HANDLER__ANIMATOR_REQUESTORS FLIPPER__APPLICATION_DESCRIPTOR [jvm]FLIPPER__APPLICATION_DESCRIPTOR AW_CONTENTS__A0 [jvm]AW_CONTENTS__A0 AW_CONTENTS_POSTED_CALLBACK [jvm]AW_CONTENTS_POSTED_CALLBACK JOB_SERVICE [jvm]JOB_SERVICE DREAM_SERVICE [jvm]DREAM_SERVICE UI_MODE_MANAGER [jvm]UI_MODE_MANAGER SPEN_GESTURE_MANAGER [jvm]SPEN_GESTURE_MANAGER CLIPBOARD_UI_MANAGER__SINSTANCE [jvm]CLIPBOARD_UI_MANAGER__SINSTANCE SEM_CLIPBOARD_MANAGER__MCONTEXT [jvm]SEM_CLIPBOARD_MANAGER__MCONTEXT CLIPBOARD_EX_MANAGER [jvm]CLIPBOARD_EX_MANAGER SEM_EMERGENCY_MANAGER__MCONTEXT [jvm]SEM_EMERGENCY_MANAGER__MCONTEXT SEM_PERSONA_MANAGER [jvm]SEM_PERSONA_MANAGER SEM_APP_ICON_SOLUTION [jvm]SEM_APP_ICON_SOLUTION AW_RESOURCE__SRESOURCES [jvm]AW_RESOURCE__SRESOURCES TEXT_VIEW__MLAST_HOVERED_VIEW [jvm]TEXT_VIEW__MLAST_HOVERED_VIEW PERSONA_MANAGER [jvm]PERSONA_MANAGER RESOURCES__MCONTEXT [jvm]RESOURCES__MCONTEXT VIEW_CONFIGURATION__MCONTEXT [jvm]VIEW_CONFIGURATION__MCONTEXT AUDIO_MANAGER__MCONTEXT_STATIC [jvm]AUDIO_MANAGER__MCONTEXT_STATIC ACTIVITY_MANAGER_MCONTEXT [jvm]ACTIVITY_MANAGER_MCONTEXT STATIC_MTARGET_VIEW [jvm]STATIC_MTARGET_VIEW MULTI_WINDOW_DECOR_SUPPORT__MWINDOW [jvm]MULTI_WINDOW_DECOR_SUPPORT__MWINDOW IMM_CURRENT_INPUT_CONNECTION [jvm]IMM_CURRENT_INPUT_CONNECTION GESTURE_BOOST_MANAGER [jvm]GESTURE_BOOST_MANAGER BUBBLE_POPUP_HELPER__SHELPER [jvm]BUBBLE_POPUP_HELPER__SHELPER LGCONTEXT__MCONTEXT [jvm]LGCONTEXT__MCONTEXT SMART_COVER_MANAGER [jvm]SMART_COVER_MANAGER IMM_LAST_FOCUS_VIEW [jvm]IMM_LAST_FOCUS_VIEW MAPPER_CLIENT [jvm]MAPPER_CLIENT SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL [jvm]SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL INSTRUMENTATION_RECOMMEND_ACTIVITY [jvm]INSTRUMENTATION_RECOMMEND_ACTIVITY DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER [jvm]DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER EXTENDED_STATUS_BAR_MANAGER [jvm]EXTENDED_STATUS_BAR_MANAGER OEM_SCENE_CALL_BLOCKER [jvm]OEM_SCENE_CALL_BLOCKER PERF_MONITOR_LAST_CALLBACK [jvm]PERF_MONITOR_LAST_CALLBACK RAZER_TEXT_KEY_LISTENER__MCONTEXT [jvm]RAZER_TEXT_KEY_LISTENER__MCONTEXT XIAMI__RESOURCES_IMPL [jvm]XIAMI__RESOURCES_IMPL REFERENCES [jvm]REFERENCES FINALIZER_WATCHDOG_DAEMON [jvm]FINALIZER_WATCHDOG_DAEMON MAIN [jvm]MAIN LEAK_CANARY_THREAD [jvm]LEAK_CANARY_THREAD LEAK_CANARY_HEAP_DUMPER [jvm]LEAK_CANARY_HEAP_DUMPER LEAK_CANARY_INTERNAL [jvm]LEAK_CANARY_INTERNAL EVENT_RECEIVER__MMESSAGE_QUEUE [jvm]EVENT_RECEIVER__MMESSAGE_QUEUE"},{"location":"api/shark/-android-reference-matchers/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-reference-matchers/#functions","title":"Functions","text":"Name Summary add [jvm]abstract fun add(references: MutableList<ReferenceMatcher>) valueOf [jvm]fun valueOf(value: String): AndroidReferenceMatchersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<AndroidReferenceMatchers>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-android-reference-matchers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/valueOf</p>"},{"location":"api/shark/-android-reference-matchers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): AndroidReferenceMatchers</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-android-reference-matchers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-android-reference-matchers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/values</p>"},{"location":"api/shark/-android-reference-matchers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<AndroidReferenceMatchers></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_ITERATORS</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/#accessibility_iterators","title":"ACCESSIBILITY_ITERATORS","text":"<p>[jvm]\\ ACCESSIBILITY_ITERATORS</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_ITERATORS/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-i-t-e-r-a-t-o-r-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_NODE_ID_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/#accessibility_node_id_manager","title":"ACCESSIBILITY_NODE_ID_MANAGER","text":"<p>[jvm]\\ ACCESSIBILITY_NODE_ID_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_NODE_ID_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-d_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_NODE_INFO__MORIGINALTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/#accessibility_node_info__moriginaltext","title":"ACCESSIBILITY_NODE_INFO__MORIGINALTEXT","text":"<p>[jvm]\\ ACCESSIBILITY_NODE_INFO__MORIGINALTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCESSIBILITY_NODE_INFO__MORIGINALTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-e-s-s-i-b-i-l-i-t-y_-n-o-d-e_-i-n-f-o__-m-o-r-i-g-i-n-a-l-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCOUNT_MANAGER__AMS_TASK__RESPONSE</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/#account_manager__ams_task__response","title":"ACCOUNT_MANAGER__AMS_TASK__RESPONSE","text":"<p>[jvm]\\ ACCOUNT_MANAGER__AMS_TASK__RESPONSE</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACCOUNT_MANAGER__AMS_TASK__RESPONSE/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-c-o-u-n-t_-m-a-n-a-g-e-r__-a-m-s_-t-a-s-k__-r-e-s-p-o-n-s-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_CHOOSE_MODEL</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/#activity_choose_model","title":"ACTIVITY_CHOOSE_MODEL","text":"<p>[jvm]\\ ACTIVITY_CHOOSE_MODEL</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_CHOOSE_MODEL/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-c-h-o-o-s-e_-m-o-d-e-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_MANAGER_MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/#activity_manager_mcontext","title":"ACTIVITY_MANAGER_MCONTEXT","text":"<p>[jvm]\\ ACTIVITY_MANAGER_MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_MANAGER_MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_THREAD__M_NEW_ACTIVITIES</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/#activity_thread__m_new_activities","title":"ACTIVITY_THREAD__M_NEW_ACTIVITIES","text":"<p>[jvm]\\ ACTIVITY_THREAD__M_NEW_ACTIVITIES</p> <p>See AndroidReferenceReaders.ACTIVITY_THREAD__NEW_ACTIVITIES for more context</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_THREAD__M_NEW_ACTIVITIES/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-m_-n-e-w_-a-c-t-i-v-i-t-i-e-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/#activity_transition_state__m_exiting_to_view","title":"ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW","text":"<p>[jvm]\\ ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ACTIVITY_TRANSITION_STATE__M_EXITING_TO_VIEW/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-c-t-i-v-i-t-y_-t-r-a-n-s-i-t-i-o-n_-s-t-a-t-e__-m_-e-x-i-t-i-n-g_-t-o_-v-i-e-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ANIMATION_HANDLER__ANIMATOR_REQUESTORS</p>"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/#animation_handler__animator_requestors","title":"ANIMATION_HANDLER__ANIMATOR_REQUESTORS","text":"<p>[jvm]\\ ANIMATION_HANDLER__ANIMATOR_REQUESTORS</p>"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ANIMATION_HANDLER__ANIMATOR_REQUESTORS/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-n-i-m-a-t-i-o-n_-h-a-n-d-l-e-r__-a-n-i-m-a-t-o-r_-r-e-q-u-e-s-t-o-r-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/#application_package_manager__has_system_feature_query","title":"APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY","text":"<p>[jvm]\\ APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APPLICATION_PACKAGE_MANAGER__HAS_SYSTEM_FEATURE_QUERY/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p-l-i-c-a-t-i-o-n_-p-a-c-k-a-g-e_-m-a-n-a-g-e-r__-h-a-s_-s-y-s-t-e-m_-f-e-a-t-u-r-e_-q-u-e-r-y/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APP_OPS_MANAGER__CALLBACK_STUB</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/#app_ops_manager__callback_stub","title":"APP_OPS_MANAGER__CALLBACK_STUB","text":"<p>[jvm]\\ APP_OPS_MANAGER__CALLBACK_STUB</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APP_OPS_MANAGER__CALLBACK_STUB/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-o-p-s_-m-a-n-a-g-e-r__-c-a-l-l-b-a-c-k_-s-t-u-b/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APP_WIDGET_HOST_CALLBACKS</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/#app_widget_host_callbacks","title":"APP_WIDGET_HOST_CALLBACKS","text":"<p>[jvm]\\ APP_WIDGET_HOST_CALLBACKS</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/APP_WIDGET_HOST_CALLBACKS/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-p-p_-w-i-d-g-e-t_-h-o-s-t_-c-a-l-l-b-a-c-k-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ASSIST_STRUCTURE</p>"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/#assist_structure","title":"ASSIST_STRUCTURE","text":"<p>[jvm]\\ ASSIST_STRUCTURE</p>"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/ASSIST_STRUCTURE/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-s-s-i-s-t_-s-t-r-u-c-t-u-r-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AUDIO_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/#audio_manager","title":"AUDIO_MANAGER","text":"<p>[jvm]\\ AUDIO_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AUDIO_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AUDIO_MANAGER__MCONTEXT_STATIC</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/#audio_manager__mcontext_static","title":"AUDIO_MANAGER__MCONTEXT_STATIC","text":"<p>[jvm]\\ AUDIO_MANAGER__MCONTEXT_STATIC</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AUDIO_MANAGER__MCONTEXT_STATIC/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-u-d-i-o_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t_-s-t-a-t-i-c/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_CONTENTS_POSTED_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/#aw_contents_posted_callback","title":"AW_CONTENTS_POSTED_CALLBACK","text":"<p>[jvm]\\ AW_CONTENTS_POSTED_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_CONTENTS_POSTED_CALLBACK/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s_-p-o-s-t-e-d_-c-a-l-l-b-a-c-k/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_CONTENTS__A0</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/#aw_contents__a0","title":"AW_CONTENTS__A0","text":"<p>[jvm]\\ AW_CONTENTS__A0</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_CONTENTS__A0/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-c-o-n-t-e-n-t-s__-a0/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_RESOURCE__SRESOURCES</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/#aw_resource__sresources","title":"AW_RESOURCE__SRESOURCES","text":"<p>[jvm]\\ AW_RESOURCE__SRESOURCES</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/AW_RESOURCE__SRESOURCES/add</p>"},{"location":"api/shark/-android-reference-matchers/-a-w_-r-e-s-o-u-r-c-e__-s-r-e-s-o-u-r-c-e-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BACKDROP_FRAME_RENDERER__MDECORVIEW</p>"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/#backdrop_frame_renderer__mdecorview","title":"BACKDROP_FRAME_RENDERER__MDECORVIEW","text":"<p>[jvm]\\ BACKDROP_FRAME_RENDERER__MDECORVIEW</p>"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BACKDROP_FRAME_RENDERER__MDECORVIEW/add</p>"},{"location":"api/shark/-android-reference-matchers/-b-a-c-k-d-r-o-p_-f-r-a-m-e_-r-e-n-d-e-r-e-r__-m-d-e-c-o-r-v-i-e-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BIOMETRIC_PROMPT</p>"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/#biometric_prompt","title":"BIOMETRIC_PROMPT","text":"<p>[jvm]\\ BIOMETRIC_PROMPT</p>"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BIOMETRIC_PROMPT/add</p>"},{"location":"api/shark/-android-reference-matchers/-b-i-o-m-e-t-r-i-c_-p-r-o-m-p-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BLOCKING_QUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/#blocking_queue","title":"BLOCKING_QUEUE","text":"<p>[jvm]\\ BLOCKING_QUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BLOCKING_QUEUE/add</p>"},{"location":"api/shark/-android-reference-matchers/-b-l-o-c-k-i-n-g_-q-u-e-u-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BUBBLE_POPUP_HELPER__SHELPER</p>"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/#bubble_popup_helper__shelper","title":"BUBBLE_POPUP_HELPER__SHELPER","text":"<p>[jvm]\\ BUBBLE_POPUP_HELPER__SHELPER</p>"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/BUBBLE_POPUP_HELPER__SHELPER/add</p>"},{"location":"api/shark/-android-reference-matchers/-b-u-b-b-l-e_-p-o-p-u-p_-h-e-l-p-e-r__-s-h-e-l-p-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CLIPBOARD_EX_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/#clipboard_ex_manager","title":"CLIPBOARD_EX_MANAGER","text":"<p>[jvm]\\ CLIPBOARD_EX_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CLIPBOARD_EX_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-e-x_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CLIPBOARD_UI_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#clipboard_ui_manager__sinstance","title":"CLIPBOARD_UI_MANAGER__SINSTANCE","text":"<p>[jvm]\\ CLIPBOARD_UI_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CLIPBOARD_UI_MANAGER__SINSTANCE/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-l-i-p-b-o-a-r-d_-u-i_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/COMPANION_DEVICE_SERVICE__STUB</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/#companion_device_service__stub","title":"COMPANION_DEVICE_SERVICE__STUB","text":"<p>[jvm]\\ COMPANION_DEVICE_SERVICE__STUB</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/COMPANION_DEVICE_SERVICE__STUB/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-m-p-a-n-i-o-n_-d-e-v-i-c-e_-s-e-r-v-i-c-e__-s-t-u-b/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONNECTIVITY_MANAGER_CALLBACK_HANDLER</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/#connectivity_manager_callback_handler","title":"CONNECTIVITY_MANAGER_CALLBACK_HANDLER","text":"<p>[jvm]\\ CONNECTIVITY_MANAGER_CALLBACK_HANDLER</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONNECTIVITY_MANAGER_CALLBACK_HANDLER/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r_-c-a-l-l-b-a-c-k_-h-a-n-d-l-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONNECTIVITY_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#connectivity_manager__sinstance","title":"CONNECTIVITY_MANAGER__SINSTANCE","text":"<p>[jvm]\\ CONNECTIVITY_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONNECTIVITY_MANAGER__SINSTANCE/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-n-e-c-t-i-v-i-t-y_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONTROLLED_INPUT_CONNECTION_WRAPPER</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/#controlled_input_connection_wrapper","title":"CONTROLLED_INPUT_CONNECTION_WRAPPER","text":"<p>[jvm]\\ CONTROLLED_INPUT_CONNECTION_WRAPPER</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/CONTROLLED_INPUT_CONNECTION_WRAPPER/add</p>"},{"location":"api/shark/-android-reference-matchers/-c-o-n-t-r-o-l-l-e-d_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n_-w-r-a-p-p-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion</p>"},{"location":"api/shark/-android-reference-matchers/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-reference-matchers/-companion/#properties","title":"Properties","text":"Name Summary appDefaults [jvm]@JvmStaticval appDefaults: List<ReferenceMatcher> HMD_GLOBAL [jvm]const val HMD_GLOBAL: String HUAWEI [jvm]const val HUAWEI: String ignoredReferencesOnly [jvm]@JvmStaticval ignoredReferencesOnly: List<ReferenceMatcher>Returns a list of ReferenceMatcher that only contains IgnoredReferenceMatcher and no LibraryLeakReferenceMatcher. INFINIX [jvm]const val INFINIX: String LENOVO [jvm]const val LENOVO: String LG [jvm]const val LG: String MEIZU [jvm]const val MEIZU: String MOTOROLA [jvm]const val MOTOROLA: String NVIDIA [jvm]const val NVIDIA: String ONE_PLUS [jvm]const val ONE_PLUS: String RAZER [jvm]const val RAZER: String REALME [jvm]const val REALME: String SAMSUNG [jvm]const val SAMSUNG: String SHARP [jvm]const val SHARP: String TES [jvm]const val TES: String VIVO [jvm]const val VIVO: String XIAOMI [jvm]const val XIAOMI: String"},{"location":"api/shark/-android-reference-matchers/-companion/-h-m-d_-g-l-o-b-a-l/","title":"h m d g l o b a l","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/HMD_GLOBAL</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-h-m-d_-g-l-o-b-a-l/#hmd_global","title":"HMD_GLOBAL","text":"<p>[jvm]\\ const val HMD_GLOBAL: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-h-u-a-w-e-i/","title":"h u a w e i","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/HUAWEI</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-h-u-a-w-e-i/#huawei","title":"HUAWEI","text":"<p>[jvm]\\ const val HUAWEI: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-i-n-f-i-n-i-x/","title":"i n f i n i x","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/INFINIX</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-i-n-f-i-n-i-x/#infinix","title":"INFINIX","text":"<p>[jvm]\\ const val INFINIX: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-l-e-n-o-v-o/","title":"l e n o v o","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/LENOVO</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-l-e-n-o-v-o/#lenovo","title":"LENOVO","text":"<p>[jvm]\\ const val LENOVO: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-l-g/","title":"l g","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/LG</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-l-g/#lg","title":"LG","text":"<p>[jvm]\\ const val LG: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-m-e-i-z-u/","title":"m e i z u","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/MEIZU</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-m-e-i-z-u/#meizu","title":"MEIZU","text":"<p>[jvm]\\ const val MEIZU: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-m-o-t-o-r-o-l-a/","title":"m o t o r o l a","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/MOTOROLA</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-m-o-t-o-r-o-l-a/#motorola","title":"MOTOROLA","text":"<p>[jvm]\\ const val MOTOROLA: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-n-v-i-d-i-a/","title":"n v i d i a","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/NVIDIA</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-n-v-i-d-i-a/#nvidia","title":"NVIDIA","text":"<p>[jvm]\\ const val NVIDIA: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-o-n-e_-p-l-u-s/","title":"o n e p l u s","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/ONE_PLUS</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-o-n-e_-p-l-u-s/#one_plus","title":"ONE_PLUS","text":"<p>[jvm]\\ const val ONE_PLUS: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-r-a-z-e-r/","title":"r a z e r","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/RAZER</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-r-a-z-e-r/#razer","title":"RAZER","text":"<p>[jvm]\\ const val RAZER: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-r-e-a-l-m-e/","title":"r e a l m e","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/REALME</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-r-e-a-l-m-e/#realme","title":"REALME","text":"<p>[jvm]\\ const val REALME: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-s-a-m-s-u-n-g/","title":"s a m s u n g","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/SAMSUNG</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-s-a-m-s-u-n-g/#samsung","title":"SAMSUNG","text":"<p>[jvm]\\ const val SAMSUNG: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-s-h-a-r-p/","title":"s h a r p","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/SHARP</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-s-h-a-r-p/#sharp","title":"SHARP","text":"<p>[jvm]\\ const val SHARP: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-t-e-s/","title":"t e s","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/TES</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-t-e-s/#tes","title":"TES","text":"<p>[jvm]\\ const val TES: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-v-i-v-o/","title":"v i v o","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/VIVO</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-v-i-v-o/#vivo","title":"VIVO","text":"<p>[jvm]\\ const val VIVO: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-x-i-a-o-m-i/","title":"x i a o m i","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/XIAOMI</p>"},{"location":"api/shark/-android-reference-matchers/-companion/-x-i-a-o-m-i/#xiaomi","title":"XIAOMI","text":"<p>[jvm]\\ const val XIAOMI: String</p>"},{"location":"api/shark/-android-reference-matchers/-companion/app-defaults/","title":"App defaults","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/appDefaults</p>"},{"location":"api/shark/-android-reference-matchers/-companion/app-defaults/#appdefaults","title":"appDefaults","text":"<p>[jvm]\\</p> <p>@JvmStatic</p> <p>val appDefaults: List<ReferenceMatcher></p>"},{"location":"api/shark/-android-reference-matchers/-companion/app-defaults/#see-also","title":"See also","text":"AndroidReferenceMatchers"},{"location":"api/shark/-android-reference-matchers/-companion/ignored-references-only/","title":"Ignored references only","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/Companion/ignoredReferencesOnly</p>"},{"location":"api/shark/-android-reference-matchers/-companion/ignored-references-only/#ignoredreferencesonly","title":"ignoredReferencesOnly","text":"<p>[jvm]\\</p> <p>@JvmStatic</p> <p>val ignoredReferencesOnly: List<ReferenceMatcher></p> <p>Returns a list of ReferenceMatcher that only contains IgnoredReferenceMatcher and no LibraryLeakReferenceMatcher.</p>"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER</p>"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/#device_policy_manager__settings_observer","title":"DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER","text":"<p>[jvm]\\ DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER</p>"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/DEVICE_POLICY_MANAGER__SETTINGS_OBSERVER/add</p>"},{"location":"api/shark/-android-reference-matchers/-d-e-v-i-c-e_-p-o-l-i-c-y_-m-a-n-a-g-e-r__-s-e-t-t-i-n-g-s_-o-b-s-e-r-v-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/DREAM_SERVICE</p>"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/#dream_service","title":"DREAM_SERVICE","text":"<p>[jvm]\\ DREAM_SERVICE</p>"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/DREAM_SERVICE/add</p>"},{"location":"api/shark/-android-reference-matchers/-d-r-e-a-m_-s-e-r-v-i-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EDITTEXT_BLINK_MESSAGEQUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/#edittext_blink_messagequeue","title":"EDITTEXT_BLINK_MESSAGEQUEUE","text":"<p>[jvm]\\ EDITTEXT_BLINK_MESSAGEQUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EDITTEXT_BLINK_MESSAGEQUEUE/add</p>"},{"location":"api/shark/-android-reference-matchers/-e-d-i-t-t-e-x-t_-b-l-i-n-k_-m-e-s-s-a-g-e-q-u-e-u-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EVENT_RECEIVER__MMESSAGE_QUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/#event_receiver__mmessage_queue","title":"EVENT_RECEIVER__MMESSAGE_QUEUE","text":"<p>[jvm]\\ EVENT_RECEIVER__MMESSAGE_QUEUE</p>"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EVENT_RECEIVER__MMESSAGE_QUEUE/add</p>"},{"location":"api/shark/-android-reference-matchers/-e-v-e-n-t_-r-e-c-e-i-v-e-r__-m-m-e-s-s-a-g-e_-q-u-e-u-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EXTENDED_STATUS_BAR_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/#extended_status_bar_manager","title":"EXTENDED_STATUS_BAR_MANAGER","text":"<p>[jvm]\\ EXTENDED_STATUS_BAR_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/EXTENDED_STATUS_BAR_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-e-x-t-e-n-d-e-d_-s-t-a-t-u-s_-b-a-r_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/FINALIZER_WATCHDOG_DAEMON</p>"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#finalizer_watchdog_daemon","title":"FINALIZER_WATCHDOG_DAEMON","text":"<p>[jvm]\\ FINALIZER_WATCHDOG_DAEMON</p>"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/FINALIZER_WATCHDOG_DAEMON/add</p>"},{"location":"api/shark/-android-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/FLIPPER__APPLICATION_DESCRIPTOR</p>"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/#flipper__application_descriptor","title":"FLIPPER__APPLICATION_DESCRIPTOR","text":"<p>[jvm]\\ FLIPPER__APPLICATION_DESCRIPTOR</p>"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/FLIPPER__APPLICATION_DESCRIPTOR/add</p>"},{"location":"api/shark/-android-reference-matchers/-f-l-i-p-p-e-r__-a-p-p-l-i-c-a-t-i-o-n_-d-e-s-c-r-i-p-t-o-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/GESTURE_BOOST_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/#gesture_boost_manager","title":"GESTURE_BOOST_MANAGER","text":"<p>[jvm]\\ GESTURE_BOOST_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/GESTURE_BOOST_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-g-e-s-t-u-r-e_-b-o-o-s-t_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/HOST_ADPU_SERVICE_MSG_HANDLER</p>"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/#host_adpu_service_msg_handler","title":"HOST_ADPU_SERVICE_MSG_HANDLER","text":"<p>[jvm]\\ HOST_ADPU_SERVICE_MSG_HANDLER</p>"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/HOST_ADPU_SERVICE_MSG_HANDLER/add</p>"},{"location":"api/shark/-android-reference-matchers/-h-o-s-t_-a-d-p-u_-s-e-r-v-i-c-e_-m-s-g_-h-a-n-d-l-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IMM_CURRENT_INPUT_CONNECTION</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/#imm_current_input_connection","title":"IMM_CURRENT_INPUT_CONNECTION","text":"<p>[jvm]\\ IMM_CURRENT_INPUT_CONNECTION</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IMM_CURRENT_INPUT_CONNECTION/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-c-u-r-r-e-n-t_-i-n-p-u-t_-c-o-n-n-e-c-t-i-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IMM_LAST_FOCUS_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/#imm_last_focus_view","title":"IMM_LAST_FOCUS_VIEW","text":"<p>[jvm]\\ IMM_LAST_FOCUS_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IMM_LAST_FOCUS_VIEW/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-m-m_-l-a-s-t_-f-o-c-u-s_-v-i-e-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INPUT_MANAGER__M_LATE_INIT_CONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/#input_manager__m_late_init_context","title":"INPUT_MANAGER__M_LATE_INIT_CONTEXT","text":"<p>[jvm]\\ INPUT_MANAGER__M_LATE_INIT_CONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INPUT_MANAGER__M_LATE_INIT_CONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-a-n-a-g-e-r__-m_-l-a-t-e_-i-n-i-t_-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INPUT_METHOD_MANAGER_IS_TERRIBLE</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/#input_method_manager_is_terrible","title":"INPUT_METHOD_MANAGER_IS_TERRIBLE","text":"<p>[jvm]\\ INPUT_METHOD_MANAGER_IS_TERRIBLE</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INPUT_METHOD_MANAGER_IS_TERRIBLE/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-p-u-t_-m-e-t-h-o-d_-m-a-n-a-g-e-r_-i-s_-t-e-r-r-i-b-l-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INSTRUMENTATION_RECOMMEND_ACTIVITY</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/#instrumentation_recommend_activity","title":"INSTRUMENTATION_RECOMMEND_ACTIVITY","text":"<p>[jvm]\\ INSTRUMENTATION_RECOMMEND_ACTIVITY</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/INSTRUMENTATION_RECOMMEND_ACTIVITY/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-n-s-t-r-u-m-e-n-t-a-t-i-o-n_-r-e-c-o-m-m-e-n-d_-a-c-t-i-v-i-t-y/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IREQUEST_FINISH_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/#irequest_finish_callback","title":"IREQUEST_FINISH_CALLBACK","text":"<p>[jvm]\\ IREQUEST_FINISH_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/IREQUEST_FINISH_CALLBACK/add</p>"},{"location":"api/shark/-android-reference-matchers/-i-r-e-q-u-e-s-t_-f-i-n-i-s-h_-c-a-l-l-b-a-c-k/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/JOB_SERVICE</p>"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/#job_service","title":"JOB_SERVICE","text":"<p>[jvm]\\ JOB_SERVICE</p>"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/JOB_SERVICE/add</p>"},{"location":"api/shark/-android-reference-matchers/-j-o-b_-s-e-r-v-i-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LAYOUT_TRANSITION</p>"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/#layout_transition","title":"LAYOUT_TRANSITION","text":"<p>[jvm]\\ LAYOUT_TRANSITION</p>"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LAYOUT_TRANSITION/add</p>"},{"location":"api/shark/-android-reference-matchers/-l-a-y-o-u-t_-t-r-a-n-s-i-t-i-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_HEAP_DUMPER</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/#leak_canary_heap_dumper","title":"LEAK_CANARY_HEAP_DUMPER","text":"<p>[jvm]\\ LEAK_CANARY_HEAP_DUMPER</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_HEAP_DUMPER/add</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-h-e-a-p_-d-u-m-p-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_INTERNAL</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/#leak_canary_internal","title":"LEAK_CANARY_INTERNAL","text":"<p>[jvm]\\ LEAK_CANARY_INTERNAL</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_INTERNAL/add</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-i-n-t-e-r-n-a-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_THREAD</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/#leak_canary_thread","title":"LEAK_CANARY_THREAD","text":"<p>[jvm]\\ LEAK_CANARY_THREAD</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LEAK_CANARY_THREAD/add</p>"},{"location":"api/shark/-android-reference-matchers/-l-e-a-k_-c-a-n-a-r-y_-t-h-r-e-a-d/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LGCONTEXT__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/#lgcontext__mcontext","title":"LGCONTEXT__MCONTEXT","text":"<p>[jvm]\\ LGCONTEXT__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/LGCONTEXT__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-l-g-c-o-n-t-e-x-t__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAGNIFIER</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/#magnifier","title":"MAGNIFIER","text":"<p>[jvm]\\ MAGNIFIER</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAGNIFIER/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-g-n-i-f-i-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAIN</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/#main","title":"MAIN","text":"<p>[jvm]\\ MAIN</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAIN/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-i-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAPPER_CLIENT</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/#mapper_client","title":"MAPPER_CLIENT","text":"<p>[jvm]\\ MAPPER_CLIENT</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MAPPER_CLIENT/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-a-p-p-e-r_-c-l-i-e-n-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_PROJECTION_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/#media_projection_callback","title":"MEDIA_PROJECTION_CALLBACK","text":"<p>[jvm]\\ MEDIA_PROJECTION_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_PROJECTION_CALLBACK/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-p-r-o-j-e-c-t-i-o-n_-c-a-l-l-b-a-c-k/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_SCANNER_CONNECTION</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/#media_scanner_connection","title":"MEDIA_SCANNER_CONNECTION","text":"<p>[jvm]\\ MEDIA_SCANNER_CONNECTION</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_SCANNER_CONNECTION/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-c-a-n-n-e-r_-c-o-n-n-e-c-t-i-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_SESSION_LEGACY_HELPER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/#media_session_legacy_helper__sinstance","title":"MEDIA_SESSION_LEGACY_HELPER__SINSTANCE","text":"<p>[jvm]\\ MEDIA_SESSION_LEGACY_HELPER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MEDIA_SESSION_LEGACY_HELPER__SINSTANCE/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-e-d-i-a_-s-e-s-s-i-o-n_-l-e-g-a-c-y_-h-e-l-p-e-r__-s-i-n-s-t-a-n-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MULTI_WINDOW_DECOR_SUPPORT__MWINDOW</p>"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/#multi_window_decor_support__mwindow","title":"MULTI_WINDOW_DECOR_SUPPORT__MWINDOW","text":"<p>[jvm]\\ MULTI_WINDOW_DECOR_SUPPORT__MWINDOW</p>"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/MULTI_WINDOW_DECOR_SUPPORT__MWINDOW/add</p>"},{"location":"api/shark/-android-reference-matchers/-m-u-l-t-i_-w-i-n-d-o-w_-d-e-c-o-r_-s-u-p-p-o-r-t__-m-w-i-n-d-o-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/OEM_SCENE_CALL_BLOCKER</p>"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/#oem_scene_call_blocker","title":"OEM_SCENE_CALL_BLOCKER","text":"<p>[jvm]\\ OEM_SCENE_CALL_BLOCKER</p>"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/OEM_SCENE_CALL_BLOCKER/add</p>"},{"location":"api/shark/-android-reference-matchers/-o-e-m_-s-c-e-n-e_-c-a-l-l_-b-l-o-c-k-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERF_MONITOR_LAST_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/#perf_monitor_last_callback","title":"PERF_MONITOR_LAST_CALLBACK","text":"<p>[jvm]\\ PERF_MONITOR_LAST_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERF_MONITOR_LAST_CALLBACK/add</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-f_-m-o-n-i-t-o-r_-l-a-s-t_-c-a-l-l-b-a-c-k/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERMISSION_CONTROLLER_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/#permission_controller_manager","title":"PERMISSION_CONTROLLER_MANAGER","text":"<p>[jvm]\\ PERMISSION_CONTROLLER_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERMISSION_CONTROLLER_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-m-i-s-s-i-o-n_-c-o-n-t-r-o-l-l-e-r_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERSONA_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#persona_manager","title":"PERSONA_MANAGER","text":"<p>[jvm]\\ PERSONA_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PERSONA_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PLAYER_BASE</p>"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/#player_base","title":"PLAYER_BASE","text":"<p>[jvm]\\ PLAYER_BASE</p>"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/PLAYER_BASE/add</p>"},{"location":"api/shark/-android-reference-matchers/-p-l-a-y-e-r_-b-a-s-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RAZER_TEXT_KEY_LISTENER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/#razer_text_key_listener__mcontext","title":"RAZER_TEXT_KEY_LISTENER__MCONTEXT","text":"<p>[jvm]\\ RAZER_TEXT_KEY_LISTENER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RAZER_TEXT_KEY_LISTENER__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-r-a-z-e-r_-t-e-x-t_-k-e-y_-l-i-s-t-e-n-e-r__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/REFERENCES</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#references","title":"REFERENCES","text":"<p>[jvm]\\ REFERENCES</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/REFERENCES/add</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-f-e-r-e-n-c-e-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RENDER_NODE_ANIMATOR</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/#render_node_animator","title":"RENDER_NODE_ANIMATOR","text":"<p>[jvm]\\ RENDER_NODE_ANIMATOR</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RENDER_NODE_ANIMATOR/add</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-n-d-e-r_-n-o-d-e_-a-n-i-m-a-t-o-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RESOURCES__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/#resources__mcontext","title":"RESOURCES__MCONTEXT","text":"<p>[jvm]\\ RESOURCES__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/RESOURCES__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-r-e-s-o-u-r-c-e-s__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_APP_ICON_SOLUTION</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/#sem_app_icon_solution","title":"SEM_APP_ICON_SOLUTION","text":"<p>[jvm]\\ SEM_APP_ICON_SOLUTION</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_APP_ICON_SOLUTION/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-a-p-p_-i-c-o-n_-s-o-l-u-t-i-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_CLIPBOARD_MANAGER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#sem_clipboard_manager__mcontext","title":"SEM_CLIPBOARD_MANAGER__MCONTEXT","text":"<p>[jvm]\\ SEM_CLIPBOARD_MANAGER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_CLIPBOARD_MANAGER__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-c-l-i-p-b-o-a-r-d_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_EMERGENCY_MANAGER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#sem_emergency_manager__mcontext","title":"SEM_EMERGENCY_MANAGER__MCONTEXT","text":"<p>[jvm]\\ SEM_EMERGENCY_MANAGER__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_EMERGENCY_MANAGER__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-e-m-e-r-g-e-n-c-y_-m-a-n-a-g-e-r__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_PERSONA_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#sem_persona_manager","title":"SEM_PERSONA_MANAGER","text":"<p>[jvm]\\ SEM_PERSONA_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SEM_PERSONA_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-e-m_-p-e-r-s-o-n-a_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SMART_COVER_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/#smart_cover_manager","title":"SMART_COVER_MANAGER","text":"<p>[jvm]\\ SMART_COVER_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SMART_COVER_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-m-a-r-t_-c-o-v-e-r_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPAN_CONTROLLER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/#span_controller","title":"SPAN_CONTROLLER","text":"<p>[jvm]\\ SPAN_CONTROLLER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPAN_CONTROLLER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-a-n_-c-o-n-t-r-o-l-l-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPEECH_RECOGNIZER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/#speech_recognizer","title":"SPEECH_RECOGNIZER","text":"<p>[jvm]\\ SPEECH_RECOGNIZER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPEECH_RECOGNIZER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-e-c-h_-r-e-c-o-g-n-i-z-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPELL_CHECKER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/#spell_checker","title":"SPELL_CHECKER","text":"<p>[jvm]\\ SPELL_CHECKER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPELL_CHECKER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPELL_CHECKER_SESSION</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/#spell_checker_session","title":"SPELL_CHECKER_SESSION","text":"<p>[jvm]\\ SPELL_CHECKER_SESSION</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPELL_CHECKER_SESSION/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-l-l_-c-h-e-c-k-e-r_-s-e-s-s-i-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPEN_GESTURE_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/#spen_gesture_manager","title":"SPEN_GESTURE_MANAGER","text":"<p>[jvm]\\ SPEN_GESTURE_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SPEN_GESTURE_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-p-e-n_-g-e-s-t-u-r-e_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/STATIC_MTARGET_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/#static_mtarget_view","title":"STATIC_MTARGET_VIEW","text":"<p>[jvm]\\ STATIC_MTARGET_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/STATIC_MTARGET_VIEW/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-t-a-t-i-c_-m-t-a-r-g-e-t_-v-i-e-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL</p>"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/#system_sensor_manager__mappcontextimpl","title":"SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL","text":"<p>[jvm]\\ SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL</p>"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/SYSTEM_SENSOR_MANAGER__MAPPCONTEXTIMPL/add</p>"},{"location":"api/shark/-android-reference-matchers/-s-y-s-t-e-m_-s-e-n-s-o-r_-m-a-n-a-g-e-r__-m-a-p-p-c-o-n-t-e-x-t-i-m-p-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_LINE__SCACHED</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/#text_line__scached","title":"TEXT_LINE__SCACHED","text":"<p>[jvm]\\ TEXT_LINE__SCACHED</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_LINE__SCACHED/add</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-l-i-n-e__-s-c-a-c-h-e-d/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_TO_SPEECH</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/#text_to_speech","title":"TEXT_TO_SPEECH","text":"<p>[jvm]\\ TEXT_TO_SPEECH</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_TO_SPEECH/add</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-t-o_-s-p-e-e-c-h/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_VIEW__MLAST_HOVERED_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/#text_view__mlast_hovered_view","title":"TEXT_VIEW__MLAST_HOVERED_VIEW","text":"<p>[jvm]\\ TEXT_VIEW__MLAST_HOVERED_VIEW</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TEXT_VIEW__MLAST_HOVERED_VIEW/add</p>"},{"location":"api/shark/-android-reference-matchers/-t-e-x-t_-v-i-e-w__-m-l-a-s-t_-h-o-v-e-r-e-d_-v-i-e-w/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TOAST_TN</p>"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/#toast_tn","title":"TOAST_TN","text":"<p>[jvm]\\ TOAST_TN</p>"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/TOAST_TN/add</p>"},{"location":"api/shark/-android-reference-matchers/-t-o-a-s-t_-t-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/UI_MODE_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/#ui_mode_manager","title":"UI_MODE_MANAGER","text":"<p>[jvm]\\ UI_MODE_MANAGER</p>"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/UI_MODE_MANAGER/add</p>"},{"location":"api/shark/-android-reference-matchers/-u-i_-m-o-d-e_-m-a-n-a-g-e-r/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/USER_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#user_manager__sinstance","title":"USER_MANAGER__SINSTANCE","text":"<p>[jvm]\\ USER_MANAGER__SINSTANCE</p>"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/USER_MANAGER__SINSTANCE/add</p>"},{"location":"api/shark/-android-reference-matchers/-u-s-e-r_-m-a-n-a-g-e-r__-s-i-n-s-t-a-n-c-e/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEWLOCATIONHOLDER_ROOT</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/#viewlocationholder_root","title":"VIEWLOCATIONHOLDER_ROOT","text":"<p>[jvm]\\ VIEWLOCATIONHOLDER_ROOT</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEWLOCATIONHOLDER_ROOT/add</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w-l-o-c-a-t-i-o-n-h-o-l-d-e-r_-r-o-o-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_CONFIGURATION__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/#view_configuration__mcontext","title":"VIEW_CONFIGURATION__MCONTEXT","text":"<p>[jvm]\\ VIEW_CONFIGURATION__MCONTEXT</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_CONFIGURATION__MCONTEXT/add</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-c-o-n-f-i-g-u-r-a-t-i-o-n__-m-c-o-n-t-e-x-t/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_GROUP__M_CURRENT_DRAG_CHILD</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/#view_group__m_current_drag_child","title":"VIEW_GROUP__M_CURRENT_DRAG_CHILD","text":"<p>[jvm]\\ VIEW_GROUP__M_CURRENT_DRAG_CHILD</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_GROUP__M_CURRENT_DRAG_CHILD/add</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-c-u-r-r-e-n-t_-d-r-a-g_-c-h-i-l-d/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_GROUP__M_PRE_SORTED_CHILDREN</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/#view_group__m_pre_sorted_children","title":"VIEW_GROUP__M_PRE_SORTED_CHILDREN","text":"<p>[jvm]\\ VIEW_GROUP__M_PRE_SORTED_CHILDREN</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_GROUP__M_PRE_SORTED_CHILDREN/add</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-g-r-o-u-p__-m_-p-r-e_-s-o-r-t-e-d_-c-h-i-l-d-r-e-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_TOOLTIP_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/#view_tooltip_callback","title":"VIEW_TOOLTIP_CALLBACK","text":"<p>[jvm]\\ VIEW_TOOLTIP_CALLBACK</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/VIEW_TOOLTIP_CALLBACK/add</p>"},{"location":"api/shark/-android-reference-matchers/-v-i-e-w_-t-o-o-l-t-i-p_-c-a-l-l-b-a-c-k/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB</p>"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/#window_on_back_invoked_dispatcher__stub","title":"WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB","text":"<p>[jvm]\\ WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB</p>"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/WINDOW_ON_BACK_INVOKED_DISPATCHER__STUB/add</p>"},{"location":"api/shark/-android-reference-matchers/-w-i-n-d-o-w_-o-n_-b-a-c-k_-i-n-v-o-k-e-d_-d-i-s-p-a-t-c-h-e-r__-s-t-u-b/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/XIAMI__RESOURCES_IMPL</p>"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/#xiami__resources_impl","title":"XIAMI__RESOURCES_IMPL","text":"<p>[jvm]\\ XIAMI__RESOURCES_IMPL</p>"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/AndroidReferenceMatchers/XIAMI__RESOURCES_IMPL/add</p>"},{"location":"api/shark/-android-reference-matchers/-x-i-a-m-i__-r-e-s-o-u-r-c-e-s_-i-m-p-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-reader-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaderFactory</p>"},{"location":"api/shark/-android-reference-reader-factory/#androidreferencereaderfactory","title":"AndroidReferenceReaderFactory","text":"<p>[jvm]\\ class AndroidReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject> </p> <p>Creates ReferenceReader instances that will follow references from all HeapObjects, applying matching rules provided by referenceMatchers, creating additional virtual instance reference based on known Android classes.</p>"},{"location":"api/shark/-android-reference-reader-factory/#constructors","title":"Constructors","text":"AndroidReferenceReaderFactory [jvm]constructor(referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-android-reference-reader-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject>"},{"location":"api/shark/-android-reference-reader-factory/-android-reference-reader-factory/","title":"android reference reader factory","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaderFactory/AndroidReferenceReaderFactory</p>"},{"location":"api/shark/-android-reference-reader-factory/-android-reference-reader-factory/#androidreferencereaderfactory","title":"AndroidReferenceReaderFactory","text":"<p>[jvm]\\ constructor(referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-android-reference-reader-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaderFactory/createFor</p>"},{"location":"api/shark/-android-reference-reader-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject></p>"},{"location":"api/shark/-android-reference-readers/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders</p>"},{"location":"api/shark/-android-reference-readers/#androidreferencereaders","title":"AndroidReferenceReaders","text":"<p>[jvm]\\ enum AndroidReferenceReaders : Enum<AndroidReferenceReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactory</p>"},{"location":"api/shark/-android-reference-readers/#entries","title":"Entries","text":"ACTIVITY_THREAD__NEW_ACTIVITIES [jvm]ACTIVITY_THREAD__NEW_ACTIVITIESActivityThread.mNewActivity is a linked list of ActivityClientRecord that keeps track of activities after they were resumed, until the main thread is idle. This is used to report analytics to system_server about how long it took for the main thread to settle after resuming an activity. Unfortunately, if the main thread never becomes idle, all these new activities leak in memory. MESSAGE_QUEUE [jvm]MESSAGE_QUEUE ANIMATOR_WEAK_REF_SUCKS [jvm]ANIMATOR_WEAK_REF_SUCKS SAFE_ITERABLE_MAP [jvm]SAFE_ITERABLE_MAP ARRAY_SET [jvm]ARRAY_SET"},{"location":"api/shark/-android-reference-readers/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-reference-readers/#functions","title":"Functions","text":"Name Summary create [jvm]abstract fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader? valueOf [jvm]fun valueOf(value: String): AndroidReferenceReadersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<AndroidReferenceReaders>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-android-reference-readers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/valueOf</p>"},{"location":"api/shark/-android-reference-readers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): AndroidReferenceReaders</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-android-reference-readers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-android-reference-readers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/values</p>"},{"location":"api/shark/-android-reference-readers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<AndroidReferenceReaders></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ACTIVITY_THREAD__NEW_ACTIVITIES</p>"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/#activity_thread__new_activities","title":"ACTIVITY_THREAD__NEW_ACTIVITIES","text":"<p>[jvm]\\ ACTIVITY_THREAD__NEW_ACTIVITIES</p> <p>ActivityThread.mNewActivity is a linked list of ActivityClientRecord that keeps track of activities after they were resumed, until the main thread is idle. This is used to report analytics to system_server about how long it took for the main thread to settle after resuming an activity. Unfortunately, if the main thread never becomes idle, all these new activities leak in memory.</p> <p>We\u2019d normally catch these with a pattern in AndroidReferenceMatchers, and we do have AndroidReferenceMatchers.ACTIVITY_THREAD__M_NEW_ACTIVITIES to do that, however this matching only works if none of the activities alive are waiting for idle. If any activity alive is still waiting for idle (which all the alive activities would be if they main thread is never idle) then ActivityThread.mActivities will reference an ActivityClientRecord through an ArrayMap and because ActivityClientRecord are reused that instance will also have its nextIdle fields set, so we\u2019re effectively traversing the ActivityThread.mNewActivity from a completely different and unexpected entry point.</p> <p>To fix that problem of broken pattern matching, we emit the mNewActivities field when finding an ActivityThread instance, and because custom ref readers have priority over the default instance field reader, we\u2019re guaranteed that mNewActivities is enqueued before mActivities. Unfortunately, that also means we can\u2019t rely on AndroidReferenceMatchers as those aren\u2019t used here, so we recreate our own LibraryLeakReferenceMatcher.</p> <p>We want to traverse mNewActivities before mActivities so we can\u2019t set isLowPriority to true like we would for normal path tagged as source of leak. So we will prioritize going through all activities in mNewActivities, some of which aren\u2019t destroyed yet (and therefore not leaking). Going through those paths of non leaking activities, we might find other leaks though. This would result in us tagging unrelated leaks as part of the mNewActivities leak. To prevent this, we traverse ActivityThread.mNewActivities as a linked list through ActivityClientRecord.nextIdle as a linked list, but we emit only ActivityClientRecord.activity fields if such activities are destroyed, which means any live activity in ActivityThread.mNewActivities will be discovered through the normal field navigation process and should go through ActivityThread.mActivities.</p>"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/create/","title":"Create","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ACTIVITY_THREAD__NEW_ACTIVITIES/create</p>"},{"location":"api/shark/-android-reference-readers/-a-c-t-i-v-i-t-y_-t-h-r-e-a-d__-n-e-w_-a-c-t-i-v-i-t-i-e-s/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ANIMATOR_WEAK_REF_SUCKS</p>"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/#animator_weak_ref_sucks","title":"ANIMATOR_WEAK_REF_SUCKS","text":"<p>[jvm]\\ ANIMATOR_WEAK_REF_SUCKS</p>"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/create/","title":"Create","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ANIMATOR_WEAK_REF_SUCKS/create</p>"},{"location":"api/shark/-android-reference-readers/-a-n-i-m-a-t-o-r_-w-e-a-k_-r-e-f_-s-u-c-k-s/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ARRAY_SET</p>"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/#array_set","title":"ARRAY_SET","text":"<p>[jvm]\\ ARRAY_SET</p>"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/ARRAY_SET/create</p>"},{"location":"api/shark/-android-reference-readers/-a-r-r-a-y_-s-e-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-android-reference-readers/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/Companion</p>"},{"location":"api/shark/-android-reference-readers/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/MESSAGE_QUEUE</p>"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/#message_queue","title":"MESSAGE_QUEUE","text":"<p>[jvm]\\ MESSAGE_QUEUE</p>"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/create/","title":"Create","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/MESSAGE_QUEUE/create</p>"},{"location":"api/shark/-android-reference-readers/-m-e-s-s-a-g-e_-q-u-e-u-e/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/SAFE_ITERABLE_MAP</p>"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/#safe_iterable_map","title":"SAFE_ITERABLE_MAP","text":"<p>[jvm]\\ SAFE_ITERABLE_MAP</p>"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/AndroidReferenceReaders/SAFE_ITERABLE_MAP/create</p>"},{"location":"api/shark/-android-reference-readers/-s-a-f-e_-i-t-e-r-a-b-l-e_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-android-resource-id-names/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidResourceIdNames</p>"},{"location":"api/shark/-android-resource-id-names/#androidresourceidnames","title":"AndroidResourceIdNames","text":"<p>[jvm]\\ class AndroidResourceIdNames</p>"},{"location":"api/shark/-android-resource-id-names/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-android-resource-id-names/#functions","title":"Functions","text":"Name Summary get [jvm]operator fun get(id: Int): String?"},{"location":"api/shark/-android-resource-id-names/get/","title":"Get","text":"<p>//leakcanary-repo/shark/AndroidResourceIdNames/get</p>"},{"location":"api/shark/-android-resource-id-names/get/#get","title":"get","text":"<p>[jvm]\\ operator fun get(id: Int): String?</p>"},{"location":"api/shark/-android-resource-id-names/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidResourceIdNames/Companion</p>"},{"location":"api/shark/-android-resource-id-names/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-android-resource-id-names/-companion/#functions","title":"Functions","text":"Name Summary readFromHeap [jvm]fun readFromHeap(graph: HeapGraph): AndroidResourceIdNames? saveToMemory [jvm]@Synchronizedfun saveToMemory(getResourceTypeName: (Int) -> String?, getResourceEntryName: (Int) -> String?)"},{"location":"api/shark/-android-resource-id-names/-companion/read-from-heap/","title":"Read from heap","text":"<p>//leakcanary-repo/shark/AndroidResourceIdNames/Companion/readFromHeap</p>"},{"location":"api/shark/-android-resource-id-names/-companion/read-from-heap/#readfromheap","title":"readFromHeap","text":"<p>[jvm]\\ fun readFromHeap(graph: HeapGraph): AndroidResourceIdNames?</p>"},{"location":"api/shark/-android-resource-id-names/-companion/save-to-memory/","title":"Save to memory","text":"<p>//leakcanary-repo/shark/AndroidResourceIdNames/Companion/saveToMemory</p>"},{"location":"api/shark/-android-resource-id-names/-companion/save-to-memory/#savetomemory","title":"saveToMemory","text":"<p>[jvm]\\</p> <p>@Synchronized</p> <p>fun saveToMemory(getResourceTypeName: (Int) -> String?, getResourceEntryName: (Int) -> String?)</p>"},{"location":"api/shark/-android-resource-id-names/-companion/save-to-memory/#parameters","title":"Parameters","text":"<p>jvm</p> getResourceTypeName a function that delegates to Android Resources.getResourceTypeName but returns null when the name isn\u2019t found instead of throwing an exception. getResourceEntryName a function that delegates to Android Resources.getResourceEntryName but returns null when the name isn\u2019t found instead of throwing an exception."},{"location":"api/shark/-android-services/","title":"Index","text":"<p>//leakcanary-repo/shark/AndroidServices</p>"},{"location":"api/shark/-android-services/#androidservices","title":"AndroidServices","text":"<p>[jvm]\\ object AndroidServices</p>"},{"location":"api/shark/-android-services/#properties","title":"Properties","text":"Name Summary aliveAndroidServiceObjectIds [jvm]val HeapGraph.aliveAndroidServiceObjectIds: List<Long>"},{"location":"api/shark/-android-services/alive-android-service-object-ids/","title":"Alive android service object ids","text":"<p>//leakcanary-repo/shark/AndroidServices/aliveAndroidServiceObjectIds</p>"},{"location":"api/shark/-android-services/alive-android-service-object-ids/#aliveandroidserviceobjectids","title":"aliveAndroidServiceObjectIds","text":"<p>[jvm]\\ val HeapGraph.aliveAndroidServiceObjectIds: List<Long></p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/#apacheharmonyinstancerefreaders","title":"ApacheHarmonyInstanceRefReaders","text":"<p>[jvm]\\ enum ApacheHarmonyInstanceRefReaders : Enum<ApacheHarmonyInstanceRefReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactory</p> <p>Defines VirtualInstanceReferenceReader factories for common Apache Harmony data structures.</p> <p>Note: the expanders target the direct classes and don\u2019t target subclasses, as these might include additional out going references that would be missed.</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/#entries","title":"Entries","text":"LINKED_LIST [jvm]LINKED_LIST ARRAY_LIST [jvm]ARRAY_LIST COPY_ON_WRITE_ARRAY_LIST [jvm]COPY_ON_WRITE_ARRAY_LIST HASH_MAP [jvm]HASH_MAPHandles HashMap & LinkedHashMap WEAK_HASH_MAP [jvm]WEAK_HASH_MAP HASH_SET [jvm]HASH_SETHandles HashSet & LinkedHashSet"},{"location":"api/shark/-apache-harmony-instance-ref-readers/#functions","title":"Functions","text":"Name Summary create [jvm]abstract fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader? valueOf [jvm]fun valueOf(value: String): ApacheHarmonyInstanceRefReadersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<ApacheHarmonyInstanceRefReaders>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-apache-harmony-instance-ref-readers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/valueOf</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): ApacheHarmonyInstanceRefReaders</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-apache-harmony-instance-ref-readers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/values</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<ApacheHarmonyInstanceRefReaders></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/ARRAY_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#array_list","title":"ARRAY_LIST","text":"<p>[jvm]\\ ARRAY_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/ARRAY_LIST/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/COPY_ON_WRITE_ARRAY_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#copy_on_write_array_list","title":"COPY_ON_WRITE_ARRAY_LIST","text":"<p>[jvm]\\ COPY_ON_WRITE_ARRAY_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/COPY_ON_WRITE_ARRAY_LIST/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/HASH_MAP</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/#hash_map","title":"HASH_MAP","text":"<p>[jvm]\\ HASH_MAP</p> <p>Handles HashMap & LinkedHashMap</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/HASH_MAP/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/HASH_SET</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/#hash_set","title":"HASH_SET","text":"<p>[jvm]\\ HASH_SET</p> <p>Handles HashSet & LinkedHashSet</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/HASH_SET/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-h-a-s-h_-s-e-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/LINKED_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#linked_list","title":"LINKED_LIST","text":"<p>[jvm]\\ LINKED_LIST</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/LINKED_LIST/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/WEAK_HASH_MAP</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#weak_hash_map","title":"WEAK_HASH_MAP","text":"<p>[jvm]\\ WEAK_HASH_MAP</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ApacheHarmonyInstanceRefReaders/WEAK_HASH_MAP/create</p>"},{"location":"api/shark/-apache-harmony-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-app-singleton-inspector/","title":"Index","text":"<p>//leakcanary-repo/shark/AppSingletonInspector</p>"},{"location":"api/shark/-app-singleton-inspector/#appsingletoninspector","title":"AppSingletonInspector","text":"<p>[jvm]\\ class AppSingletonInspector(singletonClasses: String) : ObjectInspector</p> <p>Inspector that automatically marks instances of the provided class names as not leaking because they\u2019re app wide singletons.</p>"},{"location":"api/shark/-app-singleton-inspector/#constructors","title":"Constructors","text":"AppSingletonInspector [jvm]constructor(vararg singletonClasses: String)"},{"location":"api/shark/-app-singleton-inspector/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-app-singleton-inspector/-app-singleton-inspector/","title":"app singleton inspector","text":"<p>//leakcanary-repo/shark/AppSingletonInspector/AppSingletonInspector</p>"},{"location":"api/shark/-app-singleton-inspector/-app-singleton-inspector/#appsingletoninspector","title":"AppSingletonInspector","text":"<p>[jvm]\\ constructor(vararg singletonClasses: String)</p>"},{"location":"api/shark/-app-singleton-inspector/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/AppSingletonInspector/inspect</p>"},{"location":"api/shark/-app-singleton-inspector/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-app-singleton-inspector/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-application-leak/","title":"Index","text":"<p>//leakcanary-repo/shark/ApplicationLeak</p>"},{"location":"api/shark/-application-leak/#applicationleak","title":"ApplicationLeak","text":"<p>[jvm]\\ data class ApplicationLeak(val leakTraces: List<LeakTrace>) : Leak</p> <p>A leak found by HeapAnalyzer in your application.</p>"},{"location":"api/shark/-application-leak/#constructors","title":"Constructors","text":"ApplicationLeak [jvm]constructor(leakTraces: List<LeakTrace>)"},{"location":"api/shark/-application-leak/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-application-leak/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-application-leak/#properties","title":"Properties","text":"Name Summary leakTraces [jvm]open override val leakTraces: List<LeakTrace>Group of leak traces which share the same leak signature. shortDescription [jvm]open override val shortDescription: String signature [jvm]open override val signature: StringA unique SHA1 hash that represents this group of leak traces. totalRetainedHeapByteSize [jvm]val totalRetainedHeapByteSize: Int?Sum of LeakTrace.retainedHeapByteSize for all elements in leakTraces. Null if the retained heap size was not computed. totalRetainedObjectCount [jvm]val totalRetainedObjectCount: Int?Sum of LeakTrace.retainedObjectCount for all elements in leakTraces. Null if the retained heap size was not computed."},{"location":"api/shark/-application-leak/-application-leak/","title":"application leak","text":"<p>//leakcanary-repo/shark/ApplicationLeak/ApplicationLeak</p>"},{"location":"api/shark/-application-leak/-application-leak/#applicationleak","title":"ApplicationLeak","text":"<p>[jvm]\\ constructor(leakTraces: List<LeakTrace>)</p>"},{"location":"api/shark/-application-leak/leak-traces/","title":"Leak traces","text":"<p>//leakcanary-repo/shark/ApplicationLeak/leakTraces</p>"},{"location":"api/shark/-application-leak/leak-traces/#leaktraces","title":"leakTraces","text":"<p>[jvm]\\ open override val leakTraces: List<LeakTrace></p> <p>Group of leak traces which share the same leak signature.</p>"},{"location":"api/shark/-application-leak/short-description/","title":"Short description","text":"<p>//leakcanary-repo/shark/ApplicationLeak/shortDescription</p>"},{"location":"api/shark/-application-leak/short-description/#shortdescription","title":"shortDescription","text":"<p>[jvm]\\ open override val shortDescription: String</p>"},{"location":"api/shark/-application-leak/signature/","title":"Signature","text":"<p>//leakcanary-repo/shark/ApplicationLeak/signature</p>"},{"location":"api/shark/-application-leak/signature/#signature","title":"signature","text":"<p>[jvm]\\ open override val signature: String</p> <p>A unique SHA1 hash that represents this group of leak traces.</p> <p>For ApplicationLeak this is based on LeakTrace.signature and for LibraryLeak this is based on LibraryLeak.pattern.</p>"},{"location":"api/shark/-application-leak/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/ApplicationLeak/toString</p>"},{"location":"api/shark/-application-leak/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-application-leak/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ApplicationLeak/Companion</p>"},{"location":"api/shark/-application-leak/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-byte-array-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/ByteArraySourceProvider</p>"},{"location":"api/shark/-byte-array-source-provider/#bytearraysourceprovider","title":"ByteArraySourceProvider","text":"<p>[jvm]\\ class ByteArraySourceProvider(byteArray: ByteArray) : DualSourceProvider</p>"},{"location":"api/shark/-byte-array-source-provider/#constructors","title":"Constructors","text":"ByteArraySourceProvider [jvm]constructor(byteArray: ByteArray)"},{"location":"api/shark/-byte-array-source-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph openRandomAccessSource [jvm]open override fun openRandomAccessSource(): RandomAccessSource openStreamingSource [jvm]open override fun openStreamingSource(): BufferedSource"},{"location":"api/shark/-byte-array-source-provider/-byte-array-source-provider/","title":"byte array source provider","text":"<p>//leakcanary-repo/shark/ByteArraySourceProvider/ByteArraySourceProvider</p>"},{"location":"api/shark/-byte-array-source-provider/-byte-array-source-provider/#bytearraysourceprovider","title":"ByteArraySourceProvider","text":"<p>[jvm]\\ constructor(byteArray: ByteArray)</p>"},{"location":"api/shark/-byte-array-source-provider/open-random-access-source/","title":"Open random access source","text":"<p>//leakcanary-repo/shark/ByteArraySourceProvider/openRandomAccessSource</p>"},{"location":"api/shark/-byte-array-source-provider/open-random-access-source/#openrandomaccesssource","title":"openRandomAccessSource","text":"<p>[jvm]\\ open override fun openRandomAccessSource(): RandomAccessSource</p>"},{"location":"api/shark/-byte-array-source-provider/open-streaming-source/","title":"Open streaming source","text":"<p>//leakcanary-repo/shark/ByteArraySourceProvider/openStreamingSource</p>"},{"location":"api/shark/-byte-array-source-provider/open-streaming-source/#openstreamingsource","title":"openStreamingSource","text":"<p>[jvm]\\ open override fun openStreamingSource(): BufferedSource</p>"},{"location":"api/shark/-byte-size/","title":"Index","text":"<p>//leakcanary-repo/shark/ByteSize</p>"},{"location":"api/shark/-byte-size/#bytesize","title":"ByteSize","text":"<p>[jvm]\\ @JvmInline</p> <p>value class ByteSize(val inWholeBytes: Long) : Comparable<ByteSize> </p> <p>Inspired by https://github.com/saket/file-size as well as Kotlin\u2019s Duration API.</p>"},{"location":"api/shark/-byte-size/#constructors","title":"Constructors","text":"ByteSize [jvm]constructor(inWholeBytes: Long)"},{"location":"api/shark/-byte-size/#functions","title":"Functions","text":"Name Summary compareTo [jvm]open operator override fun compareTo(other: ByteSize): Int div [jvm]inline operator fun div(other: ByteSize): ByteSize minus [jvm]inline operator fun minus(other: ByteSize): ByteSize plus [jvm]inline operator fun plus(other: ByteSize): ByteSize times [jvm]inline operator fun times(other: ByteSize): ByteSize toString [jvm]open override fun toString(): String"},{"location":"api/shark/-byte-size/#properties","title":"Properties","text":"Name Summary inWholeBytes [jvm]val inWholeBytes: Long inWholeGigabytes [jvm]val inWholeGigabytes: Long inWholeKilobytes [jvm]val inWholeKilobytes: Long inWholeMegabytes [jvm]val inWholeMegabytes: Long"},{"location":"api/shark/-byte-size/-byte-size/","title":"byte size","text":"<p>//leakcanary-repo/shark/ByteSize/ByteSize</p>"},{"location":"api/shark/-byte-size/-byte-size/#bytesize","title":"ByteSize","text":"<p>[jvm]\\ constructor(inWholeBytes: Long)</p>"},{"location":"api/shark/-byte-size/compare-to/","title":"Compare to","text":"<p>//leakcanary-repo/shark/ByteSize/compareTo</p>"},{"location":"api/shark/-byte-size/compare-to/#compareto","title":"compareTo","text":"<p>[jvm]\\ open operator override fun compareTo(other: ByteSize): Int</p>"},{"location":"api/shark/-byte-size/div/","title":"Div","text":"<p>//leakcanary-repo/shark/ByteSize/div</p>"},{"location":"api/shark/-byte-size/div/#div","title":"div","text":"<p>[jvm]\\ inline operator fun div(other: ByteSize): ByteSize</p>"},{"location":"api/shark/-byte-size/in-whole-bytes/","title":"In whole bytes","text":"<p>//leakcanary-repo/shark/ByteSize/inWholeBytes</p>"},{"location":"api/shark/-byte-size/in-whole-bytes/#inwholebytes","title":"inWholeBytes","text":"<p>[jvm]\\ val inWholeBytes: Long</p>"},{"location":"api/shark/-byte-size/in-whole-gigabytes/","title":"In whole gigabytes","text":"<p>//leakcanary-repo/shark/ByteSize/inWholeGigabytes</p>"},{"location":"api/shark/-byte-size/in-whole-gigabytes/#inwholegigabytes","title":"inWholeGigabytes","text":"<p>[jvm]\\ val inWholeGigabytes: Long</p>"},{"location":"api/shark/-byte-size/in-whole-kilobytes/","title":"In whole kilobytes","text":"<p>//leakcanary-repo/shark/ByteSize/inWholeKilobytes</p>"},{"location":"api/shark/-byte-size/in-whole-kilobytes/#inwholekilobytes","title":"inWholeKilobytes","text":"<p>[jvm]\\ val inWholeKilobytes: Long</p>"},{"location":"api/shark/-byte-size/in-whole-megabytes/","title":"In whole megabytes","text":"<p>//leakcanary-repo/shark/ByteSize/inWholeMegabytes</p>"},{"location":"api/shark/-byte-size/in-whole-megabytes/#inwholemegabytes","title":"inWholeMegabytes","text":"<p>[jvm]\\ val inWholeMegabytes: Long</p>"},{"location":"api/shark/-byte-size/minus/","title":"Minus","text":"<p>//leakcanary-repo/shark/ByteSize/minus</p>"},{"location":"api/shark/-byte-size/minus/#minus","title":"minus","text":"<p>[jvm]\\ inline operator fun minus(other: ByteSize): ByteSize</p>"},{"location":"api/shark/-byte-size/plus/","title":"Plus","text":"<p>//leakcanary-repo/shark/ByteSize/plus</p>"},{"location":"api/shark/-byte-size/plus/#plus","title":"plus","text":"<p>[jvm]\\ inline operator fun plus(other: ByteSize): ByteSize</p>"},{"location":"api/shark/-byte-size/times/","title":"Times","text":"<p>//leakcanary-repo/shark/ByteSize/times</p>"},{"location":"api/shark/-byte-size/times/#times","title":"times","text":"<p>[jvm]\\ inline operator fun times(other: ByteSize): ByteSize</p>"},{"location":"api/shark/-byte-size/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/ByteSize/toString</p>"},{"location":"api/shark/-byte-size/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-byte-size/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ByteSize/Companion</p>"},{"location":"api/shark/-byte-size/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-byte-size/-companion/#properties","title":"Properties","text":"Name Summary bytes [jvm]val Int.bytes: ByteSizeval Long.bytes: ByteSize BYTES_PER_GB [jvm]const val BYTES_PER_GB: Long BYTES_PER_KB [jvm]const val BYTES_PER_KB: Long BYTES_PER_MB [jvm]const val BYTES_PER_MB: Long gigabytes [jvm]val Int.gigabytes: ByteSizeval Long.gigabytes: ByteSize kilobytes [jvm]val Int.kilobytes: ByteSizeval Long.kilobytes: ByteSize megabytes [jvm]val Int.megabytes: ByteSizeval Long.megabytes: ByteSize ZERO [jvm]val ZERO: ByteSize"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-g-b/","title":"b y t e s p e r g b","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/BYTES_PER_GB</p>"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-g-b/#bytes_per_gb","title":"BYTES_PER_GB","text":"<p>[jvm]\\ const val BYTES_PER_GB: Long</p>"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-k-b/","title":"b y t e s p e r k b","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/BYTES_PER_KB</p>"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-k-b/#bytes_per_kb","title":"BYTES_PER_KB","text":"<p>[jvm]\\ const val BYTES_PER_KB: Long</p>"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-m-b/","title":"b y t e s p e r m b","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/BYTES_PER_MB</p>"},{"location":"api/shark/-byte-size/-companion/-b-y-t-e-s_-p-e-r_-m-b/#bytes_per_mb","title":"BYTES_PER_MB","text":"<p>[jvm]\\ const val BYTES_PER_MB: Long</p>"},{"location":"api/shark/-byte-size/-companion/-z-e-r-o/","title":"z e r o","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/ZERO</p>"},{"location":"api/shark/-byte-size/-companion/-z-e-r-o/#zero","title":"ZERO","text":"<p>[jvm]\\ val ZERO: ByteSize</p>"},{"location":"api/shark/-byte-size/-companion/bytes/","title":"Bytes","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/bytes</p>"},{"location":"api/shark/-byte-size/-companion/bytes/#bytes","title":"bytes","text":"<p>[jvm]\\ val Long.bytes: ByteSize</p> <p>val Int.bytes: ByteSize</p>"},{"location":"api/shark/-byte-size/-companion/gigabytes/","title":"Gigabytes","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/gigabytes</p>"},{"location":"api/shark/-byte-size/-companion/gigabytes/#gigabytes","title":"gigabytes","text":"<p>[jvm]\\ val Long.gigabytes: ByteSize</p> <p>val Int.gigabytes: ByteSize</p>"},{"location":"api/shark/-byte-size/-companion/kilobytes/","title":"Kilobytes","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/kilobytes</p>"},{"location":"api/shark/-byte-size/-companion/kilobytes/#kilobytes","title":"kilobytes","text":"<p>[jvm]\\ val Long.kilobytes: ByteSize</p> <p>val Int.kilobytes: ByteSize</p>"},{"location":"api/shark/-byte-size/-companion/megabytes/","title":"Megabytes","text":"<p>//leakcanary-repo/shark/ByteSize/Companion/megabytes</p>"},{"location":"api/shark/-byte-size/-companion/megabytes/#megabytes","title":"megabytes","text":"<p>[jvm]\\ val Long.megabytes: ByteSize</p> <p>val Int.megabytes: ByteSize</p>"},{"location":"api/shark/-chaining-instance-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader</p>"},{"location":"api/shark/-chaining-instance-reference-reader/#chaininginstancereferencereader","title":"ChainingInstanceReferenceReader","text":"<p>[jvm]\\ class ChainingInstanceReferenceReader(virtualRefReaders: List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader>, flatteningInstanceReader: FlatteningPartitionedInstanceReferenceReader?, fieldRefReader: FieldInstanceReferenceReader) : ReferenceReader<HeapObject.HeapInstance> </p> <p>A ReferenceReader that first delegates expanding to virtualRefReaders in order until one matches (or none), and then always proceeds with fieldRefReader. This means any synthetic ref will be on the shortest path, but we still explore the entire data structure so that we correctly track which objects have been visited and correctly compute dominators and retained size.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/#constructors","title":"Constructors","text":"ChainingInstanceReferenceReader [jvm]constructor(virtualRefReaders: List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader>, flatteningInstanceReader: FlatteningPartitionedInstanceReferenceReader?, fieldRefReader: FieldInstanceReferenceReader)"},{"location":"api/shark/-chaining-instance-reference-reader/#types","title":"Types","text":"Name Summary VirtualInstanceReferenceReader [jvm]interface VirtualInstanceReferenceReader : ReferenceReader<HeapObject.HeapInstance> Same as ReferenceReader but read is only invoked when matches returns true. matches should return false if this VirtualInstanceReferenceReader implementation isn\u2019t able to expand the provided instance, in which case ChainingInstanceReferenceReader will delegate to the next VirtualInstanceReferenceReader implementation."},{"location":"api/shark/-chaining-instance-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]open override fun read(source: HeapObject.HeapInstance): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-chaining-instance-reference-reader/-chaining-instance-reference-reader/","title":"chaining instance reference reader","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/ChainingInstanceReferenceReader</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-chaining-instance-reference-reader/#chaininginstancereferencereader","title":"ChainingInstanceReferenceReader","text":"<p>[jvm]\\ constructor(virtualRefReaders: List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader>, flatteningInstanceReader: FlatteningPartitionedInstanceReferenceReader?, fieldRefReader: FieldInstanceReferenceReader)</p>"},{"location":"api/shark/-chaining-instance-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/read</p>"},{"location":"api/shark/-chaining-instance-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ open override fun read(source: HeapObject.HeapInstance): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/#virtualinstancereferencereader","title":"VirtualInstanceReferenceReader","text":"<p>interface VirtualInstanceReferenceReader : ReferenceReader<HeapObject.HeapInstance> </p> <p>Same as ReferenceReader but read is only invoked when matches returns true. matches should return false if this VirtualInstanceReferenceReader implementation isn\u2019t able to expand the provided instance, in which case ChainingInstanceReferenceReader will delegate to the next VirtualInstanceReferenceReader implementation.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/#inheritors","title":"Inheritors","text":"JavaLocalReferenceReader"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/#types","title":"Types","text":"Name Summary ChainFactory [jvm]fun interface ChainFactoryCreates a list of VirtualInstanceReferenceReader where the content of the list depends on the classes in the heap graph and their implementation. This is a chain as VirtualInstanceReferenceReader elements in the list will process references in order in ChainingInstanceReferenceReader. OptionalFactory [jvm]fun interface OptionalFactoryMay create a new VirtualInstanceReferenceReader, depending on what\u2019s in the heap graph. OptionalFactory implementations might return a different ReferenceReader depending on which version of a class is present in the heap dump, or they might return null if that class is missing."},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/#functions","title":"Functions","text":"Name Summary matches [jvm]abstract fun matches(instance: HeapObject.HeapInstance): Boolean read [jvm]abstract fun read(source: HeapObject.HeapInstance): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/#properties","title":"Properties","text":"Name Summary readsCutSet [jvm]abstract val readsCutSet: Booleanhttps://en.wikipedia.org/wiki/Cut_(graph_theory) A cut is a partition of the vertices of a graph into two disjoint subsets. Any cut determines a cut-set, the set of edges that have one endpoint in each subset of the partition. These edges are said to cross the cut."},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/matches/","title":"Matches","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/matches</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/matches/#matches","title":"matches","text":"<p>[jvm]\\ abstract fun matches(instance: HeapObject.HeapInstance): Boolean</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/reads-cut-set/","title":"Reads cut set","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/readsCutSet</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/reads-cut-set/#readscutset","title":"readsCutSet","text":"<p>[jvm]\\ abstract val readsCutSet: Boolean</p> <p>https://en.wikipedia.org/wiki/Cut_(graph_theory) A cut is a partition of the vertices of a graph into two disjoint subsets. Any cut determines a cut-set, the set of edges that have one endpoint in each subset of the partition. These edges are said to cross the cut.</p> <p>If true, the references returned by read will include the cut-set, which means any other object reacheable from the source instance but not returned by read has no outgoing edge to the rest of the graph. In other words, the internals of the data structure cannot reach beyond the data structure itself.</p> <p>When this is true then ChainingInstanceReferenceReader can leverage FlatteningPartitionedInstanceReferenceReader.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-chain-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/ChainFactory</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-chain-factory/#chainfactory","title":"ChainFactory","text":"<p>[jvm]\\ fun interface ChainFactory</p> <p>Creates a list of VirtualInstanceReferenceReader where the content of the list depends on the classes in the heap graph and their implementation. This is a chain as VirtualInstanceReferenceReader elements in the list will process references in order in ChainingInstanceReferenceReader.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-chain-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]abstract fun createFor(graph: HeapGraph): List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-chain-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/ChainFactory/createFor</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-chain-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ abstract fun createFor(graph: HeapGraph): List<ChainingInstanceReferenceReader.VirtualInstanceReferenceReader></p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/OptionalFactory</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/#optionalfactory","title":"OptionalFactory","text":"<p>fun interface OptionalFactory</p> <p>May create a new VirtualInstanceReferenceReader, depending on what\u2019s in the heap graph. OptionalFactory implementations might return a different ReferenceReader depending on which version of a class is present in the heap dump, or they might return null if that class is missing.</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/#inheritors","title":"Inheritors","text":"AndroidReferenceReaders ApacheHarmonyInstanceRefReaders OpenJdkInstanceRefReaders"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/#functions","title":"Functions","text":"Name Summary create [jvm]abstract fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/create/","title":"Create","text":"<p>//leakcanary-repo/shark/ChainingInstanceReferenceReader/VirtualInstanceReferenceReader/OptionalFactory/create</p>"},{"location":"api/shark/-chaining-instance-reference-reader/-virtual-instance-reference-reader/-optional-factory/create/#create","title":"create","text":"<p>[jvm]\\ abstract fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-class-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/ClassReferenceReader</p>"},{"location":"api/shark/-class-reference-reader/#classreferencereader","title":"ClassReferenceReader","text":"<p>[jvm]\\ class ClassReferenceReader(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ReferenceReader<HeapObject.HeapClass></p>"},{"location":"api/shark/-class-reference-reader/#constructors","title":"Constructors","text":"ClassReferenceReader [jvm]constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-class-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]open override fun read(source: HeapObject.HeapClass): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-class-reference-reader/-class-reference-reader/","title":"class reference reader","text":"<p>//leakcanary-repo/shark/ClassReferenceReader/ClassReferenceReader</p>"},{"location":"api/shark/-class-reference-reader/-class-reference-reader/#classreferencereader","title":"ClassReferenceReader","text":"<p>[jvm]\\ constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-class-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/ClassReferenceReader/read</p>"},{"location":"api/shark/-class-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ open override fun read(source: HeapObject.HeapClass): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-closeable-heap-graph/","title":"Index","text":"<p>//leakcanary-repo/shark/CloseableHeapGraph</p>"},{"location":"api/shark/-closeable-heap-graph/#closeableheapgraph","title":"CloseableHeapGraph","text":"<p>interface CloseableHeapGraph : HeapGraph, Closeable</p> <p>A HeapGraph that should be closed after being used.</p>"},{"location":"api/shark/-closeable-heap-graph/#inheritors","title":"Inheritors","text":"HprofHeapGraph"},{"location":"api/shark/-closeable-heap-graph/#functions","title":"Functions","text":"Name Summary close [jvm]abstract override fun close() findClassByName [jvm]abstract fun findClassByName(className: String): HeapObject.HeapClass?Returns the HeapClass corresponding to the provided className, or null if the class cannot be found. findHeapDumpIndex [jvm]abstract fun findHeapDumpIndex(objectId: Long): IntReturns the 1-based index in the heap dump of the object corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByHeapDumpIndex [jvm]abstract fun findObjectByHeapDumpIndex(heapDumpIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided heapDumpIndex, and throws IllegalArgumentException if heapDumpIndex is less than 1 or more than objectCount. findObjectById [jvm]abstract fun findObjectById(objectId: Long): HeapObjectReturns the HeapObject corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByIdOrNull [jvm]abstract fun findObjectByIdOrNull(objectId: Long): HeapObject?Returns the HeapObject corresponding to the provided objectId or null if it cannot be found. findObjectByIndex [jvm]abstract fun findObjectByIndex(objectIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided objectIndex, and throws IllegalArgumentException if objectIndex is less than 0 or more than objectCount - 1. objectExists [jvm]abstract fun objectExists(objectId: Long): BooleanReturns true if the provided objectId exists in the heap dump."},{"location":"api/shark/-closeable-heap-graph/#properties","title":"Properties","text":"Name Summary aliveAndroidServiceObjectIds [jvm]val HeapGraph.aliveAndroidServiceObjectIds: List<Long> classCount [jvm]abstract val classCount: Int classes [jvm]abstract val classes: Sequence<HeapObject.HeapClass>Sequence of all classes in the heap dump. context [jvm]abstract val context: GraphContextIn memory store that can be used to store objects this HeapGraph instance. gcRoots [jvm]abstract val gcRoots: List<GcRoot>All GC roots which type matches types known to this heap graph and which point to non null references. You can retrieve the object that a GC Root points to by calling findObjectById with GcRoot.id, however you need to first check that objectExists returns true because GC roots can point to objects that don\u2019t exist in the heap dump. identifierByteSize [jvm]abstract val identifierByteSize: Int instanceCount [jvm]abstract val instanceCount: Int instances [jvm]abstract val instances: Sequence<HeapObject.HeapInstance>Sequence of all instances in the heap dump. objectArrayCount [jvm]abstract val objectArrayCount: Int objectArrays [jvm]abstract val objectArrays: Sequence<HeapObject.HeapObjectArray>Sequence of all object arrays in the heap dump. objectCount [jvm]abstract val objectCount: Int objects [jvm]abstract val objects: Sequence<HeapObject>Sequence of all objects in the heap dump. primitiveArrayCount [jvm]abstract val primitiveArrayCount: Int primitiveArrays [jvm]abstract val primitiveArrays: Sequence<HeapObject.HeapPrimitiveArray>Sequence of all primitive arrays in the heap dump."},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/#constantmemorymetricsdualsourceprovider","title":"ConstantMemoryMetricsDualSourceProvider","text":"<p>[jvm]\\ class ConstantMemoryMetricsDualSourceProvider(realSourceProvider: DualSourceProvider) : DualSourceProvider</p> <p>Captures IO read metrics without using much memory.</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/#constructors","title":"Constructors","text":"ConstantMemoryMetricsDualSourceProvider [jvm]constructor(realSourceProvider: DualSourceProvider)"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph openRandomAccessSource [jvm]open override fun openRandomAccessSource(): RandomAccessSource openStreamingSource [jvm]open override fun openStreamingSource(): BufferedSource"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/#properties","title":"Properties","text":"Name Summary byteTravelRange [jvm]val byteTravelRange: Long randomAccessByteReads [jvm]var randomAccessByteReads: Long randomAccessByteTravel [jvm]var randomAccessByteTravel: Long randomAccessReadCount [jvm]var randomAccessReadCount: Long"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/-constant-memory-metrics-dual-source-provider/","title":"constant memory metrics dual source provider","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/ConstantMemoryMetricsDualSourceProvider</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/-constant-memory-metrics-dual-source-provider/#constantmemorymetricsdualsourceprovider","title":"ConstantMemoryMetricsDualSourceProvider","text":"<p>[jvm]\\ constructor(realSourceProvider: DualSourceProvider)</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/byte-travel-range/","title":"Byte travel range","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/byteTravelRange</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/byte-travel-range/#bytetravelrange","title":"byteTravelRange","text":"<p>[jvm]\\ val byteTravelRange: Long</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/open-random-access-source/","title":"Open random access source","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/openRandomAccessSource</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/open-random-access-source/#openrandomaccesssource","title":"openRandomAccessSource","text":"<p>[jvm]\\ open override fun openRandomAccessSource(): RandomAccessSource</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/open-streaming-source/","title":"Open streaming source","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/openStreamingSource</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/open-streaming-source/#openstreamingsource","title":"openStreamingSource","text":"<p>[jvm]\\ open override fun openStreamingSource(): BufferedSource</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-byte-reads/","title":"Random access byte reads","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/randomAccessByteReads</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-byte-reads/#randomaccessbytereads","title":"randomAccessByteReads","text":"<p>[jvm]\\ var randomAccessByteReads: Long</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-byte-travel/","title":"Random access byte travel","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/randomAccessByteTravel</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-byte-travel/#randomaccessbytetravel","title":"randomAccessByteTravel","text":"<p>[jvm]\\ var randomAccessByteTravel: Long</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-read-count/","title":"Random access read count","text":"<p>//leakcanary-repo/shark/ConstantMemoryMetricsDualSourceProvider/randomAccessReadCount</p>"},{"location":"api/shark/-constant-memory-metrics-dual-source-provider/random-access-read-count/#randomaccessreadcount","title":"randomAccessReadCount","text":"<p>[jvm]\\ var randomAccessReadCount: Long</p>"},{"location":"api/shark/-decorated-path/","title":"Index","text":"<p>//leakcanary-repo/shark/DecoratedPath</p>"},{"location":"api/shark/-decorated-path/#decoratedpath","title":"DecoratedPath","text":"<p>[jvm]\\ class DecoratedPath(delegate: Path) : Path</p>"},{"location":"api/shark/-decorated-path/#constructors","title":"Constructors","text":"DecoratedPath [jvm]constructor(delegate: Path)"},{"location":"api/shark/-decorated-path/#functions","title":"Functions","text":"Name Summary endNode [jvm]open override fun endNode(): Node forEach [jvm]open fun forEach(p0: Consumer<in Entity>) iterator [jvm]open operator override fun iterator(): MutableIterator<Entity> lastRelationship [jvm]open override fun lastRelationship(): Relationship length [jvm]open override fun length(): Int nodes [jvm]open override fun nodes(): MutableIterable<Node> relationships [jvm]open override fun relationships(): Iterable<Relationship> reverseNodes [jvm]open override fun reverseNodes(): MutableIterable<Node> reverseRelationships [jvm]open override fun reverseRelationships(): Iterable<Relationship> spliterator [jvm]open fun spliterator(): Spliterator<Entity> startNode [jvm]open override fun startNode(): Node"},{"location":"api/shark/-decorated-path/-decorated-path/","title":"decorated path","text":"<p>//leakcanary-repo/shark/DecoratedPath/DecoratedPath</p>"},{"location":"api/shark/-decorated-path/-decorated-path/#decoratedpath","title":"DecoratedPath","text":"<p>[jvm]\\ constructor(delegate: Path)</p>"},{"location":"api/shark/-decorated-path/iterator/","title":"Iterator","text":"<p>//leakcanary-repo/shark/DecoratedPath/iterator</p>"},{"location":"api/shark/-decorated-path/iterator/#iterator","title":"iterator","text":"<p>[jvm]\\ open operator override fun iterator(): MutableIterator<Entity></p>"},{"location":"api/shark/-decorated-path/relationships/","title":"Relationships","text":"<p>//leakcanary-repo/shark/DecoratedPath/relationships</p>"},{"location":"api/shark/-decorated-path/relationships/#relationships","title":"relationships","text":"<p>[jvm]\\ open override fun relationships(): Iterable<Relationship></p>"},{"location":"api/shark/-decorated-path/reverse-relationships/","title":"Reverse relationships","text":"<p>//leakcanary-repo/shark/DecoratedPath/reverseRelationships</p>"},{"location":"api/shark/-decorated-path/reverse-relationships/#reverserelationships","title":"reverseRelationships","text":"<p>[jvm]\\ open override fun reverseRelationships(): Iterable<Relationship></p>"},{"location":"api/shark/-deobfuscate-hprof-command/","title":"Index","text":"<p>//leakcanary-repo/shark/DeobfuscateHprofCommand</p>"},{"location":"api/shark/-deobfuscate-hprof-command/#deobfuscatehprofcommand","title":"DeobfuscateHprofCommand","text":"<p>[jvm]\\ class DeobfuscateHprofCommand : CliktCommand</p>"},{"location":"api/shark/-deobfuscate-hprof-command/#constructors","title":"Constructors","text":"DeobfuscateHprofCommand [jvm]constructor()"},{"location":"api/shark/-deobfuscate-hprof-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-deobfuscate-hprof-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-deobfuscate-hprof-command/-deobfuscate-hprof-command/","title":"deobfuscate hprof command","text":"<p>//leakcanary-repo/shark/DeobfuscateHprofCommand/DeobfuscateHprofCommand</p>"},{"location":"api/shark/-deobfuscate-hprof-command/-deobfuscate-hprof-command/#deobfuscatehprofcommand","title":"DeobfuscateHprofCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-deobfuscate-hprof-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/DeobfuscateHprofCommand/run</p>"},{"location":"api/shark/-deobfuscate-hprof-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-dominator-tree/","title":"Index","text":"<p>//leakcanary-repo/shark/DominatorTree</p>"},{"location":"api/shark/-dominator-tree/#dominatortree","title":"DominatorTree","text":"<p>[jvm]\\ class DominatorTree(expectedElements: Int = 4)</p>"},{"location":"api/shark/-dominator-tree/#constructors","title":"Constructors","text":"DominatorTree [jvm]constructor(expectedElements: Int = 4)"},{"location":"api/shark/-dominator-tree/#types","title":"Types","text":"Name Summary ObjectSizeCalculator [jvm]fun interface ObjectSizeCalculator"},{"location":"api/shark/-dominator-tree/#functions","title":"Functions","text":"Name Summary buildFullDominatorTree [jvm]fun buildFullDominatorTree(objectSizeCalculator: DominatorTree.ObjectSizeCalculator): Map<Long, ObjectDominators.DominatorNode> computeRetainedSizes [jvm]fun computeRetainedSizes(retainedObjectIds: LongSet, objectSizeCalculator: DominatorTree.ObjectSizeCalculator): LongLongMapComputes the size retained by retainedObjectIds using the dominator tree built using updateDominated. The shallow size of each object is provided by objectSizeCalculator. contains [jvm]operator fun contains(objectId: Long): Boolean get [jvm]operator fun get(dominatedObjectId: Long): LongReturns the dominator object id or ValueHolder.NULL_REFERENCE if dominatedObjectId is the root dominator. updateDominated [jvm]fun updateDominated(objectId: Long, parentObjectId: Long): BooleanRecords that objectId can be reached through parentObjectId, updating the dominator for objectId to be either parentObjectId if objectId has no known dominator and otherwise to the Lowest Common Dominator between parentObjectId and the previously determined dominator for objectId. updateDominatedAsRoot [jvm]fun updateDominatedAsRoot(objectId: Long): BooleanRecords that objectId is a root."},{"location":"api/shark/-dominator-tree/-dominator-tree/","title":"dominator tree","text":"<p>//leakcanary-repo/shark/DominatorTree/DominatorTree</p>"},{"location":"api/shark/-dominator-tree/-dominator-tree/#dominatortree","title":"DominatorTree","text":"<p>[jvm]\\ constructor(expectedElements: Int = 4)</p>"},{"location":"api/shark/-dominator-tree/build-full-dominator-tree/","title":"Build full dominator tree","text":"<p>//leakcanary-repo/shark/DominatorTree/buildFullDominatorTree</p>"},{"location":"api/shark/-dominator-tree/build-full-dominator-tree/#buildfulldominatortree","title":"buildFullDominatorTree","text":"<p>[jvm]\\ fun buildFullDominatorTree(objectSizeCalculator: DominatorTree.ObjectSizeCalculator): Map<Long, ObjectDominators.DominatorNode></p>"},{"location":"api/shark/-dominator-tree/compute-retained-sizes/","title":"Compute retained sizes","text":"<p>//leakcanary-repo/shark/DominatorTree/computeRetainedSizes</p>"},{"location":"api/shark/-dominator-tree/compute-retained-sizes/#computeretainedsizes","title":"computeRetainedSizes","text":"<p>[jvm]\\ fun computeRetainedSizes(retainedObjectIds: LongSet, objectSizeCalculator: DominatorTree.ObjectSizeCalculator): LongLongMap</p> <p>Computes the size retained by retainedObjectIds using the dominator tree built using updateDominated. The shallow size of each object is provided by objectSizeCalculator.</p>"},{"location":"api/shark/-dominator-tree/compute-retained-sizes/#return","title":"Return","text":"<p>a map of object id to retained size.</p>"},{"location":"api/shark/-dominator-tree/contains/","title":"Contains","text":"<p>//leakcanary-repo/shark/DominatorTree/contains</p>"},{"location":"api/shark/-dominator-tree/contains/#contains","title":"contains","text":"<p>[jvm]\\ operator fun contains(objectId: Long): Boolean</p>"},{"location":"api/shark/-dominator-tree/get/","title":"Get","text":"<p>//leakcanary-repo/shark/DominatorTree/get</p>"},{"location":"api/shark/-dominator-tree/get/#get","title":"get","text":"<p>[jvm]\\ operator fun get(dominatedObjectId: Long): Long</p> <p>Returns the dominator object id or ValueHolder.NULL_REFERENCE if dominatedObjectId is the root dominator.</p>"},{"location":"api/shark/-dominator-tree/update-dominated-as-root/","title":"Update dominated as root","text":"<p>//leakcanary-repo/shark/DominatorTree/updateDominatedAsRoot</p>"},{"location":"api/shark/-dominator-tree/update-dominated-as-root/#updatedominatedasroot","title":"updateDominatedAsRoot","text":"<p>[jvm]\\ fun updateDominatedAsRoot(objectId: Long): Boolean</p> <p>Records that objectId is a root.</p>"},{"location":"api/shark/-dominator-tree/update-dominated/","title":"Update dominated","text":"<p>//leakcanary-repo/shark/DominatorTree/updateDominated</p>"},{"location":"api/shark/-dominator-tree/update-dominated/#updatedominated","title":"updateDominated","text":"<p>[jvm]\\ fun updateDominated(objectId: Long, parentObjectId: Long): Boolean</p> <p>Records that objectId can be reached through parentObjectId, updating the dominator for objectId to be either parentObjectId if objectId has no known dominator and otherwise to the Lowest Common Dominator between parentObjectId and the previously determined dominator for objectId.</p> <p>parentObjectId should already have been added via updateDominatedAsRoot. Failing to do that will throw IllegalStateException on future calls.</p> <p>This implementation is optimized with the assumption that the graph is visited as a breadth first search, so when objectId already has a known dominator then its dominator path is shorter than the dominator path of parentObjectId.</p>"},{"location":"api/shark/-dominator-tree/update-dominated/#return","title":"Return","text":"<p>true if objectId already had a known dominator, false otherwise.</p>"},{"location":"api/shark/-dominator-tree/-object-size-calculator/","title":"Index","text":"<p>//leakcanary-repo/shark/DominatorTree/ObjectSizeCalculator</p>"},{"location":"api/shark/-dominator-tree/-object-size-calculator/#objectsizecalculator","title":"ObjectSizeCalculator","text":"<p>fun interface ObjectSizeCalculator</p>"},{"location":"api/shark/-dominator-tree/-object-size-calculator/#inheritors","title":"Inheritors","text":"AndroidObjectSizeCalculator"},{"location":"api/shark/-dominator-tree/-object-size-calculator/#functions","title":"Functions","text":"Name Summary computeSize [jvm]abstract fun computeSize(objectId: Long): Int"},{"location":"api/shark/-dominator-tree/-object-size-calculator/compute-size/","title":"Compute size","text":"<p>//leakcanary-repo/shark/DominatorTree/ObjectSizeCalculator/computeSize</p>"},{"location":"api/shark/-dominator-tree/-object-size-calculator/compute-size/#computesize","title":"computeSize","text":"<p>[jvm]\\ abstract fun computeSize(objectId: Long): Int</p>"},{"location":"api/shark/-dominators/","title":"Index","text":"<p>//leakcanary-repo/shark/Dominators</p>"},{"location":"api/shark/-dominators/#dominators","title":"Dominators","text":"<p>[jvm]\\ class Dominators(val dominatorNodes: Map<Long, ObjectDominators.DominatorNode>) : Serializable</p>"},{"location":"api/shark/-dominators/#constructors","title":"Constructors","text":"Dominators [jvm]constructor(dominatorNodes: Map<Long, ObjectDominators.DominatorNode>)"},{"location":"api/shark/-dominators/#properties","title":"Properties","text":"Name Summary dominatorNodes [jvm]val dominatorNodes: Map<Long, ObjectDominators.DominatorNode>"},{"location":"api/shark/-dominators/-dominators/","title":"dominators","text":"<p>//leakcanary-repo/shark/Dominators/Dominators</p>"},{"location":"api/shark/-dominators/-dominators/#dominators","title":"Dominators","text":"<p>[jvm]\\ constructor(dominatorNodes: Map<Long, ObjectDominators.DominatorNode>)</p>"},{"location":"api/shark/-dominators/dominator-nodes/","title":"Dominator nodes","text":"<p>//leakcanary-repo/shark/Dominators/dominatorNodes</p>"},{"location":"api/shark/-dominators/dominator-nodes/#dominatornodes","title":"dominatorNodes","text":"<p>[jvm]\\ val dominatorNodes: Map<Long, ObjectDominators.DominatorNode></p>"},{"location":"api/shark/-dual-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/DualSourceProvider</p>"},{"location":"api/shark/-dual-source-provider/#dualsourceprovider","title":"DualSourceProvider","text":"<p>interface DualSourceProvider : StreamingSourceProvider, RandomAccessSourceProvider</p> <p>Both a StreamingSourceProvider and a RandomAccessSourceProvider</p>"},{"location":"api/shark/-dual-source-provider/#inheritors","title":"Inheritors","text":"ByteArraySourceProvider ConstantMemoryMetricsDualSourceProvider FileSourceProvider ThrowingCancelableFileSourceProvider"},{"location":"api/shark/-dual-source-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph openRandomAccessSource [jvm]abstract fun openRandomAccessSource(): RandomAccessSource openStreamingSource [jvm]abstract fun openStreamingSource(): BufferedSource"},{"location":"api/shark/-dump-process-command/","title":"Index","text":"<p>//leakcanary-repo/shark/DumpProcessCommand</p>"},{"location":"api/shark/-dump-process-command/#dumpprocesscommand","title":"DumpProcessCommand","text":"<p>[jvm]\\ class DumpProcessCommand : CliktCommand</p>"},{"location":"api/shark/-dump-process-command/#constructors","title":"Constructors","text":"DumpProcessCommand [jvm]constructor()"},{"location":"api/shark/-dump-process-command/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-dump-process-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-dump-process-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-dump-process-command/-dump-process-command/","title":"dump process command","text":"<p>//leakcanary-repo/shark/DumpProcessCommand/DumpProcessCommand</p>"},{"location":"api/shark/-dump-process-command/-dump-process-command/#dumpprocesscommand","title":"DumpProcessCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-dump-process-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/DumpProcessCommand/run</p>"},{"location":"api/shark/-dump-process-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-dump-process-command/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/DumpProcessCommand/Companion</p>"},{"location":"api/shark/-dump-process-command/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-dump-process-command/-companion/#functions","title":"Functions","text":"Name Summary dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File"},{"location":"api/shark/-dump-process-command/-companion/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/shark/DumpProcessCommand/Companion/dumpHeap</p>"},{"location":"api/shark/-dump-process-command/-companion/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File</p>"},{"location":"api/shark/-field-instance-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/FieldInstanceReferenceReader</p>"},{"location":"api/shark/-field-instance-reference-reader/#fieldinstancereferencereader","title":"FieldInstanceReferenceReader","text":"<p>[jvm]\\ class FieldInstanceReferenceReader(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ReferenceReader<HeapObject.HeapInstance> </p> <p>Expands instance fields that hold non null references.</p>"},{"location":"api/shark/-field-instance-reference-reader/#constructors","title":"Constructors","text":"FieldInstanceReferenceReader [jvm]constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-field-instance-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]open override fun read(source: HeapObject.HeapInstance): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-field-instance-reference-reader/-field-instance-reference-reader/","title":"field instance reference reader","text":"<p>//leakcanary-repo/shark/FieldInstanceReferenceReader/FieldInstanceReferenceReader</p>"},{"location":"api/shark/-field-instance-reference-reader/-field-instance-reference-reader/#fieldinstancereferencereader","title":"FieldInstanceReferenceReader","text":"<p>[jvm]\\ constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-field-instance-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/FieldInstanceReferenceReader/read</p>"},{"location":"api/shark/-field-instance-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ open override fun read(source: HeapObject.HeapInstance): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-file-source-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/FileSourceProvider</p>"},{"location":"api/shark/-file-source-provider/#filesourceprovider","title":"FileSourceProvider","text":"<p>[jvm]\\ class FileSourceProvider(file: File) : DualSourceProvider</p>"},{"location":"api/shark/-file-source-provider/#constructors","title":"Constructors","text":"FileSourceProvider [jvm]constructor(file: File)"},{"location":"api/shark/-file-source-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph openRandomAccessSource [jvm]open override fun openRandomAccessSource(): RandomAccessSource openStreamingSource [jvm]open override fun openStreamingSource(): BufferedSource"},{"location":"api/shark/-file-source-provider/-file-source-provider/","title":"file source provider","text":"<p>//leakcanary-repo/shark/FileSourceProvider/FileSourceProvider</p>"},{"location":"api/shark/-file-source-provider/-file-source-provider/#filesourceprovider","title":"FileSourceProvider","text":"<p>[jvm]\\ constructor(file: File)</p>"},{"location":"api/shark/-file-source-provider/open-random-access-source/","title":"Open random access source","text":"<p>//leakcanary-repo/shark/FileSourceProvider/openRandomAccessSource</p>"},{"location":"api/shark/-file-source-provider/open-random-access-source/#openrandomaccesssource","title":"openRandomAccessSource","text":"<p>[jvm]\\ open override fun openRandomAccessSource(): RandomAccessSource</p>"},{"location":"api/shark/-file-source-provider/open-streaming-source/","title":"Open streaming source","text":"<p>//leakcanary-repo/shark/FileSourceProvider/openStreamingSource</p>"},{"location":"api/shark/-file-source-provider/open-streaming-source/#openstreamingsource","title":"openStreamingSource","text":"<p>[jvm]\\ open override fun openStreamingSource(): BufferedSource</p>"},{"location":"api/shark/-filtering-leaking-object-finder/","title":"Index","text":"<p>//leakcanary-repo/shark/FilteringLeakingObjectFinder</p>"},{"location":"api/shark/-filtering-leaking-object-finder/#filteringleakingobjectfinder","title":"FilteringLeakingObjectFinder","text":"<p>[jvm]\\ class FilteringLeakingObjectFinder(filters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>) : LeakingObjectFinder</p> <p>Finds the objects that are leaking by scanning all objects in the heap dump and delegating the decision to a list of FilteringLeakingObjectFinder.LeakingObjectFilter</p>"},{"location":"api/shark/-filtering-leaking-object-finder/#constructors","title":"Constructors","text":"FilteringLeakingObjectFinder [jvm]constructor(filters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>)"},{"location":"api/shark/-filtering-leaking-object-finder/#types","title":"Types","text":"Name Summary LeakingObjectFilter [jvm]fun interface LeakingObjectFilterFilter to be passed to the FilteringLeakingObjectFinder constructor."},{"location":"api/shark/-filtering-leaking-object-finder/#functions","title":"Functions","text":"Name Summary findLeakingObjectIds [jvm]open override fun findLeakingObjectIds(graph: HeapGraph): Set<Long>For a given heap graph, returns a set of object ids for the objects that are leaking."},{"location":"api/shark/-filtering-leaking-object-finder/-filtering-leaking-object-finder/","title":"filtering leaking object finder","text":"<p>//leakcanary-repo/shark/FilteringLeakingObjectFinder/FilteringLeakingObjectFinder</p>"},{"location":"api/shark/-filtering-leaking-object-finder/-filtering-leaking-object-finder/#filteringleakingobjectfinder","title":"FilteringLeakingObjectFinder","text":"<p>[jvm]\\ constructor(filters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>)</p>"},{"location":"api/shark/-filtering-leaking-object-finder/find-leaking-object-ids/","title":"Find leaking object ids","text":"<p>//leakcanary-repo/shark/FilteringLeakingObjectFinder/findLeakingObjectIds</p>"},{"location":"api/shark/-filtering-leaking-object-finder/find-leaking-object-ids/#findleakingobjectids","title":"findLeakingObjectIds","text":"<p>[jvm]\\ open override fun findLeakingObjectIds(graph: HeapGraph): Set<Long></p> <p>For a given heap graph, returns a set of object ids for the objects that are leaking.</p>"},{"location":"api/shark/-filtering-leaking-object-finder/-leaking-object-filter/","title":"Index","text":"<p>//leakcanary-repo/shark/FilteringLeakingObjectFinder/LeakingObjectFilter</p>"},{"location":"api/shark/-filtering-leaking-object-finder/-leaking-object-filter/#leakingobjectfilter","title":"LeakingObjectFilter","text":"<p>[jvm]\\ fun interface LeakingObjectFilter</p> <p>Filter to be passed to the FilteringLeakingObjectFinder constructor.</p>"},{"location":"api/shark/-filtering-leaking-object-finder/-leaking-object-filter/#functions","title":"Functions","text":"Name Summary isLeakingObject [jvm]abstract fun isLeakingObject(heapObject: HeapObject): BooleanReturns whether the passed in heapObject is leaking. This should only return true when we\u2019re 100% sure the passed in heapObject should not be in memory anymore."},{"location":"api/shark/-filtering-leaking-object-finder/-leaking-object-filter/is-leaking-object/","title":"Is leaking object","text":"<p>//leakcanary-repo/shark/FilteringLeakingObjectFinder/LeakingObjectFilter/isLeakingObject</p>"},{"location":"api/shark/-filtering-leaking-object-finder/-leaking-object-filter/is-leaking-object/#isleakingobject","title":"isLeakingObject","text":"<p>[jvm]\\ abstract fun isLeakingObject(heapObject: HeapObject): Boolean</p> <p>Returns whether the passed in heapObject is leaking. This should only return true when we\u2019re 100% sure the passed in heapObject should not be in memory anymore.</p>"},{"location":"api/shark/-find-leak-paths/","title":"Index","text":"<p>//leakcanary-repo/shark/FindLeakPaths</p>"},{"location":"api/shark/-find-leak-paths/#findleakpaths","title":"FindLeakPaths","text":"<p>[jvm]\\ class FindLeakPaths</p>"},{"location":"api/shark/-find-leak-paths/#constructors","title":"Constructors","text":"FindLeakPaths [jvm]constructor()"},{"location":"api/shark/-find-leak-paths/#functions","title":"Functions","text":"Name Summary leakPaths [jvm]fun leakPaths(): List<Path>"},{"location":"api/shark/-find-leak-paths/#properties","title":"Properties","text":"Name Summary transaction [jvm]lateinit var transaction: Transaction"},{"location":"api/shark/-find-leak-paths/-find-leak-paths/","title":"find leak paths","text":"<p>//leakcanary-repo/shark/FindLeakPaths/FindLeakPaths</p>"},{"location":"api/shark/-find-leak-paths/-find-leak-paths/#findleakpaths","title":"FindLeakPaths","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-find-leak-paths/leak-paths/","title":"Leak paths","text":"<p>//leakcanary-repo/shark/FindLeakPaths/leakPaths</p>"},{"location":"api/shark/-find-leak-paths/leak-paths/#leakpaths","title":"leakPaths","text":"<p>[jvm]\\ fun leakPaths(): List<Path></p>"},{"location":"api/shark/-find-leak-paths/transaction/","title":"Transaction","text":"<p>//leakcanary-repo/shark/FindLeakPaths/transaction</p>"},{"location":"api/shark/-find-leak-paths/transaction/#transaction","title":"transaction","text":"<p>[jvm]\\ lateinit var transaction: Transaction</p>"},{"location":"api/shark/-first-heap-traversal/","title":"Index","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal</p>"},{"location":"api/shark/-first-heap-traversal/#firstheaptraversal","title":"FirstHeapTraversal","text":"<p>[jvm]\\ class FirstHeapTraversal(val shortestPathTree: ShortestPathObjectNode, previousTraversal: InitialState) : HeapTraversalOutput</p>"},{"location":"api/shark/-first-heap-traversal/#constructors","title":"Constructors","text":"FirstHeapTraversal [jvm]constructor(shortestPathTree: ShortestPathObjectNode, previousTraversal: InitialState)"},{"location":"api/shark/-first-heap-traversal/#properties","title":"Properties","text":"Name Summary scenarioLoopsPerGraph [jvm]open override val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. shortestPathTree [jvm]open override val shortestPathTree: ShortestPathObjectNodeA representation of the heap as a tree of shortest path from roots to each object in the heap, where: traversalCount [jvm]open override val traversalCount: Int = 1"},{"location":"api/shark/-first-heap-traversal/-first-heap-traversal/","title":"first heap traversal","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal/FirstHeapTraversal</p>"},{"location":"api/shark/-first-heap-traversal/-first-heap-traversal/#firstheaptraversal","title":"FirstHeapTraversal","text":"<p>[jvm]\\ constructor(shortestPathTree: ShortestPathObjectNode, previousTraversal: InitialState)</p>"},{"location":"api/shark/-first-heap-traversal/heap-graph-count/","title":"Heap graph count","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal/heapGraphCount</p>"},{"location":"api/shark/-first-heap-traversal/heap-graph-count/#heapgraphcount","title":"heapGraphCount","text":"<p>[jvm]\\ open override val heapGraphCount: Int?</p> <p>The expected max number of traversals, or null if unknown.</p>"},{"location":"api/shark/-first-heap-traversal/scenario-loops-per-graph/","title":"Scenario loops per graph","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal/scenarioLoopsPerGraph</p>"},{"location":"api/shark/-first-heap-traversal/scenario-loops-per-graph/#scenarioloopspergraph","title":"scenarioLoopsPerGraph","text":"<p>[jvm]\\ open override val scenarioLoopsPerGraph: Int</p> <p>How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal.</p>"},{"location":"api/shark/-first-heap-traversal/shortest-path-tree/","title":"Shortest path tree","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal/shortestPathTree</p>"},{"location":"api/shark/-first-heap-traversal/shortest-path-tree/#shortestpathtree","title":"shortestPathTree","text":"<p>[jvm]\\ open override val shortestPathTree: ShortestPathObjectNode</p> <p>A representation of the heap as a tree of shortest path from roots to each object in the heap, where:</p> <ul> <li>object identity is lost</li> <li>objects are grouped by identical path into a single node</li> <li> <p>Path element names are determined using the node & edge name to reach them (e.g. class name</p> </li> <li> <p>field name) as well as the class name of the reached object.</p> </li> </ul>"},{"location":"api/shark/-first-heap-traversal/traversal-count/","title":"Traversal count","text":"<p>//leakcanary-repo/shark/FirstHeapTraversal/traversalCount</p>"},{"location":"api/shark/-first-heap-traversal/traversal-count/#traversalcount","title":"traversalCount","text":"<p>[jvm]\\ open override val traversalCount: Int = 1</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/FlatteningPartitionedInstanceReferenceReader</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/#flatteningpartitionedinstancereferencereader","title":"FlatteningPartitionedInstanceReferenceReader","text":"<p>[jvm]\\ class FlatteningPartitionedInstanceReferenceReader(graph: HeapGraph, instanceReferenceReader: FieldInstanceReferenceReader)</p> <p>FlatteningPartitionedInstanceReferenceReader provides a synthetic and stable representation of a data structure that maps how we think about that data structure instead of how it is internally implemented. You can think of it as surfacing additional direct references to entries that the data structure holds. VirtualInstanceReferenceReader implementations scan references based on known patterns rather than through generic traversals. As a result, they do not surface references and objects that are part of the data structure implementations, such as internal arrays or linked lists. This is a problem because the same traversal is also used to compute retained size, so we need to accounts for all reachable objects.</p> <p>One possible solution is to feed an instance to a FieldInstanceReferenceReader after its already been processed by a VirtualInstanceReferenceReader. The FieldInstanceReferenceReader will surface internal objects actually referenced by the source instance and from there the internals will be fed back into the traversal. This has two downsides: first, we will re read the exact same objects significantly later (with a DFS newly discovered objects are put back to the end of the queue) by which time the objects are likely evicted from the cache and need to be read again (additional IO). Second, when doing heap diffs to surface objects that grow, the internals of data structures (arrays, linked list) will grow somewhere further down the path from the data structure itself, so on top of the data structure already being surfaced as a growing objects, the internal objects will also be surfaced as a distinct location of object growth, creating noise in the result.</p> <p>FlatteningPartitionedInstanceReferenceReader exists to fix both of the issues mentioned in the previous paragraph. It performs a local graph traversal and returns all internal objects directly and indirectly dominated by a data structure as if they were all direct child of that data structure, removing the need for a an additional processing step with FieldInstanceReferenceReader. Because the graph traversal is local, with a dedicated small queue, we benefit from the in memory cache and avoid double IO reads of objects. And because these internal objects are all surfaced as direct children of the source instance, they\u2019ll never appear to grow, removing noise in the result.</p> <p>FlatteningPartitionedInstanceReferenceReader wraps a VirtualInstanceReferenceReader itself dedicated to a data structure that has no out edges beyond the one returned by the VirtualInstanceReferenceReader. Once the VirtualInstanceReferenceReader is done emitting all the out edges it knows about, FlatteningPartitionedInstanceReferenceReader will then explore instances and object arrays in the rest of the local graph using instanceReferenceReader and objectArrayReferenceReader, starting from the source, and emit all found nodes as virtual direct children of source. FlatteningPartitionedInstanceReferenceReader communicates to its consumers that the inner nodes should not be reloaded and explored by setting Reference.isLeafObject to true.</p> <p>Note: FlatteningPartitionedInstanceReferenceReader should only be used together with a VirtualInstanceReferenceReader that identifies all inner out edges of the data structure, as FlatteningPartitionedInstanceReferenceReader keeps track of those edges and knows to not follow them. If we missed an out edge, the inner traversal would then keep going and end up traversing the rest of the graph and presenting the entirety of the rest of the graph as directly referenced by the source instance. VirtualInstanceReferenceReader that can be used with FlatteningPartitionedInstanceReferenceReader return true from VirtualInstanceReferenceReader.readsCutSet.</p> <p>FlatteningPartitionedInstanceReferenceReader makes the assumption that there\u2019s no need to explore any class found as those would have already be found through classloaders.</p> <p>A side effect of the flattening is that a path involving indirect internal objects will look a bit strange, as the class for the owner of the reference will still be the real one, but the reference will be directly attached to the data structure which doesn\u2019t have that class in its class hierarchy.</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/#constructors","title":"Constructors","text":"FlatteningPartitionedInstanceReferenceReader [jvm]constructor(graph: HeapGraph, instanceReferenceReader: FieldInstanceReferenceReader)"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]fun read(virtualInstanceReader: ChainingInstanceReferenceReader.VirtualInstanceReferenceReader, source: HeapObject.HeapInstance): Sequence<Reference>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/-flattening-partitioned-instance-reference-reader/","title":"flattening partitioned instance reference reader","text":"<p>//leakcanary-repo/shark/FlatteningPartitionedInstanceReferenceReader/FlatteningPartitionedInstanceReferenceReader</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/-flattening-partitioned-instance-reference-reader/#flatteningpartitionedinstancereferencereader","title":"FlatteningPartitionedInstanceReferenceReader","text":"<p>[jvm]\\ constructor(graph: HeapGraph, instanceReferenceReader: FieldInstanceReferenceReader)</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/FlatteningPartitionedInstanceReferenceReader/read</p>"},{"location":"api/shark/-flattening-partitioned-instance-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ fun read(virtualInstanceReader: ChainingInstanceReferenceReader.VirtualInstanceReferenceReader, source: HeapObject.HeapInstance): Sequence<Reference></p>"},{"location":"api/shark/-gc-root/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot</p>"},{"location":"api/shark/-gc-root/#gcroot","title":"GcRoot","text":"<p>sealed class GcRoot</p> <p>A GcRoot as identified by HprofRecord.HeapDumpRecord.GcRootRecord in the heap dump.</p>"},{"location":"api/shark/-gc-root/#inheritors","title":"Inheritors","text":"Unknown JniGlobal JniLocal JavaFrame NativeStack StickyClass ThreadBlock MonitorUsed ThreadObject ReferenceCleanup VmInternal JniMonitor InternedString Finalizing Debugger Unreachable"},{"location":"api/shark/-gc-root/#types","title":"Types","text":"Name Summary Debugger [jvm]class Debugger(val id: Long) : GcRootAn object held by a connected debugger Finalizing [jvm]class Finalizing(val id: Long) : GcRootAn object that is in a queue, waiting for a finalizer to run. InternedString [jvm]class InternedString(val id: Long) : GcRootAn interned string, see java.lang.String.intern. JavaFrame [jvm]class JavaFrame(val id: Long, val threadSerialNumber: Int, val frameNumber: Int) : GcRootA java local variable JniGlobal [jvm]class JniGlobal(val id: Long, val jniGlobalRefId: Long) : GcRootA global variable in native code. JniLocal [jvm]class JniLocal(val id: Long, val threadSerialNumber: Int, val frameNumber: Int) : GcRootA local variable in native code. JniMonitor [jvm]class JniMonitor(val id: Long, val stackTraceSerialNumber: Int, val stackDepth: Int) : GcRootIt\u2019s unclear what this is, documentation welcome. MonitorUsed [jvm]class MonitorUsed(val id: Long) : GcRootEverything that called the wait() or notify() methods, or that is synchronized. NativeStack [jvm]class NativeStack(val id: Long, val threadSerialNumber: Int) : GcRootInput or output parameters in native code ReferenceCleanup [jvm]class ReferenceCleanup(val id: Long) : GcRootIt\u2019s unclear what this is, documentation welcome. StickyClass [jvm]class StickyClass(val id: Long) : GcRootA system class ThreadBlock [jvm]class ThreadBlock(val id: Long, val threadSerialNumber: Int) : GcRoot ThreadObject [jvm]class ThreadObject(val id: Long, val threadSerialNumber: Int, val stackTraceSerialNumber: Int) : GcRootA thread. Unknown [jvm]class Unknown(val id: Long) : GcRootAn unknown gc root. Unreachable [jvm]class Unreachable(val id: Long) : GcRootAn object that is unreachable from any other root, but not a root itself. VmInternal [jvm]class VmInternal(val id: Long) : GcRootIt\u2019s unclear what this is, documentation welcome."},{"location":"api/shark/-gc-root/#properties","title":"Properties","text":"Name Summary id [jvm]abstract val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/id</p>"},{"location":"api/shark/-gc-root/id/#id","title":"id","text":"<p>[jvm]\\ abstract val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-debugger/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/Debugger</p>"},{"location":"api/shark/-gc-root/-debugger/#debugger","title":"Debugger","text":"<p>[jvm]\\ class Debugger(val id: Long) : GcRoot</p> <p>An object held by a connected debugger</p>"},{"location":"api/shark/-gc-root/-debugger/#constructors","title":"Constructors","text":"Debugger [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-debugger/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-debugger/-debugger/","title":"debugger","text":"<p>//leakcanary-repo/shark/GcRoot/Debugger/Debugger</p>"},{"location":"api/shark/-gc-root/-debugger/-debugger/#debugger","title":"Debugger","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-debugger/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/Debugger/id</p>"},{"location":"api/shark/-gc-root/-debugger/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-finalizing/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/Finalizing</p>"},{"location":"api/shark/-gc-root/-finalizing/#finalizing","title":"Finalizing","text":"<p>[jvm]\\ class Finalizing(val id: Long) : GcRoot</p> <p>An object that is in a queue, waiting for a finalizer to run.</p>"},{"location":"api/shark/-gc-root/-finalizing/#constructors","title":"Constructors","text":"Finalizing [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-finalizing/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-finalizing/-finalizing/","title":"finalizing","text":"<p>//leakcanary-repo/shark/GcRoot/Finalizing/Finalizing</p>"},{"location":"api/shark/-gc-root/-finalizing/-finalizing/#finalizing","title":"Finalizing","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-finalizing/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/Finalizing/id</p>"},{"location":"api/shark/-gc-root/-finalizing/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-interned-string/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/InternedString</p>"},{"location":"api/shark/-gc-root/-interned-string/#internedstring","title":"InternedString","text":"<p>[jvm]\\ class InternedString(val id: Long) : GcRoot</p> <p>An interned string, see java.lang.String.intern.</p>"},{"location":"api/shark/-gc-root/-interned-string/#constructors","title":"Constructors","text":"InternedString [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-interned-string/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-interned-string/-interned-string/","title":"interned string","text":"<p>//leakcanary-repo/shark/GcRoot/InternedString/InternedString</p>"},{"location":"api/shark/-gc-root/-interned-string/-interned-string/#internedstring","title":"InternedString","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-interned-string/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/InternedString/id</p>"},{"location":"api/shark/-gc-root/-interned-string/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-java-frame/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/JavaFrame</p>"},{"location":"api/shark/-gc-root/-java-frame/#javaframe","title":"JavaFrame","text":"<p>[jvm]\\ class JavaFrame(val id: Long, val threadSerialNumber: Int, val frameNumber: Int) : GcRoot</p> <p>A java local variable</p>"},{"location":"api/shark/-gc-root/-java-frame/#constructors","title":"Constructors","text":"JavaFrame [jvm]constructor(id: Long, threadSerialNumber: Int, frameNumber: Int)"},{"location":"api/shark/-gc-root/-java-frame/#properties","title":"Properties","text":"Name Summary frameNumber [jvm]val frameNumber: Intframe number in stack trace (-1 for empty) id [jvm]open override val id: LongThe object id of the object that this gc root references. threadSerialNumber [jvm]val threadSerialNumber: IntCorresponds to ThreadObject.threadSerialNumber"},{"location":"api/shark/-gc-root/-java-frame/-java-frame/","title":"java frame","text":"<p>//leakcanary-repo/shark/GcRoot/JavaFrame/JavaFrame</p>"},{"location":"api/shark/-gc-root/-java-frame/-java-frame/#javaframe","title":"JavaFrame","text":"<p>[jvm]\\ constructor(id: Long, threadSerialNumber: Int, frameNumber: Int)</p>"},{"location":"api/shark/-gc-root/-java-frame/frame-number/","title":"Frame number","text":"<p>//leakcanary-repo/shark/GcRoot/JavaFrame/frameNumber</p>"},{"location":"api/shark/-gc-root/-java-frame/frame-number/#framenumber","title":"frameNumber","text":"<p>[jvm]\\ val frameNumber: Int</p> <p>frame number in stack trace (-1 for empty)</p>"},{"location":"api/shark/-gc-root/-java-frame/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/JavaFrame/id</p>"},{"location":"api/shark/-gc-root/-java-frame/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-java-frame/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/GcRoot/JavaFrame/threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-java-frame/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p> <p>Corresponds to ThreadObject.threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-jni-global/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/JniGlobal</p>"},{"location":"api/shark/-gc-root/-jni-global/#jniglobal","title":"JniGlobal","text":"<p>[jvm]\\ class JniGlobal(val id: Long, val jniGlobalRefId: Long) : GcRoot</p> <p>A global variable in native code.</p>"},{"location":"api/shark/-gc-root/-jni-global/#constructors","title":"Constructors","text":"JniGlobal [jvm]constructor(id: Long, jniGlobalRefId: Long)"},{"location":"api/shark/-gc-root/-jni-global/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references. jniGlobalRefId [jvm]val jniGlobalRefId: Long"},{"location":"api/shark/-gc-root/-jni-global/-jni-global/","title":"jni global","text":"<p>//leakcanary-repo/shark/GcRoot/JniGlobal/JniGlobal</p>"},{"location":"api/shark/-gc-root/-jni-global/-jni-global/#jniglobal","title":"JniGlobal","text":"<p>[jvm]\\ constructor(id: Long, jniGlobalRefId: Long)</p>"},{"location":"api/shark/-gc-root/-jni-global/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/JniGlobal/id</p>"},{"location":"api/shark/-gc-root/-jni-global/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-jni-global/jni-global-ref-id/","title":"Jni global ref id","text":"<p>//leakcanary-repo/shark/GcRoot/JniGlobal/jniGlobalRefId</p>"},{"location":"api/shark/-gc-root/-jni-global/jni-global-ref-id/#jniglobalrefid","title":"jniGlobalRefId","text":"<p>[jvm]\\ val jniGlobalRefId: Long</p>"},{"location":"api/shark/-gc-root/-jni-local/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/JniLocal</p>"},{"location":"api/shark/-gc-root/-jni-local/#jnilocal","title":"JniLocal","text":"<p>[jvm]\\ class JniLocal(val id: Long, val threadSerialNumber: Int, val frameNumber: Int) : GcRoot</p> <p>A local variable in native code.</p>"},{"location":"api/shark/-gc-root/-jni-local/#constructors","title":"Constructors","text":"JniLocal [jvm]constructor(id: Long, threadSerialNumber: Int, frameNumber: Int)"},{"location":"api/shark/-gc-root/-jni-local/#properties","title":"Properties","text":"Name Summary frameNumber [jvm]val frameNumber: Intframe number in stack trace (-1 for empty) id [jvm]open override val id: LongThe object id of the object that this gc root references. threadSerialNumber [jvm]val threadSerialNumber: IntCorresponds to ThreadObject.threadSerialNumber"},{"location":"api/shark/-gc-root/-jni-local/-jni-local/","title":"jni local","text":"<p>//leakcanary-repo/shark/GcRoot/JniLocal/JniLocal</p>"},{"location":"api/shark/-gc-root/-jni-local/-jni-local/#jnilocal","title":"JniLocal","text":"<p>[jvm]\\ constructor(id: Long, threadSerialNumber: Int, frameNumber: Int)</p>"},{"location":"api/shark/-gc-root/-jni-local/frame-number/","title":"Frame number","text":"<p>//leakcanary-repo/shark/GcRoot/JniLocal/frameNumber</p>"},{"location":"api/shark/-gc-root/-jni-local/frame-number/#framenumber","title":"frameNumber","text":"<p>[jvm]\\ val frameNumber: Int</p> <p>frame number in stack trace (-1 for empty)</p>"},{"location":"api/shark/-gc-root/-jni-local/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/JniLocal/id</p>"},{"location":"api/shark/-gc-root/-jni-local/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-jni-local/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/GcRoot/JniLocal/threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-jni-local/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p> <p>Corresponds to ThreadObject.threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-jni-monitor/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/JniMonitor</p>"},{"location":"api/shark/-gc-root/-jni-monitor/#jnimonitor","title":"JniMonitor","text":"<p>[jvm]\\ class JniMonitor(val id: Long, val stackTraceSerialNumber: Int, val stackDepth: Int) : GcRoot</p> <p>It\u2019s unclear what this is, documentation welcome.</p>"},{"location":"api/shark/-gc-root/-jni-monitor/#constructors","title":"Constructors","text":"JniMonitor [jvm]constructor(id: Long, stackTraceSerialNumber: Int, stackDepth: Int)"},{"location":"api/shark/-gc-root/-jni-monitor/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references. stackDepth [jvm]val stackDepth: Int stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int"},{"location":"api/shark/-gc-root/-jni-monitor/-jni-monitor/","title":"jni monitor","text":"<p>//leakcanary-repo/shark/GcRoot/JniMonitor/JniMonitor</p>"},{"location":"api/shark/-gc-root/-jni-monitor/-jni-monitor/#jnimonitor","title":"JniMonitor","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, stackDepth: Int)</p>"},{"location":"api/shark/-gc-root/-jni-monitor/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/JniMonitor/id</p>"},{"location":"api/shark/-gc-root/-jni-monitor/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-jni-monitor/stack-depth/","title":"Stack depth","text":"<p>//leakcanary-repo/shark/GcRoot/JniMonitor/stackDepth</p>"},{"location":"api/shark/-gc-root/-jni-monitor/stack-depth/#stackdepth","title":"stackDepth","text":"<p>[jvm]\\ val stackDepth: Int</p>"},{"location":"api/shark/-gc-root/-jni-monitor/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/GcRoot/JniMonitor/stackTraceSerialNumber</p>"},{"location":"api/shark/-gc-root/-jni-monitor/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-gc-root/-monitor-used/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/MonitorUsed</p>"},{"location":"api/shark/-gc-root/-monitor-used/#monitorused","title":"MonitorUsed","text":"<p>[jvm]\\ class MonitorUsed(val id: Long) : GcRoot</p> <p>Everything that called the wait() or notify() methods, or that is synchronized.</p>"},{"location":"api/shark/-gc-root/-monitor-used/#constructors","title":"Constructors","text":"MonitorUsed [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-monitor-used/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-monitor-used/-monitor-used/","title":"monitor used","text":"<p>//leakcanary-repo/shark/GcRoot/MonitorUsed/MonitorUsed</p>"},{"location":"api/shark/-gc-root/-monitor-used/-monitor-used/#monitorused","title":"MonitorUsed","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-monitor-used/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/MonitorUsed/id</p>"},{"location":"api/shark/-gc-root/-monitor-used/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-native-stack/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/NativeStack</p>"},{"location":"api/shark/-gc-root/-native-stack/#nativestack","title":"NativeStack","text":"<p>[jvm]\\ class NativeStack(val id: Long, val threadSerialNumber: Int) : GcRoot</p> <p>Input or output parameters in native code</p>"},{"location":"api/shark/-gc-root/-native-stack/#constructors","title":"Constructors","text":"NativeStack [jvm]constructor(id: Long, threadSerialNumber: Int)"},{"location":"api/shark/-gc-root/-native-stack/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references. threadSerialNumber [jvm]val threadSerialNumber: IntCorresponds to ThreadObject.threadSerialNumber Note: the corresponding thread is sometimes not found, see: https://issuetracker.google.com/issues/122713143"},{"location":"api/shark/-gc-root/-native-stack/-native-stack/","title":"native stack","text":"<p>//leakcanary-repo/shark/GcRoot/NativeStack/NativeStack</p>"},{"location":"api/shark/-gc-root/-native-stack/-native-stack/#nativestack","title":"NativeStack","text":"<p>[jvm]\\ constructor(id: Long, threadSerialNumber: Int)</p>"},{"location":"api/shark/-gc-root/-native-stack/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/NativeStack/id</p>"},{"location":"api/shark/-gc-root/-native-stack/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-native-stack/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/GcRoot/NativeStack/threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-native-stack/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p> <p>Corresponds to ThreadObject.threadSerialNumber Note: the corresponding thread is sometimes not found, see: https://issuetracker.google.com/issues/122713143</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/ReferenceCleanup</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/#referencecleanup","title":"ReferenceCleanup","text":"<p>[jvm]\\ class ReferenceCleanup(val id: Long) : GcRoot</p> <p>It\u2019s unclear what this is, documentation welcome.</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/#constructors","title":"Constructors","text":"ReferenceCleanup [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-reference-cleanup/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-reference-cleanup/-reference-cleanup/","title":"reference cleanup","text":"<p>//leakcanary-repo/shark/GcRoot/ReferenceCleanup/ReferenceCleanup</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/-reference-cleanup/#referencecleanup","title":"ReferenceCleanup","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/ReferenceCleanup/id</p>"},{"location":"api/shark/-gc-root/-reference-cleanup/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-sticky-class/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/StickyClass</p>"},{"location":"api/shark/-gc-root/-sticky-class/#stickyclass","title":"StickyClass","text":"<p>[jvm]\\ class StickyClass(val id: Long) : GcRoot</p> <p>A system class</p>"},{"location":"api/shark/-gc-root/-sticky-class/#constructors","title":"Constructors","text":"StickyClass [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-sticky-class/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-sticky-class/-sticky-class/","title":"sticky class","text":"<p>//leakcanary-repo/shark/GcRoot/StickyClass/StickyClass</p>"},{"location":"api/shark/-gc-root/-sticky-class/-sticky-class/#stickyclass","title":"StickyClass","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-sticky-class/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/StickyClass/id</p>"},{"location":"api/shark/-gc-root/-sticky-class/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-thread-block/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadBlock</p>"},{"location":"api/shark/-gc-root/-thread-block/#threadblock","title":"ThreadBlock","text":"<p>[jvm]\\ class ThreadBlock(val id: Long, val threadSerialNumber: Int) : GcRoot</p>"},{"location":"api/shark/-gc-root/-thread-block/#constructors","title":"Constructors","text":"ThreadBlock [jvm]constructor(id: Long, threadSerialNumber: Int)"},{"location":"api/shark/-gc-root/-thread-block/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references. threadSerialNumber [jvm]val threadSerialNumber: IntCorresponds to ThreadObject.threadSerialNumber"},{"location":"api/shark/-gc-root/-thread-block/-thread-block/","title":"thread block","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadBlock/ThreadBlock</p>"},{"location":"api/shark/-gc-root/-thread-block/-thread-block/#threadblock","title":"ThreadBlock","text":"<p>[jvm]\\ constructor(id: Long, threadSerialNumber: Int)</p>"},{"location":"api/shark/-gc-root/-thread-block/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadBlock/id</p>"},{"location":"api/shark/-gc-root/-thread-block/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-thread-block/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadBlock/threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-thread-block/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p> <p>Corresponds to ThreadObject.threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-thread-object/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadObject</p>"},{"location":"api/shark/-gc-root/-thread-object/#threadobject","title":"ThreadObject","text":"<p>[jvm]\\ class ThreadObject(val id: Long, val threadSerialNumber: Int, val stackTraceSerialNumber: Int) : GcRoot</p> <p>A thread.</p> <p>Added at https://android.googlesource.com/platform/tools/base/+/c0f0d528c155cab32e372dac77370569a386245c</p>"},{"location":"api/shark/-gc-root/-thread-object/#constructors","title":"Constructors","text":"ThreadObject [jvm]constructor(id: Long, threadSerialNumber: Int, stackTraceSerialNumber: Int)"},{"location":"api/shark/-gc-root/-thread-object/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references. stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int threadSerialNumber [jvm]val threadSerialNumber: Int"},{"location":"api/shark/-gc-root/-thread-object/-thread-object/","title":"thread object","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadObject/ThreadObject</p>"},{"location":"api/shark/-gc-root/-thread-object/-thread-object/#threadobject","title":"ThreadObject","text":"<p>[jvm]\\ constructor(id: Long, threadSerialNumber: Int, stackTraceSerialNumber: Int)</p>"},{"location":"api/shark/-gc-root/-thread-object/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadObject/id</p>"},{"location":"api/shark/-gc-root/-thread-object/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-thread-object/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadObject/stackTraceSerialNumber</p>"},{"location":"api/shark/-gc-root/-thread-object/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-gc-root/-thread-object/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/GcRoot/ThreadObject/threadSerialNumber</p>"},{"location":"api/shark/-gc-root/-thread-object/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p>"},{"location":"api/shark/-gc-root/-unknown/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/Unknown</p>"},{"location":"api/shark/-gc-root/-unknown/#unknown","title":"Unknown","text":"<p>[jvm]\\ class Unknown(val id: Long) : GcRoot</p> <p>An unknown gc root.</p>"},{"location":"api/shark/-gc-root/-unknown/#constructors","title":"Constructors","text":"Unknown [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-unknown/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-unknown/-unknown/","title":"unknown","text":"<p>//leakcanary-repo/shark/GcRoot/Unknown/Unknown</p>"},{"location":"api/shark/-gc-root/-unknown/-unknown/#unknown","title":"Unknown","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-unknown/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/Unknown/id</p>"},{"location":"api/shark/-gc-root/-unknown/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-unreachable/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/Unreachable</p>"},{"location":"api/shark/-gc-root/-unreachable/#unreachable","title":"Unreachable","text":"<p>[jvm]\\ class Unreachable(val id: Long) : GcRoot</p> <p>An object that is unreachable from any other root, but not a root itself.</p>"},{"location":"api/shark/-gc-root/-unreachable/#constructors","title":"Constructors","text":"Unreachable [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-unreachable/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-unreachable/-unreachable/","title":"unreachable","text":"<p>//leakcanary-repo/shark/GcRoot/Unreachable/Unreachable</p>"},{"location":"api/shark/-gc-root/-unreachable/-unreachable/#unreachable","title":"Unreachable","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-unreachable/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/Unreachable/id</p>"},{"location":"api/shark/-gc-root/-unreachable/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root/-vm-internal/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRoot/VmInternal</p>"},{"location":"api/shark/-gc-root/-vm-internal/#vminternal","title":"VmInternal","text":"<p>[jvm]\\ class VmInternal(val id: Long) : GcRoot</p> <p>It\u2019s unclear what this is, documentation welcome.</p>"},{"location":"api/shark/-gc-root/-vm-internal/#constructors","title":"Constructors","text":"VmInternal [jvm]constructor(id: Long)"},{"location":"api/shark/-gc-root/-vm-internal/#properties","title":"Properties","text":"Name Summary id [jvm]open override val id: LongThe object id of the object that this gc root references."},{"location":"api/shark/-gc-root/-vm-internal/-vm-internal/","title":"vm internal","text":"<p>//leakcanary-repo/shark/GcRoot/VmInternal/VmInternal</p>"},{"location":"api/shark/-gc-root/-vm-internal/-vm-internal/#vminternal","title":"VmInternal","text":"<p>[jvm]\\ constructor(id: Long)</p>"},{"location":"api/shark/-gc-root/-vm-internal/id/","title":"Id","text":"<p>//leakcanary-repo/shark/GcRoot/VmInternal/id</p>"},{"location":"api/shark/-gc-root/-vm-internal/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p> <p>The object id of the object that this gc root references.</p>"},{"location":"api/shark/-gc-root-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRootProvider</p>"},{"location":"api/shark/-gc-root-provider/#gcrootprovider","title":"GcRootProvider","text":"<p>fun interface GcRootProvider</p>"},{"location":"api/shark/-gc-root-provider/#inheritors","title":"Inheritors","text":"MatchingGcRootProvider"},{"location":"api/shark/-gc-root-provider/#functions","title":"Functions","text":"Name Summary provideGcRoots [jvm]abstract fun provideGcRoots(graph: HeapGraph): Sequence<GcRootReference>Provides a sequence of GC Roots to traverse the graph from, ideally in a stable order."},{"location":"api/shark/-gc-root-provider/provide-gc-roots/","title":"Provide gc roots","text":"<p>//leakcanary-repo/shark/GcRootProvider/provideGcRoots</p>"},{"location":"api/shark/-gc-root-provider/provide-gc-roots/#providegcroots","title":"provideGcRoots","text":"<p>[jvm]\\ abstract fun provideGcRoots(graph: HeapGraph): Sequence<GcRootReference></p> <p>Provides a sequence of GC Roots to traverse the graph from, ideally in a stable order.</p>"},{"location":"api/shark/-gc-root-reference/","title":"Index","text":"<p>//leakcanary-repo/shark/GcRootReference</p>"},{"location":"api/shark/-gc-root-reference/#gcrootreference","title":"GcRootReference","text":"<p>[jvm]\\ class GcRootReference(val gcRoot: GcRoot, val isLowPriority: Boolean, val matchedLibraryLeak: LibraryLeakReferenceMatcher?)</p>"},{"location":"api/shark/-gc-root-reference/#constructors","title":"Constructors","text":"GcRootReference [jvm]constructor(gcRoot: GcRoot, isLowPriority: Boolean, matchedLibraryLeak: LibraryLeakReferenceMatcher?)"},{"location":"api/shark/-gc-root-reference/#properties","title":"Properties","text":"Name Summary gcRoot [jvm]val gcRoot: GcRoot isLowPriority [jvm]val isLowPriority: Boolean matchedLibraryLeak [jvm]val matchedLibraryLeak: LibraryLeakReferenceMatcher?"},{"location":"api/shark/-gc-root-reference/-gc-root-reference/","title":"gc root reference","text":"<p>//leakcanary-repo/shark/GcRootReference/GcRootReference</p>"},{"location":"api/shark/-gc-root-reference/-gc-root-reference/#gcrootreference","title":"GcRootReference","text":"<p>[jvm]\\ constructor(gcRoot: GcRoot, isLowPriority: Boolean, matchedLibraryLeak: LibraryLeakReferenceMatcher?)</p>"},{"location":"api/shark/-gc-root-reference/gc-root/","title":"Gc root","text":"<p>//leakcanary-repo/shark/GcRootReference/gcRoot</p>"},{"location":"api/shark/-gc-root-reference/gc-root/#gcroot","title":"gcRoot","text":"<p>[jvm]\\ val gcRoot: GcRoot</p>"},{"location":"api/shark/-gc-root-reference/is-low-priority/","title":"Is low priority","text":"<p>//leakcanary-repo/shark/GcRootReference/isLowPriority</p>"},{"location":"api/shark/-gc-root-reference/is-low-priority/#islowpriority","title":"isLowPriority","text":"<p>[jvm]\\ val isLowPriority: Boolean</p>"},{"location":"api/shark/-gc-root-reference/matched-library-leak/","title":"Matched library leak","text":"<p>//leakcanary-repo/shark/GcRootReference/matchedLibraryLeak</p>"},{"location":"api/shark/-gc-root-reference/matched-library-leak/#matchedlibraryleak","title":"matchedLibraryLeak","text":"<p>[jvm]\\ val matchedLibraryLeak: LibraryLeakReferenceMatcher?</p>"},{"location":"api/shark/-graph-context/","title":"Index","text":"<p>//leakcanary-repo/shark/GraphContext</p>"},{"location":"api/shark/-graph-context/#graphcontext","title":"GraphContext","text":"<p>[jvm]\\ class GraphContext</p> <p>In memory store that can be used to store objects in a given HeapGraph instance. This is a simple MutableMap of String to Any, but with unsafe generics access.</p>"},{"location":"api/shark/-graph-context/#constructors","title":"Constructors","text":"GraphContext [jvm]constructor()"},{"location":"api/shark/-graph-context/#functions","title":"Functions","text":"Name Summary contains [jvm]operator fun contains(key: String): Boolean get [jvm]operator fun <T> get(key: String): T? getOrPut [jvm]fun <T> getOrPut(key: String, defaultValue: () -> T): T minusAssign [jvm]operator fun minusAssign(key: String) set [jvm]operator fun <T> set(key: String, value: T)"},{"location":"api/shark/-graph-context/-graph-context/","title":"graph context","text":"<p>//leakcanary-repo/shark/GraphContext/GraphContext</p>"},{"location":"api/shark/-graph-context/-graph-context/#graphcontext","title":"GraphContext","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-graph-context/contains/","title":"Contains","text":"<p>//leakcanary-repo/shark/GraphContext/contains</p>"},{"location":"api/shark/-graph-context/contains/#contains","title":"contains","text":"<p>[jvm]\\ operator fun contains(key: String): Boolean</p>"},{"location":"api/shark/-graph-context/contains/#see-also","title":"See also","text":"MutableMap.containsKey"},{"location":"api/shark/-graph-context/get-or-put/","title":"Get or put","text":"<p>//leakcanary-repo/shark/GraphContext/getOrPut</p>"},{"location":"api/shark/-graph-context/get-or-put/#getorput","title":"getOrPut","text":"<p>[jvm]\\ fun <T> getOrPut(key: String, defaultValue: () -> T): T</p>"},{"location":"api/shark/-graph-context/get-or-put/#see-also","title":"See also","text":"getOrPut"},{"location":"api/shark/-graph-context/get/","title":"Get","text":"<p>//leakcanary-repo/shark/GraphContext/get</p>"},{"location":"api/shark/-graph-context/get/#get","title":"get","text":"<p>[jvm]\\ operator fun <T> get(key: String): T?</p>"},{"location":"api/shark/-graph-context/minus-assign/","title":"Minus assign","text":"<p>//leakcanary-repo/shark/GraphContext/minusAssign</p>"},{"location":"api/shark/-graph-context/minus-assign/#minusassign","title":"minusAssign","text":"<p>[jvm]\\ operator fun minusAssign(key: String)</p>"},{"location":"api/shark/-graph-context/minus-assign/#see-also","title":"See also","text":"MutableMap.remove"},{"location":"api/shark/-graph-context/set/","title":"Set","text":"<p>//leakcanary-repo/shark/GraphContext/set</p>"},{"location":"api/shark/-graph-context/set/#set","title":"set","text":"<p>[jvm]\\ operator fun <T> set(key: String, value: T)</p>"},{"location":"api/shark/-graph-context/set/#see-also","title":"See also","text":"set"},{"location":"api/shark/-heap-analysis/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysis</p>"},{"location":"api/shark/-heap-analysis/#heapanalysis","title":"HeapAnalysis","text":"<p>sealed class HeapAnalysis : Serializable</p> <p>The result of an analysis performed by HeapAnalyzer, either a HeapAnalysisSuccess or a HeapAnalysisFailure. This class is serializable however there are no guarantees of forward compatibility.</p>"},{"location":"api/shark/-heap-analysis/#inheritors","title":"Inheritors","text":"HeapAnalysisFailure HeapAnalysisSuccess"},{"location":"api/shark/-heap-analysis/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-analysis/#properties","title":"Properties","text":"Name Summary analysisDurationMillis [jvm]abstract val analysisDurationMillis: LongTotal time spent analyzing the heap. createdAtTimeMillis [jvm]abstract val createdAtTimeMillis: LongThe System.currentTimeMillis when this HeapAnalysis instance was created. dumpDurationMillis [jvm]abstract val dumpDurationMillis: LongTotal time spent dumping the heap. heapDumpFile [jvm]abstract val heapDumpFile: FileThe hprof file that was analyzed."},{"location":"api/shark/-heap-analysis/analysis-duration-millis/","title":"Analysis duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysis/analysisDurationMillis</p>"},{"location":"api/shark/-heap-analysis/analysis-duration-millis/#analysisdurationmillis","title":"analysisDurationMillis","text":"<p>[jvm]\\ abstract val analysisDurationMillis: Long</p> <p>Total time spent analyzing the heap.</p>"},{"location":"api/shark/-heap-analysis/created-at-time-millis/","title":"Created at time millis","text":"<p>//leakcanary-repo/shark/HeapAnalysis/createdAtTimeMillis</p>"},{"location":"api/shark/-heap-analysis/created-at-time-millis/#createdattimemillis","title":"createdAtTimeMillis","text":"<p>[jvm]\\ abstract val createdAtTimeMillis: Long</p> <p>The System.currentTimeMillis when this HeapAnalysis instance was created.</p>"},{"location":"api/shark/-heap-analysis/dump-duration-millis/","title":"Dump duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysis/dumpDurationMillis</p>"},{"location":"api/shark/-heap-analysis/dump-duration-millis/#dumpdurationmillis","title":"dumpDurationMillis","text":"<p>[jvm]\\ abstract val dumpDurationMillis: Long</p> <p>Total time spent dumping the heap.</p>"},{"location":"api/shark/-heap-analysis/heap-dump-file/","title":"Heap dump file","text":"<p>//leakcanary-repo/shark/HeapAnalysis/heapDumpFile</p>"},{"location":"api/shark/-heap-analysis/heap-dump-file/#heapdumpfile","title":"heapDumpFile","text":"<p>[jvm]\\ abstract val heapDumpFile: File</p> <p>The hprof file that was analyzed.</p>"},{"location":"api/shark/-heap-analysis/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysis/Companion</p>"},{"location":"api/shark/-heap-analysis/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-analysis/-companion/#properties","title":"Properties","text":"Name Summary DUMP_DURATION_UNKNOWN [jvm]const val DUMP_DURATION_UNKNOWN: Long"},{"location":"api/shark/-heap-analysis/-companion/-d-u-m-p_-d-u-r-a-t-i-o-n_-u-n-k-n-o-w-n/","title":"d u m p d u r a t i o n u n k n o w n","text":"<p>//leakcanary-repo/shark/HeapAnalysis/Companion/DUMP_DURATION_UNKNOWN</p>"},{"location":"api/shark/-heap-analysis/-companion/-d-u-m-p_-d-u-r-a-t-i-o-n_-u-n-k-n-o-w-n/#dump_duration_unknown","title":"DUMP_DURATION_UNKNOWN","text":"<p>[jvm]\\ const val DUMP_DURATION_UNKNOWN: Long</p>"},{"location":"api/shark/-heap-analysis-exception/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisException</p>"},{"location":"api/shark/-heap-analysis-exception/#heapanalysisexception","title":"HeapAnalysisException","text":"<p>[jvm]\\ class HeapAnalysisException(cause: Throwable) : RuntimeException</p>"},{"location":"api/shark/-heap-analysis-exception/#constructors","title":"Constructors","text":"HeapAnalysisException [jvm]constructor(cause: Throwable)"},{"location":"api/shark/-heap-analysis-exception/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-analysis-exception/#functions","title":"Functions","text":"Name Summary addSuppressed [jvm]fun addSuppressed(p0: Throwable) fillInStackTrace [jvm]open fun fillInStackTrace(): Throwable getLocalizedMessage [jvm]open fun getLocalizedMessage(): String getStackTrace [jvm]open fun getStackTrace(): Array<StackTraceElement> getSuppressed [jvm]fun getSuppressed(): Array<Throwable> initCause [jvm]open fun initCause(p0: Throwable): Throwable printStackTrace [jvm]open fun printStackTrace()open fun printStackTrace(p0: PrintStream)open fun printStackTrace(p0: PrintWriter) setStackTrace [jvm]open fun setStackTrace(p0: Array<StackTraceElement>) toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-analysis-exception/#properties","title":"Properties","text":"Name Summary cause [jvm]open val cause: Throwable? message [jvm]open val message: String?"},{"location":"api/shark/-heap-analysis-exception/-heap-analysis-exception/","title":"heap analysis exception","text":"<p>//leakcanary-repo/shark/HeapAnalysisException/HeapAnalysisException</p>"},{"location":"api/shark/-heap-analysis-exception/-heap-analysis-exception/#heapanalysisexception","title":"HeapAnalysisException","text":"<p>[jvm]\\ constructor(cause: Throwable)</p>"},{"location":"api/shark/-heap-analysis-exception/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapAnalysisException/toString</p>"},{"location":"api/shark/-heap-analysis-exception/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-analysis-exception/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisException/Companion</p>"},{"location":"api/shark/-heap-analysis-exception/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-analysis-failure/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure</p>"},{"location":"api/shark/-heap-analysis-failure/#heapanalysisfailure","title":"HeapAnalysisFailure","text":"<p>[jvm]\\ data class HeapAnalysisFailure(val heapDumpFile: File, val createdAtTimeMillis: Long, val dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: Long, val exception: HeapAnalysisException) : HeapAnalysis</p> <p>The analysis performed by HeapAnalyzer did not complete successfully.</p>"},{"location":"api/shark/-heap-analysis-failure/#constructors","title":"Constructors","text":"HeapAnalysisFailure [jvm]constructor(heapDumpFile: File, createdAtTimeMillis: Long, dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, analysisDurationMillis: Long, exception: HeapAnalysisException)"},{"location":"api/shark/-heap-analysis-failure/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-analysis-failure/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-analysis-failure/#properties","title":"Properties","text":"Name Summary analysisDurationMillis [jvm]open override val analysisDurationMillis: LongTotal time spent analyzing the heap. createdAtTimeMillis [jvm]open override val createdAtTimeMillis: LongThe System.currentTimeMillis when this HeapAnalysis instance was created. dumpDurationMillis [jvm]open override val dumpDurationMillis: LongTotal time spent dumping the heap. exception [jvm]val exception: HeapAnalysisExceptionAn exception wrapping the actual exception that was thrown. heapDumpFile [jvm]open override val heapDumpFile: FileThe hprof file that was analyzed."},{"location":"api/shark/-heap-analysis-failure/-heap-analysis-failure/","title":"heap analysis failure","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/HeapAnalysisFailure</p>"},{"location":"api/shark/-heap-analysis-failure/-heap-analysis-failure/#heapanalysisfailure","title":"HeapAnalysisFailure","text":"<p>[jvm]\\ constructor(heapDumpFile: File, createdAtTimeMillis: Long, dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, analysisDurationMillis: Long, exception: HeapAnalysisException)</p>"},{"location":"api/shark/-heap-analysis-failure/analysis-duration-millis/","title":"Analysis duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/analysisDurationMillis</p>"},{"location":"api/shark/-heap-analysis-failure/analysis-duration-millis/#analysisdurationmillis","title":"analysisDurationMillis","text":"<p>[jvm]\\ open override val analysisDurationMillis: Long</p> <p>Total time spent analyzing the heap.</p>"},{"location":"api/shark/-heap-analysis-failure/created-at-time-millis/","title":"Created at time millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/createdAtTimeMillis</p>"},{"location":"api/shark/-heap-analysis-failure/created-at-time-millis/#createdattimemillis","title":"createdAtTimeMillis","text":"<p>[jvm]\\ open override val createdAtTimeMillis: Long</p> <p>The System.currentTimeMillis when this HeapAnalysis instance was created.</p>"},{"location":"api/shark/-heap-analysis-failure/dump-duration-millis/","title":"Dump duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/dumpDurationMillis</p>"},{"location":"api/shark/-heap-analysis-failure/dump-duration-millis/#dumpdurationmillis","title":"dumpDurationMillis","text":"<p>[jvm]\\ open override val dumpDurationMillis: Long</p> <p>Total time spent dumping the heap.</p>"},{"location":"api/shark/-heap-analysis-failure/exception/","title":"Exception","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/exception</p>"},{"location":"api/shark/-heap-analysis-failure/exception/#exception","title":"exception","text":"<p>[jvm]\\ val exception: HeapAnalysisException</p> <p>An exception wrapping the actual exception that was thrown.</p>"},{"location":"api/shark/-heap-analysis-failure/heap-dump-file/","title":"Heap dump file","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/heapDumpFile</p>"},{"location":"api/shark/-heap-analysis-failure/heap-dump-file/#heapdumpfile","title":"heapDumpFile","text":"<p>[jvm]\\ open override val heapDumpFile: File</p> <p>The hprof file that was analyzed.</p>"},{"location":"api/shark/-heap-analysis-failure/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/toString</p>"},{"location":"api/shark/-heap-analysis-failure/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-analysis-failure/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisFailure/Companion</p>"},{"location":"api/shark/-heap-analysis-failure/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-analysis-success/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess</p>"},{"location":"api/shark/-heap-analysis-success/#heapanalysissuccess","title":"HeapAnalysisSuccess","text":"<p>[jvm]\\ data class HeapAnalysisSuccess(val heapDumpFile: File, val createdAtTimeMillis: Long, val dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, val analysisDurationMillis: Long, val metadata: Map<String, String>, val applicationLeaks: List<ApplicationLeak>, val libraryLeaks: List<LibraryLeak>, val unreachableObjects: List<LeakTraceObject>) : HeapAnalysis</p> <p>The result of a successful heap analysis performed by HeapAnalyzer.</p>"},{"location":"api/shark/-heap-analysis-success/#constructors","title":"Constructors","text":"HeapAnalysisSuccess [jvm]constructor(heapDumpFile: File, createdAtTimeMillis: Long, dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, analysisDurationMillis: Long, metadata: Map<String, String>, applicationLeaks: List<ApplicationLeak>, libraryLeaks: List<LibraryLeak>, unreachableObjects: List<LeakTraceObject>)"},{"location":"api/shark/-heap-analysis-success/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-analysis-success/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-analysis-success/#properties","title":"Properties","text":"Name Summary allLeaks [jvm]val allLeaks: Sequence<Leak>The list of Leak found in the heap dump by HeapAnalyzer, ie all applicationLeaks and all libraryLeaks in one list. analysisDurationMillis [jvm]open override val analysisDurationMillis: LongTotal time spent analyzing the heap. applicationLeaks [jvm]val applicationLeaks: List<ApplicationLeak>The list of ApplicationLeak found in the heap dump by HeapAnalyzer. assertionTag [androidJvm]val HeapAnalysisSuccess.assertionTag: String? createdAtTimeMillis [jvm]open override val createdAtTimeMillis: LongThe System.currentTimeMillis when this HeapAnalysis instance was created. dumpDurationMillis [jvm]open override val dumpDurationMillis: LongTotal time spent dumping the heap. heapDumpFile [jvm]open override val heapDumpFile: FileThe hprof file that was analyzed. libraryLeaks [jvm]val libraryLeaks: List<LibraryLeak>The list of LibraryLeak found in the heap dump by HeapAnalyzer. metadata [jvm]val metadata: Map<String, String> totalDurationMillis [androidJvm]val HeapAnalysisSuccess.totalDurationMillis: Int? unreachableObjects [jvm]val unreachableObjects: List<LeakTraceObject> waitForRetainedDurationMillis [androidJvm]val HeapAnalysisSuccess.waitForRetainedDurationMillis: Int?"},{"location":"api/shark/-heap-analysis-success/-heap-analysis-success/","title":"heap analysis success","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/HeapAnalysisSuccess</p>"},{"location":"api/shark/-heap-analysis-success/-heap-analysis-success/#heapanalysissuccess","title":"HeapAnalysisSuccess","text":"<p>[jvm]\\ constructor(heapDumpFile: File, createdAtTimeMillis: Long, dumpDurationMillis: Long = DUMP_DURATION_UNKNOWN, analysisDurationMillis: Long, metadata: Map<String, String>, applicationLeaks: List<ApplicationLeak>, libraryLeaks: List<LibraryLeak>, unreachableObjects: List<LeakTraceObject>)</p>"},{"location":"api/shark/-heap-analysis-success/all-leaks/","title":"All leaks","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/allLeaks</p>"},{"location":"api/shark/-heap-analysis-success/all-leaks/#allleaks","title":"allLeaks","text":"<p>[jvm]\\ val allLeaks: Sequence<Leak></p> <p>The list of Leak found in the heap dump by HeapAnalyzer, ie all applicationLeaks and all libraryLeaks in one list.</p>"},{"location":"api/shark/-heap-analysis-success/analysis-duration-millis/","title":"Analysis duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/analysisDurationMillis</p>"},{"location":"api/shark/-heap-analysis-success/analysis-duration-millis/#analysisdurationmillis","title":"analysisDurationMillis","text":"<p>[jvm]\\ open override val analysisDurationMillis: Long</p> <p>Total time spent analyzing the heap.</p>"},{"location":"api/shark/-heap-analysis-success/application-leaks/","title":"Application leaks","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/applicationLeaks</p>"},{"location":"api/shark/-heap-analysis-success/application-leaks/#applicationleaks","title":"applicationLeaks","text":"<p>[jvm]\\ val applicationLeaks: List<ApplicationLeak></p> <p>The list of ApplicationLeak found in the heap dump by HeapAnalyzer.</p>"},{"location":"api/shark/-heap-analysis-success/created-at-time-millis/","title":"Created at time millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/createdAtTimeMillis</p>"},{"location":"api/shark/-heap-analysis-success/created-at-time-millis/#createdattimemillis","title":"createdAtTimeMillis","text":"<p>[jvm]\\ open override val createdAtTimeMillis: Long</p> <p>The System.currentTimeMillis when this HeapAnalysis instance was created.</p>"},{"location":"api/shark/-heap-analysis-success/dump-duration-millis/","title":"Dump duration millis","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/dumpDurationMillis</p>"},{"location":"api/shark/-heap-analysis-success/dump-duration-millis/#dumpdurationmillis","title":"dumpDurationMillis","text":"<p>[jvm]\\ open override val dumpDurationMillis: Long</p> <p>Total time spent dumping the heap.</p>"},{"location":"api/shark/-heap-analysis-success/heap-dump-file/","title":"Heap dump file","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/heapDumpFile</p>"},{"location":"api/shark/-heap-analysis-success/heap-dump-file/#heapdumpfile","title":"heapDumpFile","text":"<p>[jvm]\\ open override val heapDumpFile: File</p> <p>The hprof file that was analyzed.</p>"},{"location":"api/shark/-heap-analysis-success/library-leaks/","title":"Library leaks","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/libraryLeaks</p>"},{"location":"api/shark/-heap-analysis-success/library-leaks/#libraryleaks","title":"libraryLeaks","text":"<p>[jvm]\\ val libraryLeaks: List<LibraryLeak></p> <p>The list of LibraryLeak found in the heap dump by HeapAnalyzer.</p>"},{"location":"api/shark/-heap-analysis-success/metadata/","title":"Metadata","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/metadata</p>"},{"location":"api/shark/-heap-analysis-success/metadata/#metadata","title":"metadata","text":"<p>[jvm]\\ val metadata: Map<String, String></p>"},{"location":"api/shark/-heap-analysis-success/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/toString</p>"},{"location":"api/shark/-heap-analysis-success/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-analysis-success/unreachable-objects/","title":"Unreachable objects","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/unreachableObjects</p>"},{"location":"api/shark/-heap-analysis-success/unreachable-objects/#unreachableobjects","title":"unreachableObjects","text":"<p>[jvm]\\ val unreachableObjects: List<LeakTraceObject></p>"},{"location":"api/shark/-heap-analysis-success/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalysisSuccess/Companion</p>"},{"location":"api/shark/-heap-analysis-success/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-analyzer/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapAnalyzer</p>"},{"location":"api/shark/-heap-analyzer/#heapanalyzer","title":"HeapAnalyzer","text":"<p>[jvm]\\ class HeapAnalyzer(listener: OnAnalysisProgressListener)</p> <p>Analyzes heap dumps to look for leaks.</p>"},{"location":"api/shark/-heap-analyzer/#constructors","title":"Constructors","text":"HeapAnalyzer [jvm]constructor(listener: OnAnalysisProgressListener)"},{"location":"api/shark/-heap-analyzer/#functions","title":"Functions","text":"Name Summary analyze [jvm]fun analyze(heapDumpFile: File, graph: HeapGraph, leakingObjectFinder: LeakingObjectFinder, referenceMatchers: List<ReferenceMatcher> = emptyList(), computeRetainedHeapSize: Boolean = false, objectInspectors: List<ObjectInspector> = emptyList(), metadataExtractor: MetadataExtractor = MetadataExtractor.NO_OP): HeapAnalysisSearches the heap dump for leaking instances and then computes the shortest strong reference path from those instances to the GC roots."},{"location":"api/shark/-heap-analyzer/-heap-analyzer/","title":"heap analyzer","text":"<p>//leakcanary-repo/shark/HeapAnalyzer/HeapAnalyzer</p>"},{"location":"api/shark/-heap-analyzer/-heap-analyzer/#heapanalyzer","title":"HeapAnalyzer","text":"<p>[jvm]\\ constructor(listener: OnAnalysisProgressListener)</p>"},{"location":"api/shark/-heap-analyzer/analyze/","title":"Analyze","text":"<p>//leakcanary-repo/shark/HeapAnalyzer/analyze</p>"},{"location":"api/shark/-heap-analyzer/analyze/#analyze","title":"analyze","text":"<p>[jvm]\\ fun analyze(heapDumpFile: File, graph: HeapGraph, leakingObjectFinder: LeakingObjectFinder, referenceMatchers: List<ReferenceMatcher> = emptyList(), computeRetainedHeapSize: Boolean = false, objectInspectors: List<ObjectInspector> = emptyList(), metadataExtractor: MetadataExtractor = MetadataExtractor.NO_OP): HeapAnalysis</p> <p>Searches the heap dump for leaking instances and then computes the shortest strong reference path from those instances to the GC roots.</p>"},{"location":"api/shark/-heap-diff/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapDiff</p>"},{"location":"api/shark/-heap-diff/#heapdiff","title":"HeapDiff","text":"<p>[jvm]\\ class HeapDiff(val traversalCount: Int, val shortestPathTree: ShortestPathObjectNode, val growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput) : HeapTraversalOutput</p>"},{"location":"api/shark/-heap-diff/#constructors","title":"Constructors","text":"HeapDiff [jvm]constructor(traversalCount: Int, shortestPathTree: ShortestPathObjectNode, growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput)"},{"location":"api/shark/-heap-diff/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-diff/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-diff/#properties","title":"Properties","text":"Name Summary growingObjects [jvm]val growingObjects: GrowingObjectNodesNodes that already existed in the previous traversal, still exist in this shortestPathTree, and have grown compared to the previous traversal. isGrowing [jvm]val isGrowing: Boolean scenarioLoopsPerGraph [jvm]open override val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. shortestPathTree [jvm]open override val shortestPathTree: ShortestPathObjectNodeA representation of the heap as a tree of shortest path from roots to each object in the heap, where: traversalCount [jvm]open override val traversalCount: Int"},{"location":"api/shark/-heap-diff/-heap-diff/","title":"heap diff","text":"<p>//leakcanary-repo/shark/HeapDiff/HeapDiff</p>"},{"location":"api/shark/-heap-diff/-heap-diff/#heapdiff","title":"HeapDiff","text":"<p>[jvm]\\ constructor(traversalCount: Int, shortestPathTree: ShortestPathObjectNode, growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput)</p>"},{"location":"api/shark/-heap-diff/growing-objects/","title":"Growing objects","text":"<p>//leakcanary-repo/shark/HeapDiff/growingObjects</p>"},{"location":"api/shark/-heap-diff/growing-objects/#growingobjects","title":"growingObjects","text":"<p>[jvm]\\ val growingObjects: GrowingObjectNodes</p> <p>Nodes that already existed in the previous traversal, still exist in this shortestPathTree, and have grown compared to the previous traversal.</p>"},{"location":"api/shark/-heap-diff/is-growing/","title":"Is growing","text":"<p>//leakcanary-repo/shark/HeapDiff/isGrowing</p>"},{"location":"api/shark/-heap-diff/is-growing/#isgrowing","title":"isGrowing","text":"<p>[jvm]\\ val isGrowing: Boolean</p>"},{"location":"api/shark/-heap-diff/scenario-loops-per-graph/","title":"Scenario loops per graph","text":"<p>//leakcanary-repo/shark/HeapDiff/scenarioLoopsPerGraph</p>"},{"location":"api/shark/-heap-diff/scenario-loops-per-graph/#scenarioloopspergraph","title":"scenarioLoopsPerGraph","text":"<p>[jvm]\\ open override val scenarioLoopsPerGraph: Int</p> <p>How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal.</p>"},{"location":"api/shark/-heap-diff/shortest-path-tree/","title":"Shortest path tree","text":"<p>//leakcanary-repo/shark/HeapDiff/shortestPathTree</p>"},{"location":"api/shark/-heap-diff/shortest-path-tree/#shortestpathtree","title":"shortestPathTree","text":"<p>[jvm]\\ open override val shortestPathTree: ShortestPathObjectNode</p> <p>A representation of the heap as a tree of shortest path from roots to each object in the heap, where:</p> <ul> <li>object identity is lost</li> <li>objects are grouped by identical path into a single node</li> <li> <p>Path element names are determined using the node & edge name to reach them (e.g. class name</p> </li> <li> <p>field name) as well as the class name of the reached object.</p> </li> </ul>"},{"location":"api/shark/-heap-diff/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapDiff/toString</p>"},{"location":"api/shark/-heap-diff/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-diff/traversal-count/","title":"Traversal count","text":"<p>//leakcanary-repo/shark/HeapDiff/traversalCount</p>"},{"location":"api/shark/-heap-diff/traversal-count/#traversalcount","title":"traversalCount","text":"<p>[jvm]\\ open override val traversalCount: Int</p>"},{"location":"api/shark/-heap-diff/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapDiff/Companion</p>"},{"location":"api/shark/-heap-diff/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-diff/-companion/#functions","title":"Functions","text":"Name Summary repeatingAndroidInProcessScenario [androidJvm]fun HeapDiff.Companion.repeatingAndroidInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = TargetContextHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forAndroidInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = true), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for Android in process tests, such as Espresso tests. repeatingJvmInProcessScenario [jvm]fun HeapDiff.Companion.repeatingJvmInProcessScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forJvmHeap(), heapDumpDirectoryProvider: HeapDumpDirectoryProvider = RepositoryRootHeapDumpDirectoryProvider( \"heap_dumps_object_growth\" ), heapDumper: HeapDumper = HeapDumper.forJvmInProcess() .withGc(gcTrigger = GcTrigger.inProcess()) .withDetectorWarmup(objectGrowthDetector, androidHeap = false), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose()): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for JVM in process tests. repeatingUiAutomatorScenario [androidJvm]fun HeapDiff.Companion.repeatingUiAutomatorScenario(objectGrowthDetector: ObjectGrowthDetector = ObjectGrowthDetector.forAndroidHeap(), dumpedAppPackageName: String = InstrumentationRegistry.getInstrumentation().targetContext.packageName, heapDumpDirectoryProvider: HeapDumpDirectoryProvider = AndroidDeviceTempHeapDumpDirectoryProvider( heapDumpDirectoryName = \"heap_dumps_object_growth_$dumpedAppPackageName\" ), heapDumper: HeapDumper = HeapDumper.forUiAutomatorAsShell( withGc = true, dumpedAppPackageName = dumpedAppPackageName ), heapDumpStorageStrategy: HeapDumpStorageStrategy = HeapDumpStorageStrategy.DeleteOnHeapDumpClose { heapDumpFile -> UiAutomatorShellFileDeleter.deleteFileUsingShell(heapDumpFile) }): RepeatingScenarioObjectGrowthDetectorCreates a RepeatingScenarioObjectGrowthDetector suitable for Android UI Automator tests."},{"location":"api/shark/-heap-dump-rule/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapDumpRule</p>"},{"location":"api/shark/-heap-dump-rule/#heapdumprule","title":"HeapDumpRule","text":"<p>[jvm]\\ class HeapDumpRule : ExternalResource</p>"},{"location":"api/shark/-heap-dump-rule/#constructors","title":"Constructors","text":"HeapDumpRule [jvm]constructor()"},{"location":"api/shark/-heap-dump-rule/#functions","title":"Functions","text":"Name Summary apply [jvm]open override fun apply(p0: Statement, p1: Description): Statement dumpHeap [jvm]fun dumpHeap(): File"},{"location":"api/shark/-heap-dump-rule/-heap-dump-rule/","title":"heap dump rule","text":"<p>//leakcanary-repo/shark/HeapDumpRule/HeapDumpRule</p>"},{"location":"api/shark/-heap-dump-rule/-heap-dump-rule/#heapdumprule","title":"HeapDumpRule","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-heap-dump-rule/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/shark/HeapDumpRule/dumpHeap</p>"},{"location":"api/shark/-heap-dump-rule/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ fun dumpHeap(): File</p>"},{"location":"api/shark/-heap-field/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapField</p>"},{"location":"api/shark/-heap-field/#heapfield","title":"HeapField","text":"<p>[jvm]\\ class HeapField(val declaringClass: HeapObject.HeapClass, val name: String, val value: HeapValue)</p> <p>Represents a static field or an instance field.</p>"},{"location":"api/shark/-heap-field/#constructors","title":"Constructors","text":"HeapField [jvm]constructor(declaringClass: HeapObject.HeapClass, name: String, value: HeapValue)"},{"location":"api/shark/-heap-field/#properties","title":"Properties","text":"Name Summary declaringClass [jvm]val declaringClass: HeapObject.HeapClassThe class this field was declared in. name [jvm]val name: StringName of the field value [jvm]val value: HeapValueValue of the field. Also see shorthands valueAsClass, valueAsInstance, valueAsObjectArray, valueAsPrimitiveArray. valueAsClass [jvm]val valueAsClass: HeapObject.HeapClass?Return a HeapClass is value references a class, and null otherwise. valueAsInstance [jvm]val valueAsInstance: HeapObject.HeapInstance?Return a HeapInstance is value references an instance, and null otherwise. valueAsObjectArray [jvm]val valueAsObjectArray: HeapObject.HeapObjectArray?Return a HeapObjectArray is value references an object array, and null otherwise. valueAsPrimitiveArray [jvm]val valueAsPrimitiveArray: HeapObject.HeapPrimitiveArray?Return a HeapPrimitiveArray is value references a primitive array, and null otherwise."},{"location":"api/shark/-heap-field/-heap-field/","title":"heap field","text":"<p>//leakcanary-repo/shark/HeapField/HeapField</p>"},{"location":"api/shark/-heap-field/-heap-field/#heapfield","title":"HeapField","text":"<p>[jvm]\\ constructor(declaringClass: HeapObject.HeapClass, name: String, value: HeapValue)</p>"},{"location":"api/shark/-heap-field/declaring-class/","title":"Declaring class","text":"<p>//leakcanary-repo/shark/HeapField/declaringClass</p>"},{"location":"api/shark/-heap-field/declaring-class/#declaringclass","title":"declaringClass","text":"<p>[jvm]\\ val declaringClass: HeapObject.HeapClass</p> <p>The class this field was declared in.</p>"},{"location":"api/shark/-heap-field/name/","title":"Name","text":"<p>//leakcanary-repo/shark/HeapField/name</p>"},{"location":"api/shark/-heap-field/name/#name","title":"name","text":"<p>[jvm]\\ val name: String</p> <p>Name of the field</p>"},{"location":"api/shark/-heap-field/value-as-class/","title":"Value as class","text":"<p>//leakcanary-repo/shark/HeapField/valueAsClass</p>"},{"location":"api/shark/-heap-field/value-as-class/#valueasclass","title":"valueAsClass","text":"<p>[jvm]\\ val valueAsClass: HeapObject.HeapClass?</p> <p>Return a HeapClass is value references a class, and null otherwise.</p>"},{"location":"api/shark/-heap-field/value-as-instance/","title":"Value as instance","text":"<p>//leakcanary-repo/shark/HeapField/valueAsInstance</p>"},{"location":"api/shark/-heap-field/value-as-instance/#valueasinstance","title":"valueAsInstance","text":"<p>[jvm]\\ val valueAsInstance: HeapObject.HeapInstance?</p> <p>Return a HeapInstance is value references an instance, and null otherwise.</p>"},{"location":"api/shark/-heap-field/value-as-object-array/","title":"Value as object array","text":"<p>//leakcanary-repo/shark/HeapField/valueAsObjectArray</p>"},{"location":"api/shark/-heap-field/value-as-object-array/#valueasobjectarray","title":"valueAsObjectArray","text":"<p>[jvm]\\ val valueAsObjectArray: HeapObject.HeapObjectArray?</p> <p>Return a HeapObjectArray is value references an object array, and null otherwise.</p>"},{"location":"api/shark/-heap-field/value-as-primitive-array/","title":"Value as primitive array","text":"<p>//leakcanary-repo/shark/HeapField/valueAsPrimitiveArray</p>"},{"location":"api/shark/-heap-field/value-as-primitive-array/#valueasprimitivearray","title":"valueAsPrimitiveArray","text":"<p>[jvm]\\ val valueAsPrimitiveArray: HeapObject.HeapPrimitiveArray?</p> <p>Return a HeapPrimitiveArray is value references a primitive array, and null otherwise.</p>"},{"location":"api/shark/-heap-field/value/","title":"Value","text":"<p>//leakcanary-repo/shark/HeapField/value</p>"},{"location":"api/shark/-heap-field/value/#value","title":"value","text":"<p>[jvm]\\ val value: HeapValue</p> <p>Value of the field. Also see shorthands valueAsClass, valueAsInstance, valueAsObjectArray, valueAsPrimitiveArray.</p>"},{"location":"api/shark/-heap-graph/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapGraph</p>"},{"location":"api/shark/-heap-graph/#heapgraph","title":"HeapGraph","text":"<p>interface HeapGraph</p> <p>Enables navigation through the heap graph of objects.</p>"},{"location":"api/shark/-heap-graph/#inheritors","title":"Inheritors","text":"CloseableHeapGraph"},{"location":"api/shark/-heap-graph/#functions","title":"Functions","text":"Name Summary findClassByName [jvm]abstract fun findClassByName(className: String): HeapObject.HeapClass?Returns the HeapClass corresponding to the provided className, or null if the class cannot be found. findHeapDumpIndex [jvm]abstract fun findHeapDumpIndex(objectId: Long): IntReturns the 1-based index in the heap dump of the object corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByHeapDumpIndex [jvm]abstract fun findObjectByHeapDumpIndex(heapDumpIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided heapDumpIndex, and throws IllegalArgumentException if heapDumpIndex is less than 1 or more than objectCount. findObjectById [jvm]abstract fun findObjectById(objectId: Long): HeapObjectReturns the HeapObject corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByIdOrNull [jvm]abstract fun findObjectByIdOrNull(objectId: Long): HeapObject?Returns the HeapObject corresponding to the provided objectId or null if it cannot be found. findObjectByIndex [jvm]abstract fun findObjectByIndex(objectIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided objectIndex, and throws IllegalArgumentException if objectIndex is less than 0 or more than objectCount - 1. objectExists [jvm]abstract fun objectExists(objectId: Long): BooleanReturns true if the provided objectId exists in the heap dump."},{"location":"api/shark/-heap-graph/#properties","title":"Properties","text":"Name Summary aliveAndroidServiceObjectIds [jvm]val HeapGraph.aliveAndroidServiceObjectIds: List<Long> classCount [jvm]abstract val classCount: Int classes [jvm]abstract val classes: Sequence<HeapObject.HeapClass>Sequence of all classes in the heap dump. context [jvm]abstract val context: GraphContextIn memory store that can be used to store objects this HeapGraph instance. gcRoots [jvm]abstract val gcRoots: List<GcRoot>All GC roots which type matches types known to this heap graph and which point to non null references. You can retrieve the object that a GC Root points to by calling findObjectById with GcRoot.id, however you need to first check that objectExists returns true because GC roots can point to objects that don\u2019t exist in the heap dump. identifierByteSize [jvm]abstract val identifierByteSize: Int instanceCount [jvm]abstract val instanceCount: Int instances [jvm]abstract val instances: Sequence<HeapObject.HeapInstance>Sequence of all instances in the heap dump. objectArrayCount [jvm]abstract val objectArrayCount: Int objectArrays [jvm]abstract val objectArrays: Sequence<HeapObject.HeapObjectArray>Sequence of all object arrays in the heap dump. objectCount [jvm]abstract val objectCount: Int objects [jvm]abstract val objects: Sequence<HeapObject>Sequence of all objects in the heap dump. primitiveArrayCount [jvm]abstract val primitiveArrayCount: Int primitiveArrays [jvm]abstract val primitiveArrays: Sequence<HeapObject.HeapPrimitiveArray>Sequence of all primitive arrays in the heap dump."},{"location":"api/shark/-heap-graph/class-count/","title":"Class count","text":"<p>//leakcanary-repo/shark/HeapGraph/classCount</p>"},{"location":"api/shark/-heap-graph/class-count/#classcount","title":"classCount","text":"<p>[jvm]\\ abstract val classCount: Int</p>"},{"location":"api/shark/-heap-graph/classes/","title":"Classes","text":"<p>//leakcanary-repo/shark/HeapGraph/classes</p>"},{"location":"api/shark/-heap-graph/classes/#classes","title":"classes","text":"<p>[jvm]\\ abstract val classes: Sequence<HeapObject.HeapClass></p> <p>Sequence of all classes in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-heap-graph/context/","title":"Context","text":"<p>//leakcanary-repo/shark/HeapGraph/context</p>"},{"location":"api/shark/-heap-graph/context/#context","title":"context","text":"<p>[jvm]\\ abstract val context: GraphContext</p> <p>In memory store that can be used to store objects this HeapGraph instance.</p>"},{"location":"api/shark/-heap-graph/find-class-by-name/","title":"Find class by name","text":"<p>//leakcanary-repo/shark/HeapGraph/findClassByName</p>"},{"location":"api/shark/-heap-graph/find-class-by-name/#findclassbyname","title":"findClassByName","text":"<p>[jvm]\\ abstract fun findClassByName(className: String): HeapObject.HeapClass?</p> <p>Returns the HeapClass corresponding to the provided className, or null if the class cannot be found.</p>"},{"location":"api/shark/-heap-graph/find-heap-dump-index/","title":"Find heap dump index","text":"<p>//leakcanary-repo/shark/HeapGraph/findHeapDumpIndex</p>"},{"location":"api/shark/-heap-graph/find-heap-dump-index/#findheapdumpindex","title":"findHeapDumpIndex","text":"<p>[jvm]\\ abstract fun findHeapDumpIndex(objectId: Long): Int</p> <p>Returns the 1-based index in the heap dump of the object corresponding to the provided objectId, and throws IllegalArgumentException otherwise.</p> <p>This is the object index that YourKit provides in its Java profiler.</p>"},{"location":"api/shark/-heap-graph/find-object-by-heap-dump-index/","title":"Find object by heap dump index","text":"<p>//leakcanary-repo/shark/HeapGraph/findObjectByHeapDumpIndex</p>"},{"location":"api/shark/-heap-graph/find-object-by-heap-dump-index/#findobjectbyheapdumpindex","title":"findObjectByHeapDumpIndex","text":"<p>[jvm]\\ abstract fun findObjectByHeapDumpIndex(heapDumpIndex: Int): HeapObject</p> <p>Returns the HeapObject corresponding to the provided heapDumpIndex, and throws IllegalArgumentException if heapDumpIndex is less than 1 or more than objectCount.</p> <p>This is the object index that YourKit provides in its Java profiler.</p>"},{"location":"api/shark/-heap-graph/find-object-by-id-or-null/","title":"Find object by id or null","text":"<p>//leakcanary-repo/shark/HeapGraph/findObjectByIdOrNull</p>"},{"location":"api/shark/-heap-graph/find-object-by-id-or-null/#findobjectbyidornull","title":"findObjectByIdOrNull","text":"<p>[jvm]\\ abstract fun findObjectByIdOrNull(objectId: Long): HeapObject?</p> <p>Returns the HeapObject corresponding to the provided objectId or null if it cannot be found.</p>"},{"location":"api/shark/-heap-graph/find-object-by-id/","title":"Find object by id","text":"<p>//leakcanary-repo/shark/HeapGraph/findObjectById</p>"},{"location":"api/shark/-heap-graph/find-object-by-id/#findobjectbyid","title":"findObjectById","text":"<p>[jvm]\\ abstract fun findObjectById(objectId: Long): HeapObject</p> <p>Returns the HeapObject corresponding to the provided objectId, and throws IllegalArgumentException otherwise.</p>"},{"location":"api/shark/-heap-graph/find-object-by-index/","title":"Find object by index","text":"<p>//leakcanary-repo/shark/HeapGraph/findObjectByIndex</p>"},{"location":"api/shark/-heap-graph/find-object-by-index/#findobjectbyindex","title":"findObjectByIndex","text":"<p>[jvm]\\ abstract fun findObjectByIndex(objectIndex: Int): HeapObject</p> <p>Returns the HeapObject corresponding to the provided objectIndex, and throws IllegalArgumentException if objectIndex is less than 0 or more than objectCount - 1.</p>"},{"location":"api/shark/-heap-graph/gc-roots/","title":"Gc roots","text":"<p>//leakcanary-repo/shark/HeapGraph/gcRoots</p>"},{"location":"api/shark/-heap-graph/gc-roots/#gcroots","title":"gcRoots","text":"<p>[jvm]\\ abstract val gcRoots: List<GcRoot></p> <p>All GC roots which type matches types known to this heap graph and which point to non null references. You can retrieve the object that a GC Root points to by calling findObjectById with GcRoot.id, however you need to first check that objectExists returns true because GC roots can point to objects that don\u2019t exist in the heap dump.</p>"},{"location":"api/shark/-heap-graph/identifier-byte-size/","title":"Identifier byte size","text":"<p>//leakcanary-repo/shark/HeapGraph/identifierByteSize</p>"},{"location":"api/shark/-heap-graph/identifier-byte-size/#identifierbytesize","title":"identifierByteSize","text":"<p>[jvm]\\ abstract val identifierByteSize: Int</p>"},{"location":"api/shark/-heap-graph/instance-count/","title":"Instance count","text":"<p>//leakcanary-repo/shark/HeapGraph/instanceCount</p>"},{"location":"api/shark/-heap-graph/instance-count/#instancecount","title":"instanceCount","text":"<p>[jvm]\\ abstract val instanceCount: Int</p>"},{"location":"api/shark/-heap-graph/instances/","title":"Instances","text":"<p>//leakcanary-repo/shark/HeapGraph/instances</p>"},{"location":"api/shark/-heap-graph/instances/#instances","title":"instances","text":"<p>[jvm]\\ abstract val instances: Sequence<HeapObject.HeapInstance></p> <p>Sequence of all instances in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-heap-graph/object-array-count/","title":"Object array count","text":"<p>//leakcanary-repo/shark/HeapGraph/objectArrayCount</p>"},{"location":"api/shark/-heap-graph/object-array-count/#objectarraycount","title":"objectArrayCount","text":"<p>[jvm]\\ abstract val objectArrayCount: Int</p>"},{"location":"api/shark/-heap-graph/object-arrays/","title":"Object arrays","text":"<p>//leakcanary-repo/shark/HeapGraph/objectArrays</p>"},{"location":"api/shark/-heap-graph/object-arrays/#objectarrays","title":"objectArrays","text":"<p>[jvm]\\ abstract val objectArrays: Sequence<HeapObject.HeapObjectArray></p> <p>Sequence of all object arrays in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-heap-graph/object-count/","title":"Object count","text":"<p>//leakcanary-repo/shark/HeapGraph/objectCount</p>"},{"location":"api/shark/-heap-graph/object-count/#objectcount","title":"objectCount","text":"<p>[jvm]\\ abstract val objectCount: Int</p>"},{"location":"api/shark/-heap-graph/object-exists/","title":"Object exists","text":"<p>//leakcanary-repo/shark/HeapGraph/objectExists</p>"},{"location":"api/shark/-heap-graph/object-exists/#objectexists","title":"objectExists","text":"<p>[jvm]\\ abstract fun objectExists(objectId: Long): Boolean</p> <p>Returns true if the provided objectId exists in the heap dump.</p>"},{"location":"api/shark/-heap-graph/objects/","title":"Objects","text":"<p>//leakcanary-repo/shark/HeapGraph/objects</p>"},{"location":"api/shark/-heap-graph/objects/#objects","title":"objects","text":"<p>[jvm]\\ abstract val objects: Sequence<HeapObject></p> <p>Sequence of all objects in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-heap-graph/primitive-array-count/","title":"Primitive array count","text":"<p>//leakcanary-repo/shark/HeapGraph/primitiveArrayCount</p>"},{"location":"api/shark/-heap-graph/primitive-array-count/#primitivearraycount","title":"primitiveArrayCount","text":"<p>[jvm]\\ abstract val primitiveArrayCount: Int</p>"},{"location":"api/shark/-heap-graph/primitive-arrays/","title":"Primitive arrays","text":"<p>//leakcanary-repo/shark/HeapGraph/primitiveArrays</p>"},{"location":"api/shark/-heap-graph/primitive-arrays/#primitivearrays","title":"primitiveArrays","text":"<p>[jvm]\\ abstract val primitiveArrays: Sequence<HeapObject.HeapPrimitiveArray></p> <p>Sequence of all primitive arrays in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-heap-graph-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapGraphProvider</p>"},{"location":"api/shark/-heap-graph-provider/#heapgraphprovider","title":"HeapGraphProvider","text":"<p>fun interface HeapGraphProvider</p>"},{"location":"api/shark/-heap-graph-provider/#types","title":"Types","text":"Name Summary Companion [jvm]object CompanionThis allows external modules to add factory methods for implementations of this interface as extension functions of this companion object."},{"location":"api/shark/-heap-graph-provider/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]abstract fun openHeapGraph(): CloseableHeapGraph"},{"location":"api/shark/-heap-graph-provider/open-heap-graph/","title":"Open heap graph","text":"<p>//leakcanary-repo/shark/HeapGraphProvider/openHeapGraph</p>"},{"location":"api/shark/-heap-graph-provider/open-heap-graph/#openheapgraph","title":"openHeapGraph","text":"<p>[jvm]\\ abstract fun openHeapGraph(): CloseableHeapGraph</p>"},{"location":"api/shark/-heap-graph-provider/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapGraphProvider/Companion</p>"},{"location":"api/shark/-heap-graph-provider/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p> <p>This allows external modules to add factory methods for implementations of this interface as extension functions of this companion object.</p>"},{"location":"api/shark/-heap-growth-command/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapGrowthCommand</p>"},{"location":"api/shark/-heap-growth-command/#heapgrowthcommand","title":"HeapGrowthCommand","text":"<p>[jvm]\\ class HeapGrowthCommand : CliktCommand</p>"},{"location":"api/shark/-heap-growth-command/#constructors","title":"Constructors","text":"HeapGrowthCommand [jvm]constructor()"},{"location":"api/shark/-heap-growth-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-growth-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-heap-growth-command/-heap-growth-command/","title":"heap growth command","text":"<p>//leakcanary-repo/shark/HeapGrowthCommand/HeapGrowthCommand</p>"},{"location":"api/shark/-heap-growth-command/-heap-growth-command/#heapgrowthcommand","title":"HeapGrowthCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-heap-growth-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/HeapGrowthCommand/run</p>"},{"location":"api/shark/-heap-growth-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-heap-growth-traversal/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal</p>"},{"location":"api/shark/-heap-growth-traversal/#heapgrowthtraversal","title":"HeapGrowthTraversal","text":"<p>[jvm]\\ class HeapGrowthTraversal(val traversalCount: Int, val shortestPathTree: ShortestPathObjectNode, val growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput) : HeapTraversalOutput</p>"},{"location":"api/shark/-heap-growth-traversal/#constructors","title":"Constructors","text":"HeapGrowthTraversal [jvm]constructor(traversalCount: Int, shortestPathTree: ShortestPathObjectNode, growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput)"},{"location":"api/shark/-heap-growth-traversal/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-growth-traversal/#properties","title":"Properties","text":"Name Summary growingObjects [jvm]val growingObjects: GrowingObjectNodesNodes that already existed in the previous traversal, still exist in this shortestPathTree, and have grown compared to the previous traversal. isGrowing [jvm]val isGrowing: Boolean scenarioLoopsPerGraph [jvm]open override val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. shortestPathTree [jvm]open override val shortestPathTree: ShortestPathObjectNodeA representation of the heap as a tree of shortest path from roots to each object in the heap, where: traversalCount [jvm]open override val traversalCount: Int"},{"location":"api/shark/-heap-growth-traversal/-heap-growth-traversal/","title":"heap growth traversal","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/HeapGrowthTraversal</p>"},{"location":"api/shark/-heap-growth-traversal/-heap-growth-traversal/#heapgrowthtraversal","title":"HeapGrowthTraversal","text":"<p>[jvm]\\ constructor(traversalCount: Int, shortestPathTree: ShortestPathObjectNode, growingObjects: GrowingObjectNodes, previousTraversal: HeapTraversalInput)</p>"},{"location":"api/shark/-heap-growth-traversal/growing-objects/","title":"Growing objects","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/growingObjects</p>"},{"location":"api/shark/-heap-growth-traversal/growing-objects/#growingobjects","title":"growingObjects","text":"<p>[jvm]\\ val growingObjects: GrowingObjectNodes</p> <p>Nodes that already existed in the previous traversal, still exist in this shortestPathTree, and have grown compared to the previous traversal.</p>"},{"location":"api/shark/-heap-growth-traversal/heap-graph-count/","title":"Heap graph count","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/heapGraphCount</p>"},{"location":"api/shark/-heap-growth-traversal/heap-graph-count/#heapgraphcount","title":"heapGraphCount","text":"<p>[jvm]\\ open override val heapGraphCount: Int?</p> <p>The expected max number of traversals, or null if unknown.</p>"},{"location":"api/shark/-heap-growth-traversal/is-growing/","title":"Is growing","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/isGrowing</p>"},{"location":"api/shark/-heap-growth-traversal/is-growing/#isgrowing","title":"isGrowing","text":"<p>[jvm]\\ val isGrowing: Boolean</p>"},{"location":"api/shark/-heap-growth-traversal/scenario-loops-per-graph/","title":"Scenario loops per graph","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/scenarioLoopsPerGraph</p>"},{"location":"api/shark/-heap-growth-traversal/scenario-loops-per-graph/#scenarioloopspergraph","title":"scenarioLoopsPerGraph","text":"<p>[jvm]\\ open override val scenarioLoopsPerGraph: Int</p> <p>How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal.</p>"},{"location":"api/shark/-heap-growth-traversal/shortest-path-tree/","title":"Shortest path tree","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/shortestPathTree</p>"},{"location":"api/shark/-heap-growth-traversal/shortest-path-tree/#shortestpathtree","title":"shortestPathTree","text":"<p>[jvm]\\ open override val shortestPathTree: ShortestPathObjectNode</p> <p>A representation of the heap as a tree of shortest path from roots to each object in the heap, where:</p> <ul> <li>object identity is lost</li> <li>objects are grouped by identical path into a single node</li> <li> <p>Path element names are determined using the node & edge name to reach them (e.g. class name</p> </li> <li> <p>field name) as well as the class name of the reached object.</p> </li> </ul>"},{"location":"api/shark/-heap-growth-traversal/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/toString</p>"},{"location":"api/shark/-heap-growth-traversal/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-growth-traversal/traversal-count/","title":"Traversal count","text":"<p>//leakcanary-repo/shark/HeapGrowthTraversal/traversalCount</p>"},{"location":"api/shark/-heap-growth-traversal/traversal-count/#traversalcount","title":"traversalCount","text":"<p>[jvm]\\ open override val traversalCount: Int</p>"},{"location":"api/shark/-heap-object/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject</p>"},{"location":"api/shark/-heap-object/#heapobject","title":"HeapObject","text":"<p>sealed class HeapObject</p> <p>An object in the heap dump.</p>"},{"location":"api/shark/-heap-object/#inheritors","title":"Inheritors","text":"HeapClass HeapInstance HeapObjectArray HeapPrimitiveArray"},{"location":"api/shark/-heap-object/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion HeapClass [jvm]class HeapClass : HeapObjectA class in the heap dump. HeapInstance [jvm]class HeapInstance : HeapObjectAn instance in the heap dump. HeapObjectArray [jvm]class HeapObjectArray : HeapObjectAn object array in the heap dump. HeapPrimitiveArray [jvm]class HeapPrimitiveArray : HeapObjectA primitive array in the heap dump."},{"location":"api/shark/-heap-object/#functions","title":"Functions","text":"Name Summary readRecord [jvm]abstract fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecordReads and returns the underlying ObjectRecord."},{"location":"api/shark/-heap-object/#properties","title":"Properties","text":"Name Summary asClass [jvm]val asClass: HeapObject.HeapClass?This HeapObject as a HeapClass if it is one, or null otherwise asInstance [jvm]val asInstance: HeapObject.HeapInstance?This HeapObject as a HeapInstance if it is one, or null otherwise asObjectArray [jvm]val asObjectArray: HeapObject.HeapObjectArray?This HeapObject as a HeapObjectArray if it is one, or null otherwise asPrimitiveArray [jvm]val asPrimitiveArray: HeapObject.HeapPrimitiveArray?This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise graph [jvm]abstract val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. objectId [jvm]abstract val objectId: LongThe heap identifier of this object. objectIndex [jvm]abstract val objectIndex: IntAn positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays. positiveObjectId [jvm]val positiveObjectId: LongobjectId masked to be a positive unique identifier, as reported in Android Studio. recordSize [jvm]abstract val recordSize: IntThe total byte size for the record of this object in the heap dump."},{"location":"api/shark/-heap-object/as-class/","title":"As class","text":"<p>//leakcanary-repo/shark/HeapObject/asClass</p>"},{"location":"api/shark/-heap-object/as-class/#asclass","title":"asClass","text":"<p>[jvm]\\ val asClass: HeapObject.HeapClass?</p> <p>This HeapObject as a HeapClass if it is one, or null otherwise</p>"},{"location":"api/shark/-heap-object/as-instance/","title":"As instance","text":"<p>//leakcanary-repo/shark/HeapObject/asInstance</p>"},{"location":"api/shark/-heap-object/as-instance/#asinstance","title":"asInstance","text":"<p>[jvm]\\ val asInstance: HeapObject.HeapInstance?</p> <p>This HeapObject as a HeapInstance if it is one, or null otherwise</p>"},{"location":"api/shark/-heap-object/as-object-array/","title":"As object array","text":"<p>//leakcanary-repo/shark/HeapObject/asObjectArray</p>"},{"location":"api/shark/-heap-object/as-object-array/#asobjectarray","title":"asObjectArray","text":"<p>[jvm]\\ val asObjectArray: HeapObject.HeapObjectArray?</p> <p>This HeapObject as a HeapObjectArray if it is one, or null otherwise</p>"},{"location":"api/shark/-heap-object/as-primitive-array/","title":"As primitive array","text":"<p>//leakcanary-repo/shark/HeapObject/asPrimitiveArray</p>"},{"location":"api/shark/-heap-object/as-primitive-array/#asprimitivearray","title":"asPrimitiveArray","text":"<p>[jvm]\\ val asPrimitiveArray: HeapObject.HeapPrimitiveArray?</p> <p>This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise</p>"},{"location":"api/shark/-heap-object/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapObject/graph</p>"},{"location":"api/shark/-heap-object/graph/#graph","title":"graph","text":"<p>[jvm]\\ abstract val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-object/object-id/","title":"Object id","text":"<p>//leakcanary-repo/shark/HeapObject/objectId</p>"},{"location":"api/shark/-heap-object/object-id/#objectid","title":"objectId","text":"<p>[jvm]\\ abstract val objectId: Long</p> <p>The heap identifier of this object.</p>"},{"location":"api/shark/-heap-object/object-index/","title":"Object index","text":"<p>//leakcanary-repo/shark/HeapObject/objectIndex</p>"},{"location":"api/shark/-heap-object/object-index/#objectindex","title":"objectIndex","text":"<p>[jvm]\\ abstract val objectIndex: Int</p> <p>An positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays.</p>"},{"location":"api/shark/-heap-object/positive-object-id/","title":"Positive object id","text":"<p>//leakcanary-repo/shark/HeapObject/positiveObjectId</p>"},{"location":"api/shark/-heap-object/positive-object-id/#positiveobjectid","title":"positiveObjectId","text":"<p>[jvm]\\ val positiveObjectId: Long</p> <p>objectId masked to be a positive unique identifier, as reported in Android Studio.</p>"},{"location":"api/shark/-heap-object/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/HeapObject/readRecord</p>"},{"location":"api/shark/-heap-object/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ abstract fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord</p> <p>Reads and returns the underlying ObjectRecord.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/record-size/","title":"Record size","text":"<p>//leakcanary-repo/shark/HeapObject/recordSize</p>"},{"location":"api/shark/-heap-object/record-size/#recordsize","title":"recordSize","text":"<p>[jvm]\\ abstract val recordSize: Int</p> <p>The total byte size for the record of this object in the heap dump.</p>"},{"location":"api/shark/-heap-object/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject/Companion</p>"},{"location":"api/shark/-heap-object/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-object/-heap-class/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass</p>"},{"location":"api/shark/-heap-object/-heap-class/#heapclass","title":"HeapClass","text":"<p>[jvm]\\ class HeapClass : HeapObject</p> <p>A class in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-class/#functions","title":"Functions","text":"Name Summary get [jvm]operator fun get(fieldName: String): HeapField? instanceFieldName [jvm]fun instanceFieldName(fieldRecord: HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord): StringReturns the name of the field declared in this class for the specified fieldRecord. readFieldsByteSize [jvm]fun readFieldsByteSize(): IntThe total byte size of fields for instances of this class, computed as the sum of the individual size of each field of this class. This does not include the size of fields from superclasses. readRecord [jvm]open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecordReads and returns the underlying ClassDumpRecord. readRecordFields [jvm]fun readRecordFields(): List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord> readRecordStaticFields [jvm]fun readRecordStaticFields(): List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord> readStaticField [jvm]fun readStaticField(fieldName: String): HeapField?Returns a HeapField object that reflects the specified declared field of the class represented by this HeapClass object, or null if this field does not exist. The name parameter specifies the simple name of the desired field. readStaticFields [jvm]fun readStaticFields(): Sequence<HeapField>The static fields of this class, as a sequence of HeapField. subclassOf [jvm]infix fun subclassOf(superclass: HeapObject.HeapClass): BooleanReturns true if superclass is a superclass of this HeapClass. superclassOf [jvm]infix fun superclassOf(subclass: HeapObject.HeapClass): BooleanReturns true if subclass is a sub class of this HeapClass. toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-object/-heap-class/#properties","title":"Properties","text":"Name Summary asClass [jvm]val asClass: HeapObject.HeapClass?This HeapObject as a HeapClass if it is one, or null otherwise asInstance [jvm]val asInstance: HeapObject.HeapInstance?This HeapObject as a HeapInstance if it is one, or null otherwise asObjectArray [jvm]val asObjectArray: HeapObject.HeapObjectArray?This HeapObject as a HeapObjectArray if it is one, or null otherwise asPrimitiveArray [jvm]val asPrimitiveArray: HeapObject.HeapPrimitiveArray?This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise classHierarchy [jvm]val classHierarchy: Sequence<HeapObject.HeapClass>The class hierarchy starting at this class (included) and ending at the Object class (included). directInstances [jvm]val directInstances: Sequence<HeapObject.HeapInstance>All direct instances of this class, ie excluding any instance of subclasses of this class. graph [jvm]open override val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. hasReferenceInstanceFields [jvm]val hasReferenceInstanceFields: Boolean instanceByteSize [jvm]val instanceByteSize: IntThe total byte size of fields for instances of this class, as registered in the class dump. This includes the size of fields from superclasses. instances [jvm]val instances: Sequence<HeapObject.HeapInstance>All instances of this class, including instances of subclasses of this class. isArrayClass [jvm]val isArrayClass: BooleanReturns true if this class is an array class, and false otherwise. isObjectArrayClass [jvm]val isObjectArrayClass: Boolean isPrimitiveArrayClass [jvm]val isPrimitiveArrayClass: Boolean isPrimitiveWrapperClass [jvm]val isPrimitiveWrapperClass: BooleanWhether this is class is a primitive wrapper type name [jvm]val name: StringThe name of this class, identical to Class.getName. If this class is an array class, the name has a suffix of brackets for each dimension of the array, e.g. <code>com.Foo[][]</code> is a class for 2 dimensional arrays of <code>com.Foo</code>. objectArrayInstances [jvm]val objectArrayInstances: Sequence<HeapObject.HeapObjectArray> objectId [jvm]open override val objectId: LongThe heap identifier of this object. objectIndex [jvm]open override val objectIndex: IntAn positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays. positiveObjectId [jvm]val positiveObjectId: LongobjectId masked to be a positive unique identifier, as reported in Android Studio. primitiveArrayInstances [jvm]val primitiveArrayInstances: Sequence<HeapObject.HeapPrimitiveArray>Primitive arrays are one dimensional arrays of a primitive type. N-dimension arrays of primitive types (e.g. int[][]) are object arrays pointing to primitive arrays. recordSize [jvm]open override val recordSize: IntThe total byte size for the record of this object in the heap dump. simpleName [jvm]val simpleName: StringReturns name stripped of any string content before the last period (included). subclasses [jvm]val subclasses: Sequence<HeapObject.HeapClass>All the subclasses (direct and indirect) of this class, in the order they were recorded in the heap dump. superclass [jvm]val superclass: HeapObject.HeapClass?The HeapClass representing the superclass of this HeapClass. If this HeapClass represents either the Object class or a primitive type, then null is returned. If this HeapClass represents an array class then the HeapClass object representing the Object class is returned."},{"location":"api/shark/-heap-object/-heap-class/class-hierarchy/","title":"Class hierarchy","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/classHierarchy</p>"},{"location":"api/shark/-heap-object/-heap-class/class-hierarchy/#classhierarchy","title":"classHierarchy","text":"<p>[jvm]\\ val classHierarchy: Sequence<HeapObject.HeapClass></p> <p>The class hierarchy starting at this class (included) and ending at the Object class (included).</p>"},{"location":"api/shark/-heap-object/-heap-class/direct-instances/","title":"Direct instances","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/directInstances</p>"},{"location":"api/shark/-heap-object/-heap-class/direct-instances/#directinstances","title":"directInstances","text":"<p>[jvm]\\ val directInstances: Sequence<HeapObject.HeapInstance></p> <p>All direct instances of this class, ie excluding any instance of subclasses of this class.</p>"},{"location":"api/shark/-heap-object/-heap-class/get/","title":"Get","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/get</p>"},{"location":"api/shark/-heap-object/-heap-class/get/#get","title":"get","text":"<p>[jvm]\\ operator fun get(fieldName: String): HeapField?</p>"},{"location":"api/shark/-heap-object/-heap-class/get/#see-also","title":"See also","text":"HeapObject.HeapClass.readStaticField"},{"location":"api/shark/-heap-object/-heap-class/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/graph</p>"},{"location":"api/shark/-heap-object/-heap-class/graph/#graph","title":"graph","text":"<p>[jvm]\\ open override val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-object/-heap-class/has-reference-instance-fields/","title":"Has reference instance fields","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/hasReferenceInstanceFields</p>"},{"location":"api/shark/-heap-object/-heap-class/has-reference-instance-fields/#hasreferenceinstancefields","title":"hasReferenceInstanceFields","text":"<p>[jvm]\\ val hasReferenceInstanceFields: Boolean</p>"},{"location":"api/shark/-heap-object/-heap-class/instance-byte-size/","title":"Instance byte size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/instanceByteSize</p>"},{"location":"api/shark/-heap-object/-heap-class/instance-byte-size/#instancebytesize","title":"instanceByteSize","text":"<p>[jvm]\\ val instanceByteSize: Int</p> <p>The total byte size of fields for instances of this class, as registered in the class dump. This includes the size of fields from superclasses.</p>"},{"location":"api/shark/-heap-object/-heap-class/instance-byte-size/#see-also","title":"See also","text":"HeapObject.HeapClass.readFieldsByteSize"},{"location":"api/shark/-heap-object/-heap-class/instance-field-name/","title":"Instance field name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/instanceFieldName</p>"},{"location":"api/shark/-heap-object/-heap-class/instance-field-name/#instancefieldname","title":"instanceFieldName","text":"<p>[jvm]\\ fun instanceFieldName(fieldRecord: HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord): String</p> <p>Returns the name of the field declared in this class for the specified fieldRecord.</p>"},{"location":"api/shark/-heap-object/-heap-class/instances/","title":"Instances","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/instances</p>"},{"location":"api/shark/-heap-object/-heap-class/instances/#instances","title":"instances","text":"<p>[jvm]\\ val instances: Sequence<HeapObject.HeapInstance></p> <p>All instances of this class, including instances of subclasses of this class.</p>"},{"location":"api/shark/-heap-object/-heap-class/is-array-class/","title":"Is array class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/isArrayClass</p>"},{"location":"api/shark/-heap-object/-heap-class/is-array-class/#isarrayclass","title":"isArrayClass","text":"<p>[jvm]\\ val isArrayClass: Boolean</p> <p>Returns true if this class is an array class, and false otherwise.</p>"},{"location":"api/shark/-heap-object/-heap-class/is-object-array-class/","title":"Is object array class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/isObjectArrayClass</p>"},{"location":"api/shark/-heap-object/-heap-class/is-object-array-class/#isobjectarrayclass","title":"isObjectArrayClass","text":"<p>[jvm]\\ val isObjectArrayClass: Boolean</p>"},{"location":"api/shark/-heap-object/-heap-class/is-primitive-array-class/","title":"Is primitive array class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/isPrimitiveArrayClass</p>"},{"location":"api/shark/-heap-object/-heap-class/is-primitive-array-class/#isprimitivearrayclass","title":"isPrimitiveArrayClass","text":"<p>[jvm]\\ val isPrimitiveArrayClass: Boolean</p>"},{"location":"api/shark/-heap-object/-heap-class/is-primitive-wrapper-class/","title":"Is primitive wrapper class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/isPrimitiveWrapperClass</p>"},{"location":"api/shark/-heap-object/-heap-class/is-primitive-wrapper-class/#isprimitivewrapperclass","title":"isPrimitiveWrapperClass","text":"<p>[jvm]\\ val isPrimitiveWrapperClass: Boolean</p> <p>Whether this is class is a primitive wrapper type</p>"},{"location":"api/shark/-heap-object/-heap-class/name/","title":"Name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/name</p>"},{"location":"api/shark/-heap-object/-heap-class/name/#name","title":"name","text":"<p>[jvm]\\ val name: String</p> <p>The name of this class, identical to Class.getName. If this class is an array class, the name has a suffix of brackets for each dimension of the array, e.g. <code>com.Foo[][]</code> is a class for 2 dimensional arrays of <code>com.Foo</code>.</p> <p>The behavior for primitive types changes depending on the VM that dumped the heap. JVM heap dumps don\u2019t have any HeapClass object for primitive types, instead the <code>java.land.Class</code> class has 9 instances (the 8 primitive types and <code>void</code>). Android heap dumps have an HeapClass object for primitive type and the <code>java.land.Class</code> class has no instance.</p> <p>If this is an array class, you can find the component type by removing the brackets at the end, e.g. <code>name.substringBefore('[')</code>. Be careful when doing this for JVM heap dumps though, as if the component type is a primitive type there will not be a HeapClass object for it. This is especially tricky with N dimension primitive type arrays, which are instances of HeapObjectArray (vs single dimension primitive type arrays which are instances of HeapPrimitiveArray).</p>"},{"location":"api/shark/-heap-object/-heap-class/object-array-instances/","title":"Object array instances","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/objectArrayInstances</p>"},{"location":"api/shark/-heap-object/-heap-class/object-array-instances/#objectarrayinstances","title":"objectArrayInstances","text":"<p>[jvm]\\ val objectArrayInstances: Sequence<HeapObject.HeapObjectArray></p>"},{"location":"api/shark/-heap-object/-heap-class/object-id/","title":"Object id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/objectId</p>"},{"location":"api/shark/-heap-object/-heap-class/object-id/#objectid","title":"objectId","text":"<p>[jvm]\\ open override val objectId: Long</p> <p>The heap identifier of this object.</p>"},{"location":"api/shark/-heap-object/-heap-class/object-index/","title":"Object index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/objectIndex</p>"},{"location":"api/shark/-heap-object/-heap-class/object-index/#objectindex","title":"objectIndex","text":"<p>[jvm]\\ open override val objectIndex: Int</p> <p>An positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays.</p>"},{"location":"api/shark/-heap-object/-heap-class/primitive-array-instances/","title":"Primitive array instances","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/primitiveArrayInstances</p>"},{"location":"api/shark/-heap-object/-heap-class/primitive-array-instances/#primitivearrayinstances","title":"primitiveArrayInstances","text":"<p>[jvm]\\ val primitiveArrayInstances: Sequence<HeapObject.HeapPrimitiveArray></p> <p>Primitive arrays are one dimensional arrays of a primitive type. N-dimension arrays of primitive types (e.g. int[][]) are object arrays pointing to primitive arrays.</p>"},{"location":"api/shark/-heap-object/-heap-class/read-fields-byte-size/","title":"Read fields byte size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readFieldsByteSize</p>"},{"location":"api/shark/-heap-object/-heap-class/read-fields-byte-size/#readfieldsbytesize","title":"readFieldsByteSize","text":"<p>[jvm]\\ fun readFieldsByteSize(): Int</p> <p>The total byte size of fields for instances of this class, computed as the sum of the individual size of each field of this class. This does not include the size of fields from superclasses.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-class/read-fields-byte-size/#see-also","title":"See also","text":"HeapObject.HeapClass.instanceByteSize"},{"location":"api/shark/-heap-object/-heap-class/read-record-fields/","title":"Read record fields","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readRecordFields</p>"},{"location":"api/shark/-heap-object/-heap-class/read-record-fields/#readrecordfields","title":"readRecordFields","text":"<p>[jvm]\\ fun readRecordFields(): List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord></p>"},{"location":"api/shark/-heap-object/-heap-class/read-record-static-fields/","title":"Read record static fields","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readRecordStaticFields</p>"},{"location":"api/shark/-heap-object/-heap-class/read-record-static-fields/#readrecordstaticfields","title":"readRecordStaticFields","text":"<p>[jvm]\\ fun readRecordStaticFields(): List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord></p>"},{"location":"api/shark/-heap-object/-heap-class/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readRecord</p>"},{"location":"api/shark/-heap-object/-heap-class/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord</p> <p>Reads and returns the underlying ClassDumpRecord.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-class/read-static-field/","title":"Read static field","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readStaticField</p>"},{"location":"api/shark/-heap-object/-heap-class/read-static-field/#readstaticfield","title":"readStaticField","text":"<p>[jvm]\\ fun readStaticField(fieldName: String): HeapField?</p> <p>Returns a HeapField object that reflects the specified declared field of the class represented by this HeapClass object, or null if this field does not exist. The name parameter specifies the simple name of the desired field.</p> <p>Also available as a convenience operator: get</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-class/read-static-fields/","title":"Read static fields","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/readStaticFields</p>"},{"location":"api/shark/-heap-object/-heap-class/read-static-fields/#readstaticfields","title":"readStaticFields","text":"<p>[jvm]\\ fun readStaticFields(): Sequence<HeapField></p> <p>The static fields of this class, as a sequence of HeapField.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-class/record-size/","title":"Record size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/recordSize</p>"},{"location":"api/shark/-heap-object/-heap-class/record-size/#recordsize","title":"recordSize","text":"<p>[jvm]\\ open override val recordSize: Int</p> <p>The total byte size for the record of this object in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-class/simple-name/","title":"Simple name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/simpleName</p>"},{"location":"api/shark/-heap-object/-heap-class/simple-name/#simplename","title":"simpleName","text":"<p>[jvm]\\ val simpleName: String</p> <p>Returns name stripped of any string content before the last period (included).</p>"},{"location":"api/shark/-heap-object/-heap-class/subclass-of/","title":"Subclass of","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/subclassOf</p>"},{"location":"api/shark/-heap-object/-heap-class/subclass-of/#subclassof","title":"subclassOf","text":"<p>[jvm]\\ infix fun subclassOf(superclass: HeapObject.HeapClass): Boolean</p> <p>Returns true if superclass is a superclass of this HeapClass.</p>"},{"location":"api/shark/-heap-object/-heap-class/subclasses/","title":"Subclasses","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/subclasses</p>"},{"location":"api/shark/-heap-object/-heap-class/subclasses/#subclasses","title":"subclasses","text":"<p>[jvm]\\ val subclasses: Sequence<HeapObject.HeapClass></p> <p>All the subclasses (direct and indirect) of this class, in the order they were recorded in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-class/superclass-of/","title":"Superclass of","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/superclassOf</p>"},{"location":"api/shark/-heap-object/-heap-class/superclass-of/#superclassof","title":"superclassOf","text":"<p>[jvm]\\ infix fun superclassOf(subclass: HeapObject.HeapClass): Boolean</p> <p>Returns true if subclass is a sub class of this HeapClass.</p>"},{"location":"api/shark/-heap-object/-heap-class/superclass/","title":"Superclass","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/superclass</p>"},{"location":"api/shark/-heap-object/-heap-class/superclass/#superclass","title":"superclass","text":"<p>[jvm]\\ val superclass: HeapObject.HeapClass?</p> <p>The HeapClass representing the superclass of this HeapClass. If this HeapClass represents either the Object class or a primitive type, then null is returned. If this HeapClass represents an array class then the HeapClass object representing the Object class is returned.</p>"},{"location":"api/shark/-heap-object/-heap-class/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapObject/HeapClass/toString</p>"},{"location":"api/shark/-heap-object/-heap-class/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-object/-heap-instance/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance</p>"},{"location":"api/shark/-heap-object/-heap-instance/#heapinstance","title":"HeapInstance","text":"<p>[jvm]\\ class HeapInstance : HeapObject</p> <p>An instance in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-instance/#functions","title":"Functions","text":"Name Summary get [jvm]operator fun get(declaringClassName: String, fieldName: String): HeapField?operator fun get(declaringClass: KClass<out Any>, fieldName: String): HeapField? instanceOf [jvm]infix fun instanceOf(className: String): BooleanReturns true if this is an instance of the class named className or an instance of a subclass of that class.[jvm]infix fun instanceOf(expectedClass: KClass<*>): Booleaninfix fun instanceOf(expectedClass: HeapObject.HeapClass): BooleanReturns true if this is an instance of expectedClass or an instance of a subclass of that class. readAsJavaString [jvm]fun readAsJavaString(): String?If this HeapInstance is an instance of the String class, returns a String instance with content that matches the string in the heap dump. Otherwise returns null. readField [jvm]fun readField(declaringClassName: String, fieldName: String): HeapField?Returns a HeapField object that reflects the specified declared field of the instance represented by this HeapInstance object, or null if this field does not exist. The declaringClassName specifies the class in which the desired field is declared, and the fieldName parameter specifies the simple name of the desired field.[jvm]fun readField(declaringClass: KClass<out Any>, fieldName: String): HeapField? readFields [jvm]fun readFields(): Sequence<HeapField>The fields of this instance, as a sequence of HeapField. readRecord [jvm]open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.InstanceDumpRecordReads and returns the underlying InstanceDumpRecord. toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-object/-heap-instance/#properties","title":"Properties","text":"Name Summary asClass [jvm]val asClass: HeapObject.HeapClass?This HeapObject as a HeapClass if it is one, or null otherwise asInstance [jvm]val asInstance: HeapObject.HeapInstance?This HeapObject as a HeapInstance if it is one, or null otherwise asObjectArray [jvm]val asObjectArray: HeapObject.HeapObjectArray?This HeapObject as a HeapObjectArray if it is one, or null otherwise asPrimitiveArray [jvm]val asPrimitiveArray: HeapObject.HeapPrimitiveArray?This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise byteSize [jvm]val byteSize: Int graph [jvm]open override val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. hexIdentityHashCode [jvm]val HeapObject.HeapInstance.hexIdentityHashCode: String?The system identity hashCode represented as hex, or null if it couldn\u2019t be found. This is the string identifier you see when calling Object.toString() at runtime on a class that does not override its hashCode() method, e.g. com.example.MyThing@6bd57cf identityHashCode [jvm]val HeapObject.HeapInstance.identityHashCode: Int?The system identity hash code, or null if it couldn\u2019t be found. instanceClass [jvm]val instanceClass: HeapObject.HeapClassThe class of this instance. instanceClassId [jvm]val instanceClassId: LongThe heap identifier of the class of this instance. instanceClassName [jvm]val instanceClassName: StringThe name of the class of this instance, identical to Class.getName. instanceClassSimpleName [jvm]val instanceClassSimpleName: StringReturns instanceClassName stripped of any string content before the last period (included). isPrimitiveWrapper [jvm]val isPrimitiveWrapper: BooleanWhether this is an instance of a primitive wrapper type. objectId [jvm]open override val objectId: LongThe heap identifier of this object. objectIndex [jvm]open override val objectIndex: IntAn positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays. positiveObjectId [jvm]val positiveObjectId: LongobjectId masked to be a positive unique identifier, as reported in Android Studio. recordSize [jvm]open override val recordSize: IntThe total byte size for the record of this object in the heap dump."},{"location":"api/shark/-heap-object/-heap-instance/byte-size/","title":"Byte size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/byteSize</p>"},{"location":"api/shark/-heap-object/-heap-instance/byte-size/#bytesize","title":"byteSize","text":"<p>[jvm]\\ val byteSize: Int</p>"},{"location":"api/shark/-heap-object/-heap-instance/byte-size/#see-also","title":"See also","text":"HeapObject.HeapClass.instanceByteSize"},{"location":"api/shark/-heap-object/-heap-instance/get/","title":"Get","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/get</p>"},{"location":"api/shark/-heap-object/-heap-instance/get/#get","title":"get","text":"<p>[jvm]\\ operator fun get(declaringClass: KClass<out Any>, fieldName: String): HeapField?</p> <p>operator fun get(declaringClassName: String, fieldName: String): HeapField?</p>"},{"location":"api/shark/-heap-object/-heap-instance/get/#see-also","title":"See also","text":"HeapObject.HeapInstance.readField"},{"location":"api/shark/-heap-object/-heap-instance/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/graph</p>"},{"location":"api/shark/-heap-object/-heap-instance/graph/#graph","title":"graph","text":"<p>[jvm]\\ open override val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-id/","title":"Instance class id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/instanceClassId</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-id/#instanceclassid","title":"instanceClassId","text":"<p>[jvm]\\ val instanceClassId: Long</p> <p>The heap identifier of the class of this instance.</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-name/","title":"Instance class name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/instanceClassName</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-name/#instanceclassname","title":"instanceClassName","text":"<p>[jvm]\\ val instanceClassName: String</p> <p>The name of the class of this instance, identical to Class.getName.</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-simple-name/","title":"Instance class simple name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/instanceClassSimpleName</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class-simple-name/#instanceclasssimplename","title":"instanceClassSimpleName","text":"<p>[jvm]\\ val instanceClassSimpleName: String</p> <p>Returns instanceClassName stripped of any string content before the last period (included).</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class/","title":"Instance class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/instanceClass</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-class/#instanceclass","title":"instanceClass","text":"<p>[jvm]\\ val instanceClass: HeapObject.HeapClass</p> <p>The class of this instance.</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-of/","title":"Instance of","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/instanceOf</p>"},{"location":"api/shark/-heap-object/-heap-instance/instance-of/#instanceof","title":"instanceOf","text":"<p>[jvm]\\ infix fun instanceOf(className: String): Boolean</p> <p>Returns true if this is an instance of the class named className or an instance of a subclass of that class.</p> <p>[jvm]\\ infix fun instanceOf(expectedClass: KClass<*>): Boolean</p> <p>infix fun instanceOf(expectedClass: HeapObject.HeapClass): Boolean</p> <p>Returns true if this is an instance of expectedClass or an instance of a subclass of that class.</p>"},{"location":"api/shark/-heap-object/-heap-instance/is-primitive-wrapper/","title":"Is primitive wrapper","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/isPrimitiveWrapper</p>"},{"location":"api/shark/-heap-object/-heap-instance/is-primitive-wrapper/#isprimitivewrapper","title":"isPrimitiveWrapper","text":"<p>[jvm]\\ val isPrimitiveWrapper: Boolean</p> <p>Whether this is an instance of a primitive wrapper type.</p>"},{"location":"api/shark/-heap-object/-heap-instance/object-id/","title":"Object id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/objectId</p>"},{"location":"api/shark/-heap-object/-heap-instance/object-id/#objectid","title":"objectId","text":"<p>[jvm]\\ open override val objectId: Long</p> <p>The heap identifier of this object.</p>"},{"location":"api/shark/-heap-object/-heap-instance/object-index/","title":"Object index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/objectIndex</p>"},{"location":"api/shark/-heap-object/-heap-instance/object-index/#objectindex","title":"objectIndex","text":"<p>[jvm]\\ open override val objectIndex: Int</p> <p>An positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays.</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-as-java-string/","title":"Read as java string","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/readAsJavaString</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-as-java-string/#readasjavastring","title":"readAsJavaString","text":"<p>[jvm]\\ fun readAsJavaString(): String?</p> <p>If this HeapInstance is an instance of the String class, returns a String instance with content that matches the string in the heap dump. Otherwise returns null.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-field/","title":"Read field","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/readField</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-field/#readfield","title":"readField","text":"<p>[jvm]\\ fun readField(declaringClass: KClass<out Any>, fieldName: String): HeapField?</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-field/#see-also","title":"See also","text":"HeapObject.HeapInstance.readField <p>[jvm]\\ fun readField(declaringClassName: String, fieldName: String): HeapField?</p> <p>Returns a HeapField object that reflects the specified declared field of the instance represented by this HeapInstance object, or null if this field does not exist. The declaringClassName specifies the class in which the desired field is declared, and the fieldName parameter specifies the simple name of the desired field.</p> <p>Also available as a convenience operator: get</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-fields/","title":"Read fields","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/readFields</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-fields/#readfields","title":"readFields","text":"<p>[jvm]\\ fun readFields(): Sequence<HeapField></p> <p>The fields of this instance, as a sequence of HeapField.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/readRecord</p>"},{"location":"api/shark/-heap-object/-heap-instance/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.InstanceDumpRecord</p> <p>Reads and returns the underlying InstanceDumpRecord.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-instance/record-size/","title":"Record size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/recordSize</p>"},{"location":"api/shark/-heap-object/-heap-instance/record-size/#recordsize","title":"recordSize","text":"<p>[jvm]\\ open override val recordSize: Int</p> <p>The total byte size for the record of this object in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-instance/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapObject/HeapInstance/toString</p>"},{"location":"api/shark/-heap-object/-heap-instance/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-object/-heap-object-array/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray</p>"},{"location":"api/shark/-heap-object/-heap-object-array/#heapobjectarray","title":"HeapObjectArray","text":"<p>[jvm]\\ class HeapObjectArray : HeapObject</p> <p>An object array in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/#functions","title":"Functions","text":"Name Summary readElements [jvm]fun readElements(): Sequence<HeapValue>The elements in this array, as a sequence of HeapValue. readRecord [jvm]open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ObjectArrayDumpRecordReads and returns the underlying ObjectArrayDumpRecord. toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-object/-heap-object-array/#properties","title":"Properties","text":"Name Summary arrayClass [jvm]val arrayClass: HeapObject.HeapClassThe class of this array. arrayClassId [jvm]val arrayClassId: LongThe heap identifier of the class of this array. arrayClassName [jvm]val arrayClassName: StringThe name of the class of this array, identical to Class.getName. arrayClassSimpleName [jvm]val arrayClassSimpleName: StringReturns arrayClassName stripped of any string content before the last period (included). asClass [jvm]val asClass: HeapObject.HeapClass?This HeapObject as a HeapClass if it is one, or null otherwise asInstance [jvm]val asInstance: HeapObject.HeapInstance?This HeapObject as a HeapInstance if it is one, or null otherwise asObjectArray [jvm]val asObjectArray: HeapObject.HeapObjectArray?This HeapObject as a HeapObjectArray if it is one, or null otherwise asPrimitiveArray [jvm]val asPrimitiveArray: HeapObject.HeapPrimitiveArray?This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise byteSize [jvm]val byteSize: IntThe total byte shallow size of elements in this array. graph [jvm]open override val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. objectId [jvm]open override val objectId: LongThe heap identifier of this object. objectIndex [jvm]open override val objectIndex: IntAn positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays. positiveObjectId [jvm]val positiveObjectId: LongobjectId masked to be a positive unique identifier, as reported in Android Studio. recordSize [jvm]open override val recordSize: IntThe total byte size for the record of this object in the heap dump."},{"location":"api/shark/-heap-object/-heap-object-array/array-class-id/","title":"Array class id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/arrayClassId</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class-id/#arrayclassid","title":"arrayClassId","text":"<p>[jvm]\\ val arrayClassId: Long</p> <p>The heap identifier of the class of this array.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class-name/","title":"Array class name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/arrayClassName</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class-name/#arrayclassname","title":"arrayClassName","text":"<p>[jvm]\\ val arrayClassName: String</p> <p>The name of the class of this array, identical to Class.getName.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class-simple-name/","title":"Array class simple name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/arrayClassSimpleName</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class-simple-name/#arrayclasssimplename","title":"arrayClassSimpleName","text":"<p>[jvm]\\ val arrayClassSimpleName: String</p> <p>Returns arrayClassName stripped of any string content before the last period (included).</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class/","title":"Array class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/arrayClass</p>"},{"location":"api/shark/-heap-object/-heap-object-array/array-class/#arrayclass","title":"arrayClass","text":"<p>[jvm]\\ val arrayClass: HeapObject.HeapClass</p> <p>The class of this array.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/byte-size/","title":"Byte size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/byteSize</p>"},{"location":"api/shark/-heap-object/-heap-object-array/byte-size/#bytesize","title":"byteSize","text":"<p>[jvm]\\ val byteSize: Int</p> <p>The total byte shallow size of elements in this array.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/graph</p>"},{"location":"api/shark/-heap-object/-heap-object-array/graph/#graph","title":"graph","text":"<p>[jvm]\\ open override val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/object-id/","title":"Object id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/objectId</p>"},{"location":"api/shark/-heap-object/-heap-object-array/object-id/#objectid","title":"objectId","text":"<p>[jvm]\\ open override val objectId: Long</p> <p>The heap identifier of this object.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/object-index/","title":"Object index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/objectIndex</p>"},{"location":"api/shark/-heap-object/-heap-object-array/object-index/#objectindex","title":"objectIndex","text":"<p>[jvm]\\ open override val objectIndex: Int</p> <p>An positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/read-elements/","title":"Read elements","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/readElements</p>"},{"location":"api/shark/-heap-object/-heap-object-array/read-elements/#readelements","title":"readElements","text":"<p>[jvm]\\ fun readElements(): Sequence<HeapValue></p> <p>The elements in this array, as a sequence of HeapValue.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/readRecord</p>"},{"location":"api/shark/-heap-object/-heap-object-array/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ObjectArrayDumpRecord</p> <p>Reads and returns the underlying ObjectArrayDumpRecord.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/record-size/","title":"Record size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/recordSize</p>"},{"location":"api/shark/-heap-object/-heap-object-array/record-size/#recordsize","title":"recordSize","text":"<p>[jvm]\\ open override val recordSize: Int</p> <p>The total byte size for the record of this object in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-object-array/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapObject/HeapObjectArray/toString</p>"},{"location":"api/shark/-heap-object/-heap-object-array/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/#heapprimitivearray","title":"HeapPrimitiveArray","text":"<p>[jvm]\\ class HeapPrimitiveArray : HeapObject</p> <p>A primitive array in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/#functions","title":"Functions","text":"Name Summary readRecord [jvm]open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecordReads and returns the underlying PrimitiveArrayDumpRecord. toString [jvm]open override fun toString(): String"},{"location":"api/shark/-heap-object/-heap-primitive-array/#properties","title":"Properties","text":"Name Summary arrayClass [jvm]val arrayClass: HeapObject.HeapClassThe class of this array. arrayClassName [jvm]val arrayClassName: StringThe name of the class of this array, identical to Class.getName. asClass [jvm]val asClass: HeapObject.HeapClass?This HeapObject as a HeapClass if it is one, or null otherwise asInstance [jvm]val asInstance: HeapObject.HeapInstance?This HeapObject as a HeapInstance if it is one, or null otherwise asObjectArray [jvm]val asObjectArray: HeapObject.HeapObjectArray?This HeapObject as a HeapObjectArray if it is one, or null otherwise asPrimitiveArray [jvm]val asPrimitiveArray: HeapObject.HeapPrimitiveArray?This HeapObject as a HeapPrimitiveArray if it is one, or null otherwise byteSize [jvm]val byteSize: IntThe total byte shallow size of elements in this array. graph [jvm]open override val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. objectId [jvm]open override val objectId: LongThe heap identifier of this object. objectIndex [jvm]open override val objectIndex: IntAn positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays. positiveObjectId [jvm]val positiveObjectId: LongobjectId masked to be a positive unique identifier, as reported in Android Studio. primitiveType [jvm]val primitiveType: PrimitiveTypeThe PrimitiveType of elements in this array. recordSize [jvm]open override val recordSize: IntThe total byte size for the record of this object in the heap dump."},{"location":"api/shark/-heap-object/-heap-primitive-array/array-class-name/","title":"Array class name","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/arrayClassName</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/array-class-name/#arrayclassname","title":"arrayClassName","text":"<p>[jvm]\\ val arrayClassName: String</p> <p>The name of the class of this array, identical to Class.getName.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/array-class/","title":"Array class","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/arrayClass</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/array-class/#arrayclass","title":"arrayClass","text":"<p>[jvm]\\ val arrayClass: HeapObject.HeapClass</p> <p>The class of this array.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/byte-size/","title":"Byte size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/byteSize</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/byte-size/#bytesize","title":"byteSize","text":"<p>[jvm]\\ val byteSize: Int</p> <p>The total byte shallow size of elements in this array.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/graph</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/graph/#graph","title":"graph","text":"<p>[jvm]\\ open override val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/object-id/","title":"Object id","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/objectId</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/object-id/#objectid","title":"objectId","text":"<p>[jvm]\\ open override val objectId: Long</p> <p>The heap identifier of this object.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/object-index/","title":"Object index","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/objectIndex</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/object-index/#objectindex","title":"objectIndex","text":"<p>[jvm]\\ open override val objectIndex: Int</p> <p>An positive object index that\u2019s specific to how Shark stores objects in memory. The index starts at 0 and ends at HeapGraph.objectCount - 1. There are no gaps, every index value corresponds to an object. Classes are first, then instances, then object arrays then primitive arrays.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/primitive-type/","title":"Primitive type","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/primitiveType</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/primitive-type/#primitivetype","title":"primitiveType","text":"<p>[jvm]\\ val primitiveType: PrimitiveType</p> <p>The PrimitiveType of elements in this array.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/read-record/","title":"Read record","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/readRecord</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/read-record/#readrecord","title":"readRecord","text":"<p>[jvm]\\ open override fun readRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p> <p>Reads and returns the underlying PrimitiveArrayDumpRecord.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/record-size/","title":"Record size","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/recordSize</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/record-size/#recordsize","title":"recordSize","text":"<p>[jvm]\\ open override val recordSize: Int</p> <p>The total byte size for the record of this object in the heap dump.</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/HeapObject/HeapPrimitiveArray/toString</p>"},{"location":"api/shark/-heap-object/-heap-primitive-array/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-heap-traversal-input/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapTraversalInput</p>"},{"location":"api/shark/-heap-traversal-input/#heaptraversalinput","title":"HeapTraversalInput","text":"<p>interface HeapTraversalInput</p>"},{"location":"api/shark/-heap-traversal-input/#inheritors","title":"Inheritors","text":"InitialState HeapTraversalOutput"},{"location":"api/shark/-heap-traversal-input/#properties","title":"Properties","text":"Name Summary scenarioLoopsPerGraph [jvm]abstract val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. traversalCount [jvm]abstract val traversalCount: Int"},{"location":"api/shark/-heap-traversal-input/heap-graph-count/","title":"Heap graph count","text":"<p>//leakcanary-repo/shark/HeapTraversalInput/heapGraphCount</p>"},{"location":"api/shark/-heap-traversal-input/heap-graph-count/#heapgraphcount","title":"heapGraphCount","text":"<p>[jvm]\\ abstract val heapGraphCount: Int?</p> <p>The expected max number of traversals, or null if unknown.</p>"},{"location":"api/shark/-heap-traversal-input/scenario-loops-per-graph/","title":"Scenario loops per graph","text":"<p>//leakcanary-repo/shark/HeapTraversalInput/scenarioLoopsPerGraph</p>"},{"location":"api/shark/-heap-traversal-input/scenario-loops-per-graph/#scenarioloopspergraph","title":"scenarioLoopsPerGraph","text":"<p>[jvm]\\ abstract val scenarioLoopsPerGraph: Int</p> <p>How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal.</p>"},{"location":"api/shark/-heap-traversal-input/traversal-count/","title":"Traversal count","text":"<p>//leakcanary-repo/shark/HeapTraversalInput/traversalCount</p>"},{"location":"api/shark/-heap-traversal-input/traversal-count/#traversalcount","title":"traversalCount","text":"<p>[jvm]\\ abstract val traversalCount: Int</p>"},{"location":"api/shark/-heap-traversal-output/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapTraversalOutput</p>"},{"location":"api/shark/-heap-traversal-output/#heaptraversaloutput","title":"HeapTraversalOutput","text":"<p>interface HeapTraversalOutput : HeapTraversalInput</p>"},{"location":"api/shark/-heap-traversal-output/#inheritors","title":"Inheritors","text":"FirstHeapTraversal HeapDiff"},{"location":"api/shark/-heap-traversal-output/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-heap-traversal-output/#properties","title":"Properties","text":"Name Summary scenarioLoopsPerGraph [jvm]abstract val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. shortestPathTree [jvm]abstract val shortestPathTree: ShortestPathObjectNodeA representation of the heap as a tree of shortest path from roots to each object in the heap, where: traversalCount [jvm]abstract val traversalCount: Int"},{"location":"api/shark/-heap-traversal-output/shortest-path-tree/","title":"Shortest path tree","text":"<p>//leakcanary-repo/shark/HeapTraversalOutput/shortestPathTree</p>"},{"location":"api/shark/-heap-traversal-output/shortest-path-tree/#shortestpathtree","title":"shortestPathTree","text":"<p>[jvm]\\ abstract val shortestPathTree: ShortestPathObjectNode</p> <p>A representation of the heap as a tree of shortest path from roots to each object in the heap, where:</p> <ul> <li>object identity is lost</li> <li>objects are grouped by identical path into a single node</li> <li> <p>Path element names are determined using the node & edge name to reach them (e.g. class name</p> </li> <li> <p>field name) as well as the class name of the reached object.</p> </li> </ul>"},{"location":"api/shark/-heap-traversal-output/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapTraversalOutput/Companion</p>"},{"location":"api/shark/-heap-traversal-output/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-heap-traversal-output/-companion/#properties","title":"Properties","text":"Name Summary ignoredReferences [jvm]val ignoredReferences: List<IgnoredReferenceMatcher>When running a heap growth analysis in the same process as where the scenario runs, we should ignore the part of the graph used to keep track of the tree in the previous iteration of the scenario."},{"location":"api/shark/-heap-traversal-output/-companion/ignored-references/","title":"Ignored references","text":"<p>//leakcanary-repo/shark/HeapTraversalOutput/Companion/ignoredReferences</p>"},{"location":"api/shark/-heap-traversal-output/-companion/ignored-references/#ignoredreferences","title":"ignoredReferences","text":"<p>[jvm]\\ val ignoredReferences: List<IgnoredReferenceMatcher></p> <p>When running a heap growth analysis in the same process as where the scenario runs, we should ignore the part of the graph used to keep track of the tree in the previous iteration of the scenario.</p>"},{"location":"api/shark/-heap-value/","title":"Index","text":"<p>//leakcanary-repo/shark/HeapValue</p>"},{"location":"api/shark/-heap-value/#heapvalue","title":"HeapValue","text":"<p>[jvm]\\ class HeapValue(val graph: HeapGraph, val holder: ValueHolder)</p> <p>Represents a value in the heap dump, which can be an object reference or a primitive type.</p>"},{"location":"api/shark/-heap-value/#constructors","title":"Constructors","text":"HeapValue [jvm]constructor(graph: HeapGraph, holder: ValueHolder)"},{"location":"api/shark/-heap-value/#functions","title":"Functions","text":"Name Summary heapValueAsString [jvm]fun HeapValue.heapValueAsString(): String readAsJavaString [jvm]fun readAsJavaString(): String?If this HeapValue if it represents a non null object reference to an instance of the String class that exists in the heap dump, returns a String instance with content that matches the string in the heap dump. Otherwise returns null."},{"location":"api/shark/-heap-value/#properties","title":"Properties","text":"Name Summary asBoolean [jvm]val asBoolean: Boolean?This HeapValue as a Boolean if it represents one, or null otherwise. asByte [jvm]val asByte: Byte?This HeapValue as a Byte if it represents one, or null otherwise. asChar [jvm]val asChar: Char?This HeapValue as a Char if it represents one, or null otherwise. asDouble [jvm]val asDouble: Double?This HeapValue as a Double if it represents one, or null otherwise. asFloat [jvm]val asFloat: Float?This HeapValue as a Float if it represents one, or null otherwise. asInt [jvm]val asInt: Int?This HeapValue as an Int if it represents one, or null otherwise. asLong [jvm]val asLong: Long?This HeapValue as a Long if it represents one, or null otherwise. asNonNullObjectId [jvm]val asNonNullObjectId: Long?This HeapValue as a Long if it represents a non null object reference, or null otherwise. asObject [jvm]val asObject: HeapObject?The HeapObject referenced by this HeapValue if it represents a non null object reference, or null otherwise. asObjectId [jvm]val asObjectId: Long?This HeapValue as a Long if it represents an object reference, or null otherwise. asShort [jvm]val asShort: Short?This HeapValue as a Short if it represents one, or null otherwise. graph [jvm]val graph: HeapGraphThe graph of objects in the heap, which you can use to navigate the heap. holder [jvm]val holder: ValueHolderHolds the actual value that this HeapValue represents. isNonNullReference [jvm]val isNonNullReference: BooleanTrue is this HeapValue represents a non null object reference, false otherwise. isNullReference [jvm]val isNullReference: BooleanTrue is this HeapValue represents a null object reference, false otherwise."},{"location":"api/shark/-heap-value/-heap-value/","title":"heap value","text":"<p>//leakcanary-repo/shark/HeapValue/HeapValue</p>"},{"location":"api/shark/-heap-value/-heap-value/#heapvalue","title":"HeapValue","text":"<p>[jvm]\\ constructor(graph: HeapGraph, holder: ValueHolder)</p>"},{"location":"api/shark/-heap-value/as-boolean/","title":"As boolean","text":"<p>//leakcanary-repo/shark/HeapValue/asBoolean</p>"},{"location":"api/shark/-heap-value/as-boolean/#asboolean","title":"asBoolean","text":"<p>[jvm]\\ val asBoolean: Boolean?</p> <p>This HeapValue as a Boolean if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-byte/","title":"As byte","text":"<p>//leakcanary-repo/shark/HeapValue/asByte</p>"},{"location":"api/shark/-heap-value/as-byte/#asbyte","title":"asByte","text":"<p>[jvm]\\ val asByte: Byte?</p> <p>This HeapValue as a Byte if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-char/","title":"As char","text":"<p>//leakcanary-repo/shark/HeapValue/asChar</p>"},{"location":"api/shark/-heap-value/as-char/#aschar","title":"asChar","text":"<p>[jvm]\\ val asChar: Char?</p> <p>This HeapValue as a Char if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-double/","title":"As double","text":"<p>//leakcanary-repo/shark/HeapValue/asDouble</p>"},{"location":"api/shark/-heap-value/as-double/#asdouble","title":"asDouble","text":"<p>[jvm]\\ val asDouble: Double?</p> <p>This HeapValue as a Double if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-float/","title":"As float","text":"<p>//leakcanary-repo/shark/HeapValue/asFloat</p>"},{"location":"api/shark/-heap-value/as-float/#asfloat","title":"asFloat","text":"<p>[jvm]\\ val asFloat: Float?</p> <p>This HeapValue as a Float if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-int/","title":"As int","text":"<p>//leakcanary-repo/shark/HeapValue/asInt</p>"},{"location":"api/shark/-heap-value/as-int/#asint","title":"asInt","text":"<p>[jvm]\\ val asInt: Int?</p> <p>This HeapValue as an Int if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-long/","title":"As long","text":"<p>//leakcanary-repo/shark/HeapValue/asLong</p>"},{"location":"api/shark/-heap-value/as-long/#aslong","title":"asLong","text":"<p>[jvm]\\ val asLong: Long?</p> <p>This HeapValue as a Long if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-non-null-object-id/","title":"As non null object id","text":"<p>//leakcanary-repo/shark/HeapValue/asNonNullObjectId</p>"},{"location":"api/shark/-heap-value/as-non-null-object-id/#asnonnullobjectid","title":"asNonNullObjectId","text":"<p>[jvm]\\ val asNonNullObjectId: Long?</p> <p>This HeapValue as a Long if it represents a non null object reference, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-object-id/","title":"As object id","text":"<p>//leakcanary-repo/shark/HeapValue/asObjectId</p>"},{"location":"api/shark/-heap-value/as-object-id/#asobjectid","title":"asObjectId","text":"<p>[jvm]\\ val asObjectId: Long?</p> <p>This HeapValue as a Long if it represents an object reference, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-object/","title":"As object","text":"<p>//leakcanary-repo/shark/HeapValue/asObject</p>"},{"location":"api/shark/-heap-value/as-object/#asobject","title":"asObject","text":"<p>[jvm]\\ val asObject: HeapObject?</p> <p>The HeapObject referenced by this HeapValue if it represents a non null object reference, or null otherwise.</p>"},{"location":"api/shark/-heap-value/as-short/","title":"As short","text":"<p>//leakcanary-repo/shark/HeapValue/asShort</p>"},{"location":"api/shark/-heap-value/as-short/#asshort","title":"asShort","text":"<p>[jvm]\\ val asShort: Short?</p> <p>This HeapValue as a Short if it represents one, or null otherwise.</p>"},{"location":"api/shark/-heap-value/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/HeapValue/graph</p>"},{"location":"api/shark/-heap-value/graph/#graph","title":"graph","text":"<p>[jvm]\\ val graph: HeapGraph</p> <p>The graph of objects in the heap, which you can use to navigate the heap.</p>"},{"location":"api/shark/-heap-value/holder/","title":"Holder","text":"<p>//leakcanary-repo/shark/HeapValue/holder</p>"},{"location":"api/shark/-heap-value/holder/#holder","title":"holder","text":"<p>[jvm]\\ val holder: ValueHolder</p> <p>Holds the actual value that this HeapValue represents.</p>"},{"location":"api/shark/-heap-value/is-non-null-reference/","title":"Is non null reference","text":"<p>//leakcanary-repo/shark/HeapValue/isNonNullReference</p>"},{"location":"api/shark/-heap-value/is-non-null-reference/#isnonnullreference","title":"isNonNullReference","text":"<p>[jvm]\\ val isNonNullReference: Boolean</p> <p>True is this HeapValue represents a non null object reference, false otherwise.</p>"},{"location":"api/shark/-heap-value/is-null-reference/","title":"Is null reference","text":"<p>//leakcanary-repo/shark/HeapValue/isNullReference</p>"},{"location":"api/shark/-heap-value/is-null-reference/#isnullreference","title":"isNullReference","text":"<p>[jvm]\\ val isNullReference: Boolean</p> <p>True is this HeapValue represents a null object reference, false otherwise.</p>"},{"location":"api/shark/-heap-value/read-as-java-string/","title":"Read as java string","text":"<p>//leakcanary-repo/shark/HeapValue/readAsJavaString</p>"},{"location":"api/shark/-heap-value/read-as-java-string/#readasjavastring","title":"readAsJavaString","text":"<p>[jvm]\\ fun readAsJavaString(): String?</p> <p>If this HeapValue if it represents a non null object reference to an instance of the String class that exists in the heap dump, returns a String instance with content that matches the string in the heap dump. Otherwise returns null.</p> <p>This may trigger IO reads.</p>"},{"location":"api/shark/-hprof-deobfuscator/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofDeobfuscator</p>"},{"location":"api/shark/-hprof-deobfuscator/#hprofdeobfuscator","title":"HprofDeobfuscator","text":"<p>[jvm]\\ class HprofDeobfuscator</p> <p>Converts a Hprof file to another file with deobfuscated class and field names.</p>"},{"location":"api/shark/-hprof-deobfuscator/#constructors","title":"Constructors","text":"HprofDeobfuscator [jvm]constructor()"},{"location":"api/shark/-hprof-deobfuscator/#functions","title":"Functions","text":"Name Summary deobfuscate [jvm]fun deobfuscate(proguardMapping: ProguardMapping, inputHprofFile: File, outputHprofFile: File = File( inputHprofFile.parent, inputHprofFile.name.replace( \".hprof\", \"-deobfuscated.hprof\" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + \"-deobfuscated\" })): File"},{"location":"api/shark/-hprof-deobfuscator/-hprof-deobfuscator/","title":"hprof deobfuscator","text":"<p>//leakcanary-repo/shark/HprofDeobfuscator/HprofDeobfuscator</p>"},{"location":"api/shark/-hprof-deobfuscator/-hprof-deobfuscator/#hprofdeobfuscator","title":"HprofDeobfuscator","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-hprof-deobfuscator/deobfuscate/","title":"Deobfuscate","text":"<p>//leakcanary-repo/shark/HprofDeobfuscator/deobfuscate</p>"},{"location":"api/shark/-hprof-deobfuscator/deobfuscate/#deobfuscate","title":"deobfuscate","text":"<p>[jvm]\\ fun deobfuscate(proguardMapping: ProguardMapping, inputHprofFile: File, outputHprofFile: File = File( inputHprofFile.parent, inputHprofFile.name.replace( \".hprof\", \"-deobfuscated.hprof\" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + \"-deobfuscated\" })): File</p>"},{"location":"api/shark/-hprof-deobfuscator/deobfuscate/#see-also","title":"See also","text":"HprofDeobfuscator"},{"location":"api/shark/-hprof-header/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofHeader</p>"},{"location":"api/shark/-hprof-header/#hprofheader","title":"HprofHeader","text":"<p>[jvm]\\ data class HprofHeader(val heapDumpTimestamp: Long = System.currentTimeMillis(), val version: HprofVersion = HprofVersion.ANDROID, val identifierByteSize: Int = 4)</p> <p>Represents the header metadata of a Hprof file.</p>"},{"location":"api/shark/-hprof-header/#constructors","title":"Constructors","text":"HprofHeader [jvm]constructor(heapDumpTimestamp: Long = System.currentTimeMillis(), version: HprofVersion = HprofVersion.ANDROID, identifierByteSize: Int = 4)"},{"location":"api/shark/-hprof-header/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-header/#properties","title":"Properties","text":"Name Summary heapDumpTimestamp [jvm]val heapDumpTimestamp: LongUnix timestamp at which the heap was dumped. identifierByteSize [jvm]val identifierByteSize: Int = 4Size of Hprof identifiers. Identifiers are used to represent UTF8 strings, objects, stack traces, etc. They can have the same size as host pointers or sizeof(void*), but are not required to be. recordsPosition [jvm]val recordsPosition: IntHow many bytes from the beginning of the file can we find the hprof records at. Version string, 0 delimiter (1 byte), identifier byte size int (4 bytes) ,timestamp long (8 bytes) version [jvm]val version: HprofVersionHprof version, which is tied to the runtime where the heap was dumped."},{"location":"api/shark/-hprof-header/-hprof-header/","title":"hprof header","text":"<p>//leakcanary-repo/shark/HprofHeader/HprofHeader</p>"},{"location":"api/shark/-hprof-header/-hprof-header/#hprofheader","title":"HprofHeader","text":"<p>[jvm]\\ constructor(heapDumpTimestamp: Long = System.currentTimeMillis(), version: HprofVersion = HprofVersion.ANDROID, identifierByteSize: Int = 4)</p>"},{"location":"api/shark/-hprof-header/heap-dump-timestamp/","title":"Heap dump timestamp","text":"<p>//leakcanary-repo/shark/HprofHeader/heapDumpTimestamp</p>"},{"location":"api/shark/-hprof-header/heap-dump-timestamp/#heapdumptimestamp","title":"heapDumpTimestamp","text":"<p>[jvm]\\ val heapDumpTimestamp: Long</p> <p>Unix timestamp at which the heap was dumped.</p>"},{"location":"api/shark/-hprof-header/identifier-byte-size/","title":"Identifier byte size","text":"<p>//leakcanary-repo/shark/HprofHeader/identifierByteSize</p>"},{"location":"api/shark/-hprof-header/identifier-byte-size/#identifierbytesize","title":"identifierByteSize","text":"<p>[jvm]\\ val identifierByteSize: Int = 4</p> <p>Size of Hprof identifiers. Identifiers are used to represent UTF8 strings, objects, stack traces, etc. They can have the same size as host pointers or sizeof(void*), but are not required to be.</p>"},{"location":"api/shark/-hprof-header/records-position/","title":"Records position","text":"<p>//leakcanary-repo/shark/HprofHeader/recordsPosition</p>"},{"location":"api/shark/-hprof-header/records-position/#recordsposition","title":"recordsPosition","text":"<p>[jvm]\\ val recordsPosition: Int</p> <p>How many bytes from the beginning of the file can we find the hprof records at. Version string, 0 delimiter (1 byte), identifier byte size int (4 bytes) ,timestamp long (8 bytes)</p>"},{"location":"api/shark/-hprof-header/version/","title":"Version","text":"<p>//leakcanary-repo/shark/HprofHeader/version</p>"},{"location":"api/shark/-hprof-header/version/#version","title":"version","text":"<p>[jvm]\\ val version: HprofVersion</p> <p>Hprof version, which is tied to the runtime where the heap was dumped.</p>"},{"location":"api/shark/-hprof-header/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofHeader/Companion</p>"},{"location":"api/shark/-hprof-header/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-header/-companion/#functions","title":"Functions","text":"Name Summary parseHeaderOf [jvm]fun parseHeaderOf(hprofFile: File): HprofHeaderReads the header of the provided hprofFile and returns it as a HprofHeader[jvm]fun parseHeaderOf(source: BufferedSource): HprofHeaderReads the header of the provided source and returns it as a HprofHeader. This does not close the source."},{"location":"api/shark/-hprof-header/-companion/parse-header-of/","title":"Parse header of","text":"<p>//leakcanary-repo/shark/HprofHeader/Companion/parseHeaderOf</p>"},{"location":"api/shark/-hprof-header/-companion/parse-header-of/#parseheaderof","title":"parseHeaderOf","text":"<p>[jvm]\\ fun parseHeaderOf(hprofFile: File): HprofHeader</p> <p>Reads the header of the provided hprofFile and returns it as a HprofHeader</p> <p>[jvm]\\ fun parseHeaderOf(source: BufferedSource): HprofHeader</p> <p>Reads the header of the provided source and returns it as a HprofHeader. This does not close the source.</p>"},{"location":"api/shark/-hprof-heap-graph/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofHeapGraph</p>"},{"location":"api/shark/-hprof-heap-graph/#hprofheapgraph","title":"HprofHeapGraph","text":"<p>[jvm]\\ class HprofHeapGraph : CloseableHeapGraph</p> <p>A HeapGraph that reads from an Hprof file indexed by HprofIndex.</p>"},{"location":"api/shark/-hprof-heap-graph/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-heap-graph/#functions","title":"Functions","text":"Name Summary close [jvm]open override fun close() findClassByName [jvm]open override fun findClassByName(className: String): HeapObject.HeapClass?Returns the HeapClass corresponding to the provided className, or null if the class cannot be found. findHeapDumpIndex [jvm]open override fun findHeapDumpIndex(objectId: Long): IntReturns the 1-based index in the heap dump of the object corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByHeapDumpIndex [jvm]open override fun findObjectByHeapDumpIndex(heapDumpIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided heapDumpIndex, and throws IllegalArgumentException if heapDumpIndex is less than 1 or more than objectCount. findObjectById [jvm]open override fun findObjectById(objectId: Long): HeapObjectReturns the HeapObject corresponding to the provided objectId, and throws IllegalArgumentException otherwise. findObjectByIdOrNull [jvm]open override fun findObjectByIdOrNull(objectId: Long): HeapObject?Returns the HeapObject corresponding to the provided objectId or null if it cannot be found. findObjectByIndex [jvm]open override fun findObjectByIndex(objectIndex: Int): HeapObjectReturns the HeapObject corresponding to the provided objectIndex, and throws IllegalArgumentException if objectIndex is less than 0 or more than objectCount - 1. lruCacheStats [jvm]fun lruCacheStats(): StringThis is only public so that we can publish stats. Accessing this requires casting HeapGraph to HprofHeapGraph so it\u2019s really not a public API. May change at any time! objectExists [jvm]open override fun objectExists(objectId: Long): BooleanReturns true if the provided objectId exists in the heap dump."},{"location":"api/shark/-hprof-heap-graph/#properties","title":"Properties","text":"Name Summary aliveAndroidServiceObjectIds [jvm]val HeapGraph.aliveAndroidServiceObjectIds: List<Long> classCount [jvm]open override val classCount: Int classes [jvm]open override val classes: Sequence<HeapObject.HeapClass>Sequence of all classes in the heap dump. context [jvm]open override val context: GraphContextIn memory store that can be used to store objects this HeapGraph instance. gcRoots [jvm]open override val gcRoots: List<GcRoot>All GC roots which type matches types known to this heap graph and which point to non null references. You can retrieve the object that a GC Root points to by calling findObjectById with GcRoot.id, however you need to first check that objectExists returns true because GC roots can point to objects that don\u2019t exist in the heap dump. identifierByteSize [jvm]open override val identifierByteSize: Int instanceCount [jvm]open override val instanceCount: Int instances [jvm]open override val instances: Sequence<HeapObject.HeapInstance>Sequence of all instances in the heap dump. objectArrayCount [jvm]open override val objectArrayCount: Int objectArrays [jvm]open override val objectArrays: Sequence<HeapObject.HeapObjectArray>Sequence of all object arrays in the heap dump. objectCount [jvm]open override val objectCount: Int objects [jvm]open override val objects: Sequence<HeapObject>Sequence of all objects in the heap dump. primitiveArrayCount [jvm]open override val primitiveArrayCount: Int primitiveArrays [jvm]open override val primitiveArrays: Sequence<HeapObject.HeapPrimitiveArray>Sequence of all primitive arrays in the heap dump."},{"location":"api/shark/-hprof-heap-graph/class-count/","title":"Class count","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/classCount</p>"},{"location":"api/shark/-hprof-heap-graph/class-count/#classcount","title":"classCount","text":"<p>[jvm]\\ open override val classCount: Int</p>"},{"location":"api/shark/-hprof-heap-graph/classes/","title":"Classes","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/classes</p>"},{"location":"api/shark/-hprof-heap-graph/classes/#classes","title":"classes","text":"<p>[jvm]\\ open override val classes: Sequence<HeapObject.HeapClass></p> <p>Sequence of all classes in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-hprof-heap-graph/close/","title":"Close","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/close</p>"},{"location":"api/shark/-hprof-heap-graph/close/#close","title":"close","text":"<p>[jvm]\\ open override fun close()</p>"},{"location":"api/shark/-hprof-heap-graph/context/","title":"Context","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/context</p>"},{"location":"api/shark/-hprof-heap-graph/context/#context","title":"context","text":"<p>[jvm]\\ open override val context: GraphContext</p> <p>In memory store that can be used to store objects this HeapGraph instance.</p>"},{"location":"api/shark/-hprof-heap-graph/find-class-by-name/","title":"Find class by name","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findClassByName</p>"},{"location":"api/shark/-hprof-heap-graph/find-class-by-name/#findclassbyname","title":"findClassByName","text":"<p>[jvm]\\ open override fun findClassByName(className: String): HeapObject.HeapClass?</p> <p>Returns the HeapClass corresponding to the provided className, or null if the class cannot be found.</p>"},{"location":"api/shark/-hprof-heap-graph/find-heap-dump-index/","title":"Find heap dump index","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findHeapDumpIndex</p>"},{"location":"api/shark/-hprof-heap-graph/find-heap-dump-index/#findheapdumpindex","title":"findHeapDumpIndex","text":"<p>[jvm]\\ open override fun findHeapDumpIndex(objectId: Long): Int</p> <p>Returns the 1-based index in the heap dump of the object corresponding to the provided objectId, and throws IllegalArgumentException otherwise.</p> <p>This is the object index that YourKit provides in its Java profiler.</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-heap-dump-index/","title":"Find object by heap dump index","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findObjectByHeapDumpIndex</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-heap-dump-index/#findobjectbyheapdumpindex","title":"findObjectByHeapDumpIndex","text":"<p>[jvm]\\ open override fun findObjectByHeapDumpIndex(heapDumpIndex: Int): HeapObject</p> <p>Returns the HeapObject corresponding to the provided heapDumpIndex, and throws IllegalArgumentException if heapDumpIndex is less than 1 or more than objectCount.</p> <p>This is the object index that YourKit provides in its Java profiler.</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-id-or-null/","title":"Find object by id or null","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findObjectByIdOrNull</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-id-or-null/#findobjectbyidornull","title":"findObjectByIdOrNull","text":"<p>[jvm]\\ open override fun findObjectByIdOrNull(objectId: Long): HeapObject?</p> <p>Returns the HeapObject corresponding to the provided objectId or null if it cannot be found.</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-id/","title":"Find object by id","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findObjectById</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-id/#findobjectbyid","title":"findObjectById","text":"<p>[jvm]\\ open override fun findObjectById(objectId: Long): HeapObject</p> <p>Returns the HeapObject corresponding to the provided objectId, and throws IllegalArgumentException otherwise.</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-index/","title":"Find object by index","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/findObjectByIndex</p>"},{"location":"api/shark/-hprof-heap-graph/find-object-by-index/#findobjectbyindex","title":"findObjectByIndex","text":"<p>[jvm]\\ open override fun findObjectByIndex(objectIndex: Int): HeapObject</p> <p>Returns the HeapObject corresponding to the provided objectIndex, and throws IllegalArgumentException if objectIndex is less than 0 or more than objectCount - 1.</p>"},{"location":"api/shark/-hprof-heap-graph/gc-roots/","title":"Gc roots","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/gcRoots</p>"},{"location":"api/shark/-hprof-heap-graph/gc-roots/#gcroots","title":"gcRoots","text":"<p>[jvm]\\ open override val gcRoots: List<GcRoot></p> <p>All GC roots which type matches types known to this heap graph and which point to non null references. You can retrieve the object that a GC Root points to by calling findObjectById with GcRoot.id, however you need to first check that objectExists returns true because GC roots can point to objects that don\u2019t exist in the heap dump.</p>"},{"location":"api/shark/-hprof-heap-graph/identifier-byte-size/","title":"Identifier byte size","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/identifierByteSize</p>"},{"location":"api/shark/-hprof-heap-graph/identifier-byte-size/#identifierbytesize","title":"identifierByteSize","text":"<p>[jvm]\\ open override val identifierByteSize: Int</p>"},{"location":"api/shark/-hprof-heap-graph/instance-count/","title":"Instance count","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/instanceCount</p>"},{"location":"api/shark/-hprof-heap-graph/instance-count/#instancecount","title":"instanceCount","text":"<p>[jvm]\\ open override val instanceCount: Int</p>"},{"location":"api/shark/-hprof-heap-graph/instances/","title":"Instances","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/instances</p>"},{"location":"api/shark/-hprof-heap-graph/instances/#instances","title":"instances","text":"<p>[jvm]\\ open override val instances: Sequence<HeapObject.HeapInstance></p> <p>Sequence of all instances in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-hprof-heap-graph/lru-cache-stats/","title":"Lru cache stats","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/lruCacheStats</p>"},{"location":"api/shark/-hprof-heap-graph/lru-cache-stats/#lrucachestats","title":"lruCacheStats","text":"<p>[jvm]\\ fun lruCacheStats(): String</p> <p>This is only public so that we can publish stats. Accessing this requires casting HeapGraph to HprofHeapGraph so it\u2019s really not a public API. May change at any time!</p>"},{"location":"api/shark/-hprof-heap-graph/object-array-count/","title":"Object array count","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/objectArrayCount</p>"},{"location":"api/shark/-hprof-heap-graph/object-array-count/#objectarraycount","title":"objectArrayCount","text":"<p>[jvm]\\ open override val objectArrayCount: Int</p>"},{"location":"api/shark/-hprof-heap-graph/object-arrays/","title":"Object arrays","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/objectArrays</p>"},{"location":"api/shark/-hprof-heap-graph/object-arrays/#objectarrays","title":"objectArrays","text":"<p>[jvm]\\ open override val objectArrays: Sequence<HeapObject.HeapObjectArray></p> <p>Sequence of all object arrays in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-hprof-heap-graph/object-count/","title":"Object count","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/objectCount</p>"},{"location":"api/shark/-hprof-heap-graph/object-count/#objectcount","title":"objectCount","text":"<p>[jvm]\\ open override val objectCount: Int</p>"},{"location":"api/shark/-hprof-heap-graph/object-exists/","title":"Object exists","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/objectExists</p>"},{"location":"api/shark/-hprof-heap-graph/object-exists/#objectexists","title":"objectExists","text":"<p>[jvm]\\ open override fun objectExists(objectId: Long): Boolean</p> <p>Returns true if the provided objectId exists in the heap dump.</p>"},{"location":"api/shark/-hprof-heap-graph/objects/","title":"Objects","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/objects</p>"},{"location":"api/shark/-hprof-heap-graph/objects/#objects","title":"objects","text":"<p>[jvm]\\ open override val objects: Sequence<HeapObject></p> <p>Sequence of all objects in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-hprof-heap-graph/primitive-array-count/","title":"Primitive array count","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/primitiveArrayCount</p>"},{"location":"api/shark/-hprof-heap-graph/primitive-array-count/#primitivearraycount","title":"primitiveArrayCount","text":"<p>[jvm]\\ open override val primitiveArrayCount: Int</p>"},{"location":"api/shark/-hprof-heap-graph/primitive-arrays/","title":"Primitive arrays","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/primitiveArrays</p>"},{"location":"api/shark/-hprof-heap-graph/primitive-arrays/#primitivearrays","title":"primitiveArrays","text":"<p>[jvm]\\ open override val primitiveArrays: Sequence<HeapObject.HeapPrimitiveArray></p> <p>Sequence of all primitive arrays in the heap dump.</p> <p>This sequence does not trigger any IO reads.</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/Companion</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun File.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraphA facility for opening a CloseableHeapGraph from a File. This first parses the file headers with HprofHeader.parseHeaderOf, then indexes the file content with HprofIndex.indexRecordsOf and then opens a CloseableHeapGraph from the index, which you are responsible for closing after using.[jvm]fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph"},{"location":"api/shark/-hprof-heap-graph/-companion/#properties","title":"Properties","text":"Name Summary INTERNAL_LRU_CACHE_SIZE [jvm]var INTERNAL_LRU_CACHE_SIZE: IntThis is not a public API, it\u2019s only public so that we can evaluate the effectiveness of different cache size in tests in a different module."},{"location":"api/shark/-hprof-heap-graph/-companion/-i-n-t-e-r-n-a-l_-l-r-u_-c-a-c-h-e_-s-i-z-e/","title":"i n t e r n a l l r u c a c h e s i z e","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/Companion/INTERNAL_LRU_CACHE_SIZE</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/-i-n-t-e-r-n-a-l_-l-r-u_-c-a-c-h-e_-s-i-z-e/#internal_lru_cache_size","title":"INTERNAL_LRU_CACHE_SIZE","text":"<p>[jvm]\\ var INTERNAL_LRU_CACHE_SIZE: Int</p> <p>This is not a public API, it\u2019s only public so that we can evaluate the effectiveness of different cache size in tests in a different module.</p> <p>LRU cache size of 3000 is a sweet spot to balance hits vs memory usage. This is based on running an instrumented test a bunch of time on a Pixel 2 XL API 28. Hit count was ~120K, miss count ~290K</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/open-heap-graph/","title":"Open heap graph","text":"<p>//leakcanary-repo/shark/HprofHeapGraph/Companion/openHeapGraph</p>"},{"location":"api/shark/-hprof-heap-graph/-companion/open-heap-graph/#openheapgraph","title":"openHeapGraph","text":"<p>[jvm]\\ fun File.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph</p> <p>A facility for opening a CloseableHeapGraph from a File. This first parses the file headers with HprofHeader.parseHeaderOf, then indexes the file content with HprofIndex.indexRecordsOf and then opens a CloseableHeapGraph from the index, which you are responsible for closing after using.</p> <p>[jvm]\\ fun DualSourceProvider.openHeapGraph(proguardMapping: ProguardMapping? = null, indexedGcRootTypes: Set<HprofRecordTag> = HprofIndex.defaultIndexedGcRootTags()): CloseableHeapGraph</p>"},{"location":"api/shark/-hprof-index/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofIndex</p>"},{"location":"api/shark/-hprof-index/#hprofindex","title":"HprofIndex","text":"<p>[jvm]\\ class HprofIndex</p> <p>An index on a Hprof file. See openHeapGraph.</p>"},{"location":"api/shark/-hprof-index/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-index/#functions","title":"Functions","text":"Name Summary openHeapGraph [jvm]fun openHeapGraph(): CloseableHeapGraphOpens a CloseableHeapGraph which you can use to navigate the indexed hprof and then close."},{"location":"api/shark/-hprof-index/open-heap-graph/","title":"Open heap graph","text":"<p>//leakcanary-repo/shark/HprofIndex/openHeapGraph</p>"},{"location":"api/shark/-hprof-index/open-heap-graph/#openheapgraph","title":"openHeapGraph","text":"<p>[jvm]\\ fun openHeapGraph(): CloseableHeapGraph</p> <p>Opens a CloseableHeapGraph which you can use to navigate the indexed hprof and then close.</p>"},{"location":"api/shark/-hprof-index/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofIndex/Companion</p>"},{"location":"api/shark/-hprof-index/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-index/-companion/#functions","title":"Functions","text":"Name Summary defaultIndexedGcRootTags [jvm]fun defaultIndexedGcRootTags(): EnumSet<HprofRecordTag> indexRecordsOf [jvm]fun indexRecordsOf(hprofSourceProvider: DualSourceProvider, hprofHeader: HprofHeader, proguardMapping: ProguardMapping? = null, indexedGcRootTags: Set<HprofRecordTag> = defaultIndexedGcRootTags()): HprofIndexCreates an in memory index of an hprof source provided by hprofSourceProvider."},{"location":"api/shark/-hprof-index/-companion/default-indexed-gc-root-tags/","title":"Default indexed gc root tags","text":"<p>//leakcanary-repo/shark/HprofIndex/Companion/defaultIndexedGcRootTags</p>"},{"location":"api/shark/-hprof-index/-companion/default-indexed-gc-root-tags/#defaultindexedgcroottags","title":"defaultIndexedGcRootTags","text":"<p>[jvm]\\ fun defaultIndexedGcRootTags(): EnumSet<HprofRecordTag></p>"},{"location":"api/shark/-hprof-index/-companion/index-records-of/","title":"Index records of","text":"<p>//leakcanary-repo/shark/HprofIndex/Companion/indexRecordsOf</p>"},{"location":"api/shark/-hprof-index/-companion/index-records-of/#indexrecordsof","title":"indexRecordsOf","text":"<p>[jvm]\\ fun indexRecordsOf(hprofSourceProvider: DualSourceProvider, hprofHeader: HprofHeader, proguardMapping: ProguardMapping? = null, indexedGcRootTags: Set<HprofRecordTag> = defaultIndexedGcRootTags()): HprofIndex</p> <p>Creates an in memory index of an hprof source provided by hprofSourceProvider.</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofPrimitiveArrayStripper</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/#hprofprimitivearraystripper","title":"HprofPrimitiveArrayStripper","text":"<p>[jvm]\\ class HprofPrimitiveArrayStripper</p> <p>Converts a Hprof file to another file with all primitive arrays replaced with arrays of zeroes, which can be useful to remove PII. Char arrays are handled slightly differently because 0 would be the null character so instead these become arrays of \u2018?\u2019.</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/#constructors","title":"Constructors","text":"HprofPrimitiveArrayStripper [jvm]constructor()"},{"location":"api/shark/-hprof-primitive-array-stripper/#functions","title":"Functions","text":"Name Summary stripPrimitiveArrays [jvm]fun stripPrimitiveArrays(inputHprofFile: File, outputHprofFile: File = File( inputHprofFile.parent, inputHprofFile.name.replace( \".hprof\", \"-stripped.hprof\" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + \"-stripped\" })): Filefun stripPrimitiveArrays(hprofSourceProvider: StreamingSourceProvider, hprofSink: BufferedSink)"},{"location":"api/shark/-hprof-primitive-array-stripper/-hprof-primitive-array-stripper/","title":"hprof primitive array stripper","text":"<p>//leakcanary-repo/shark/HprofPrimitiveArrayStripper/HprofPrimitiveArrayStripper</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/-hprof-primitive-array-stripper/#hprofprimitivearraystripper","title":"HprofPrimitiveArrayStripper","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/strip-primitive-arrays/","title":"Strip primitive arrays","text":"<p>//leakcanary-repo/shark/HprofPrimitiveArrayStripper/stripPrimitiveArrays</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/strip-primitive-arrays/#stripprimitivearrays","title":"stripPrimitiveArrays","text":"<p>[jvm]\\ fun stripPrimitiveArrays(inputHprofFile: File, outputHprofFile: File = File( inputHprofFile.parent, inputHprofFile.name.replace( \".hprof\", \"-stripped.hprof\" ).let { if (it != inputHprofFile.name) it else inputHprofFile.name + \"-stripped\" })): File</p> <p>fun stripPrimitiveArrays(hprofSourceProvider: StreamingSourceProvider, hprofSink: BufferedSink)</p>"},{"location":"api/shark/-hprof-primitive-array-stripper/strip-primitive-arrays/#see-also","title":"See also","text":"HprofPrimitiveArrayStripper"},{"location":"api/shark/-hprof-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord</p>"},{"location":"api/shark/-hprof-record/#hprofrecord","title":"HprofRecord","text":"<p>sealed class HprofRecord</p> <p>A Hprof record. These data structure map 1:1 with how records are written in hprof files.</p>"},{"location":"api/shark/-hprof-record/#inheritors","title":"Inheritors","text":"StringRecord LoadClassRecord UnloadClassRecord HeapDumpEndRecord StackFrameRecord StackTraceRecord HeapDumpRecord"},{"location":"api/shark/-hprof-record/#types","title":"Types","text":"Name Summary HeapDumpEndRecord [jvm]object HeapDumpEndRecord : HprofRecordTerminates a series of heap dump segments. Concatenation of heap dump segments equals a heap dump. HeapDumpRecord [jvm]sealed class HeapDumpRecord : HprofRecord LoadClassRecord [jvm]class LoadClassRecord(val classSerialNumber: Int, val id: Long, val stackTraceSerialNumber: Int, val classNameStringId: Long) : HprofRecord StackFrameRecord [jvm]class StackFrameRecord(val id: Long, val methodNameStringId: Long, val methodSignatureStringId: Long, val sourceFileNameStringId: Long, val classSerialNumber: Int, val lineNumber: Int) : HprofRecord StackTraceRecord [jvm]class StackTraceRecord(val stackTraceSerialNumber: Int, val threadSerialNumber: Int, val stackFrameIds: LongArray) : HprofRecord StringRecord [jvm]class StringRecord(val id: Long, val string: String) : HprofRecord UnloadClassRecord [jvm]class UnloadClassRecord(val classSerialNumber: Int) : HprofRecord"},{"location":"api/shark/-hprof-record/-heap-dump-end-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpEndRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-end-record/#heapdumpendrecord","title":"HeapDumpEndRecord","text":"<p>[jvm]\\ object HeapDumpEndRecord : HprofRecord</p> <p>Terminates a series of heap dump segments. Concatenation of heap dump segments equals a heap dump.</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/#heapdumprecord","title":"HeapDumpRecord","text":"<p>sealed class HeapDumpRecord : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/#inheritors","title":"Inheritors","text":"GcRootRecord ObjectRecord HeapDumpInfoRecord"},{"location":"api/shark/-hprof-record/-heap-dump-record/#types","title":"Types","text":"Name Summary GcRootRecord [jvm]class GcRootRecord(val gcRoot: GcRoot) : HprofRecord.HeapDumpRecord HeapDumpInfoRecord [jvm]class HeapDumpInfoRecord(val heapId: Int, val heapNameStringId: Long) : HprofRecord.HeapDumpRecord ObjectRecord [jvm]sealed class ObjectRecord : HprofRecord.HeapDumpRecord"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/GcRootRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/#gcrootrecord","title":"GcRootRecord","text":"<p>[jvm]\\ class GcRootRecord(val gcRoot: GcRoot) : HprofRecord.HeapDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/#constructors","title":"Constructors","text":"GcRootRecord [jvm]constructor(gcRoot: GcRoot)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/#properties","title":"Properties","text":"Name Summary gcRoot [jvm]val gcRoot: GcRoot"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/-gc-root-record/","title":"gc root record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/GcRootRecord/GcRootRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/-gc-root-record/#gcrootrecord","title":"GcRootRecord","text":"<p>[jvm]\\ constructor(gcRoot: GcRoot)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/gc-root/","title":"Gc root","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/GcRootRecord/gcRoot</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-gc-root-record/gc-root/#gcroot","title":"gcRoot","text":"<p>[jvm]\\ val gcRoot: GcRoot</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/HeapDumpInfoRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/#heapdumpinforecord","title":"HeapDumpInfoRecord","text":"<p>[jvm]\\ class HeapDumpInfoRecord(val heapId: Int, val heapNameStringId: Long) : HprofRecord.HeapDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/#constructors","title":"Constructors","text":"HeapDumpInfoRecord [jvm]constructor(heapId: Int, heapNameStringId: Long)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/#properties","title":"Properties","text":"Name Summary heapId [jvm]val heapId: Int heapNameStringId [jvm]val heapNameStringId: Long"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/-heap-dump-info-record/","title":"heap dump info record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/HeapDumpInfoRecord/HeapDumpInfoRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/-heap-dump-info-record/#heapdumpinforecord","title":"HeapDumpInfoRecord","text":"<p>[jvm]\\ constructor(heapId: Int, heapNameStringId: Long)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/heap-id/","title":"Heap id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/HeapDumpInfoRecord/heapId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/heap-id/#heapid","title":"heapId","text":"<p>[jvm]\\ val heapId: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/heap-name-string-id/","title":"Heap name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/HeapDumpInfoRecord/heapNameStringId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-heap-dump-info-record/heap-name-string-id/#heapnamestringid","title":"heapNameStringId","text":"<p>[jvm]\\ val heapNameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/#objectrecord","title":"ObjectRecord","text":"<p>sealed class ObjectRecord : HprofRecord.HeapDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/#inheritors","title":"Inheritors","text":"ClassDumpRecord InstanceDumpRecord ObjectArrayDumpRecord PrimitiveArrayDumpRecord"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/#types","title":"Types","text":"Name Summary ClassDumpRecord [jvm]class ClassDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val superclassId: Long, val classLoaderId: Long, val signersId: Long, val protectionDomainId: Long, val instanceSize: Int, val staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord>, val fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord>) : HprofRecord.HeapDumpRecord.ObjectRecord InstanceDumpRecord [jvm]class InstanceDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val classId: Long, val fieldValues: ByteArray) : HprofRecord.HeapDumpRecord.ObjectRecord ObjectArrayDumpRecord [jvm]class ObjectArrayDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val arrayClassId: Long, val elementIds: LongArray) : HprofRecord.HeapDumpRecord.ObjectRecord PrimitiveArrayDumpRecord [jvm]sealed class PrimitiveArrayDumpRecord : HprofRecord.HeapDumpRecord.ObjectRecord"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/#classdumprecord","title":"ClassDumpRecord","text":"<p>[jvm]\\ class ClassDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val superclassId: Long, val classLoaderId: Long, val signersId: Long, val protectionDomainId: Long, val instanceSize: Int, val staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord>, val fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord>) : HprofRecord.HeapDumpRecord.ObjectRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/#constructors","title":"Constructors","text":"ClassDumpRecord [jvm]constructor(id: Long, stackTraceSerialNumber: Int, superclassId: Long, classLoaderId: Long, signersId: Long, protectionDomainId: Long, instanceSize: Int, staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord>, fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord>)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/#types","title":"Types","text":"Name Summary FieldRecord [jvm]data class FieldRecord(val nameStringId: Long, val type: Int) StaticFieldRecord [jvm]data class StaticFieldRecord(val nameStringId: Long, val type: Int, val value: ValueHolder)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/#properties","title":"Properties","text":"Name Summary classLoaderId [jvm]val classLoaderId: Long fields [jvm]val fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord> id [jvm]val id: Long instanceSize [jvm]val instanceSize: Int protectionDomainId [jvm]val protectionDomainId: Long signersId [jvm]val signersId: Long stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int staticFields [jvm]val staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord> superclassId [jvm]val superclassId: Long"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-class-dump-record/","title":"class dump record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/ClassDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-class-dump-record/#classdumprecord","title":"ClassDumpRecord","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, superclassId: Long, classLoaderId: Long, signersId: Long, protectionDomainId: Long, instanceSize: Int, staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord>, fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord>)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/class-loader-id/","title":"Class loader id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/classLoaderId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/class-loader-id/#classloaderid","title":"classLoaderId","text":"<p>[jvm]\\ val classLoaderId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/fields/","title":"Fields","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/fields</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/fields/#fields","title":"fields","text":"<p>[jvm]\\ val fields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.FieldRecord></p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/instance-size/","title":"Instance size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/instanceSize</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/instance-size/#instancesize","title":"instanceSize","text":"<p>[jvm]\\ val instanceSize: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/protection-domain-id/","title":"Protection domain id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/protectionDomainId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/protection-domain-id/#protectiondomainid","title":"protectionDomainId","text":"<p>[jvm]\\ val protectionDomainId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/signers-id/","title":"Signers id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/signersId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/signers-id/#signersid","title":"signersId","text":"<p>[jvm]\\ val signersId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/static-fields/","title":"Static fields","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/staticFields</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/static-fields/#staticfields","title":"staticFields","text":"<p>[jvm]\\ val staticFields: List<HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord.StaticFieldRecord></p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/superclass-id/","title":"Superclass id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/superclassId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/superclass-id/#superclassid","title":"superclassId","text":"<p>[jvm]\\ val superclassId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/FieldRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/#fieldrecord","title":"FieldRecord","text":"<p>[jvm]\\ data class FieldRecord(val nameStringId: Long, val type: Int)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/#constructors","title":"Constructors","text":"FieldRecord [jvm]constructor(nameStringId: Long, type: Int)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/#properties","title":"Properties","text":"Name Summary nameStringId [jvm]val nameStringId: Long type [jvm]val type: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/-field-record/","title":"field record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/FieldRecord/FieldRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/-field-record/#fieldrecord","title":"FieldRecord","text":"<p>[jvm]\\ constructor(nameStringId: Long, type: Int)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/name-string-id/","title":"Name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/FieldRecord/nameStringId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/name-string-id/#namestringid","title":"nameStringId","text":"<p>[jvm]\\ val nameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/type/","title":"Type","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/FieldRecord/type</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-field-record/type/#type","title":"type","text":"<p>[jvm]\\ val type: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/StaticFieldRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/#staticfieldrecord","title":"StaticFieldRecord","text":"<p>[jvm]\\ data class StaticFieldRecord(val nameStringId: Long, val type: Int, val value: ValueHolder)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/#constructors","title":"Constructors","text":"StaticFieldRecord [jvm]constructor(nameStringId: Long, type: Int, value: ValueHolder)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/#properties","title":"Properties","text":"Name Summary nameStringId [jvm]val nameStringId: Long type [jvm]val type: Int value [jvm]val value: ValueHolder"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/-static-field-record/","title":"static field record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/StaticFieldRecord/StaticFieldRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/-static-field-record/#staticfieldrecord","title":"StaticFieldRecord","text":"<p>[jvm]\\ constructor(nameStringId: Long, type: Int, value: ValueHolder)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/name-string-id/","title":"Name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/StaticFieldRecord/nameStringId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/name-string-id/#namestringid","title":"nameStringId","text":"<p>[jvm]\\ val nameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/type/","title":"Type","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/StaticFieldRecord/type</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/type/#type","title":"type","text":"<p>[jvm]\\ val type: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/value/","title":"Value","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ClassDumpRecord/StaticFieldRecord/value</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-class-dump-record/-static-field-record/value/#value","title":"value","text":"<p>[jvm]\\ val value: ValueHolder</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/#instancedumprecord","title":"InstanceDumpRecord","text":"<p>[jvm]\\ class InstanceDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val classId: Long, val fieldValues: ByteArray) : HprofRecord.HeapDumpRecord.ObjectRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/#constructors","title":"Constructors","text":"InstanceDumpRecord [jvm]constructor(id: Long, stackTraceSerialNumber: Int, classId: Long, fieldValues: ByteArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/#properties","title":"Properties","text":"Name Summary classId [jvm]val classId: Long fieldValues [jvm]val fieldValues: ByteArrayInstance field values (this class, followed by super class, etc) id [jvm]val id: Long stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/-instance-dump-record/","title":"instance dump record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord/InstanceDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/-instance-dump-record/#instancedumprecord","title":"InstanceDumpRecord","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, classId: Long, fieldValues: ByteArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/class-id/","title":"Class id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord/classId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/class-id/#classid","title":"classId","text":"<p>[jvm]\\ val classId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/field-values/","title":"Field values","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord/fieldValues</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/field-values/#fieldvalues","title":"fieldValues","text":"<p>[jvm]\\ val fieldValues: ByteArray</p> <p>Instance field values (this class, followed by super class, etc)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/InstanceDumpRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-instance-dump-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/#objectarraydumprecord","title":"ObjectArrayDumpRecord","text":"<p>[jvm]\\ class ObjectArrayDumpRecord(val id: Long, val stackTraceSerialNumber: Int, val arrayClassId: Long, val elementIds: LongArray) : HprofRecord.HeapDumpRecord.ObjectRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/#constructors","title":"Constructors","text":"ObjectArrayDumpRecord [jvm]constructor(id: Long, stackTraceSerialNumber: Int, arrayClassId: Long, elementIds: LongArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/#properties","title":"Properties","text":"Name Summary arrayClassId [jvm]val arrayClassId: Long elementIds [jvm]val elementIds: LongArray id [jvm]val id: Long stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/-object-array-dump-record/","title":"object array dump record","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord/ObjectArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/-object-array-dump-record/#objectarraydumprecord","title":"ObjectArrayDumpRecord","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, arrayClassId: Long, elementIds: LongArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/array-class-id/","title":"Array class id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord/arrayClassId</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/array-class-id/#arrayclassid","title":"arrayClassId","text":"<p>[jvm]\\ val arrayClassId: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/element-ids/","title":"Element ids","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord/elementIds</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/element-ids/#elementids","title":"elementIds","text":"<p>[jvm]\\ val elementIds: LongArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/ObjectArrayDumpRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-object-array-dump-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/#primitivearraydumprecord","title":"PrimitiveArrayDumpRecord","text":"<p>sealed class PrimitiveArrayDumpRecord : HprofRecord.HeapDumpRecord.ObjectRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/#inheritors","title":"Inheritors","text":"BooleanArrayDump CharArrayDump FloatArrayDump DoubleArrayDump ByteArrayDump ShortArrayDump IntArrayDump LongArrayDump"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/#types","title":"Types","text":"Name Summary BooleanArrayDump [jvm]class BooleanArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: BooleanArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord ByteArrayDump [jvm]class ByteArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: ByteArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord CharArrayDump [jvm]class CharArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: CharArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord DoubleArrayDump [jvm]class DoubleArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: DoubleArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord FloatArrayDump [jvm]class FloatArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: FloatArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord IntArrayDump [jvm]class IntArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: IntArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord LongArrayDump [jvm]class LongArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: LongArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord ShortArrayDump [jvm]class ShortArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: ShortArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/#properties","title":"Properties","text":"Name Summary id [jvm]abstract val id: Long size [jvm]abstract val size: Int stackTraceSerialNumber [jvm]abstract val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/id/#id","title":"id","text":"<p>[jvm]\\ abstract val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/size/#size","title":"size","text":"<p>[jvm]\\ abstract val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ abstract val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/#booleanarraydump","title":"BooleanArrayDump","text":"<p>[jvm]\\ class BooleanArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: BooleanArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/#constructors","title":"Constructors","text":"BooleanArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: BooleanArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: BooleanArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/-boolean-array-dump/","title":"boolean array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump/BooleanArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/-boolean-array-dump/#booleanarraydump","title":"BooleanArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: BooleanArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: BooleanArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/BooleanArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-boolean-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/#bytearraydump","title":"ByteArrayDump","text":"<p>[jvm]\\ class ByteArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: ByteArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/#constructors","title":"Constructors","text":"ByteArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: ByteArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: ByteArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/-byte-array-dump/","title":"byte array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump/ByteArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/-byte-array-dump/#bytearraydump","title":"ByteArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: ByteArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: ByteArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ByteArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-byte-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/#chararraydump","title":"CharArrayDump","text":"<p>[jvm]\\ class CharArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: CharArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/#constructors","title":"Constructors","text":"CharArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: CharArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: CharArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/-char-array-dump/","title":"char array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump/CharArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/-char-array-dump/#chararraydump","title":"CharArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: CharArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: CharArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/CharArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-char-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/#doublearraydump","title":"DoubleArrayDump","text":"<p>[jvm]\\ class DoubleArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: DoubleArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/#constructors","title":"Constructors","text":"DoubleArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: DoubleArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: DoubleArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/-double-array-dump/","title":"double array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump/DoubleArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/-double-array-dump/#doublearraydump","title":"DoubleArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: DoubleArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: DoubleArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/DoubleArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-double-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/#floatarraydump","title":"FloatArrayDump","text":"<p>[jvm]\\ class FloatArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: FloatArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/#constructors","title":"Constructors","text":"FloatArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: FloatArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: FloatArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/-float-array-dump/","title":"float array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump/FloatArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/-float-array-dump/#floatarraydump","title":"FloatArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: FloatArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: FloatArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/FloatArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-float-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/#intarraydump","title":"IntArrayDump","text":"<p>[jvm]\\ class IntArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: IntArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/#constructors","title":"Constructors","text":"IntArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: IntArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: IntArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/-int-array-dump/","title":"int array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump/IntArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/-int-array-dump/#intarraydump","title":"IntArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: IntArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: IntArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/IntArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-int-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/#longarraydump","title":"LongArrayDump","text":"<p>[jvm]\\ class LongArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: LongArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/#constructors","title":"Constructors","text":"LongArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: LongArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: LongArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/-long-array-dump/","title":"long array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump/LongArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/-long-array-dump/#longarraydump","title":"LongArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: LongArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: LongArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/LongArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-long-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/#shortarraydump","title":"ShortArrayDump","text":"<p>[jvm]\\ class ShortArrayDump(val id: Long, val stackTraceSerialNumber: Int, val array: ShortArray) : HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/#constructors","title":"Constructors","text":"ShortArrayDump [jvm]constructor(id: Long, stackTraceSerialNumber: Int, array: ShortArray)"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/#properties","title":"Properties","text":"Name Summary array [jvm]val array: ShortArray id [jvm]open override val id: Long size [jvm]open override val size: Int stackTraceSerialNumber [jvm]open override val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/-short-array-dump/","title":"short array dump","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump/ShortArrayDump</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/-short-array-dump/#shortarraydump","title":"ShortArrayDump","text":"<p>[jvm]\\ constructor(id: Long, stackTraceSerialNumber: Int, array: ShortArray)</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/array/","title":"Array","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump/array</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/array/#array","title":"array","text":"<p>[jvm]\\ val array: ShortArray</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump/id</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/id/#id","title":"id","text":"<p>[jvm]\\ open override val id: Long</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/size/","title":"Size","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump/size</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/size/#size","title":"size","text":"<p>[jvm]\\ open override val size: Int</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/HeapDumpRecord/ObjectRecord/PrimitiveArrayDumpRecord/ShortArrayDump/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-heap-dump-record/-object-record/-primitive-array-dump-record/-short-array-dump/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ open override val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-load-class-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord</p>"},{"location":"api/shark/-hprof-record/-load-class-record/#loadclassrecord","title":"LoadClassRecord","text":"<p>[jvm]\\ class LoadClassRecord(val classSerialNumber: Int, val id: Long, val stackTraceSerialNumber: Int, val classNameStringId: Long) : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-load-class-record/#constructors","title":"Constructors","text":"LoadClassRecord [jvm]constructor(classSerialNumber: Int, id: Long, stackTraceSerialNumber: Int, classNameStringId: Long)"},{"location":"api/shark/-hprof-record/-load-class-record/#properties","title":"Properties","text":"Name Summary classNameStringId [jvm]val classNameStringId: Long classSerialNumber [jvm]val classSerialNumber: Int id [jvm]val id: Long stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int"},{"location":"api/shark/-hprof-record/-load-class-record/-load-class-record/","title":"load class record","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord/LoadClassRecord</p>"},{"location":"api/shark/-hprof-record/-load-class-record/-load-class-record/#loadclassrecord","title":"LoadClassRecord","text":"<p>[jvm]\\ constructor(classSerialNumber: Int, id: Long, stackTraceSerialNumber: Int, classNameStringId: Long)</p>"},{"location":"api/shark/-hprof-record/-load-class-record/class-name-string-id/","title":"Class name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord/classNameStringId</p>"},{"location":"api/shark/-hprof-record/-load-class-record/class-name-string-id/#classnamestringid","title":"classNameStringId","text":"<p>[jvm]\\ val classNameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-load-class-record/class-serial-number/","title":"Class serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord/classSerialNumber</p>"},{"location":"api/shark/-hprof-record/-load-class-record/class-serial-number/#classserialnumber","title":"classSerialNumber","text":"<p>[jvm]\\ val classSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-load-class-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord/id</p>"},{"location":"api/shark/-hprof-record/-load-class-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-load-class-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/LoadClassRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-load-class-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/#stackframerecord","title":"StackFrameRecord","text":"<p>[jvm]\\ class StackFrameRecord(val id: Long, val methodNameStringId: Long, val methodSignatureStringId: Long, val sourceFileNameStringId: Long, val classSerialNumber: Int, val lineNumber: Int) : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/#constructors","title":"Constructors","text":"StackFrameRecord [jvm]constructor(id: Long, methodNameStringId: Long, methodSignatureStringId: Long, sourceFileNameStringId: Long, classSerialNumber: Int, lineNumber: Int)"},{"location":"api/shark/-hprof-record/-stack-frame-record/#properties","title":"Properties","text":"Name Summary classSerialNumber [jvm]val classSerialNumber: Int id [jvm]val id: Long lineNumber [jvm]val lineNumber: Int methodNameStringId [jvm]val methodNameStringId: Long methodSignatureStringId [jvm]val methodSignatureStringId: Long sourceFileNameStringId [jvm]val sourceFileNameStringId: Long"},{"location":"api/shark/-hprof-record/-stack-frame-record/-stack-frame-record/","title":"stack frame record","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/StackFrameRecord</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/-stack-frame-record/#stackframerecord","title":"StackFrameRecord","text":"<p>[jvm]\\ constructor(id: Long, methodNameStringId: Long, methodSignatureStringId: Long, sourceFileNameStringId: Long, classSerialNumber: Int, lineNumber: Int)</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/class-serial-number/","title":"Class serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/classSerialNumber</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/class-serial-number/#classserialnumber","title":"classSerialNumber","text":"<p>[jvm]\\ val classSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/id</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/line-number/","title":"Line number","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/lineNumber</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/line-number/#linenumber","title":"lineNumber","text":"<p>[jvm]\\ val lineNumber: Int</p> <p>0 line number 0 no line information available -1 unknown location -2 compiled method (Not implemented) -3 native method (Not implemented)</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/method-name-string-id/","title":"Method name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/methodNameStringId</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/method-name-string-id/#methodnamestringid","title":"methodNameStringId","text":"<p>[jvm]\\ val methodNameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/method-signature-string-id/","title":"Method signature string id","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/methodSignatureStringId</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/method-signature-string-id/#methodsignaturestringid","title":"methodSignatureStringId","text":"<p>[jvm]\\ val methodSignatureStringId: Long</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/source-file-name-string-id/","title":"Source file name string id","text":"<p>//leakcanary-repo/shark/HprofRecord/StackFrameRecord/sourceFileNameStringId</p>"},{"location":"api/shark/-hprof-record/-stack-frame-record/source-file-name-string-id/#sourcefilenamestringid","title":"sourceFileNameStringId","text":"<p>[jvm]\\ val sourceFileNameStringId: Long</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/StackTraceRecord</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/#stacktracerecord","title":"StackTraceRecord","text":"<p>[jvm]\\ class StackTraceRecord(val stackTraceSerialNumber: Int, val threadSerialNumber: Int, val stackFrameIds: LongArray) : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/#constructors","title":"Constructors","text":"StackTraceRecord [jvm]constructor(stackTraceSerialNumber: Int, threadSerialNumber: Int, stackFrameIds: LongArray)"},{"location":"api/shark/-hprof-record/-stack-trace-record/#properties","title":"Properties","text":"Name Summary stackFrameIds [jvm]val stackFrameIds: LongArray stackTraceSerialNumber [jvm]val stackTraceSerialNumber: Int threadSerialNumber [jvm]val threadSerialNumber: Int"},{"location":"api/shark/-hprof-record/-stack-trace-record/-stack-trace-record/","title":"stack trace record","text":"<p>//leakcanary-repo/shark/HprofRecord/StackTraceRecord/StackTraceRecord</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/-stack-trace-record/#stacktracerecord","title":"StackTraceRecord","text":"<p>[jvm]\\ constructor(stackTraceSerialNumber: Int, threadSerialNumber: Int, stackFrameIds: LongArray)</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/stack-frame-ids/","title":"Stack frame ids","text":"<p>//leakcanary-repo/shark/HprofRecord/StackTraceRecord/stackFrameIds</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/stack-frame-ids/#stackframeids","title":"stackFrameIds","text":"<p>[jvm]\\ val stackFrameIds: LongArray</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/stack-trace-serial-number/","title":"Stack trace serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/StackTraceRecord/stackTraceSerialNumber</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/stack-trace-serial-number/#stacktraceserialnumber","title":"stackTraceSerialNumber","text":"<p>[jvm]\\ val stackTraceSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/thread-serial-number/","title":"Thread serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/StackTraceRecord/threadSerialNumber</p>"},{"location":"api/shark/-hprof-record/-stack-trace-record/thread-serial-number/#threadserialnumber","title":"threadSerialNumber","text":"<p>[jvm]\\ val threadSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record/-string-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/StringRecord</p>"},{"location":"api/shark/-hprof-record/-string-record/#stringrecord","title":"StringRecord","text":"<p>[jvm]\\ class StringRecord(val id: Long, val string: String) : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-string-record/#constructors","title":"Constructors","text":"StringRecord [jvm]constructor(id: Long, string: String)"},{"location":"api/shark/-hprof-record/-string-record/#properties","title":"Properties","text":"Name Summary id [jvm]val id: Long string [jvm]val string: String"},{"location":"api/shark/-hprof-record/-string-record/-string-record/","title":"string record","text":"<p>//leakcanary-repo/shark/HprofRecord/StringRecord/StringRecord</p>"},{"location":"api/shark/-hprof-record/-string-record/-string-record/#stringrecord","title":"StringRecord","text":"<p>[jvm]\\ constructor(id: Long, string: String)</p>"},{"location":"api/shark/-hprof-record/-string-record/id/","title":"Id","text":"<p>//leakcanary-repo/shark/HprofRecord/StringRecord/id</p>"},{"location":"api/shark/-hprof-record/-string-record/id/#id","title":"id","text":"<p>[jvm]\\ val id: Long</p>"},{"location":"api/shark/-hprof-record/-string-record/string/","title":"String","text":"<p>//leakcanary-repo/shark/HprofRecord/StringRecord/string</p>"},{"location":"api/shark/-hprof-record/-string-record/string/#string","title":"string","text":"<p>[jvm]\\ val string: String</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecord/UnloadClassRecord</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/#unloadclassrecord","title":"UnloadClassRecord","text":"<p>[jvm]\\ class UnloadClassRecord(val classSerialNumber: Int) : HprofRecord</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/#constructors","title":"Constructors","text":"UnloadClassRecord [jvm]constructor(classSerialNumber: Int)"},{"location":"api/shark/-hprof-record/-unload-class-record/#properties","title":"Properties","text":"Name Summary classSerialNumber [jvm]val classSerialNumber: Int"},{"location":"api/shark/-hprof-record/-unload-class-record/-unload-class-record/","title":"unload class record","text":"<p>//leakcanary-repo/shark/HprofRecord/UnloadClassRecord/UnloadClassRecord</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/-unload-class-record/#unloadclassrecord","title":"UnloadClassRecord","text":"<p>[jvm]\\ constructor(classSerialNumber: Int)</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/class-serial-number/","title":"Class serial number","text":"<p>//leakcanary-repo/shark/HprofRecord/UnloadClassRecord/classSerialNumber</p>"},{"location":"api/shark/-hprof-record/-unload-class-record/class-serial-number/#classserialnumber","title":"classSerialNumber","text":"<p>[jvm]\\ val classSerialNumber: Int</p>"},{"location":"api/shark/-hprof-record-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordReader</p>"},{"location":"api/shark/-hprof-record-reader/#hprofrecordreader","title":"HprofRecordReader","text":"<p>[jvm]\\ class HprofRecordReader</p> <p>Reads hprof content from an Okio BufferedSource.</p> <p>Binary Dump Format reference: http://hg.openjdk.java.net/jdk6/jdk6/jdk/raw-file/tip/src/share /demo/jvmti/hprof/manual.html#mozTocId848088</p> <p>The Android Hprof format differs in some ways from that reference. This parser implementation is largely adapted from https://android.googlesource.com/platform/tools/base/+/studio-master-dev /perflib/src/main/java/com/android/tools/perflib</p> <p>Not thread safe, should be used from a single thread.</p>"},{"location":"api/shark/-hprof-record-reader/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-record-reader/#functions","title":"Functions","text":"Name Summary readBoolean [jvm]fun readBoolean(): Boolean readBooleanArray [jvm]fun readBooleanArray(arrayLength: Int): BooleanArray readByte [jvm]fun readByte(): Byte readByteArray [jvm]fun readByteArray(byteCount: Int): ByteArray readChar [jvm]fun readChar(): Char readCharArray [jvm]fun readCharArray(arrayLength: Int): CharArray readClassDumpRecord [jvm]fun readClassDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecordReads a full class record after a class dump tag. readDebuggerGcRootRecord [jvm]fun readDebuggerGcRootRecord(): GcRoot.Debugger readDouble [jvm]fun readDouble(): Double readDoubleArray [jvm]fun readDoubleArray(arrayLength: Int): DoubleArray readFinalizingGcRootRecord [jvm]fun readFinalizingGcRootRecord(): GcRoot.Finalizing readFloat [jvm]fun readFloat(): Float readFloatArray [jvm]fun readFloatArray(arrayLength: Int): FloatArray readHeapDumpInfoRecord [jvm]fun readHeapDumpInfoRecord(): HprofRecord.HeapDumpRecord.HeapDumpInfoRecord readId [jvm]fun readId(): Long readIdArray [jvm]fun readIdArray(arrayLength: Int): LongArray readInstanceDumpRecord [jvm]fun readInstanceDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.InstanceDumpRecordReads a full instance record after a instance dump tag. readInt [jvm]fun readInt(): Int readIntArray [jvm]fun readIntArray(arrayLength: Int): IntArray readInternedStringGcRootRecord [jvm]fun readInternedStringGcRootRecord(): GcRoot.InternedString readJavaFrameGcRootRecord [jvm]fun readJavaFrameGcRootRecord(): GcRoot.JavaFrame readJniGlobalGcRootRecord [jvm]fun readJniGlobalGcRootRecord(): GcRoot.JniGlobal readJniLocalGcRootRecord [jvm]fun readJniLocalGcRootRecord(): GcRoot.JniLocal readJniMonitorGcRootRecord [jvm]fun readJniMonitorGcRootRecord(): GcRoot.JniMonitor readLoadClassRecord [jvm]fun readLoadClassRecord(): HprofRecord.LoadClassRecord readLong [jvm]fun readLong(): Long readLongArray [jvm]fun readLongArray(arrayLength: Int): LongArray readMonitorUsedGcRootRecord [jvm]fun readMonitorUsedGcRootRecord(): GcRoot.MonitorUsed readNativeStackGcRootRecord [jvm]fun readNativeStackGcRootRecord(): GcRoot.NativeStack readObjectArrayDumpRecord [jvm]fun readObjectArrayDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ObjectArrayDumpRecordReads a full object array record after a object array dump tag. readPrimitiveArrayDumpRecord [jvm]fun readPrimitiveArrayDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecordReads a full primitive array record after a primitive array dump tag. readReferenceCleanupGcRootRecord [jvm]fun readReferenceCleanupGcRootRecord(): GcRoot.ReferenceCleanup readShort [jvm]fun readShort(): Short readShortArray [jvm]fun readShortArray(arrayLength: Int): ShortArray readStackFrameRecord [jvm]fun readStackFrameRecord(): HprofRecord.StackFrameRecord readStackTraceRecord [jvm]fun readStackTraceRecord(): HprofRecord.StackTraceRecord readStickyClassGcRootRecord [jvm]fun readStickyClassGcRootRecord(): GcRoot.StickyClass readString [jvm]fun readString(byteCount: Int, charset: Charset): String readStringRecord [jvm]fun readStringRecord(length: Long): HprofRecord.StringRecord readThreadBlockGcRootRecord [jvm]fun readThreadBlockGcRootRecord(): GcRoot.ThreadBlock readThreadObjectGcRootRecord [jvm]fun readThreadObjectGcRootRecord(): GcRoot.ThreadObject readUnknownGcRootRecord [jvm]fun readUnknownGcRootRecord(): GcRoot.Unknown readUnloadClassRecord [jvm]fun readUnloadClassRecord(): HprofRecord.UnloadClassRecord readUnreachableGcRootRecord [jvm]fun readUnreachableGcRootRecord(): GcRoot.Unreachable readUnsignedByte [jvm]fun readUnsignedByte(): Int readUnsignedInt [jvm]fun readUnsignedInt(): Long readUnsignedShort [jvm]fun readUnsignedShort(): Int readUtf8 [jvm]fun readUtf8(byteCount: Long): String readValue [jvm]fun readValue(type: Int): ValueHolderReads a value in the heap dump, which can be a reference or a primitive type. readVmInternalGcRootRecord [jvm]fun readVmInternalGcRootRecord(): GcRoot.VmInternal sizeOf [jvm]fun sizeOf(type: Int): Int skip [jvm]fun skip(byteCount: Int)fun skip(byteCount: Long) skipClassDumpConstantPool [jvm]fun skipClassDumpConstantPool() skipClassDumpFields [jvm]fun skipClassDumpFields() skipClassDumpHeader [jvm]fun skipClassDumpHeader() skipClassDumpRecord [jvm]fun skipClassDumpRecord() skipClassDumpStaticFields [jvm]fun skipClassDumpStaticFields() skipHeapDumpInfoRecord [jvm]fun skipHeapDumpInfoRecord() skipId [jvm]fun skipId() skipInstanceDumpRecord [jvm]fun skipInstanceDumpRecord() skipObjectArrayDumpRecord [jvm]fun skipObjectArrayDumpRecord() skipPrimitiveArrayDumpRecord [jvm]fun skipPrimitiveArrayDumpRecord()"},{"location":"api/shark/-hprof-record-reader/#properties","title":"Properties","text":"Name Summary bytesRead [jvm]var bytesRead: LongHow many bytes this reader has read from source. Can only increase."},{"location":"api/shark/-hprof-record-reader/bytes-read/","title":"Bytes read","text":"<p>//leakcanary-repo/shark/HprofRecordReader/bytesRead</p>"},{"location":"api/shark/-hprof-record-reader/bytes-read/#bytesread","title":"bytesRead","text":"<p>[jvm]\\ var bytesRead: Long</p> <p>How many bytes this reader has read from source. Can only increase.</p>"},{"location":"api/shark/-hprof-record-reader/read-boolean-array/","title":"Read boolean array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readBooleanArray</p>"},{"location":"api/shark/-hprof-record-reader/read-boolean-array/#readbooleanarray","title":"readBooleanArray","text":"<p>[jvm]\\ fun readBooleanArray(arrayLength: Int): BooleanArray</p>"},{"location":"api/shark/-hprof-record-reader/read-boolean/","title":"Read boolean","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readBoolean</p>"},{"location":"api/shark/-hprof-record-reader/read-boolean/#readboolean","title":"readBoolean","text":"<p>[jvm]\\ fun readBoolean(): Boolean</p>"},{"location":"api/shark/-hprof-record-reader/read-byte-array/","title":"Read byte array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readByteArray</p>"},{"location":"api/shark/-hprof-record-reader/read-byte-array/#readbytearray","title":"readByteArray","text":"<p>[jvm]\\ fun readByteArray(byteCount: Int): ByteArray</p>"},{"location":"api/shark/-hprof-record-reader/read-byte/","title":"Read byte","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readByte</p>"},{"location":"api/shark/-hprof-record-reader/read-byte/#readbyte","title":"readByte","text":"<p>[jvm]\\ fun readByte(): Byte</p>"},{"location":"api/shark/-hprof-record-reader/read-char-array/","title":"Read char array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readCharArray</p>"},{"location":"api/shark/-hprof-record-reader/read-char-array/#readchararray","title":"readCharArray","text":"<p>[jvm]\\ fun readCharArray(arrayLength: Int): CharArray</p>"},{"location":"api/shark/-hprof-record-reader/read-char/","title":"Read char","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readChar</p>"},{"location":"api/shark/-hprof-record-reader/read-char/#readchar","title":"readChar","text":"<p>[jvm]\\ fun readChar(): Char</p>"},{"location":"api/shark/-hprof-record-reader/read-class-dump-record/","title":"Read class dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readClassDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-class-dump-record/#readclassdumprecord","title":"readClassDumpRecord","text":"<p>[jvm]\\ fun readClassDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ClassDumpRecord</p> <p>Reads a full class record after a class dump tag.</p>"},{"location":"api/shark/-hprof-record-reader/read-debugger-gc-root-record/","title":"Read debugger gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readDebuggerGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-debugger-gc-root-record/#readdebuggergcrootrecord","title":"readDebuggerGcRootRecord","text":"<p>[jvm]\\ fun readDebuggerGcRootRecord(): GcRoot.Debugger</p>"},{"location":"api/shark/-hprof-record-reader/read-double-array/","title":"Read double array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readDoubleArray</p>"},{"location":"api/shark/-hprof-record-reader/read-double-array/#readdoublearray","title":"readDoubleArray","text":"<p>[jvm]\\ fun readDoubleArray(arrayLength: Int): DoubleArray</p>"},{"location":"api/shark/-hprof-record-reader/read-double/","title":"Read double","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readDouble</p>"},{"location":"api/shark/-hprof-record-reader/read-double/#readdouble","title":"readDouble","text":"<p>[jvm]\\ fun readDouble(): Double</p>"},{"location":"api/shark/-hprof-record-reader/read-finalizing-gc-root-record/","title":"Read finalizing gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readFinalizingGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-finalizing-gc-root-record/#readfinalizinggcrootrecord","title":"readFinalizingGcRootRecord","text":"<p>[jvm]\\ fun readFinalizingGcRootRecord(): GcRoot.Finalizing</p>"},{"location":"api/shark/-hprof-record-reader/read-float-array/","title":"Read float array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readFloatArray</p>"},{"location":"api/shark/-hprof-record-reader/read-float-array/#readfloatarray","title":"readFloatArray","text":"<p>[jvm]\\ fun readFloatArray(arrayLength: Int): FloatArray</p>"},{"location":"api/shark/-hprof-record-reader/read-float/","title":"Read float","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readFloat</p>"},{"location":"api/shark/-hprof-record-reader/read-float/#readfloat","title":"readFloat","text":"<p>[jvm]\\ fun readFloat(): Float</p>"},{"location":"api/shark/-hprof-record-reader/read-heap-dump-info-record/","title":"Read heap dump info record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readHeapDumpInfoRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-heap-dump-info-record/#readheapdumpinforecord","title":"readHeapDumpInfoRecord","text":"<p>[jvm]\\ fun readHeapDumpInfoRecord(): HprofRecord.HeapDumpRecord.HeapDumpInfoRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-id-array/","title":"Read id array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readIdArray</p>"},{"location":"api/shark/-hprof-record-reader/read-id-array/#readidarray","title":"readIdArray","text":"<p>[jvm]\\ fun readIdArray(arrayLength: Int): LongArray</p>"},{"location":"api/shark/-hprof-record-reader/read-id/","title":"Read id","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readId</p>"},{"location":"api/shark/-hprof-record-reader/read-id/#readid","title":"readId","text":"<p>[jvm]\\ fun readId(): Long</p>"},{"location":"api/shark/-hprof-record-reader/read-instance-dump-record/","title":"Read instance dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readInstanceDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-instance-dump-record/#readinstancedumprecord","title":"readInstanceDumpRecord","text":"<p>[jvm]\\ fun readInstanceDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.InstanceDumpRecord</p> <p>Reads a full instance record after a instance dump tag.</p>"},{"location":"api/shark/-hprof-record-reader/read-int-array/","title":"Read int array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readIntArray</p>"},{"location":"api/shark/-hprof-record-reader/read-int-array/#readintarray","title":"readIntArray","text":"<p>[jvm]\\ fun readIntArray(arrayLength: Int): IntArray</p>"},{"location":"api/shark/-hprof-record-reader/read-int/","title":"Read int","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readInt</p>"},{"location":"api/shark/-hprof-record-reader/read-int/#readint","title":"readInt","text":"<p>[jvm]\\ fun readInt(): Int</p>"},{"location":"api/shark/-hprof-record-reader/read-interned-string-gc-root-record/","title":"Read interned string gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readInternedStringGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-interned-string-gc-root-record/#readinternedstringgcrootrecord","title":"readInternedStringGcRootRecord","text":"<p>[jvm]\\ fun readInternedStringGcRootRecord(): GcRoot.InternedString</p>"},{"location":"api/shark/-hprof-record-reader/read-java-frame-gc-root-record/","title":"Read java frame gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readJavaFrameGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-java-frame-gc-root-record/#readjavaframegcrootrecord","title":"readJavaFrameGcRootRecord","text":"<p>[jvm]\\ fun readJavaFrameGcRootRecord(): GcRoot.JavaFrame</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-global-gc-root-record/","title":"Read jni global gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readJniGlobalGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-global-gc-root-record/#readjniglobalgcrootrecord","title":"readJniGlobalGcRootRecord","text":"<p>[jvm]\\ fun readJniGlobalGcRootRecord(): GcRoot.JniGlobal</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-local-gc-root-record/","title":"Read jni local gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readJniLocalGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-local-gc-root-record/#readjnilocalgcrootrecord","title":"readJniLocalGcRootRecord","text":"<p>[jvm]\\ fun readJniLocalGcRootRecord(): GcRoot.JniLocal</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-monitor-gc-root-record/","title":"Read jni monitor gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readJniMonitorGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-jni-monitor-gc-root-record/#readjnimonitorgcrootrecord","title":"readJniMonitorGcRootRecord","text":"<p>[jvm]\\ fun readJniMonitorGcRootRecord(): GcRoot.JniMonitor</p>"},{"location":"api/shark/-hprof-record-reader/read-load-class-record/","title":"Read load class record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readLoadClassRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-load-class-record/#readloadclassrecord","title":"readLoadClassRecord","text":"<p>[jvm]\\ fun readLoadClassRecord(): HprofRecord.LoadClassRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-long-array/","title":"Read long array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readLongArray</p>"},{"location":"api/shark/-hprof-record-reader/read-long-array/#readlongarray","title":"readLongArray","text":"<p>[jvm]\\ fun readLongArray(arrayLength: Int): LongArray</p>"},{"location":"api/shark/-hprof-record-reader/read-long/","title":"Read long","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readLong</p>"},{"location":"api/shark/-hprof-record-reader/read-long/#readlong","title":"readLong","text":"<p>[jvm]\\ fun readLong(): Long</p>"},{"location":"api/shark/-hprof-record-reader/read-monitor-used-gc-root-record/","title":"Read monitor used gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readMonitorUsedGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-monitor-used-gc-root-record/#readmonitorusedgcrootrecord","title":"readMonitorUsedGcRootRecord","text":"<p>[jvm]\\ fun readMonitorUsedGcRootRecord(): GcRoot.MonitorUsed</p>"},{"location":"api/shark/-hprof-record-reader/read-native-stack-gc-root-record/","title":"Read native stack gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readNativeStackGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-native-stack-gc-root-record/#readnativestackgcrootrecord","title":"readNativeStackGcRootRecord","text":"<p>[jvm]\\ fun readNativeStackGcRootRecord(): GcRoot.NativeStack</p>"},{"location":"api/shark/-hprof-record-reader/read-object-array-dump-record/","title":"Read object array dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readObjectArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-object-array-dump-record/#readobjectarraydumprecord","title":"readObjectArrayDumpRecord","text":"<p>[jvm]\\ fun readObjectArrayDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.ObjectArrayDumpRecord</p> <p>Reads a full object array record after a object array dump tag.</p>"},{"location":"api/shark/-hprof-record-reader/read-primitive-array-dump-record/","title":"Read primitive array dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readPrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-primitive-array-dump-record/#readprimitivearraydumprecord","title":"readPrimitiveArrayDumpRecord","text":"<p>[jvm]\\ fun readPrimitiveArrayDumpRecord(): HprofRecord.HeapDumpRecord.ObjectRecord.PrimitiveArrayDumpRecord</p> <p>Reads a full primitive array record after a primitive array dump tag.</p>"},{"location":"api/shark/-hprof-record-reader/read-reference-cleanup-gc-root-record/","title":"Read reference cleanup gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readReferenceCleanupGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-reference-cleanup-gc-root-record/#readreferencecleanupgcrootrecord","title":"readReferenceCleanupGcRootRecord","text":"<p>[jvm]\\ fun readReferenceCleanupGcRootRecord(): GcRoot.ReferenceCleanup</p>"},{"location":"api/shark/-hprof-record-reader/read-short-array/","title":"Read short array","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readShortArray</p>"},{"location":"api/shark/-hprof-record-reader/read-short-array/#readshortarray","title":"readShortArray","text":"<p>[jvm]\\ fun readShortArray(arrayLength: Int): ShortArray</p>"},{"location":"api/shark/-hprof-record-reader/read-short/","title":"Read short","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readShort</p>"},{"location":"api/shark/-hprof-record-reader/read-short/#readshort","title":"readShort","text":"<p>[jvm]\\ fun readShort(): Short</p>"},{"location":"api/shark/-hprof-record-reader/read-stack-frame-record/","title":"Read stack frame record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readStackFrameRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-stack-frame-record/#readstackframerecord","title":"readStackFrameRecord","text":"<p>[jvm]\\ fun readStackFrameRecord(): HprofRecord.StackFrameRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-stack-trace-record/","title":"Read stack trace record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readStackTraceRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-stack-trace-record/#readstacktracerecord","title":"readStackTraceRecord","text":"<p>[jvm]\\ fun readStackTraceRecord(): HprofRecord.StackTraceRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-sticky-class-gc-root-record/","title":"Read sticky class gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readStickyClassGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-sticky-class-gc-root-record/#readstickyclassgcrootrecord","title":"readStickyClassGcRootRecord","text":"<p>[jvm]\\ fun readStickyClassGcRootRecord(): GcRoot.StickyClass</p>"},{"location":"api/shark/-hprof-record-reader/read-string-record/","title":"Read string record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readStringRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-string-record/#readstringrecord","title":"readStringRecord","text":"<p>[jvm]\\ fun readStringRecord(length: Long): HprofRecord.StringRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-string/","title":"Read string","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readString</p>"},{"location":"api/shark/-hprof-record-reader/read-string/#readstring","title":"readString","text":"<p>[jvm]\\ fun readString(byteCount: Int, charset: Charset): String</p>"},{"location":"api/shark/-hprof-record-reader/read-thread-block-gc-root-record/","title":"Read thread block gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readThreadBlockGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-thread-block-gc-root-record/#readthreadblockgcrootrecord","title":"readThreadBlockGcRootRecord","text":"<p>[jvm]\\ fun readThreadBlockGcRootRecord(): GcRoot.ThreadBlock</p>"},{"location":"api/shark/-hprof-record-reader/read-thread-object-gc-root-record/","title":"Read thread object gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readThreadObjectGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-thread-object-gc-root-record/#readthreadobjectgcrootrecord","title":"readThreadObjectGcRootRecord","text":"<p>[jvm]\\ fun readThreadObjectGcRootRecord(): GcRoot.ThreadObject</p>"},{"location":"api/shark/-hprof-record-reader/read-unknown-gc-root-record/","title":"Read unknown gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnknownGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-unknown-gc-root-record/#readunknowngcrootrecord","title":"readUnknownGcRootRecord","text":"<p>[jvm]\\ fun readUnknownGcRootRecord(): GcRoot.Unknown</p>"},{"location":"api/shark/-hprof-record-reader/read-unload-class-record/","title":"Read unload class record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnloadClassRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-unload-class-record/#readunloadclassrecord","title":"readUnloadClassRecord","text":"<p>[jvm]\\ fun readUnloadClassRecord(): HprofRecord.UnloadClassRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-unreachable-gc-root-record/","title":"Read unreachable gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnreachableGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-unreachable-gc-root-record/#readunreachablegcrootrecord","title":"readUnreachableGcRootRecord","text":"<p>[jvm]\\ fun readUnreachableGcRootRecord(): GcRoot.Unreachable</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-byte/","title":"Read unsigned byte","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnsignedByte</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-byte/#readunsignedbyte","title":"readUnsignedByte","text":"<p>[jvm]\\ fun readUnsignedByte(): Int</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-int/","title":"Read unsigned int","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnsignedInt</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-int/#readunsignedint","title":"readUnsignedInt","text":"<p>[jvm]\\ fun readUnsignedInt(): Long</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-short/","title":"Read unsigned short","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUnsignedShort</p>"},{"location":"api/shark/-hprof-record-reader/read-unsigned-short/#readunsignedshort","title":"readUnsignedShort","text":"<p>[jvm]\\ fun readUnsignedShort(): Int</p>"},{"location":"api/shark/-hprof-record-reader/read-utf8/","title":"Read utf8","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readUtf8</p>"},{"location":"api/shark/-hprof-record-reader/read-utf8/#readutf8","title":"readUtf8","text":"<p>[jvm]\\ fun readUtf8(byteCount: Long): String</p>"},{"location":"api/shark/-hprof-record-reader/read-value/","title":"Read value","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readValue</p>"},{"location":"api/shark/-hprof-record-reader/read-value/#readvalue","title":"readValue","text":"<p>[jvm]\\ fun readValue(type: Int): ValueHolder</p> <p>Reads a value in the heap dump, which can be a reference or a primitive type.</p>"},{"location":"api/shark/-hprof-record-reader/read-vm-internal-gc-root-record/","title":"Read vm internal gc root record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/readVmInternalGcRootRecord</p>"},{"location":"api/shark/-hprof-record-reader/read-vm-internal-gc-root-record/#readvminternalgcrootrecord","title":"readVmInternalGcRootRecord","text":"<p>[jvm]\\ fun readVmInternalGcRootRecord(): GcRoot.VmInternal</p>"},{"location":"api/shark/-hprof-record-reader/size-of/","title":"Size of","text":"<p>//leakcanary-repo/shark/HprofRecordReader/sizeOf</p>"},{"location":"api/shark/-hprof-record-reader/size-of/#sizeof","title":"sizeOf","text":"<p>[jvm]\\ fun sizeOf(type: Int): Int</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-constant-pool/","title":"Skip class dump constant pool","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipClassDumpConstantPool</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-constant-pool/#skipclassdumpconstantpool","title":"skipClassDumpConstantPool","text":"<p>[jvm]\\ fun skipClassDumpConstantPool()</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-fields/","title":"Skip class dump fields","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipClassDumpFields</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-fields/#skipclassdumpfields","title":"skipClassDumpFields","text":"<p>[jvm]\\ fun skipClassDumpFields()</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-header/","title":"Skip class dump header","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipClassDumpHeader</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-header/#skipclassdumpheader","title":"skipClassDumpHeader","text":"<p>[jvm]\\ fun skipClassDumpHeader()</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-record/","title":"Skip class dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipClassDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-record/#skipclassdumprecord","title":"skipClassDumpRecord","text":"<p>[jvm]\\ fun skipClassDumpRecord()</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-static-fields/","title":"Skip class dump static fields","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipClassDumpStaticFields</p>"},{"location":"api/shark/-hprof-record-reader/skip-class-dump-static-fields/#skipclassdumpstaticfields","title":"skipClassDumpStaticFields","text":"<p>[jvm]\\ fun skipClassDumpStaticFields()</p>"},{"location":"api/shark/-hprof-record-reader/skip-heap-dump-info-record/","title":"Skip heap dump info record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipHeapDumpInfoRecord</p>"},{"location":"api/shark/-hprof-record-reader/skip-heap-dump-info-record/#skipheapdumpinforecord","title":"skipHeapDumpInfoRecord","text":"<p>[jvm]\\ fun skipHeapDumpInfoRecord()</p>"},{"location":"api/shark/-hprof-record-reader/skip-id/","title":"Skip id","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipId</p>"},{"location":"api/shark/-hprof-record-reader/skip-id/#skipid","title":"skipId","text":"<p>[jvm]\\ fun skipId()</p>"},{"location":"api/shark/-hprof-record-reader/skip-instance-dump-record/","title":"Skip instance dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipInstanceDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/skip-instance-dump-record/#skipinstancedumprecord","title":"skipInstanceDumpRecord","text":"<p>[jvm]\\ fun skipInstanceDumpRecord()</p>"},{"location":"api/shark/-hprof-record-reader/skip-object-array-dump-record/","title":"Skip object array dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipObjectArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/skip-object-array-dump-record/#skipobjectarraydumprecord","title":"skipObjectArrayDumpRecord","text":"<p>[jvm]\\ fun skipObjectArrayDumpRecord()</p>"},{"location":"api/shark/-hprof-record-reader/skip-primitive-array-dump-record/","title":"Skip primitive array dump record","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skipPrimitiveArrayDumpRecord</p>"},{"location":"api/shark/-hprof-record-reader/skip-primitive-array-dump-record/#skipprimitivearraydumprecord","title":"skipPrimitiveArrayDumpRecord","text":"<p>[jvm]\\ fun skipPrimitiveArrayDumpRecord()</p>"},{"location":"api/shark/-hprof-record-reader/skip/","title":"Skip","text":"<p>//leakcanary-repo/shark/HprofRecordReader/skip</p>"},{"location":"api/shark/-hprof-record-reader/skip/#skip","title":"skip","text":"<p>[jvm]\\ fun skip(byteCount: Int)</p> <p>fun skip(byteCount: Long)</p>"},{"location":"api/shark/-hprof-record-reader/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordReader/Companion</p>"},{"location":"api/shark/-hprof-record-reader/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-record-tag/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag</p>"},{"location":"api/shark/-hprof-record-tag/#hprofrecordtag","title":"HprofRecordTag","text":"<p>[jvm]\\ enum HprofRecordTag : Enum<HprofRecordTag></p>"},{"location":"api/shark/-hprof-record-tag/#entries","title":"Entries","text":"STRING_IN_UTF8 [jvm]STRING_IN_UTF8 LOAD_CLASS [jvm]LOAD_CLASS UNLOAD_CLASS [jvm]UNLOAD_CLASS STACK_FRAME [jvm]STACK_FRAME STACK_TRACE [jvm]STACK_TRACE ALLOC_SITES [jvm]ALLOC_SITES HEAP_SUMMARY [jvm]HEAP_SUMMARY START_THREAD [jvm]START_THREAD END_THREAD [jvm]END_THREAD HEAP_DUMP [jvm]HEAP_DUMP HEAP_DUMP_SEGMENT [jvm]HEAP_DUMP_SEGMENT HEAP_DUMP_END [jvm]HEAP_DUMP_END CPU_SAMPLES [jvm]CPU_SAMPLES CONTROL_SETTINGS [jvm]CONTROL_SETTINGS ROOT_UNKNOWN [jvm]ROOT_UNKNOWN ROOT_JNI_GLOBAL [jvm]ROOT_JNI_GLOBAL ROOT_JNI_LOCAL [jvm]ROOT_JNI_LOCAL ROOT_JAVA_FRAME [jvm]ROOT_JAVA_FRAME ROOT_NATIVE_STACK [jvm]ROOT_NATIVE_STACK ROOT_STICKY_CLASS [jvm]ROOT_STICKY_CLASS ROOT_THREAD_BLOCK [jvm]ROOT_THREAD_BLOCK ROOT_MONITOR_USED [jvm]ROOT_MONITOR_USED ROOT_THREAD_OBJECT [jvm]ROOT_THREAD_OBJECT HEAP_DUMP_INFO [jvm]HEAP_DUMP_INFOAndroid format addition ROOT_INTERNED_STRING [jvm]ROOT_INTERNED_STRING ROOT_FINALIZING [jvm]ROOT_FINALIZING ROOT_DEBUGGER [jvm]ROOT_DEBUGGER ROOT_REFERENCE_CLEANUP [jvm]ROOT_REFERENCE_CLEANUP ROOT_VM_INTERNAL [jvm]ROOT_VM_INTERNAL ROOT_JNI_MONITOR [jvm]ROOT_JNI_MONITOR ROOT_UNREACHABLE [jvm]ROOT_UNREACHABLE PRIMITIVE_ARRAY_NODATA [jvm]PRIMITIVE_ARRAY_NODATA CLASS_DUMP [jvm]CLASS_DUMP INSTANCE_DUMP [jvm]INSTANCE_DUMP OBJECT_ARRAY_DUMP [jvm]OBJECT_ARRAY_DUMP PRIMITIVE_ARRAY_DUMP [jvm]PRIMITIVE_ARRAY_DUMP"},{"location":"api/shark/-hprof-record-tag/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-record-tag/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): HprofRecordTagReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<HprofRecordTag>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-hprof-record-tag/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/tag/","title":"Tag","text":"<p>//leakcanary-repo/shark/HprofRecordTag/tag</p>"},{"location":"api/shark/-hprof-record-tag/tag/#tag","title":"tag","text":"<p>[jvm]\\ val tag: Int</p>"},{"location":"api/shark/-hprof-record-tag/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/HprofRecordTag/valueOf</p>"},{"location":"api/shark/-hprof-record-tag/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): HprofRecordTag</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-hprof-record-tag/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-hprof-record-tag/values/","title":"Values","text":"<p>//leakcanary-repo/shark/HprofRecordTag/values</p>"},{"location":"api/shark/-hprof-record-tag/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<HprofRecordTag></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-hprof-record-tag/-a-l-l-o-c_-s-i-t-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ALLOC_SITES</p>"},{"location":"api/shark/-hprof-record-tag/-a-l-l-o-c_-s-i-t-e-s/#alloc_sites","title":"ALLOC_SITES","text":"<p>[jvm]\\ ALLOC_SITES</p>"},{"location":"api/shark/-hprof-record-tag/-a-l-l-o-c_-s-i-t-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-c-l-a-s-s_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/CLASS_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-c-l-a-s-s_-d-u-m-p/#class_dump","title":"CLASS_DUMP","text":"<p>[jvm]\\ CLASS_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-c-l-a-s-s_-d-u-m-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-c-o-n-t-r-o-l_-s-e-t-t-i-n-g-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/CONTROL_SETTINGS</p>"},{"location":"api/shark/-hprof-record-tag/-c-o-n-t-r-o-l_-s-e-t-t-i-n-g-s/#control_settings","title":"CONTROL_SETTINGS","text":"<p>[jvm]\\ CONTROL_SETTINGS</p>"},{"location":"api/shark/-hprof-record-tag/-c-o-n-t-r-o-l_-s-e-t-t-i-n-g-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-c-p-u_-s-a-m-p-l-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/CPU_SAMPLES</p>"},{"location":"api/shark/-hprof-record-tag/-c-p-u_-s-a-m-p-l-e-s/#cpu_samples","title":"CPU_SAMPLES","text":"<p>[jvm]\\ CPU_SAMPLES</p>"},{"location":"api/shark/-hprof-record-tag/-c-p-u_-s-a-m-p-l-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/Companion</p>"},{"location":"api/shark/-hprof-record-tag/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-record-tag/-companion/#properties","title":"Properties","text":"Name Summary rootTags [jvm]val rootTags: EnumSet<HprofRecordTag>"},{"location":"api/shark/-hprof-record-tag/-companion/root-tags/","title":"Root tags","text":"<p>//leakcanary-repo/shark/HprofRecordTag/Companion/rootTags</p>"},{"location":"api/shark/-hprof-record-tag/-companion/root-tags/#roottags","title":"rootTags","text":"<p>[jvm]\\ val rootTags: EnumSet<HprofRecordTag></p>"},{"location":"api/shark/-hprof-record-tag/-e-n-d_-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/END_THREAD</p>"},{"location":"api/shark/-hprof-record-tag/-e-n-d_-t-h-r-e-a-d/#end_thread","title":"END_THREAD","text":"<p>[jvm]\\ END_THREAD</p>"},{"location":"api/shark/-hprof-record-tag/-e-n-d_-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/HEAP_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p/#heap_dump","title":"HEAP_DUMP","text":"<p>[jvm]\\ HEAP_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-e-n-d/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/HEAP_DUMP_END</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-e-n-d/#heap_dump_end","title":"HEAP_DUMP_END","text":"<p>[jvm]\\ HEAP_DUMP_END</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-e-n-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-i-n-f-o/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/HEAP_DUMP_INFO</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-i-n-f-o/#heap_dump_info","title":"HEAP_DUMP_INFO","text":"<p>[jvm]\\ HEAP_DUMP_INFO</p> <p>Android format addition</p> <p>Specifies information about which heap certain objects came from. When a sub-tag of this type appears in a HPROF_HEAP_DUMP or HPROF_HEAP_DUMP_SEGMENT record, entries that follow it will be associated with the specified heap. The HEAP_DUMP_INFO data is reset at the end of the <code>HEAP_DUMP[_SEGMENT]</code>. Multiple HEAP_DUMP_INFO entries may appear in a single <code>HEAP_DUMP[_SEGMENT]</code>.</p> <p>Format: u1: Tag value (0xFE) u4: heap ID ID: heap name string ID</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-i-n-f-o/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-s-e-g-m-e-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/HEAP_DUMP_SEGMENT</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-s-e-g-m-e-n-t/#heap_dump_segment","title":"HEAP_DUMP_SEGMENT","text":"<p>[jvm]\\ HEAP_DUMP_SEGMENT</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-d-u-m-p_-s-e-g-m-e-n-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-s-u-m-m-a-r-y/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/HEAP_SUMMARY</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-s-u-m-m-a-r-y/#heap_summary","title":"HEAP_SUMMARY","text":"<p>[jvm]\\ HEAP_SUMMARY</p>"},{"location":"api/shark/-hprof-record-tag/-h-e-a-p_-s-u-m-m-a-r-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-i-n-s-t-a-n-c-e_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/INSTANCE_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-i-n-s-t-a-n-c-e_-d-u-m-p/#instance_dump","title":"INSTANCE_DUMP","text":"<p>[jvm]\\ INSTANCE_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-i-n-s-t-a-n-c-e_-d-u-m-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-l-o-a-d_-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/LOAD_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-l-o-a-d_-c-l-a-s-s/#load_class","title":"LOAD_CLASS","text":"<p>[jvm]\\ LOAD_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-l-o-a-d_-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-o-b-j-e-c-t_-a-r-r-a-y_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/OBJECT_ARRAY_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-o-b-j-e-c-t_-a-r-r-a-y_-d-u-m-p/#object_array_dump","title":"OBJECT_ARRAY_DUMP","text":"<p>[jvm]\\ OBJECT_ARRAY_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-o-b-j-e-c-t_-a-r-r-a-y_-d-u-m-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/PRIMITIVE_ARRAY_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-d-u-m-p/#primitive_array_dump","title":"PRIMITIVE_ARRAY_DUMP","text":"<p>[jvm]\\ PRIMITIVE_ARRAY_DUMP</p>"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-d-u-m-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-n-o-d-a-t-a/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/PRIMITIVE_ARRAY_NODATA</p>"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-n-o-d-a-t-a/#primitive_array_nodata","title":"PRIMITIVE_ARRAY_NODATA","text":"<p>[jvm]\\ PRIMITIVE_ARRAY_NODATA</p>"},{"location":"api/shark/-hprof-record-tag/-p-r-i-m-i-t-i-v-e_-a-r-r-a-y_-n-o-d-a-t-a/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-d-e-b-u-g-g-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_DEBUGGER</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-d-e-b-u-g-g-e-r/#root_debugger","title":"ROOT_DEBUGGER","text":"<p>[jvm]\\ ROOT_DEBUGGER</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-d-e-b-u-g-g-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-f-i-n-a-l-i-z-i-n-g/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_FINALIZING</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-f-i-n-a-l-i-z-i-n-g/#root_finalizing","title":"ROOT_FINALIZING","text":"<p>[jvm]\\ ROOT_FINALIZING</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-f-i-n-a-l-i-z-i-n-g/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-i-n-t-e-r-n-e-d_-s-t-r-i-n-g/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_INTERNED_STRING</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-i-n-t-e-r-n-e-d_-s-t-r-i-n-g/#root_interned_string","title":"ROOT_INTERNED_STRING","text":"<p>[jvm]\\ ROOT_INTERNED_STRING</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-i-n-t-e-r-n-e-d_-s-t-r-i-n-g/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-a-v-a_-f-r-a-m-e/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_JAVA_FRAME</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-a-v-a_-f-r-a-m-e/#root_java_frame","title":"ROOT_JAVA_FRAME","text":"<p>[jvm]\\ ROOT_JAVA_FRAME</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-a-v-a_-f-r-a-m-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-g-l-o-b-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_JNI_GLOBAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-g-l-o-b-a-l/#root_jni_global","title":"ROOT_JNI_GLOBAL","text":"<p>[jvm]\\ ROOT_JNI_GLOBAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-g-l-o-b-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-l-o-c-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_JNI_LOCAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-l-o-c-a-l/#root_jni_local","title":"ROOT_JNI_LOCAL","text":"<p>[jvm]\\ ROOT_JNI_LOCAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-l-o-c-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-m-o-n-i-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_JNI_MONITOR</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-m-o-n-i-t-o-r/#root_jni_monitor","title":"ROOT_JNI_MONITOR","text":"<p>[jvm]\\ ROOT_JNI_MONITOR</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-j-n-i_-m-o-n-i-t-o-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-m-o-n-i-t-o-r_-u-s-e-d/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_MONITOR_USED</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-m-o-n-i-t-o-r_-u-s-e-d/#root_monitor_used","title":"ROOT_MONITOR_USED","text":"<p>[jvm]\\ ROOT_MONITOR_USED</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-m-o-n-i-t-o-r_-u-s-e-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-n-a-t-i-v-e_-s-t-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_NATIVE_STACK</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-n-a-t-i-v-e_-s-t-a-c-k/#root_native_stack","title":"ROOT_NATIVE_STACK","text":"<p>[jvm]\\ ROOT_NATIVE_STACK</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-n-a-t-i-v-e_-s-t-a-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-r-e-f-e-r-e-n-c-e_-c-l-e-a-n-u-p/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_REFERENCE_CLEANUP</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-r-e-f-e-r-e-n-c-e_-c-l-e-a-n-u-p/#root_reference_cleanup","title":"ROOT_REFERENCE_CLEANUP","text":"<p>[jvm]\\ ROOT_REFERENCE_CLEANUP</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-r-e-f-e-r-e-n-c-e_-c-l-e-a-n-u-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-s-t-i-c-k-y_-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_STICKY_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-s-t-i-c-k-y_-c-l-a-s-s/#root_sticky_class","title":"ROOT_STICKY_CLASS","text":"<p>[jvm]\\ ROOT_STICKY_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-s-t-i-c-k-y_-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-b-l-o-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_THREAD_BLOCK</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-b-l-o-c-k/#root_thread_block","title":"ROOT_THREAD_BLOCK","text":"<p>[jvm]\\ ROOT_THREAD_BLOCK</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-b-l-o-c-k/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-o-b-j-e-c-t/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_THREAD_OBJECT</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-o-b-j-e-c-t/#root_thread_object","title":"ROOT_THREAD_OBJECT","text":"<p>[jvm]\\ ROOT_THREAD_OBJECT</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-t-h-r-e-a-d_-o-b-j-e-c-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-k-n-o-w-n/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_UNKNOWN</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-k-n-o-w-n/#root_unknown","title":"ROOT_UNKNOWN","text":"<p>[jvm]\\ ROOT_UNKNOWN</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-k-n-o-w-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-r-e-a-c-h-a-b-l-e/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_UNREACHABLE</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-r-e-a-c-h-a-b-l-e/#root_unreachable","title":"ROOT_UNREACHABLE","text":"<p>[jvm]\\ ROOT_UNREACHABLE</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-u-n-r-e-a-c-h-a-b-l-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-v-m_-i-n-t-e-r-n-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/ROOT_VM_INTERNAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-v-m_-i-n-t-e-r-n-a-l/#root_vm_internal","title":"ROOT_VM_INTERNAL","text":"<p>[jvm]\\ ROOT_VM_INTERNAL</p>"},{"location":"api/shark/-hprof-record-tag/-r-o-o-t_-v-m_-i-n-t-e-r-n-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-f-r-a-m-e/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/STACK_FRAME</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-f-r-a-m-e/#stack_frame","title":"STACK_FRAME","text":"<p>[jvm]\\ STACK_FRAME</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-f-r-a-m-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-t-r-a-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/STACK_TRACE</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-t-r-a-c-e/#stack_trace","title":"STACK_TRACE","text":"<p>[jvm]\\ STACK_TRACE</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-c-k_-t-r-a-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-s-t-a-r-t_-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/START_THREAD</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-r-t_-t-h-r-e-a-d/#start_thread","title":"START_THREAD","text":"<p>[jvm]\\ START_THREAD</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-a-r-t_-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-s-t-r-i-n-g_-i-n_-u-t-f8/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/STRING_IN_UTF8</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-r-i-n-g_-i-n_-u-t-f8/#string_in_utf8","title":"STRING_IN_UTF8","text":"<p>[jvm]\\ STRING_IN_UTF8</p>"},{"location":"api/shark/-hprof-record-tag/-s-t-r-i-n-g_-i-n_-u-t-f8/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-record-tag/-u-n-l-o-a-d_-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofRecordTag/UNLOAD_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-u-n-l-o-a-d_-c-l-a-s-s/#unload_class","title":"UNLOAD_CLASS","text":"<p>[jvm]\\ UNLOAD_CLASS</p>"},{"location":"api/shark/-hprof-record-tag/-u-n-l-o-a-d_-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int tag [jvm]val tag: Int"},{"location":"api/shark/-hprof-version/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofVersion</p>"},{"location":"api/shark/-hprof-version/#hprofversion","title":"HprofVersion","text":"<p>[jvm]\\ enum HprofVersion : Enum<HprofVersion> </p> <p>Supported hprof versions</p>"},{"location":"api/shark/-hprof-version/#entries","title":"Entries","text":"JDK1_2_BETA3 [jvm]JDK1_2_BETA3 JDK1_2_BETA4 [jvm]JDK1_2_BETA4 JDK_6 [jvm]JDK_6 ANDROID [jvm]ANDROID"},{"location":"api/shark/-hprof-version/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): HprofVersionReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<HprofVersion>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-hprof-version/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int versionString [jvm]val versionString: String"},{"location":"api/shark/-hprof-version/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/HprofVersion/valueOf</p>"},{"location":"api/shark/-hprof-version/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): HprofVersion</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-hprof-version/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-hprof-version/values/","title":"Values","text":"<p>//leakcanary-repo/shark/HprofVersion/values</p>"},{"location":"api/shark/-hprof-version/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<HprofVersion></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-hprof-version/version-string/","title":"Version string","text":"<p>//leakcanary-repo/shark/HprofVersion/versionString</p>"},{"location":"api/shark/-hprof-version/version-string/#versionstring","title":"versionString","text":"<p>[jvm]\\ val versionString: String</p>"},{"location":"api/shark/-hprof-version/-a-n-d-r-o-i-d/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofVersion/ANDROID</p>"},{"location":"api/shark/-hprof-version/-a-n-d-r-o-i-d/#android","title":"ANDROID","text":"<p>[jvm]\\ ANDROID</p>"},{"location":"api/shark/-hprof-version/-a-n-d-r-o-i-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int versionString [jvm]val versionString: String"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a3/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofVersion/JDK1_2_BETA3</p>"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a3/#jdk1_2_beta3","title":"JDK1_2_BETA3","text":"<p>[jvm]\\ JDK1_2_BETA3</p>"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a3/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int versionString [jvm]val versionString: String"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a4/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofVersion/JDK1_2_BETA4</p>"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a4/#jdk1_2_beta4","title":"JDK1_2_BETA4","text":"<p>[jvm]\\ JDK1_2_BETA4</p>"},{"location":"api/shark/-hprof-version/-j-d-k1_2_-b-e-t-a4/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int versionString [jvm]val versionString: String"},{"location":"api/shark/-hprof-version/-j-d-k_6/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofVersion/JDK_6</p>"},{"location":"api/shark/-hprof-version/-j-d-k_6/#jdk_6","title":"JDK_6","text":"<p>[jvm]\\ JDK_6</p>"},{"location":"api/shark/-hprof-version/-j-d-k_6/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int versionString [jvm]val versionString: String"},{"location":"api/shark/-hprof-writer/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofWriter</p>"},{"location":"api/shark/-hprof-writer/#hprofwriter","title":"HprofWriter","text":"<p>[jvm]\\ class HprofWriter : Closeable</p> <p>Generates Hprof files.</p> <p>Call openWriterFor to obtain a new instance.</p> <p>Call write to add records and close when you\u2019re done.</p>"},{"location":"api/shark/-hprof-writer/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-hprof-writer/#functions","title":"Functions","text":"Name Summary close [jvm]open override fun close()Flushes to disk all HprofRecord.HeapDumpRecord that are currently written to the in memory buffer, then closes the file. valuesToBytes [jvm]fun valuesToBytes(values: List<ValueHolder>): ByteArrayHelper method for creating a ByteArray for InstanceDumpRecord.fieldValues from a list of ValueHolder. write [jvm]fun write(record: HprofRecord)Appends a HprofRecord to the heap dump. If record is a HprofRecord.HeapDumpRecord then it will not be written to an in memory buffer and written to file only when the next a record that is not a HprofRecord.HeapDumpRecord is written or when close is called."},{"location":"api/shark/-hprof-writer/#properties","title":"Properties","text":"Name Summary hprofHeader [jvm]val hprofHeader: HprofHeader"},{"location":"api/shark/-hprof-writer/close/","title":"Close","text":"<p>//leakcanary-repo/shark/HprofWriter/close</p>"},{"location":"api/shark/-hprof-writer/close/#close","title":"close","text":"<p>[jvm]\\ open override fun close()</p> <p>Flushes to disk all HprofRecord.HeapDumpRecord that are currently written to the in memory buffer, then closes the file.</p>"},{"location":"api/shark/-hprof-writer/hprof-header/","title":"Hprof header","text":"<p>//leakcanary-repo/shark/HprofWriter/hprofHeader</p>"},{"location":"api/shark/-hprof-writer/hprof-header/#hprofheader","title":"hprofHeader","text":"<p>[jvm]\\ val hprofHeader: HprofHeader</p>"},{"location":"api/shark/-hprof-writer/values-to-bytes/","title":"Values to bytes","text":"<p>//leakcanary-repo/shark/HprofWriter/valuesToBytes</p>"},{"location":"api/shark/-hprof-writer/values-to-bytes/#valuestobytes","title":"valuesToBytes","text":"<p>[jvm]\\ fun valuesToBytes(values: List<ValueHolder>): ByteArray</p> <p>Helper method for creating a ByteArray for InstanceDumpRecord.fieldValues from a list of ValueHolder.</p>"},{"location":"api/shark/-hprof-writer/write/","title":"Write","text":"<p>//leakcanary-repo/shark/HprofWriter/write</p>"},{"location":"api/shark/-hprof-writer/write/#write","title":"write","text":"<p>[jvm]\\ fun write(record: HprofRecord)</p> <p>Appends a HprofRecord to the heap dump. If record is a HprofRecord.HeapDumpRecord then it will not be written to an in memory buffer and written to file only when the next a record that is not a HprofRecord.HeapDumpRecord is written or when close is called.</p>"},{"location":"api/shark/-hprof-writer/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofWriter/Companion</p>"},{"location":"api/shark/-hprof-writer/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-hprof-writer/-companion/#functions","title":"Functions","text":"Name Summary openWriterFor [jvm]fun openWriterFor(hprofFile: File, hprofHeader: HprofHeader = HprofHeader()): HprofWriterfun openWriterFor(hprofSink: BufferedSink, hprofHeader: HprofHeader = HprofHeader()): HprofWriter"},{"location":"api/shark/-hprof-writer/-companion/open-writer-for/","title":"Open writer for","text":"<p>//leakcanary-repo/shark/HprofWriter/Companion/openWriterFor</p>"},{"location":"api/shark/-hprof-writer/-companion/open-writer-for/#openwriterfor","title":"openWriterFor","text":"<p>[jvm]\\ fun openWriterFor(hprofFile: File, hprofHeader: HprofHeader = HprofHeader()): HprofWriter</p> <p>fun openWriterFor(hprofSink: BufferedSink, hprofHeader: HprofHeader = HprofHeader()): HprofWriter</p>"},{"location":"api/shark/-hprof-writer-helper/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofWriterHelper</p>"},{"location":"api/shark/-hprof-writer-helper/#hprofwriterhelper","title":"HprofWriterHelper","text":"<p>[jvm]\\ class HprofWriterHelper(writer: HprofWriter) : Closeable</p>"},{"location":"api/shark/-hprof-writer-helper/#constructors","title":"Constructors","text":"HprofWriterHelper [jvm]constructor(writer: HprofWriter)"},{"location":"api/shark/-hprof-writer-helper/#types","title":"Types","text":"Name Summary ClassDefinition [jvm]inner class ClassDefinition InstanceAndClassDefinition [jvm]inner class InstanceAndClassDefinition"},{"location":"api/shark/-hprof-writer-helper/#functions","title":"Functions","text":"Name Summary arrayClass [jvm]fun arrayClass(className: String): Long clazz [jvm]fun clazz(className: String, superclassId: Long = -1L, staticFields: List<Pair<String, ValueHolder>> = emptyList(), fields: List<Pair<String, KClass<out ValueHolder>>> = emptyList()): Longfun clazz(classNameRecord: HprofRecord.StringRecord, superclassId: Long = -1L, staticFields: List<Pair<Long, ValueHolder>> = emptyList(), fields: List<Pair<Long, KClass<out ValueHolder>>> = emptyList()): Long clazz [jvm]infix fun String.clazz(block: HprofWriterHelper.ClassDefinition.() -> Unit): Long close [jvm]open override fun close() gcRoot [jvm]fun gcRoot(gcRoot: GcRoot) instance [jvm]fun instance(classId: Long, fields: List<ValueHolder> = emptyList()): ValueHolder.ReferenceHolder instance [jvm]infix fun String.instance(block: HprofWriterHelper.InstanceAndClassDefinition.() -> Unit): ValueHolder.ReferenceHolder keyedWeakReference [jvm]fun keyedWeakReference(referentInstanceId: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolder objectArray [jvm]fun objectArray(vararg elements: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolderfun objectArray(classId: Long, array: LongArray): Long objectArrayOf [jvm]fun objectArrayOf(classId: Long, vararg elements: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolder primitiveLongArray [jvm]fun primitiveLongArray(array: LongArray): Long string [jvm]fun string(string: String): ValueHolder.ReferenceHolder stringRecord [jvm]fun stringRecord(name: String): HprofRecord.StringRecord watchedInstance [jvm]infix fun String.watchedInstance(block: HprofWriterHelper.InstanceAndClassDefinition.() -> Unit): ValueHolder.ReferenceHolder"},{"location":"api/shark/-hprof-writer-helper/#properties","title":"Properties","text":"Name Summary charArrayDump [jvm]val String.charArrayDump: ValueHolder.ReferenceHolder objectClassId [jvm]val objectClassId: Long"},{"location":"api/shark/-hprof-writer-helper/-hprof-writer-helper/","title":"hprof writer helper","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/HprofWriterHelper</p>"},{"location":"api/shark/-hprof-writer-helper/-hprof-writer-helper/#hprofwriterhelper","title":"HprofWriterHelper","text":"<p>[jvm]\\ constructor(writer: HprofWriter)</p>"},{"location":"api/shark/-hprof-writer-helper/array-class/","title":"Array class","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/arrayClass</p>"},{"location":"api/shark/-hprof-writer-helper/array-class/#arrayclass","title":"arrayClass","text":"<p>[jvm]\\ fun arrayClass(className: String): Long</p>"},{"location":"api/shark/-hprof-writer-helper/char-array-dump/","title":"Char array dump","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/charArrayDump</p>"},{"location":"api/shark/-hprof-writer-helper/char-array-dump/#chararraydump","title":"charArrayDump","text":"<p>[jvm]\\ val String.charArrayDump: ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/clazz/","title":"Clazz","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/clazz</p>"},{"location":"api/shark/-hprof-writer-helper/clazz/#clazz","title":"clazz","text":"<p>[jvm]\\ fun clazz(className: String, superclassId: Long = -1L, staticFields: List<Pair<String, ValueHolder>> = emptyList(), fields: List<Pair<String, KClass<out ValueHolder>>> = emptyList()): Long</p> <p>fun clazz(classNameRecord: HprofRecord.StringRecord, superclassId: Long = -1L, staticFields: List<Pair<Long, ValueHolder>> = emptyList(), fields: List<Pair<Long, KClass<out ValueHolder>>> = emptyList()): Long</p> <p>infix fun String.clazz(block: HprofWriterHelper.ClassDefinition.() -> Unit): Long</p>"},{"location":"api/shark/-hprof-writer-helper/close/","title":"Close","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/close</p>"},{"location":"api/shark/-hprof-writer-helper/close/#close","title":"close","text":"<p>[jvm]\\ open override fun close()</p>"},{"location":"api/shark/-hprof-writer-helper/gc-root/","title":"Gc root","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/gcRoot</p>"},{"location":"api/shark/-hprof-writer-helper/gc-root/#gcroot","title":"gcRoot","text":"<p>[jvm]\\ fun gcRoot(gcRoot: GcRoot)</p>"},{"location":"api/shark/-hprof-writer-helper/instance/","title":"Instance","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/instance</p>"},{"location":"api/shark/-hprof-writer-helper/instance/#instance","title":"instance","text":"<p>[jvm]\\ fun instance(classId: Long, fields: List<ValueHolder> = emptyList()): ValueHolder.ReferenceHolder</p> <p>infix fun String.instance(block: HprofWriterHelper.InstanceAndClassDefinition.() -> Unit): ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/keyed-weak-reference/","title":"Keyed weak reference","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/keyedWeakReference</p>"},{"location":"api/shark/-hprof-writer-helper/keyed-weak-reference/#keyedweakreference","title":"keyedWeakReference","text":"<p>[jvm]\\ fun keyedWeakReference(referentInstanceId: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/object-array-of/","title":"Object array of","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/objectArrayOf</p>"},{"location":"api/shark/-hprof-writer-helper/object-array-of/#objectarrayof","title":"objectArrayOf","text":"<p>[jvm]\\ fun objectArrayOf(classId: Long, vararg elements: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/object-array/","title":"Object array","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/objectArray</p>"},{"location":"api/shark/-hprof-writer-helper/object-array/#objectarray","title":"objectArray","text":"<p>[jvm]\\ fun objectArray(vararg elements: ValueHolder.ReferenceHolder): ValueHolder.ReferenceHolder</p> <p>fun objectArray(classId: Long, array: LongArray): Long</p>"},{"location":"api/shark/-hprof-writer-helper/object-class-id/","title":"Object class id","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/objectClassId</p>"},{"location":"api/shark/-hprof-writer-helper/object-class-id/#objectclassid","title":"objectClassId","text":"<p>[jvm]\\ val objectClassId: Long</p>"},{"location":"api/shark/-hprof-writer-helper/primitive-long-array/","title":"Primitive long array","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/primitiveLongArray</p>"},{"location":"api/shark/-hprof-writer-helper/primitive-long-array/#primitivelongarray","title":"primitiveLongArray","text":"<p>[jvm]\\ fun primitiveLongArray(array: LongArray): Long</p>"},{"location":"api/shark/-hprof-writer-helper/string-record/","title":"String record","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/stringRecord</p>"},{"location":"api/shark/-hprof-writer-helper/string-record/#stringrecord","title":"stringRecord","text":"<p>[jvm]\\ fun stringRecord(name: String): HprofRecord.StringRecord</p>"},{"location":"api/shark/-hprof-writer-helper/string/","title":"String","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/string</p>"},{"location":"api/shark/-hprof-writer-helper/string/#string","title":"string","text":"<p>[jvm]\\ fun string(string: String): ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/watched-instance/","title":"Watched instance","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/watchedInstance</p>"},{"location":"api/shark/-hprof-writer-helper/watched-instance/#watchedinstance","title":"watchedInstance","text":"<p>[jvm]\\ infix fun String.watchedInstance(block: HprofWriterHelper.InstanceAndClassDefinition.() -> Unit): ValueHolder.ReferenceHolder</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/ClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/#classdefinition","title":"ClassDefinition","text":"<p>[jvm]\\ inner class ClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/#constructors","title":"Constructors","text":"ClassDefinition [jvm]constructor()"},{"location":"api/shark/-hprof-writer-helper/-class-definition/#properties","title":"Properties","text":"Name Summary staticField [jvm]val staticField: LinkedHashMap<String, ValueHolder>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/-class-definition/","title":"class definition","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/ClassDefinition/ClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/-class-definition/#classdefinition","title":"ClassDefinition","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/static-field/","title":"Static field","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/ClassDefinition/staticField</p>"},{"location":"api/shark/-hprof-writer-helper/-class-definition/static-field/#staticfield","title":"staticField","text":"<p>[jvm]\\ val staticField: LinkedHashMap<String, ValueHolder></p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/","title":"Index","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/InstanceAndClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/#instanceandclassdefinition","title":"InstanceAndClassDefinition","text":"<p>[jvm]\\ inner class InstanceAndClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/#constructors","title":"Constructors","text":"InstanceAndClassDefinition [jvm]constructor()"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/#properties","title":"Properties","text":"Name Summary field [jvm]val field: LinkedHashMap<String, ValueHolder> staticField [jvm]val staticField: LinkedHashMap<String, ValueHolder>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/-instance-and-class-definition/","title":"instance and class definition","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/InstanceAndClassDefinition/InstanceAndClassDefinition</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/-instance-and-class-definition/#instanceandclassdefinition","title":"InstanceAndClassDefinition","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/field/","title":"Field","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/InstanceAndClassDefinition/field</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/field/#field","title":"field","text":"<p>[jvm]\\ val field: LinkedHashMap<String, ValueHolder></p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/static-field/","title":"Static field","text":"<p>//leakcanary-repo/shark/HprofWriterHelper/InstanceAndClassDefinition/staticField</p>"},{"location":"api/shark/-hprof-writer-helper/-instance-and-class-definition/static-field/#staticfield","title":"staticField","text":"<p>[jvm]\\ val staticField: LinkedHashMap<String, ValueHolder></p>"},{"location":"api/shark/-ignored-reference-matcher/","title":"Index","text":"<p>//leakcanary-repo/shark/IgnoredReferenceMatcher</p>"},{"location":"api/shark/-ignored-reference-matcher/#ignoredreferencematcher","title":"IgnoredReferenceMatcher","text":"<p>[jvm]\\ class IgnoredReferenceMatcher(val pattern: ReferencePattern, val patternApplies: (HeapGraph) -> Boolean = ALWAYS) : ReferenceMatcher</p> <p>IgnoredReferenceMatcher should be used to match references that cannot ever create leaks. The shortest path finder will never go through matching references.</p>"},{"location":"api/shark/-ignored-reference-matcher/#constructors","title":"Constructors","text":"IgnoredReferenceMatcher [jvm]constructor(pattern: ReferencePattern, patternApplies: (HeapGraph) -> Boolean = ALWAYS)"},{"location":"api/shark/-ignored-reference-matcher/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-ignored-reference-matcher/#properties","title":"Properties","text":"Name Summary pattern [jvm]open override val pattern: ReferencePatternThe pattern that references will be matched against. patternApplies [jvm]open override val patternApplies: (HeapGraph) -> BooleanWhether the identified leak may exist in the provided HeapGraph. Defaults to true. If the heap dump comes from a VM that runs a different version of the library that doesn\u2019t have the leak, then this should return false."},{"location":"api/shark/-ignored-reference-matcher/-ignored-reference-matcher/","title":"ignored reference matcher","text":"<p>//leakcanary-repo/shark/IgnoredReferenceMatcher/IgnoredReferenceMatcher</p>"},{"location":"api/shark/-ignored-reference-matcher/-ignored-reference-matcher/#ignoredreferencematcher","title":"IgnoredReferenceMatcher","text":"<p>[jvm]\\ constructor(pattern: ReferencePattern, patternApplies: (HeapGraph) -> Boolean = ALWAYS)</p>"},{"location":"api/shark/-ignored-reference-matcher/pattern-applies/","title":"Pattern applies","text":"<p>//leakcanary-repo/shark/IgnoredReferenceMatcher/patternApplies</p>"},{"location":"api/shark/-ignored-reference-matcher/pattern-applies/#patternapplies","title":"patternApplies","text":"<p>[jvm]\\ open override val patternApplies: (HeapGraph) -> Boolean</p> <p>Whether the identified leak may exist in the provided HeapGraph. Defaults to true. If the heap dump comes from a VM that runs a different version of the library that doesn\u2019t have the leak, then this should return false.</p>"},{"location":"api/shark/-ignored-reference-matcher/pattern/","title":"Pattern","text":"<p>//leakcanary-repo/shark/IgnoredReferenceMatcher/pattern</p>"},{"location":"api/shark/-ignored-reference-matcher/pattern/#pattern","title":"pattern","text":"<p>[jvm]\\ open override val pattern: ReferencePattern</p> <p>The pattern that references will be matched against.</p>"},{"location":"api/shark/-ignored-reference-matcher/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/IgnoredReferenceMatcher/toString</p>"},{"location":"api/shark/-ignored-reference-matcher/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-initial-state/","title":"Index","text":"<p>//leakcanary-repo/shark/InitialState</p>"},{"location":"api/shark/-initial-state/#initialstate","title":"InitialState","text":"<p>[jvm]\\ class InitialState(val scenarioLoopsPerGraph: Int = DEFAULT_SCENARIO_LOOPS_PER_GRAPH) : HeapTraversalInput</p>"},{"location":"api/shark/-initial-state/#constructors","title":"Constructors","text":"InitialState [jvm]constructor(scenarioLoopsPerGraph: Int = DEFAULT_SCENARIO_LOOPS_PER_GRAPH)"},{"location":"api/shark/-initial-state/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-initial-state/#properties","title":"Properties","text":"Name Summary scenarioLoopsPerGraph [jvm]open override val scenarioLoopsPerGraph: IntHow many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal. traversalCount [jvm]open override val traversalCount: Int = 0"},{"location":"api/shark/-initial-state/-initial-state/","title":"initial state","text":"<p>//leakcanary-repo/shark/InitialState/InitialState</p>"},{"location":"api/shark/-initial-state/-initial-state/#initialstate","title":"InitialState","text":"<p>[jvm]\\ constructor(scenarioLoopsPerGraph: Int = DEFAULT_SCENARIO_LOOPS_PER_GRAPH)</p>"},{"location":"api/shark/-initial-state/heap-graph-count/","title":"Heap graph count","text":"<p>//leakcanary-repo/shark/InitialState/heapGraphCount</p>"},{"location":"api/shark/-initial-state/heap-graph-count/#heapgraphcount","title":"heapGraphCount","text":"<p>[jvm]\\ open override val heapGraphCount: Int? = null</p> <p>The expected max number of traversals, or null if unknown.</p>"},{"location":"api/shark/-initial-state/scenario-loops-per-graph/","title":"Scenario loops per graph","text":"<p>//leakcanary-repo/shark/InitialState/scenarioLoopsPerGraph</p>"},{"location":"api/shark/-initial-state/scenario-loops-per-graph/#scenarioloopspergraph","title":"scenarioLoopsPerGraph","text":"<p>[jvm]\\ open override val scenarioLoopsPerGraph: Int</p> <p>How many times a scenario that might cause heap growth is repeated in between each dump and traversal. This leads the traversal algorithm to only look at objects that are growing at least scenarioLoopsPerGraph times since the previous traversal.</p>"},{"location":"api/shark/-initial-state/traversal-count/","title":"Traversal count","text":"<p>//leakcanary-repo/shark/InitialState/traversalCount</p>"},{"location":"api/shark/-initial-state/traversal-count/#traversalcount","title":"traversalCount","text":"<p>[jvm]\\ open override val traversalCount: Int = 0</p>"},{"location":"api/shark/-initial-state/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/InitialState/Companion</p>"},{"location":"api/shark/-initial-state/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-initial-state/-companion/#properties","title":"Properties","text":"Name Summary DEFAULT_SCENARIO_LOOPS_PER_GRAPH [jvm]const val DEFAULT_SCENARIO_LOOPS_PER_GRAPH: Int = 1"},{"location":"api/shark/-initial-state/-companion/-d-e-f-a-u-l-t_-s-c-e-n-a-r-i-o_-l-o-o-p-s_-p-e-r_-g-r-a-p-h/","title":"d e f a u l t s c e n a r i o l o o p s p e r g r a p h","text":"<p>//leakcanary-repo/shark/InitialState/Companion/DEFAULT_SCENARIO_LOOPS_PER_GRAPH</p>"},{"location":"api/shark/-initial-state/-companion/-d-e-f-a-u-l-t_-s-c-e-n-a-r-i-o_-l-o-o-p-s_-p-e-r_-g-r-a-p-h/#default_scenario_loops_per_graph","title":"DEFAULT_SCENARIO_LOOPS_PER_GRAPH","text":"<p>[jvm]\\ const val DEFAULT_SCENARIO_LOOPS_PER_GRAPH: Int = 1</p>"},{"location":"api/shark/-interactive-command/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand</p>"},{"location":"api/shark/-interactive-command/#interactivecommand","title":"InteractiveCommand","text":"<p>[jvm]\\ class InteractiveCommand : CliktCommand</p>"},{"location":"api/shark/-interactive-command/#constructors","title":"Constructors","text":"InteractiveCommand [jvm]constructor()"},{"location":"api/shark/-interactive-command/#types","title":"Types","text":"Name Summary COMMAND [jvm]enum COMMAND : Enum<InteractiveCommand.COMMAND>"},{"location":"api/shark/-interactive-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-interactive-command/-interactive-command/","title":"interactive command","text":"<p>//leakcanary-repo/shark/InteractiveCommand/InteractiveCommand</p>"},{"location":"api/shark/-interactive-command/-interactive-command/#interactivecommand","title":"InteractiveCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-interactive-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/InteractiveCommand/run</p>"},{"location":"api/shark/-interactive-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/#command","title":"COMMAND","text":"<p>[jvm]\\ enum COMMAND : Enum<InteractiveCommand.COMMAND></p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/#entries","title":"Entries","text":"ANALYZE [jvm]ANALYZE CLASS [jvm]CLASS INSTANCE [jvm]INSTANCE ARRAY [jvm]ARRAY PATH_TO_INSTANCE [jvm]PATH_TO_INSTANCE DETAILED_PATH_TO_INSTANCE [jvm]DETAILED_PATH_TO_INSTANCE HELP [jvm]HELP EXIT [jvm]EXIT"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String valueOf [jvm]fun valueOf(value: String): InteractiveCommand.COMMANDReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<InteractiveCommand.COMMAND>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/command-name/","title":"Command name","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/commandName</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/command-name/#commandname","title":"commandName","text":"<p>[jvm]\\ val commandName: String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/help/","title":"Help","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/help</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/help/#help","title":"help","text":"<p>[jvm]\\ val help: String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/pattern-help/","title":"Pattern help","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/patternHelp</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/pattern-help/#patternhelp","title":"patternHelp","text":"<p>[jvm]\\ val patternHelp: String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/pattern/","title":"Pattern","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/pattern</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/pattern/#pattern","title":"pattern","text":"<p>[jvm]\\ val pattern: String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/suffix/","title":"Suffix","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/suffix</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/suffix/#suffix","title":"suffix","text":"<p>[jvm]\\ val suffix: String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/toString</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/valueOf</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): InteractiveCommand.COMMAND</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/values/","title":"Values","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/values</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<InteractiveCommand.COMMAND></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-n-a-l-y-z-e/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/ANALYZE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-n-a-l-y-z-e/#analyze","title":"ANALYZE","text":"<p>[jvm]\\ ANALYZE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-n-a-l-y-z-e/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-n-a-l-y-z-e/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-r-r-a-y/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/ARRAY</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-r-r-a-y/#array","title":"ARRAY","text":"<p>[jvm]\\ ARRAY</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-r-r-a-y/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-a-r-r-a-y/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/CLASS</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-c-l-a-s-s/#class","title":"CLASS","text":"<p>[jvm]\\ CLASS</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-c-l-a-s-s/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/Companion</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-companion/#functions","title":"Functions","text":"Name Summary matchesCommand [jvm]infix fun String.matchesCommand(command: InteractiveCommand.COMMAND): Boolean"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-companion/matches-command/","title":"Matches command","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/Companion/matchesCommand</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-companion/matches-command/#matchescommand","title":"matchesCommand","text":"<p>[jvm]\\ infix fun String.matchesCommand(command: InteractiveCommand.COMMAND): Boolean</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-d-e-t-a-i-l-e-d_-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/DETAILED_PATH_TO_INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-d-e-t-a-i-l-e-d_-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#detailed_path_to_instance","title":"DETAILED_PATH_TO_INSTANCE","text":"<p>[jvm]\\ DETAILED_PATH_TO_INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-d-e-t-a-i-l-e-d_-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-d-e-t-a-i-l-e-d_-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-e-x-i-t/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/EXIT</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-e-x-i-t/#exit","title":"EXIT","text":"<p>[jvm]\\ EXIT</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-e-x-i-t/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-e-x-i-t/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-h-e-l-p/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/HELP</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-h-e-l-p/#help","title":"HELP","text":"<p>[jvm]\\ HELP</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-h-e-l-p/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-h-e-l-p/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-i-n-s-t-a-n-c-e/#instance","title":"INSTANCE","text":"<p>[jvm]\\ INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/InteractiveCommand/COMMAND/PATH_TO_INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#path_to_instance","title":"PATH_TO_INSTANCE","text":"<p>[jvm]\\ PATH_TO_INSTANCE</p>"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-interactive-command/-c-o-m-m-a-n-d/-p-a-t-h_-t-o_-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary commandName [jvm]val commandName: String help [jvm]val help: String name [jvm]val name: String ordinal [jvm]val ordinal: Int pattern [jvm]val pattern: String patternHelp [jvm]val patternHelp: String suffix [jvm]val suffix: String"},{"location":"api/shark/-java-local-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader</p>"},{"location":"api/shark/-java-local-reference-reader/#javalocalreferencereader","title":"JavaLocalReferenceReader","text":"<p>[jvm]\\ class JavaLocalReferenceReader(val graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>) : ChainingInstanceReferenceReader.VirtualInstanceReferenceReader</p>"},{"location":"api/shark/-java-local-reference-reader/#constructors","title":"Constructors","text":"JavaLocalReferenceReader [jvm]constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-java-local-reference-reader/#functions","title":"Functions","text":"Name Summary matches [jvm]open override fun matches(instance: HeapObject.HeapInstance): Boolean read [jvm]open override fun read(source: HeapObject.HeapInstance): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-java-local-reference-reader/#properties","title":"Properties","text":"Name Summary graph [jvm]val graph: HeapGraph readsCutSet [jvm]open override val readsCutSet: Boolean = falsehttps://en.wikipedia.org/wiki/Cut_(graph_theory) A cut is a partition of the vertices of a graph into two disjoint subsets. Any cut determines a cut-set, the set of edges that have one endpoint in each subset of the partition. These edges are said to cross the cut."},{"location":"api/shark/-java-local-reference-reader/-java-local-reference-reader/","title":"java local reference reader","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader/JavaLocalReferenceReader</p>"},{"location":"api/shark/-java-local-reference-reader/-java-local-reference-reader/#javalocalreferencereader","title":"JavaLocalReferenceReader","text":"<p>[jvm]\\ constructor(graph: HeapGraph, referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-java-local-reference-reader/graph/","title":"Graph","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader/graph</p>"},{"location":"api/shark/-java-local-reference-reader/graph/#graph","title":"graph","text":"<p>[jvm]\\ val graph: HeapGraph</p>"},{"location":"api/shark/-java-local-reference-reader/matches/","title":"Matches","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader/matches</p>"},{"location":"api/shark/-java-local-reference-reader/matches/#matches","title":"matches","text":"<p>[jvm]\\ open override fun matches(instance: HeapObject.HeapInstance): Boolean</p>"},{"location":"api/shark/-java-local-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader/read</p>"},{"location":"api/shark/-java-local-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ open override fun read(source: HeapObject.HeapInstance): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-java-local-reference-reader/reads-cut-set/","title":"Reads cut set","text":"<p>//leakcanary-repo/shark/JavaLocalReferenceReader/readsCutSet</p>"},{"location":"api/shark/-java-local-reference-reader/reads-cut-set/#readscutset","title":"readsCutSet","text":"<p>[jvm]\\ open override val readsCutSet: Boolean = false</p> <p>https://en.wikipedia.org/wiki/Cut_(graph_theory) A cut is a partition of the vertices of a graph into two disjoint subsets. Any cut determines a cut-set, the set of edges that have one endpoint in each subset of the partition. These edges are said to cross the cut.</p> <p>If true, the references returned by read will include the cut-set, which means any other object reacheable from the source instance but not returned by read has no outgoing edge to the rest of the graph. In other words, the internals of the data structure cannot reach beyond the data structure itself.</p> <p>When this is true then ChainingInstanceReferenceReader can leverage FlatteningPartitionedInstanceReferenceReader.</p>"},{"location":"api/shark/-jdk-reference-matchers/","title":"Index","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers</p>"},{"location":"api/shark/-jdk-reference-matchers/#jdkreferencematchers","title":"JdkReferenceMatchers","text":"<p>[jvm]\\ enum JdkReferenceMatchers : Enum<JdkReferenceMatchers> , ReferenceMatcher.ListBuilder</p>"},{"location":"api/shark/-jdk-reference-matchers/#entries","title":"Entries","text":"REFERENCES [jvm]REFERENCES FINALIZER_WATCHDOG_DAEMON [jvm]FINALIZER_WATCHDOG_DAEMON MAIN [jvm]MAIN"},{"location":"api/shark/-jdk-reference-matchers/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-jdk-reference-matchers/#functions","title":"Functions","text":"Name Summary add [jvm]abstract fun add(references: MutableList<ReferenceMatcher>) valueOf [jvm]fun valueOf(value: String): JdkReferenceMatchersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<JdkReferenceMatchers>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-jdk-reference-matchers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jdk-reference-matchers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/valueOf</p>"},{"location":"api/shark/-jdk-reference-matchers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): JdkReferenceMatchers</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-jdk-reference-matchers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-jdk-reference-matchers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/values</p>"},{"location":"api/shark/-jdk-reference-matchers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<JdkReferenceMatchers></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-jdk-reference-matchers/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/Companion</p>"},{"location":"api/shark/-jdk-reference-matchers/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-jdk-reference-matchers/-companion/#properties","title":"Properties","text":"Name Summary defaults [jvm]@JvmStaticval defaults: List<ReferenceMatcher>"},{"location":"api/shark/-jdk-reference-matchers/-companion/defaults/","title":"Defaults","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/Companion/defaults</p>"},{"location":"api/shark/-jdk-reference-matchers/-companion/defaults/#defaults","title":"defaults","text":"<p>[jvm]\\</p> <p>@JvmStatic</p> <p>val defaults: List<ReferenceMatcher></p>"},{"location":"api/shark/-jdk-reference-matchers/-companion/defaults/#see-also","title":"See also","text":"AndroidReferenceMatchers"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/","title":"Index","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/FINALIZER_WATCHDOG_DAEMON</p>"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#finalizer_watchdog_daemon","title":"FINALIZER_WATCHDOG_DAEMON","text":"<p>[jvm]\\ FINALIZER_WATCHDOG_DAEMON</p>"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/FINALIZER_WATCHDOG_DAEMON/add</p>"},{"location":"api/shark/-jdk-reference-matchers/-f-i-n-a-l-i-z-e-r_-w-a-t-c-h-d-o-g_-d-a-e-m-o-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/","title":"Index","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/MAIN</p>"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/#main","title":"MAIN","text":"<p>[jvm]\\ MAIN</p>"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/MAIN/add</p>"},{"location":"api/shark/-jdk-reference-matchers/-m-a-i-n/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/REFERENCES</p>"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#references","title":"REFERENCES","text":"<p>[jvm]\\ REFERENCES</p>"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JdkReferenceMatchers/REFERENCES/add</p>"},{"location":"api/shark/-jdk-reference-matchers/-r-e-f-e-r-e-n-c-e-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/#jvmobjectgrowthreferencematchers","title":"JvmObjectGrowthReferenceMatchers","text":"<p>[jvm]\\ enum JvmObjectGrowthReferenceMatchers : Enum<JvmObjectGrowthReferenceMatchers> , ReferenceMatcher.ListBuilder</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/#entries","title":"Entries","text":"JVM_LEAK_DETECTION_IGNORED_MATCHERS [jvm]JVM_LEAK_DETECTION_IGNORED_MATCHERS HEAP_TRAVERSAL [jvm]HEAP_TRAVERSAL PARALLEL_LOCK_MAP [jvm]PARALLEL_LOCK_MAP"},{"location":"api/shark/-jvm-object-growth-reference-matchers/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-jvm-object-growth-reference-matchers/#functions","title":"Functions","text":"Name Summary add [jvm]abstract fun add(references: MutableList<ReferenceMatcher>) valueOf [jvm]fun valueOf(value: String): JvmObjectGrowthReferenceMatchersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<JvmObjectGrowthReferenceMatchers>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-jvm-object-growth-reference-matchers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jvm-object-growth-reference-matchers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/valueOf</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): JvmObjectGrowthReferenceMatchers</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-jvm-object-growth-reference-matchers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/values</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<JvmObjectGrowthReferenceMatchers></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/Companion</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-companion/#properties","title":"Properties","text":"Name Summary defaults [jvm]val defaults: List<ReferenceMatcher>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-companion/defaults/","title":"Defaults","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/Companion/defaults</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-companion/defaults/#defaults","title":"defaults","text":"<p>[jvm]\\ val defaults: List<ReferenceMatcher></p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/HEAP_TRAVERSAL</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#heap_traversal","title":"HEAP_TRAVERSAL","text":"<p>[jvm]\\ HEAP_TRAVERSAL</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/HEAP_TRAVERSAL/add</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-h-e-a-p_-t-r-a-v-e-r-s-a-l/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/JVM_LEAK_DETECTION_IGNORED_MATCHERS</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#jvm_leak_detection_ignored_matchers","title":"JVM_LEAK_DETECTION_IGNORED_MATCHERS","text":"<p>[jvm]\\ JVM_LEAK_DETECTION_IGNORED_MATCHERS</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/JVM_LEAK_DETECTION_IGNORED_MATCHERS/add</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-j-v-m_-l-e-a-k_-d-e-t-e-c-t-i-o-n_-i-g-n-o-r-e-d_-m-a-t-c-h-e-r-s/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/PARALLEL_LOCK_MAP</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/#parallel_lock_map","title":"PARALLEL_LOCK_MAP","text":"<p>[jvm]\\ PARALLEL_LOCK_MAP</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/#functions","title":"Functions","text":"Name Summary add [jvm]open override fun add(references: MutableList<ReferenceMatcher>)"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/add/","title":"Add","text":"<p>//leakcanary-repo/shark/JvmObjectGrowthReferenceMatchers/PARALLEL_LOCK_MAP/add</p>"},{"location":"api/shark/-jvm-object-growth-reference-matchers/-p-a-r-a-l-l-e-l_-l-o-c-k_-m-a-p/add/#add","title":"add","text":"<p>[jvm]\\ open override fun add(references: MutableList<ReferenceMatcher>)</p>"},{"location":"api/shark/-jvm-test-heap-dumper/","title":"Index","text":"<p>//leakcanary-repo/shark/JvmTestHeapDumper</p>"},{"location":"api/shark/-jvm-test-heap-dumper/#jvmtestheapdumper","title":"JvmTestHeapDumper","text":"<p>[jvm]\\ object JvmTestHeapDumper</p>"},{"location":"api/shark/-jvm-test-heap-dumper/#functions","title":"Functions","text":"Name Summary dumpHeap [jvm]fun dumpHeap(fileName: String)"},{"location":"api/shark/-jvm-test-heap-dumper/dump-heap/","title":"Dump heap","text":"<p>//leakcanary-repo/shark/JvmTestHeapDumper/dumpHeap</p>"},{"location":"api/shark/-jvm-test-heap-dumper/dump-heap/#dumpheap","title":"dumpHeap","text":"<p>[jvm]\\ fun dumpHeap(fileName: String)</p>"},{"location":"api/shark/-keyed-weak-reference-finder/","title":"Index","text":"<p>//leakcanary-repo/shark/KeyedWeakReferenceFinder</p>"},{"location":"api/shark/-keyed-weak-reference-finder/#keyedweakreferencefinder","title":"KeyedWeakReferenceFinder","text":"<p>[jvm]\\ object KeyedWeakReferenceFinder : LeakingObjectFinder</p> <p>Finds all objects tracked by a KeyedWeakReference, ie all objects that were passed to ObjectWatcher.watch.</p>"},{"location":"api/shark/-keyed-weak-reference-finder/#functions","title":"Functions","text":"Name Summary findLeakingObjectIds [jvm]open override fun findLeakingObjectIds(graph: HeapGraph): Set<Long>For a given heap graph, returns a set of object ids for the objects that are leaking. heapDumpUptimeMillis [jvm]fun heapDumpUptimeMillis(graph: HeapGraph): Long?"},{"location":"api/shark/-keyed-weak-reference-finder/find-leaking-object-ids/","title":"Find leaking object ids","text":"<p>//leakcanary-repo/shark/KeyedWeakReferenceFinder/findLeakingObjectIds</p>"},{"location":"api/shark/-keyed-weak-reference-finder/find-leaking-object-ids/#findleakingobjectids","title":"findLeakingObjectIds","text":"<p>[jvm]\\ open override fun findLeakingObjectIds(graph: HeapGraph): Set<Long></p> <p>For a given heap graph, returns a set of object ids for the objects that are leaking.</p>"},{"location":"api/shark/-keyed-weak-reference-finder/heap-dump-uptime-millis/","title":"Heap dump uptime millis","text":"<p>//leakcanary-repo/shark/KeyedWeakReferenceFinder/heapDumpUptimeMillis</p>"},{"location":"api/shark/-keyed-weak-reference-finder/heap-dump-uptime-millis/#heapdumpuptimemillis","title":"heapDumpUptimeMillis","text":"<p>[jvm]\\ fun heapDumpUptimeMillis(graph: HeapGraph): Long?</p>"},{"location":"api/shark/-leak/","title":"Index","text":"<p>//leakcanary-repo/shark/Leak</p>"},{"location":"api/shark/-leak/#leak","title":"Leak","text":"<p>sealed class Leak : Serializable</p> <p>A leak found by HeapAnalyzer, either an ApplicationLeak or a LibraryLeak.</p>"},{"location":"api/shark/-leak/#inheritors","title":"Inheritors","text":"LibraryLeak ApplicationLeak"},{"location":"api/shark/-leak/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-leak/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-leak/#properties","title":"Properties","text":"Name Summary leakTraces [jvm]abstract val leakTraces: List<LeakTrace>Group of leak traces which share the same leak signature. shortDescription [jvm]abstract val shortDescription: String signature [jvm]abstract val signature: StringA unique SHA1 hash that represents this group of leak traces. totalRetainedHeapByteSize [jvm]val totalRetainedHeapByteSize: Int?Sum of LeakTrace.retainedHeapByteSize for all elements in leakTraces. Null if the retained heap size was not computed. totalRetainedObjectCount [jvm]val totalRetainedObjectCount: Int?Sum of LeakTrace.retainedObjectCount for all elements in leakTraces. Null if the retained heap size was not computed."},{"location":"api/shark/-leak/leak-traces/","title":"Leak traces","text":"<p>//leakcanary-repo/shark/Leak/leakTraces</p>"},{"location":"api/shark/-leak/leak-traces/#leaktraces","title":"leakTraces","text":"<p>[jvm]\\ abstract val leakTraces: List<LeakTrace></p> <p>Group of leak traces which share the same leak signature.</p>"},{"location":"api/shark/-leak/short-description/","title":"Short description","text":"<p>//leakcanary-repo/shark/Leak/shortDescription</p>"},{"location":"api/shark/-leak/short-description/#shortdescription","title":"shortDescription","text":"<p>[jvm]\\ abstract val shortDescription: String</p>"},{"location":"api/shark/-leak/signature/","title":"Signature","text":"<p>//leakcanary-repo/shark/Leak/signature</p>"},{"location":"api/shark/-leak/signature/#signature","title":"signature","text":"<p>[jvm]\\ abstract val signature: String</p> <p>A unique SHA1 hash that represents this group of leak traces.</p> <p>For ApplicationLeak this is based on LeakTrace.signature and for LibraryLeak this is based on LibraryLeak.pattern.</p>"},{"location":"api/shark/-leak/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/Leak/toString</p>"},{"location":"api/shark/-leak/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-leak/total-retained-heap-byte-size/","title":"Total retained heap byte size","text":"<p>//leakcanary-repo/shark/Leak/totalRetainedHeapByteSize</p>"},{"location":"api/shark/-leak/total-retained-heap-byte-size/#totalretainedheapbytesize","title":"totalRetainedHeapByteSize","text":"<p>[jvm]\\ val totalRetainedHeapByteSize: Int?</p> <p>Sum of LeakTrace.retainedHeapByteSize for all elements in leakTraces. Null if the retained heap size was not computed.</p>"},{"location":"api/shark/-leak/total-retained-object-count/","title":"Total retained object count","text":"<p>//leakcanary-repo/shark/Leak/totalRetainedObjectCount</p>"},{"location":"api/shark/-leak/total-retained-object-count/#totalretainedobjectcount","title":"totalRetainedObjectCount","text":"<p>[jvm]\\ val totalRetainedObjectCount: Int?</p> <p>Sum of LeakTrace.retainedObjectCount for all elements in leakTraces. Null if the retained heap size was not computed.</p>"},{"location":"api/shark/-leak/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/Leak/Companion</p>"},{"location":"api/shark/-leak/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-leak-trace/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace</p>"},{"location":"api/shark/-leak-trace/#leaktrace","title":"LeakTrace","text":"<p>[jvm]\\ data class LeakTrace(val gcRootType: LeakTrace.GcRootType, val referencePath: List<LeakTraceReference>, val leakingObject: LeakTraceObject) : Serializable</p> <p>The best strong reference path from a GC root to the leaking object. \"Best\" here means the shortest prioritized path. A large number of distinct paths can generally be found leading to a leaking object. Shark prioritizes paths that don\u2019t go through known LibraryLeakReferenceMatcher (because those are known to create leaks so it\u2019s more interesting to find other paths causing leaks), then it prioritize paths that don\u2019t go through java local gc roots (because those are harder to reason about). Taking those priorities into account, finding the shortest path means there are less LeakTraceReference that can be suspected to cause the leak.</p>"},{"location":"api/shark/-leak-trace/#constructors","title":"Constructors","text":"LeakTrace [jvm]constructor(gcRootType: LeakTrace.GcRootType, referencePath: List<LeakTraceReference>, leakingObject: LeakTraceObject)"},{"location":"api/shark/-leak-trace/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion GcRootType [jvm]enum GcRootType : Enum<LeakTrace.GcRootType>"},{"location":"api/shark/-leak-trace/#functions","title":"Functions","text":"Name Summary referencePathElementIsSuspect [jvm]fun referencePathElementIsSuspect(index: Int): BooleanReturns true if the referencePath element at the provided index contains a reference that is suspected to cause the leak, ie if index is greater than or equal to the index of the LeakTraceReference of the last non leaking object and strictly lower than the index of the LeakTraceReference of the first leaking object. toSimplePathString [jvm]fun toSimplePathString(): String toString [jvm]open override fun toString(): String"},{"location":"api/shark/-leak-trace/#properties","title":"Properties","text":"Name Summary gcRootType [jvm]val gcRootType: LeakTrace.GcRootTypeThe Garbage Collection root that references the LeakTraceReference.originObject in the first LeakTraceReference of referencePath. leakingObject [jvm]val leakingObject: LeakTraceObject referencePath [jvm]val referencePath: List<LeakTraceReference> retainedHeapByteSize [jvm]val retainedHeapByteSize: Int?The minimum number of bytes which would be freed if the leak was fixed. Null if the retained heap size was not computed. retainedObjectCount [jvm]val retainedObjectCount: Int?The minimum number of objects which would be unreachable if the leak was fixed. Null if the retained heap size was not computed. signature [jvm]val signature: StringA SHA1 hash that represents this leak trace. This can be useful to group together similar leak traces. suspectReferenceSubpath [jvm]val suspectReferenceSubpath: Sequence<LeakTraceReference>A part of referencePath that contains the references suspected to cause the leak. Starts at the last non leaking object and ends before the first leaking object."},{"location":"api/shark/-leak-trace/-leak-trace/","title":"leak trace","text":"<p>//leakcanary-repo/shark/LeakTrace/LeakTrace</p>"},{"location":"api/shark/-leak-trace/-leak-trace/#leaktrace","title":"LeakTrace","text":"<p>[jvm]\\ constructor(gcRootType: LeakTrace.GcRootType, referencePath: List<LeakTraceReference>, leakingObject: LeakTraceObject)</p>"},{"location":"api/shark/-leak-trace/gc-root-type/","title":"Gc root type","text":"<p>//leakcanary-repo/shark/LeakTrace/gcRootType</p>"},{"location":"api/shark/-leak-trace/gc-root-type/#gcroottype","title":"gcRootType","text":"<p>[jvm]\\ val gcRootType: LeakTrace.GcRootType</p> <p>The Garbage Collection root that references the LeakTraceReference.originObject in the first LeakTraceReference of referencePath.</p>"},{"location":"api/shark/-leak-trace/leaking-object/","title":"Leaking object","text":"<p>//leakcanary-repo/shark/LeakTrace/leakingObject</p>"},{"location":"api/shark/-leak-trace/leaking-object/#leakingobject","title":"leakingObject","text":"<p>[jvm]\\ val leakingObject: LeakTraceObject</p>"},{"location":"api/shark/-leak-trace/reference-path-element-is-suspect/","title":"Reference path element is suspect","text":"<p>//leakcanary-repo/shark/LeakTrace/referencePathElementIsSuspect</p>"},{"location":"api/shark/-leak-trace/reference-path-element-is-suspect/#referencepathelementissuspect","title":"referencePathElementIsSuspect","text":"<p>[jvm]\\ fun referencePathElementIsSuspect(index: Int): Boolean</p> <p>Returns true if the referencePath element at the provided index contains a reference that is suspected to cause the leak, ie if index is greater than or equal to the index of the LeakTraceReference of the last non leaking object and strictly lower than the index of the LeakTraceReference of the first leaking object.</p>"},{"location":"api/shark/-leak-trace/reference-path/","title":"Reference path","text":"<p>//leakcanary-repo/shark/LeakTrace/referencePath</p>"},{"location":"api/shark/-leak-trace/reference-path/#referencepath","title":"referencePath","text":"<p>[jvm]\\ val referencePath: List<LeakTraceReference></p>"},{"location":"api/shark/-leak-trace/retained-heap-byte-size/","title":"Retained heap byte size","text":"<p>//leakcanary-repo/shark/LeakTrace/retainedHeapByteSize</p>"},{"location":"api/shark/-leak-trace/retained-heap-byte-size/#retainedheapbytesize","title":"retainedHeapByteSize","text":"<p>[jvm]\\ val retainedHeapByteSize: Int?</p> <p>The minimum number of bytes which would be freed if the leak was fixed. Null if the retained heap size was not computed.</p>"},{"location":"api/shark/-leak-trace/retained-object-count/","title":"Retained object count","text":"<p>//leakcanary-repo/shark/LeakTrace/retainedObjectCount</p>"},{"location":"api/shark/-leak-trace/retained-object-count/#retainedobjectcount","title":"retainedObjectCount","text":"<p>[jvm]\\ val retainedObjectCount: Int?</p> <p>The minimum number of objects which would be unreachable if the leak was fixed. Null if the retained heap size was not computed.</p>"},{"location":"api/shark/-leak-trace/signature/","title":"Signature","text":"<p>//leakcanary-repo/shark/LeakTrace/signature</p>"},{"location":"api/shark/-leak-trace/signature/#signature","title":"signature","text":"<p>[jvm]\\ val signature: String</p> <p>A SHA1 hash that represents this leak trace. This can be useful to group together similar leak traces.</p> <p>The signature is a hash of suspectReferenceSubpath.</p>"},{"location":"api/shark/-leak-trace/suspect-reference-subpath/","title":"Suspect reference subpath","text":"<p>//leakcanary-repo/shark/LeakTrace/suspectReferenceSubpath</p>"},{"location":"api/shark/-leak-trace/suspect-reference-subpath/#suspectreferencesubpath","title":"suspectReferenceSubpath","text":"<p>[jvm]\\ val suspectReferenceSubpath: Sequence<LeakTraceReference></p> <p>A part of referencePath that contains the references suspected to cause the leak. Starts at the last non leaking object and ends before the first leaking object.</p>"},{"location":"api/shark/-leak-trace/to-simple-path-string/","title":"To simple path string","text":"<p>//leakcanary-repo/shark/LeakTrace/toSimplePathString</p>"},{"location":"api/shark/-leak-trace/to-simple-path-string/#tosimplepathstring","title":"toSimplePathString","text":"<p>[jvm]\\ fun toSimplePathString(): String</p>"},{"location":"api/shark/-leak-trace/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/LeakTrace/toString</p>"},{"location":"api/shark/-leak-trace/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-leak-trace/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/Companion</p>"},{"location":"api/shark/-leak-trace/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/#gcroottype","title":"GcRootType","text":"<p>[jvm]\\ enum GcRootType : Enum<LeakTrace.GcRootType></p>"},{"location":"api/shark/-leak-trace/-gc-root-type/#entries","title":"Entries","text":"JNI_GLOBAL [jvm]JNI_GLOBAL JNI_LOCAL [jvm]JNI_LOCAL JAVA_FRAME [jvm]JAVA_FRAME NATIVE_STACK [jvm]NATIVE_STACK STICKY_CLASS [jvm]STICKY_CLASS THREAD_BLOCK [jvm]THREAD_BLOCK MONITOR_USED [jvm]MONITOR_USED THREAD_OBJECT [jvm]THREAD_OBJECT JNI_MONITOR [jvm]JNI_MONITOR"},{"location":"api/shark/-leak-trace/-gc-root-type/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-leak-trace/-gc-root-type/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): LeakTrace.GcRootTypeReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<LeakTrace.GcRootType>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-leak-trace/-gc-root-type/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/description/","title":"Description","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/description</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/description/#description","title":"description","text":"<p>[jvm]\\ val description: String</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/valueOf</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): LeakTrace.GcRootType</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-leak-trace/-gc-root-type/values/","title":"Values","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/values</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<LeakTrace.GcRootType></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/Companion</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-companion/#functions","title":"Functions","text":"Name Summary fromGcRoot [jvm]fun fromGcRoot(gcRoot: GcRoot): LeakTrace.GcRootType"},{"location":"api/shark/-leak-trace/-gc-root-type/-companion/from-gc-root/","title":"From gc root","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/Companion/fromGcRoot</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-companion/from-gc-root/#fromgcroot","title":"fromGcRoot","text":"<p>[jvm]\\ fun fromGcRoot(gcRoot: GcRoot): LeakTrace.GcRootType</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-a-v-a_-f-r-a-m-e/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/JAVA_FRAME</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-a-v-a_-f-r-a-m-e/#java_frame","title":"JAVA_FRAME","text":"<p>[jvm]\\ JAVA_FRAME</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-a-v-a_-f-r-a-m-e/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-g-l-o-b-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/JNI_GLOBAL</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-g-l-o-b-a-l/#jni_global","title":"JNI_GLOBAL","text":"<p>[jvm]\\ JNI_GLOBAL</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-g-l-o-b-a-l/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-l-o-c-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/JNI_LOCAL</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-l-o-c-a-l/#jni_local","title":"JNI_LOCAL","text":"<p>[jvm]\\ JNI_LOCAL</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-l-o-c-a-l/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-m-o-n-i-t-o-r/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/JNI_MONITOR</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-m-o-n-i-t-o-r/#jni_monitor","title":"JNI_MONITOR","text":"<p>[jvm]\\ JNI_MONITOR</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-j-n-i_-m-o-n-i-t-o-r/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-m-o-n-i-t-o-r_-u-s-e-d/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/MONITOR_USED</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-m-o-n-i-t-o-r_-u-s-e-d/#monitor_used","title":"MONITOR_USED","text":"<p>[jvm]\\ MONITOR_USED</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-m-o-n-i-t-o-r_-u-s-e-d/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-n-a-t-i-v-e_-s-t-a-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/NATIVE_STACK</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-n-a-t-i-v-e_-s-t-a-c-k/#native_stack","title":"NATIVE_STACK","text":"<p>[jvm]\\ NATIVE_STACK</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-n-a-t-i-v-e_-s-t-a-c-k/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-s-t-i-c-k-y_-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/STICKY_CLASS</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-s-t-i-c-k-y_-c-l-a-s-s/#sticky_class","title":"STICKY_CLASS","text":"<p>[jvm]\\ STICKY_CLASS</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-s-t-i-c-k-y_-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-b-l-o-c-k/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/THREAD_BLOCK</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-b-l-o-c-k/#thread_block","title":"THREAD_BLOCK","text":"<p>[jvm]\\ THREAD_BLOCK</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-b-l-o-c-k/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-o-b-j-e-c-t/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTrace/GcRootType/THREAD_OBJECT</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-o-b-j-e-c-t/#thread_object","title":"THREAD_OBJECT","text":"<p>[jvm]\\ THREAD_OBJECT</p>"},{"location":"api/shark/-leak-trace/-gc-root-type/-t-h-r-e-a-d_-o-b-j-e-c-t/#properties","title":"Properties","text":"Name Summary description [jvm]val description: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject</p>"},{"location":"api/shark/-leak-trace-object/#leaktraceobject","title":"LeakTraceObject","text":"<p>[jvm]\\ data class LeakTraceObject(val type: LeakTraceObject.ObjectType, val className: String, val labels: Set<String>, val leakingStatus: LeakTraceObject.LeakingStatus, val leakingStatusReason: String, val retainedHeapByteSize: Int?, val retainedObjectCount: Int?) : Serializable</p>"},{"location":"api/shark/-leak-trace-object/#constructors","title":"Constructors","text":"LeakTraceObject [jvm]constructor(type: LeakTraceObject.ObjectType, className: String, labels: Set<String>, leakingStatus: LeakTraceObject.LeakingStatus, leakingStatusReason: String, retainedHeapByteSize: Int?, retainedObjectCount: Int?)"},{"location":"api/shark/-leak-trace-object/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion LeakingStatus [jvm]enum LeakingStatus : Enum<LeakTraceObject.LeakingStatus> ObjectType [jvm]enum ObjectType : Enum<LeakTraceObject.ObjectType>"},{"location":"api/shark/-leak-trace-object/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-leak-trace-object/#properties","title":"Properties","text":"Name Summary className [jvm]val className: StringClass name of the object. The class name format is the same as what would be returned by Class.getName. classSimpleName [jvm]val classSimpleName: StringReturns {@link #className} without the package, ie stripped of any string content before the last period (included). labels [jvm]val labels: Set<String>Labels that were computed during analysis. A label provides extra information that helps understand the state of the leak trace object. leakingStatus [jvm]val leakingStatus: LeakTraceObject.LeakingStatus leakingStatusReason [jvm]val leakingStatusReason: String retainedHeapByteSize [jvm]val retainedHeapByteSize: Int?The minimum number of bytes which would be freed if all references to this object were released. Not null only if the retained heap size was computed AND leakingStatus is equal to LeakingStatus.UNKNOWN or LeakingStatus.LEAKING. retainedObjectCount [jvm]val retainedObjectCount: Int?The minimum number of objects which would be unreachable if all references to this object were released. Not null only if the retained heap size was computed AND leakingStatus is equal to LeakingStatus.UNKNOWN or LeakingStatus.LEAKING. type [jvm]val type: LeakTraceObject.ObjectType typeName [jvm]val typeName: String"},{"location":"api/shark/-leak-trace-object/-leak-trace-object/","title":"leak trace object","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakTraceObject</p>"},{"location":"api/shark/-leak-trace-object/-leak-trace-object/#leaktraceobject","title":"LeakTraceObject","text":"<p>[jvm]\\ constructor(type: LeakTraceObject.ObjectType, className: String, labels: Set<String>, leakingStatus: LeakTraceObject.LeakingStatus, leakingStatusReason: String, retainedHeapByteSize: Int?, retainedObjectCount: Int?)</p>"},{"location":"api/shark/-leak-trace-object/class-name/","title":"Class name","text":"<p>//leakcanary-repo/shark/LeakTraceObject/className</p>"},{"location":"api/shark/-leak-trace-object/class-name/#classname","title":"className","text":"<p>[jvm]\\ val className: String</p> <p>Class name of the object. The class name format is the same as what would be returned by Class.getName.</p>"},{"location":"api/shark/-leak-trace-object/class-simple-name/","title":"Class simple name","text":"<p>//leakcanary-repo/shark/LeakTraceObject/classSimpleName</p>"},{"location":"api/shark/-leak-trace-object/class-simple-name/#classsimplename","title":"classSimpleName","text":"<p>[jvm]\\ val classSimpleName: String</p> <p>Returns {@link #className} without the package, ie stripped of any string content before the last period (included).</p>"},{"location":"api/shark/-leak-trace-object/labels/","title":"Labels","text":"<p>//leakcanary-repo/shark/LeakTraceObject/labels</p>"},{"location":"api/shark/-leak-trace-object/labels/#labels","title":"labels","text":"<p>[jvm]\\ val labels: Set<String></p> <p>Labels that were computed during analysis. A label provides extra information that helps understand the state of the leak trace object.</p>"},{"location":"api/shark/-leak-trace-object/leaking-status-reason/","title":"Leaking status reason","text":"<p>//leakcanary-repo/shark/LeakTraceObject/leakingStatusReason</p>"},{"location":"api/shark/-leak-trace-object/leaking-status-reason/#leakingstatusreason","title":"leakingStatusReason","text":"<p>[jvm]\\ val leakingStatusReason: String</p>"},{"location":"api/shark/-leak-trace-object/leaking-status/","title":"Leaking status","text":"<p>//leakcanary-repo/shark/LeakTraceObject/leakingStatus</p>"},{"location":"api/shark/-leak-trace-object/leaking-status/#leakingstatus","title":"leakingStatus","text":"<p>[jvm]\\ val leakingStatus: LeakTraceObject.LeakingStatus</p>"},{"location":"api/shark/-leak-trace-object/retained-heap-byte-size/","title":"Retained heap byte size","text":"<p>//leakcanary-repo/shark/LeakTraceObject/retainedHeapByteSize</p>"},{"location":"api/shark/-leak-trace-object/retained-heap-byte-size/#retainedheapbytesize","title":"retainedHeapByteSize","text":"<p>[jvm]\\ val retainedHeapByteSize: Int?</p> <p>The minimum number of bytes which would be freed if all references to this object were released. Not null only if the retained heap size was computed AND leakingStatus is equal to LeakingStatus.UNKNOWN or LeakingStatus.LEAKING.</p>"},{"location":"api/shark/-leak-trace-object/retained-object-count/","title":"Retained object count","text":"<p>//leakcanary-repo/shark/LeakTraceObject/retainedObjectCount</p>"},{"location":"api/shark/-leak-trace-object/retained-object-count/#retainedobjectcount","title":"retainedObjectCount","text":"<p>[jvm]\\ val retainedObjectCount: Int?</p> <p>The minimum number of objects which would be unreachable if all references to this object were released. Not null only if the retained heap size was computed AND leakingStatus is equal to LeakingStatus.UNKNOWN or LeakingStatus.LEAKING.</p>"},{"location":"api/shark/-leak-trace-object/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/LeakTraceObject/toString</p>"},{"location":"api/shark/-leak-trace-object/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-leak-trace-object/type-name/","title":"Type name","text":"<p>//leakcanary-repo/shark/LeakTraceObject/typeName</p>"},{"location":"api/shark/-leak-trace-object/type-name/#typename","title":"typeName","text":"<p>[jvm]\\ val typeName: String</p>"},{"location":"api/shark/-leak-trace-object/type/","title":"Type","text":"<p>//leakcanary-repo/shark/LeakTraceObject/type</p>"},{"location":"api/shark/-leak-trace-object/type/#type","title":"type","text":"<p>[jvm]\\ val type: LeakTraceObject.ObjectType</p>"},{"location":"api/shark/-leak-trace-object/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/Companion</p>"},{"location":"api/shark/-leak-trace-object/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/#leakingstatus","title":"LeakingStatus","text":"<p>[jvm]\\ enum LeakingStatus : Enum<LeakTraceObject.LeakingStatus></p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/#entries","title":"Entries","text":"NOT_LEAKING [jvm]NOT_LEAKINGThe object was needed and therefore expected to be reachable. LEAKING [jvm]LEAKINGThe object was no longer needed and therefore expected to be unreachable. UNKNOWN [jvm]UNKNOWNNo decision can be made about the provided object."},{"location":"api/shark/-leak-trace-object/-leaking-status/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): LeakTraceObject.LeakingStatusReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<LeakTraceObject.LeakingStatus>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-leak-trace-object/-leaking-status/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-leaking-status/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus/valueOf</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): LeakTraceObject.LeakingStatus</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-leak-trace-object/-leaking-status/values/","title":"Values","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus/values</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<LeakTraceObject.LeakingStatus></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-l-e-a-k-i-n-g/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus/LEAKING</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-l-e-a-k-i-n-g/#leaking","title":"LEAKING","text":"<p>[jvm]\\ LEAKING</p> <p>The object was no longer needed and therefore expected to be unreachable.</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-l-e-a-k-i-n-g/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-leaking-status/-n-o-t_-l-e-a-k-i-n-g/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus/NOT_LEAKING</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-n-o-t_-l-e-a-k-i-n-g/#not_leaking","title":"NOT_LEAKING","text":"<p>[jvm]\\ NOT_LEAKING</p> <p>The object was needed and therefore expected to be reachable.</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-n-o-t_-l-e-a-k-i-n-g/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-leaking-status/-u-n-k-n-o-w-n/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/LeakingStatus/UNKNOWN</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-u-n-k-n-o-w-n/#unknown","title":"UNKNOWN","text":"<p>[jvm]\\ UNKNOWN</p> <p>No decision can be made about the provided object.</p>"},{"location":"api/shark/-leak-trace-object/-leaking-status/-u-n-k-n-o-w-n/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-object-type/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType</p>"},{"location":"api/shark/-leak-trace-object/-object-type/#objecttype","title":"ObjectType","text":"<p>[jvm]\\ enum ObjectType : Enum<LeakTraceObject.ObjectType></p>"},{"location":"api/shark/-leak-trace-object/-object-type/#entries","title":"Entries","text":"CLASS [jvm]CLASS ARRAY [jvm]ARRAY INSTANCE [jvm]INSTANCE"},{"location":"api/shark/-leak-trace-object/-object-type/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): LeakTraceObject.ObjectTypeReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<LeakTraceObject.ObjectType>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-leak-trace-object/-object-type/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-object-type/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType/valueOf</p>"},{"location":"api/shark/-leak-trace-object/-object-type/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): LeakTraceObject.ObjectType</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-leak-trace-object/-object-type/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-leak-trace-object/-object-type/values/","title":"Values","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType/values</p>"},{"location":"api/shark/-leak-trace-object/-object-type/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<LeakTraceObject.ObjectType></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-a-r-r-a-y/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType/ARRAY</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-a-r-r-a-y/#array","title":"ARRAY","text":"<p>[jvm]\\ ARRAY</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-a-r-r-a-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-object-type/-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType/CLASS</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-c-l-a-s-s/#class","title":"CLASS","text":"<p>[jvm]\\ CLASS</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-object/-object-type/-i-n-s-t-a-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceObject/ObjectType/INSTANCE</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-i-n-s-t-a-n-c-e/#instance","title":"INSTANCE","text":"<p>[jvm]\\ INSTANCE</p>"},{"location":"api/shark/-leak-trace-object/-object-type/-i-n-s-t-a-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-reference/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference</p>"},{"location":"api/shark/-leak-trace-reference/#leaktracereference","title":"LeakTraceReference","text":"<p>[jvm]\\ data class LeakTraceReference(val originObject: LeakTraceObject, val referenceType: LeakTraceReference.ReferenceType, val owningClassName: String, val referenceName: String) : Serializable</p> <p>A LeakTraceReference represents an origin LeakTraceObject and either a reference from that object to the LeakTraceObject in the next LeakTraceReference in LeakTrace.referencePath, or to LeakTrace.leakingObject if this is the last LeakTraceReference in LeakTrace.referencePath.</p>"},{"location":"api/shark/-leak-trace-reference/#constructors","title":"Constructors","text":"LeakTraceReference [jvm]constructor(originObject: LeakTraceObject, referenceType: LeakTraceReference.ReferenceType, owningClassName: String, referenceName: String)"},{"location":"api/shark/-leak-trace-reference/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion ReferenceType [jvm]enum ReferenceType : Enum<LeakTraceReference.ReferenceType>"},{"location":"api/shark/-leak-trace-reference/#properties","title":"Properties","text":"Name Summary originObject [jvm]val originObject: LeakTraceObject owningClassName [jvm]val owningClassName: String owningClassSimpleName [jvm]val owningClassSimpleName: StringReturns {@link #className} without the package, ie stripped of any string content before the last period (included). referenceDisplayName [jvm]val referenceDisplayName: String referenceGenericName [jvm]val referenceGenericName: String referenceName [jvm]val referenceName: String referenceType [jvm]val referenceType: LeakTraceReference.ReferenceType"},{"location":"api/shark/-leak-trace-reference/-leak-trace-reference/","title":"leak trace reference","text":"<p>//leakcanary-repo/shark/LeakTraceReference/LeakTraceReference</p>"},{"location":"api/shark/-leak-trace-reference/-leak-trace-reference/#leaktracereference","title":"LeakTraceReference","text":"<p>[jvm]\\ constructor(originObject: LeakTraceObject, referenceType: LeakTraceReference.ReferenceType, owningClassName: String, referenceName: String)</p>"},{"location":"api/shark/-leak-trace-reference/origin-object/","title":"Origin object","text":"<p>//leakcanary-repo/shark/LeakTraceReference/originObject</p>"},{"location":"api/shark/-leak-trace-reference/origin-object/#originobject","title":"originObject","text":"<p>[jvm]\\ val originObject: LeakTraceObject</p>"},{"location":"api/shark/-leak-trace-reference/owning-class-name/","title":"Owning class name","text":"<p>//leakcanary-repo/shark/LeakTraceReference/owningClassName</p>"},{"location":"api/shark/-leak-trace-reference/owning-class-name/#owningclassname","title":"owningClassName","text":"<p>[jvm]\\ val owningClassName: String</p>"},{"location":"api/shark/-leak-trace-reference/owning-class-simple-name/","title":"Owning class simple name","text":"<p>//leakcanary-repo/shark/LeakTraceReference/owningClassSimpleName</p>"},{"location":"api/shark/-leak-trace-reference/owning-class-simple-name/#owningclasssimplename","title":"owningClassSimpleName","text":"<p>[jvm]\\ val owningClassSimpleName: String</p> <p>Returns {@link #className} without the package, ie stripped of any string content before the last period (included).</p>"},{"location":"api/shark/-leak-trace-reference/reference-display-name/","title":"Reference display name","text":"<p>//leakcanary-repo/shark/LeakTraceReference/referenceDisplayName</p>"},{"location":"api/shark/-leak-trace-reference/reference-display-name/#referencedisplayname","title":"referenceDisplayName","text":"<p>[jvm]\\ val referenceDisplayName: String</p>"},{"location":"api/shark/-leak-trace-reference/reference-generic-name/","title":"Reference generic name","text":"<p>//leakcanary-repo/shark/LeakTraceReference/referenceGenericName</p>"},{"location":"api/shark/-leak-trace-reference/reference-generic-name/#referencegenericname","title":"referenceGenericName","text":"<p>[jvm]\\ val referenceGenericName: String</p>"},{"location":"api/shark/-leak-trace-reference/reference-name/","title":"Reference name","text":"<p>//leakcanary-repo/shark/LeakTraceReference/referenceName</p>"},{"location":"api/shark/-leak-trace-reference/reference-name/#referencename","title":"referenceName","text":"<p>[jvm]\\ val referenceName: String</p>"},{"location":"api/shark/-leak-trace-reference/reference-type/","title":"Reference type","text":"<p>//leakcanary-repo/shark/LeakTraceReference/referenceType</p>"},{"location":"api/shark/-leak-trace-reference/reference-type/#referencetype","title":"referenceType","text":"<p>[jvm]\\ val referenceType: LeakTraceReference.ReferenceType</p>"},{"location":"api/shark/-leak-trace-reference/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/Companion</p>"},{"location":"api/shark/-leak-trace-reference/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/#referencetype","title":"ReferenceType","text":"<p>[jvm]\\ enum ReferenceType : Enum<LeakTraceReference.ReferenceType></p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/#entries","title":"Entries","text":"INSTANCE_FIELD [jvm]INSTANCE_FIELD STATIC_FIELD [jvm]STATIC_FIELD LOCAL [jvm]LOCAL ARRAY_ENTRY [jvm]ARRAY_ENTRY"},{"location":"api/shark/-leak-trace-reference/-reference-type/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): LeakTraceReference.ReferenceTypeReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<LeakTraceReference.ReferenceType>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-leak-trace-reference/-reference-type/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-reference/-reference-type/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/valueOf</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): LeakTraceReference.ReferenceType</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-leak-trace-reference/-reference-type/values/","title":"Values","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/values</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<LeakTraceReference.ReferenceType></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-a-r-r-a-y_-e-n-t-r-y/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/ARRAY_ENTRY</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-a-r-r-a-y_-e-n-t-r-y/#array_entry","title":"ARRAY_ENTRY","text":"<p>[jvm]\\ ARRAY_ENTRY</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-a-r-r-a-y_-e-n-t-r-y/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-reference/-reference-type/-i-n-s-t-a-n-c-e_-f-i-e-l-d/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/INSTANCE_FIELD</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-i-n-s-t-a-n-c-e_-f-i-e-l-d/#instance_field","title":"INSTANCE_FIELD","text":"<p>[jvm]\\ INSTANCE_FIELD</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-i-n-s-t-a-n-c-e_-f-i-e-l-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-reference/-reference-type/-l-o-c-a-l/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/LOCAL</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-l-o-c-a-l/#local","title":"LOCAL","text":"<p>[jvm]\\ LOCAL</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-l-o-c-a-l/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-trace-reference/-reference-type/-s-t-a-t-i-c_-f-i-e-l-d/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTraceReference/ReferenceType/STATIC_FIELD</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-s-t-a-t-i-c_-f-i-e-l-d/#static_field","title":"STATIC_FIELD","text":"<p>[jvm]\\ STATIC_FIELD</p>"},{"location":"api/shark/-leak-trace-reference/-reference-type/-s-t-a-t-i-c_-f-i-e-l-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-leak-tracer/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTracer</p>"},{"location":"api/shark/-leak-tracer/#leaktracer","title":"LeakTracer","text":"<p>[jvm]\\ fun interface LeakTracer</p>"},{"location":"api/shark/-leak-tracer/#types","title":"Types","text":"Name Summary Factory [jvm]fun interface Factory"},{"location":"api/shark/-leak-tracer/#functions","title":"Functions","text":"Name Summary traceObjects [jvm]abstract fun traceObjects(objectIds: Set<Long>): LeaksAndUnreachableObjects"},{"location":"api/shark/-leak-tracer/trace-objects/","title":"Trace objects","text":"<p>//leakcanary-repo/shark/LeakTracer/traceObjects</p>"},{"location":"api/shark/-leak-tracer/trace-objects/#traceobjects","title":"traceObjects","text":"<p>[jvm]\\ abstract fun traceObjects(objectIds: Set<Long>): LeaksAndUnreachableObjects</p>"},{"location":"api/shark/-leak-tracer/-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakTracer/Factory</p>"},{"location":"api/shark/-leak-tracer/-factory/#factory","title":"Factory","text":"<p>fun interface Factory</p>"},{"location":"api/shark/-leak-tracer/-factory/#inheritors","title":"Inheritors","text":"RealLeakTracerFactory"},{"location":"api/shark/-leak-tracer/-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]abstract fun createFor(heapGraph: HeapGraph): LeakTracer"},{"location":"api/shark/-leak-tracer/-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/LeakTracer/Factory/createFor</p>"},{"location":"api/shark/-leak-tracer/-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ abstract fun createFor(heapGraph: HeapGraph): LeakTracer</p>"},{"location":"api/shark/-leaking-object-finder/","title":"Index","text":"<p>//leakcanary-repo/shark/LeakingObjectFinder</p>"},{"location":"api/shark/-leaking-object-finder/#leakingobjectfinder","title":"LeakingObjectFinder","text":"<p>fun interface LeakingObjectFinder</p> <p>Finds the objects that are leaking, for which Shark will compute leak traces.</p>"},{"location":"api/shark/-leaking-object-finder/#inheritors","title":"Inheritors","text":"FilteringLeakingObjectFinder KeyedWeakReferenceFinder"},{"location":"api/shark/-leaking-object-finder/#functions","title":"Functions","text":"Name Summary findLeakingObjectIds [jvm]abstract fun findLeakingObjectIds(graph: HeapGraph): Set<Long>For a given heap graph, returns a set of object ids for the objects that are leaking."},{"location":"api/shark/-leaking-object-finder/find-leaking-object-ids/","title":"Find leaking object ids","text":"<p>//leakcanary-repo/shark/LeakingObjectFinder/findLeakingObjectIds</p>"},{"location":"api/shark/-leaking-object-finder/find-leaking-object-ids/#findleakingobjectids","title":"findLeakingObjectIds","text":"<p>[jvm]\\ abstract fun findLeakingObjectIds(graph: HeapGraph): Set<Long></p> <p>For a given heap graph, returns a set of object ids for the objects that are leaking.</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/","title":"Index","text":"<p>//leakcanary-repo/shark/LeaksAndUnreachableObjects</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/#leaksandunreachableobjects","title":"LeaksAndUnreachableObjects","text":"<p>[jvm]\\ data class LeaksAndUnreachableObjects(val applicationLeaks: List<ApplicationLeak>, val libraryLeaks: List<LibraryLeak>, val unreachableObjects: List<LeakTraceObject>)</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/#constructors","title":"Constructors","text":"LeaksAndUnreachableObjects [jvm]constructor(applicationLeaks: List<ApplicationLeak>, libraryLeaks: List<LibraryLeak>, unreachableObjects: List<LeakTraceObject>)"},{"location":"api/shark/-leaks-and-unreachable-objects/#properties","title":"Properties","text":"Name Summary applicationLeaks [jvm]val applicationLeaks: List<ApplicationLeak> libraryLeaks [jvm]val libraryLeaks: List<LibraryLeak> unreachableObjects [jvm]val unreachableObjects: List<LeakTraceObject>"},{"location":"api/shark/-leaks-and-unreachable-objects/-leaks-and-unreachable-objects/","title":"leaks and unreachable objects","text":"<p>//leakcanary-repo/shark/LeaksAndUnreachableObjects/LeaksAndUnreachableObjects</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/-leaks-and-unreachable-objects/#leaksandunreachableobjects","title":"LeaksAndUnreachableObjects","text":"<p>[jvm]\\ constructor(applicationLeaks: List<ApplicationLeak>, libraryLeaks: List<LibraryLeak>, unreachableObjects: List<LeakTraceObject>)</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/application-leaks/","title":"Application leaks","text":"<p>//leakcanary-repo/shark/LeaksAndUnreachableObjects/applicationLeaks</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/application-leaks/#applicationleaks","title":"applicationLeaks","text":"<p>[jvm]\\ val applicationLeaks: List<ApplicationLeak></p>"},{"location":"api/shark/-leaks-and-unreachable-objects/library-leaks/","title":"Library leaks","text":"<p>//leakcanary-repo/shark/LeaksAndUnreachableObjects/libraryLeaks</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/library-leaks/#libraryleaks","title":"libraryLeaks","text":"<p>[jvm]\\ val libraryLeaks: List<LibraryLeak></p>"},{"location":"api/shark/-leaks-and-unreachable-objects/unreachable-objects/","title":"Unreachable objects","text":"<p>//leakcanary-repo/shark/LeaksAndUnreachableObjects/unreachableObjects</p>"},{"location":"api/shark/-leaks-and-unreachable-objects/unreachable-objects/#unreachableobjects","title":"unreachableObjects","text":"<p>[jvm]\\ val unreachableObjects: List<LeakTraceObject></p>"},{"location":"api/shark/-library-leak/","title":"Index","text":"<p>//leakcanary-repo/shark/LibraryLeak</p>"},{"location":"api/shark/-library-leak/#libraryleak","title":"LibraryLeak","text":"<p>[jvm]\\ data class LibraryLeak(val leakTraces: List<LeakTrace>, val pattern: ReferencePattern, val description: String) : Leak</p> <p>A leak found by HeapAnalyzer, where the only path to the leaking object required going through a reference matched by pattern, as provided to a LibraryLeakReferenceMatcher instance. This is a known leak in library code that is beyond your control.</p>"},{"location":"api/shark/-library-leak/#constructors","title":"Constructors","text":"LibraryLeak [jvm]constructor(leakTraces: List<LeakTrace>, pattern: ReferencePattern, description: String)"},{"location":"api/shark/-library-leak/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-library-leak/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-library-leak/#properties","title":"Properties","text":"Name Summary description [jvm]val description: StringA description that conveys what we know about this library leak. leakTraces [jvm]open override val leakTraces: List<LeakTrace>Group of leak traces which share the same leak signature. pattern [jvm]val pattern: ReferencePatternThe pattern that matched one of the references in each of leakTraces, as provided to a LibraryLeakReferenceMatcher instance. shortDescription [jvm]open override val shortDescription: String signature [jvm]open override val signature: StringA unique SHA1 hash that represents this group of leak traces. totalRetainedHeapByteSize [jvm]val totalRetainedHeapByteSize: Int?Sum of LeakTrace.retainedHeapByteSize for all elements in leakTraces. Null if the retained heap size was not computed. totalRetainedObjectCount [jvm]val totalRetainedObjectCount: Int?Sum of LeakTrace.retainedObjectCount for all elements in leakTraces. Null if the retained heap size was not computed."},{"location":"api/shark/-library-leak/-library-leak/","title":"library leak","text":"<p>//leakcanary-repo/shark/LibraryLeak/LibraryLeak</p>"},{"location":"api/shark/-library-leak/-library-leak/#libraryleak","title":"LibraryLeak","text":"<p>[jvm]\\ constructor(leakTraces: List<LeakTrace>, pattern: ReferencePattern, description: String)</p>"},{"location":"api/shark/-library-leak/description/","title":"Description","text":"<p>//leakcanary-repo/shark/LibraryLeak/description</p>"},{"location":"api/shark/-library-leak/description/#description","title":"description","text":"<p>[jvm]\\ val description: String</p> <p>A description that conveys what we know about this library leak.</p>"},{"location":"api/shark/-library-leak/leak-traces/","title":"Leak traces","text":"<p>//leakcanary-repo/shark/LibraryLeak/leakTraces</p>"},{"location":"api/shark/-library-leak/leak-traces/#leaktraces","title":"leakTraces","text":"<p>[jvm]\\ open override val leakTraces: List<LeakTrace></p> <p>Group of leak traces which share the same leak signature.</p>"},{"location":"api/shark/-library-leak/pattern/","title":"Pattern","text":"<p>//leakcanary-repo/shark/LibraryLeak/pattern</p>"},{"location":"api/shark/-library-leak/pattern/#pattern","title":"pattern","text":"<p>[jvm]\\ val pattern: ReferencePattern</p> <p>The pattern that matched one of the references in each of leakTraces, as provided to a LibraryLeakReferenceMatcher instance.</p>"},{"location":"api/shark/-library-leak/short-description/","title":"Short description","text":"<p>//leakcanary-repo/shark/LibraryLeak/shortDescription</p>"},{"location":"api/shark/-library-leak/short-description/#shortdescription","title":"shortDescription","text":"<p>[jvm]\\ open override val shortDescription: String</p>"},{"location":"api/shark/-library-leak/signature/","title":"Signature","text":"<p>//leakcanary-repo/shark/LibraryLeak/signature</p>"},{"location":"api/shark/-library-leak/signature/#signature","title":"signature","text":"<p>[jvm]\\ open override val signature: String</p> <p>A unique SHA1 hash that represents this group of leak traces.</p> <p>For ApplicationLeak this is based on LeakTrace.signature and for LibraryLeak this is based on LibraryLeak.pattern.</p>"},{"location":"api/shark/-library-leak/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/LibraryLeak/toString</p>"},{"location":"api/shark/-library-leak/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-library-leak/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/LibraryLeak/Companion</p>"},{"location":"api/shark/-library-leak/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-library-leak-reference-matcher/","title":"Index","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher</p>"},{"location":"api/shark/-library-leak-reference-matcher/#libraryleakreferencematcher","title":"LibraryLeakReferenceMatcher","text":"<p>[jvm]\\ data class LibraryLeakReferenceMatcher(val pattern: ReferencePattern, val description: String = \"\", val patternApplies: (HeapGraph) -> Boolean = ALWAYS) : ReferenceMatcher</p> <p>LibraryLeakReferenceMatcher should be used to match references in library code that are known to create leaks and are beyond your control. The shortest path finder will only go through matching references after it has exhausted references that don\u2019t match, prioritizing finding an application leak over a known library leak. Library leaks will be reported as LibraryLeak instead of ApplicationLeak.</p>"},{"location":"api/shark/-library-leak-reference-matcher/#constructors","title":"Constructors","text":"LibraryLeakReferenceMatcher [jvm]constructor(pattern: ReferencePattern, description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS)"},{"location":"api/shark/-library-leak-reference-matcher/#functions","title":"Functions","text":"Name Summary toString [jvm]open override fun toString(): String"},{"location":"api/shark/-library-leak-reference-matcher/#properties","title":"Properties","text":"Name Summary description [jvm]val description: StringA description that conveys what we know about this library leak. pattern [jvm]open override val pattern: ReferencePatternThe pattern that references will be matched against. patternApplies [jvm]open override val patternApplies: (HeapGraph) -> BooleanWhether the identified leak may exist in the provided HeapGraph. Defaults to true. If the heap dump comes from a VM that runs a different version of the library that doesn\u2019t have the leak, then this should return false."},{"location":"api/shark/-library-leak-reference-matcher/-library-leak-reference-matcher/","title":"library leak reference matcher","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher/LibraryLeakReferenceMatcher</p>"},{"location":"api/shark/-library-leak-reference-matcher/-library-leak-reference-matcher/#libraryleakreferencematcher","title":"LibraryLeakReferenceMatcher","text":"<p>[jvm]\\ constructor(pattern: ReferencePattern, description: String = \"\", patternApplies: (HeapGraph) -> Boolean = ALWAYS)</p>"},{"location":"api/shark/-library-leak-reference-matcher/description/","title":"Description","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher/description</p>"},{"location":"api/shark/-library-leak-reference-matcher/description/#description","title":"description","text":"<p>[jvm]\\ val description: String</p> <p>A description that conveys what we know about this library leak.</p>"},{"location":"api/shark/-library-leak-reference-matcher/pattern-applies/","title":"Pattern applies","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher/patternApplies</p>"},{"location":"api/shark/-library-leak-reference-matcher/pattern-applies/#patternapplies","title":"patternApplies","text":"<p>[jvm]\\ open override val patternApplies: (HeapGraph) -> Boolean</p> <p>Whether the identified leak may exist in the provided HeapGraph. Defaults to true. If the heap dump comes from a VM that runs a different version of the library that doesn\u2019t have the leak, then this should return false.</p>"},{"location":"api/shark/-library-leak-reference-matcher/pattern/","title":"Pattern","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher/pattern</p>"},{"location":"api/shark/-library-leak-reference-matcher/pattern/#pattern","title":"pattern","text":"<p>[jvm]\\ open override val pattern: ReferencePattern</p> <p>The pattern that references will be matched against.</p>"},{"location":"api/shark/-library-leak-reference-matcher/to-string/","title":"To string","text":"<p>//leakcanary-repo/shark/LibraryLeakReferenceMatcher/toString</p>"},{"location":"api/shark/-library-leak-reference-matcher/to-string/#tostring","title":"toString","text":"<p>[jvm]\\ open override fun toString(): String</p>"},{"location":"api/shark/-matching-gc-root-provider/","title":"Index","text":"<p>//leakcanary-repo/shark/MatchingGcRootProvider</p>"},{"location":"api/shark/-matching-gc-root-provider/#matchinggcrootprovider","title":"MatchingGcRootProvider","text":"<p>[jvm]\\ class MatchingGcRootProvider(referenceMatchers: List<ReferenceMatcher>) : GcRootProvider</p> <p>TODO Extracted from PathFinder, this should eventually be part of public API surface and we should likely also revisit the gc root type filtering which happens during heap parsing, as that\u2019s not really a concern for the heap parser and more for path finding. There are probably memory concerns as well there though. We could:</p> <ul> <li>compress the storing of these roots</li> <li>keep only the roots locations and read / deserialize as needed</li> <li>Ensure a unique / consistent view of roots by doing the work of GcRootProvider at parsing time and keeping that list.</li> </ul> <p>A GcRootProvider that matches roots against referenceMatchers.</p>"},{"location":"api/shark/-matching-gc-root-provider/#constructors","title":"Constructors","text":"MatchingGcRootProvider [jvm]constructor(referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-matching-gc-root-provider/#functions","title":"Functions","text":"Name Summary provideGcRoots [jvm]open override fun provideGcRoots(graph: HeapGraph): Sequence<GcRootReference>Provides a sequence of GC Roots to traverse the graph from, ideally in a stable order."},{"location":"api/shark/-matching-gc-root-provider/-matching-gc-root-provider/","title":"matching gc root provider","text":"<p>//leakcanary-repo/shark/MatchingGcRootProvider/MatchingGcRootProvider</p>"},{"location":"api/shark/-matching-gc-root-provider/-matching-gc-root-provider/#matchinggcrootprovider","title":"MatchingGcRootProvider","text":"<p>[jvm]\\ constructor(referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-matching-gc-root-provider/provide-gc-roots/","title":"Provide gc roots","text":"<p>//leakcanary-repo/shark/MatchingGcRootProvider/provideGcRoots</p>"},{"location":"api/shark/-matching-gc-root-provider/provide-gc-roots/#providegcroots","title":"provideGcRoots","text":"<p>[jvm]\\ open override fun provideGcRoots(graph: HeapGraph): Sequence<GcRootReference></p> <p>Provides a sequence of GC Roots to traverse the graph from, ideally in a stable order.</p>"},{"location":"api/shark/-metadata-extractor/","title":"Index","text":"<p>//leakcanary-repo/shark/MetadataExtractor</p>"},{"location":"api/shark/-metadata-extractor/#metadataextractor","title":"MetadataExtractor","text":"<p>fun interface MetadataExtractor</p> <p>Extracts metadata from a hprof to be reported in HeapAnalysisSuccess.metadata.</p>"},{"location":"api/shark/-metadata-extractor/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-metadata-extractor/#functions","title":"Functions","text":"Name Summary extractMetadata [jvm]abstract fun extractMetadata(graph: HeapGraph): Map<String, String>"},{"location":"api/shark/-metadata-extractor/extract-metadata/","title":"Extract metadata","text":"<p>//leakcanary-repo/shark/MetadataExtractor/extractMetadata</p>"},{"location":"api/shark/-metadata-extractor/extract-metadata/#extractmetadata","title":"extractMetadata","text":"<p>[jvm]\\ abstract fun extractMetadata(graph: HeapGraph): Map<String, String></p>"},{"location":"api/shark/-metadata-extractor/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/MetadataExtractor/Companion</p>"},{"location":"api/shark/-metadata-extractor/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-metadata-extractor/-companion/#properties","title":"Properties","text":"Name Summary NO_OP [jvm]val NO_OP: MetadataExtractorA no-op MetadataExtractor"},{"location":"api/shark/-metadata-extractor/-companion/-n-o_-o-p/","title":"n o o p","text":"<p>//leakcanary-repo/shark/MetadataExtractor/Companion/NO_OP</p>"},{"location":"api/shark/-metadata-extractor/-companion/-n-o_-o-p/#no_op","title":"NO_OP","text":"<p>[jvm]\\ val NO_OP: MetadataExtractor</p> <p>A no-op MetadataExtractor</p>"},{"location":"api/shark/-neo4-j-command/","title":"Index","text":"<p>//leakcanary-repo/shark/Neo4JCommand</p>"},{"location":"api/shark/-neo4-j-command/#neo4jcommand","title":"Neo4JCommand","text":"<p>[jvm]\\ class Neo4JCommand : CliktCommand</p> <p>Example commands:</p> <p>MATCH (roots: GcRoots) RETURN roots</p> <p>MATCH (activity: Instance) -:CLASS|SUPER*1..-> (c:Class {className: \"android.app.Activity\"}) RETURN activity</p> <p>MATCH (activity: Instance) -:CLASS|SUPER*1..-> (c:Class {className: \"android.app.Activity\"}) WHERE \"android.app.Activity.mDestroyed = true\" in activity.fields RETURN activity</p> <p>MATCH (roots: GcRoots) MATCH (activity: Instance) -:CLASS|SUPER*1..->(c:Class {className: \"android.app.Activity\"}) WHERE \"android.app.Activity.mDestroyed = true\" in activity.fields RETURN shortestPath((roots)-:ROOT|REF*->(activity))</p>"},{"location":"api/shark/-neo4-j-command/#constructors","title":"Constructors","text":"Neo4JCommand [jvm]constructor()"},{"location":"api/shark/-neo4-j-command/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-neo4-j-command/#functions","title":"Functions","text":"Name Summary aliases [jvm]open fun aliases(): Map<String, List<String>> analyze [jvm]fun CliktCommand.analyze(heapDumpFile: File, proguardMappingFile: File?) dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) dumpHeap [jvm]fun CliktCommand.dumpHeap(processNameParam: String, maybeDeviceId: String?): File echo [jvm]fun CliktCommand.echo(message: Any?, trailingNewline: Boolean = true, err: Boolean = false, lineSeparator: String = context.console.lineSeparator)Copy of CliktCommand.echo to make it publicly visible and therefore accessible from CliktCommand extension functions echoNewline [jvm]fun CliktCommand.echoNewline() getFormattedHelp [jvm]open fun getFormattedHelp(): String getFormattedUsage [jvm]open fun getFormattedUsage(): String issueMessage [jvm]fun issueMessage(message: String) main [jvm]fun main(argv: Array<String>)fun main(argv: List<String>) parse [jvm]fun parse(argv: Array<String>, parentContext: Context?)fun parse(argv: List<String>, parentContext: Context?) registerArgument [jvm]fun registerArgument(argument: Argument) registeredSubcommandNames [jvm]fun registeredSubcommandNames(): List<String> registerOption [jvm]open override fun registerOption(option: GroupableOption)fun registerOption(option: Option) registerOptionGroup [jvm]fun registerOptionGroup(group: ParameterGroup) retrieveHeapDumpFile [jvm]fun CliktCommand.retrieveHeapDumpFile(params: SharkCliCommand.CommandParams): File run [jvm]open override fun run() toString [jvm]open override fun toString(): String"},{"location":"api/shark/-neo4-j-command/#properties","title":"Properties","text":"Name Summary commandHelp [jvm]val commandHelp: String commandHelpEpilog [jvm]val commandHelpEpilog: String commandName [jvm]val commandName: String context [jvm]val context: Context helpTags [jvm]val helpTags: Map<String, String> invokeWithoutSubcommand [jvm]val invokeWithoutSubcommand: Boolean messages [jvm]val messages: List<String> printHelpOnEmptyArgs [jvm]val printHelpOnEmptyArgs: Boolean"},{"location":"api/shark/-neo4-j-command/-neo4-j-command/","title":"neo4 j command","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Neo4JCommand</p>"},{"location":"api/shark/-neo4-j-command/-neo4-j-command/#neo4jcommand","title":"Neo4JCommand","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-neo4-j-command/run/","title":"Run","text":"<p>//leakcanary-repo/shark/Neo4JCommand/run</p>"},{"location":"api/shark/-neo4-j-command/run/#run","title":"run","text":"<p>[jvm]\\ open override fun run()</p>"},{"location":"api/shark/-neo4-j-command/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion</p>"},{"location":"api/shark/-neo4-j-command/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-neo4-j-command/-companion/#functions","title":"Functions","text":"Name Summary dump [jvm]fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?) heapValueAsString [jvm]fun HeapValue.heapValueAsString(): String"},{"location":"api/shark/-neo4-j-command/-companion/#properties","title":"Properties","text":"Name Summary PHANTOM_REFERENCE [jvm]val PHANTOM_REFERENCE: String REFERENCE [jvm]val REFERENCE: String SOFT_REFERENCE [jvm]val SOFT_REFERENCE: String WEAK_REFERENCE [jvm]val WEAK_REFERENCE: String"},{"location":"api/shark/-neo4-j-command/-companion/-p-h-a-n-t-o-m_-r-e-f-e-r-e-n-c-e/","title":"p h a n t o m r e f e r e n c e","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/PHANTOM_REFERENCE</p>"},{"location":"api/shark/-neo4-j-command/-companion/-p-h-a-n-t-o-m_-r-e-f-e-r-e-n-c-e/#phantom_reference","title":"PHANTOM_REFERENCE","text":"<p>[jvm]\\ val PHANTOM_REFERENCE: String</p>"},{"location":"api/shark/-neo4-j-command/-companion/-r-e-f-e-r-e-n-c-e/","title":"r e f e r e n c e","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/REFERENCE</p>"},{"location":"api/shark/-neo4-j-command/-companion/-r-e-f-e-r-e-n-c-e/#reference","title":"REFERENCE","text":"<p>[jvm]\\ val REFERENCE: String</p>"},{"location":"api/shark/-neo4-j-command/-companion/-s-o-f-t_-r-e-f-e-r-e-n-c-e/","title":"s o f t r e f e r e n c e","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/SOFT_REFERENCE</p>"},{"location":"api/shark/-neo4-j-command/-companion/-s-o-f-t_-r-e-f-e-r-e-n-c-e/#soft_reference","title":"SOFT_REFERENCE","text":"<p>[jvm]\\ val SOFT_REFERENCE: String</p>"},{"location":"api/shark/-neo4-j-command/-companion/-w-e-a-k_-r-e-f-e-r-e-n-c-e/","title":"w e a k r e f e r e n c e","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/WEAK_REFERENCE</p>"},{"location":"api/shark/-neo4-j-command/-companion/-w-e-a-k_-r-e-f-e-r-e-n-c-e/#weak_reference","title":"WEAK_REFERENCE","text":"<p>[jvm]\\ val WEAK_REFERENCE: String</p>"},{"location":"api/shark/-neo4-j-command/-companion/dump/","title":"Dump","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/dump</p>"},{"location":"api/shark/-neo4-j-command/-companion/dump/#dump","title":"dump","text":"<p>[jvm]\\ fun CliktCommand.dump(heapDumpFile: File, dbParentFolder: File, proguardMappingFile: File?)</p>"},{"location":"api/shark/-neo4-j-command/-companion/heap-value-as-string/","title":"Heap value as string","text":"<p>//leakcanary-repo/shark/Neo4JCommand/Companion/heapValueAsString</p>"},{"location":"api/shark/-neo4-j-command/-companion/heap-value-as-string/#heapvalueasstring","title":"heapValueAsString","text":"<p>[jvm]\\ fun HeapValue.heapValueAsString(): String</p>"},{"location":"api/shark/-object-array-reference-reader/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectArrayReferenceReader</p>"},{"location":"api/shark/-object-array-reference-reader/#objectarrayreferencereader","title":"ObjectArrayReferenceReader","text":"<p>[jvm]\\ class ObjectArrayReferenceReader : ReferenceReader<HeapObject.HeapObjectArray></p>"},{"location":"api/shark/-object-array-reference-reader/#constructors","title":"Constructors","text":"ObjectArrayReferenceReader [jvm]constructor()"},{"location":"api/shark/-object-array-reference-reader/#functions","title":"Functions","text":"Name Summary read [jvm]open override fun read(source: HeapObject.HeapObjectArray): Sequence<Reference>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures."},{"location":"api/shark/-object-array-reference-reader/-object-array-reference-reader/","title":"object array reference reader","text":"<p>//leakcanary-repo/shark/ObjectArrayReferenceReader/ObjectArrayReferenceReader</p>"},{"location":"api/shark/-object-array-reference-reader/-object-array-reference-reader/#objectarrayreferencereader","title":"ObjectArrayReferenceReader","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-object-array-reference-reader/read/","title":"Read","text":"<p>//leakcanary-repo/shark/ObjectArrayReferenceReader/read</p>"},{"location":"api/shark/-object-array-reference-reader/read/#read","title":"read","text":"<p>[jvm]\\ open override fun read(source: HeapObject.HeapObjectArray): Sequence<Reference></p> <p>Returns the sequences of non null outgoing references from source. Outgoing refs can be actual JVM references or they can be virtual references when simplifying known data structures.</p> <p>Whenever possible, the returned sequence should be sorted in a way that ensures consistent graph traversal across heap dumps.</p> <p>The returned sequence may contain several Reference with an identical Reference.valueObjectId.</p>"},{"location":"api/shark/-object-dominators/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectDominators</p>"},{"location":"api/shark/-object-dominators/#objectdominators","title":"ObjectDominators","text":"<p>[jvm]\\ class ObjectDominators</p> <p>Exposes high level APIs to compute and render a dominator tree. This class needs to be public to be used by other LeakCanary modules but is internal and its API might change at any moment.</p> <p>Note that the exposed APIs are not optimized for speed, memory or IO.</p> <p>Eventually this capability should become part of the Shark public APIs, please open an issue if you\u2019d like to use this directly.</p>"},{"location":"api/shark/-object-dominators/#constructors","title":"Constructors","text":"ObjectDominators [jvm]constructor()"},{"location":"api/shark/-object-dominators/#types","title":"Types","text":"Name Summary DominatorNode [jvm]data class DominatorNode(val shallowSize: Int, val retainedSize: Int, val retainedCount: Int, val dominatedObjectIds: List<Long>) : Serializable OfflineDominatorNode [jvm]data class OfflineDominatorNode(val node: ObjectDominators.DominatorNode, val name: String) : Serializable"},{"location":"api/shark/-object-dominators/#functions","title":"Functions","text":"Name Summary buildDominatorTree [jvm]fun buildDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>): Map<Long, ObjectDominators.DominatorNode> buildOfflineDominatorTree [jvm]fun buildOfflineDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>): Map<Long, ObjectDominators.OfflineDominatorNode> renderDominatorTree [jvm]fun renderDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>, minRetainedSize: Int, threadName: String? = null, printStringContent: Boolean = false): String"},{"location":"api/shark/-object-dominators/-object-dominators/","title":"object dominators","text":"<p>//leakcanary-repo/shark/ObjectDominators/ObjectDominators</p>"},{"location":"api/shark/-object-dominators/-object-dominators/#objectdominators","title":"ObjectDominators","text":"<p>[jvm]\\ constructor()</p>"},{"location":"api/shark/-object-dominators/build-dominator-tree/","title":"Build dominator tree","text":"<p>//leakcanary-repo/shark/ObjectDominators/buildDominatorTree</p>"},{"location":"api/shark/-object-dominators/build-dominator-tree/#builddominatortree","title":"buildDominatorTree","text":"<p>[jvm]\\ fun buildDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>): Map<Long, ObjectDominators.DominatorNode></p>"},{"location":"api/shark/-object-dominators/build-offline-dominator-tree/","title":"Build offline dominator tree","text":"<p>//leakcanary-repo/shark/ObjectDominators/buildOfflineDominatorTree</p>"},{"location":"api/shark/-object-dominators/build-offline-dominator-tree/#buildofflinedominatortree","title":"buildOfflineDominatorTree","text":"<p>[jvm]\\ fun buildOfflineDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>): Map<Long, ObjectDominators.OfflineDominatorNode></p>"},{"location":"api/shark/-object-dominators/render-dominator-tree/","title":"Render dominator tree","text":"<p>//leakcanary-repo/shark/ObjectDominators/renderDominatorTree</p>"},{"location":"api/shark/-object-dominators/render-dominator-tree/#renderdominatortree","title":"renderDominatorTree","text":"<p>[jvm]\\ fun renderDominatorTree(graph: HeapGraph, ignoredRefs: List<IgnoredReferenceMatcher>, minRetainedSize: Int, threadName: String? = null, printStringContent: Boolean = false): String</p>"},{"location":"api/shark/-object-dominators/-dominator-node/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode</p>"},{"location":"api/shark/-object-dominators/-dominator-node/#dominatornode","title":"DominatorNode","text":"<p>[jvm]\\ data class DominatorNode(val shallowSize: Int, val retainedSize: Int, val retainedCount: Int, val dominatedObjectIds: List<Long>) : Serializable</p>"},{"location":"api/shark/-object-dominators/-dominator-node/#constructors","title":"Constructors","text":"DominatorNode [jvm]constructor(shallowSize: Int, retainedSize: Int, retainedCount: Int, dominatedObjectIds: List<Long>)"},{"location":"api/shark/-object-dominators/-dominator-node/#properties","title":"Properties","text":"Name Summary dominatedObjectIds [jvm]val dominatedObjectIds: List<Long> retainedCount [jvm]val retainedCount: Int retainedSize [jvm]val retainedSize: Int shallowSize [jvm]val shallowSize: Int"},{"location":"api/shark/-object-dominators/-dominator-node/-dominator-node/","title":"dominator node","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode/DominatorNode</p>"},{"location":"api/shark/-object-dominators/-dominator-node/-dominator-node/#dominatornode","title":"DominatorNode","text":"<p>[jvm]\\ constructor(shallowSize: Int, retainedSize: Int, retainedCount: Int, dominatedObjectIds: List<Long>)</p>"},{"location":"api/shark/-object-dominators/-dominator-node/dominated-object-ids/","title":"Dominated object ids","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode/dominatedObjectIds</p>"},{"location":"api/shark/-object-dominators/-dominator-node/dominated-object-ids/#dominatedobjectids","title":"dominatedObjectIds","text":"<p>[jvm]\\ val dominatedObjectIds: List<Long></p>"},{"location":"api/shark/-object-dominators/-dominator-node/retained-count/","title":"Retained count","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode/retainedCount</p>"},{"location":"api/shark/-object-dominators/-dominator-node/retained-count/#retainedcount","title":"retainedCount","text":"<p>[jvm]\\ val retainedCount: Int</p>"},{"location":"api/shark/-object-dominators/-dominator-node/retained-size/","title":"Retained size","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode/retainedSize</p>"},{"location":"api/shark/-object-dominators/-dominator-node/retained-size/#retainedsize","title":"retainedSize","text":"<p>[jvm]\\ val retainedSize: Int</p>"},{"location":"api/shark/-object-dominators/-dominator-node/shallow-size/","title":"Shallow size","text":"<p>//leakcanary-repo/shark/ObjectDominators/DominatorNode/shallowSize</p>"},{"location":"api/shark/-object-dominators/-dominator-node/shallow-size/#shallowsize","title":"shallowSize","text":"<p>[jvm]\\ val shallowSize: Int</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectDominators/OfflineDominatorNode</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/#offlinedominatornode","title":"OfflineDominatorNode","text":"<p>[jvm]\\ data class OfflineDominatorNode(val node: ObjectDominators.DominatorNode, val name: String) : Serializable</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/#constructors","title":"Constructors","text":"OfflineDominatorNode [jvm]constructor(node: ObjectDominators.DominatorNode, name: String)"},{"location":"api/shark/-object-dominators/-offline-dominator-node/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String node [jvm]val node: ObjectDominators.DominatorNode"},{"location":"api/shark/-object-dominators/-offline-dominator-node/-offline-dominator-node/","title":"offline dominator node","text":"<p>//leakcanary-repo/shark/ObjectDominators/OfflineDominatorNode/OfflineDominatorNode</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/-offline-dominator-node/#offlinedominatornode","title":"OfflineDominatorNode","text":"<p>[jvm]\\ constructor(node: ObjectDominators.DominatorNode, name: String)</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/name/","title":"Name","text":"<p>//leakcanary-repo/shark/ObjectDominators/OfflineDominatorNode/name</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/name/#name","title":"name","text":"<p>[jvm]\\ val name: String</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/node/","title":"Node","text":"<p>//leakcanary-repo/shark/ObjectDominators/OfflineDominatorNode/node</p>"},{"location":"api/shark/-object-dominators/-offline-dominator-node/node/#node","title":"node","text":"<p>[jvm]\\ val node: ObjectDominators.DominatorNode</p>"},{"location":"api/shark/-object-growth-detector/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectGrowthDetector</p>"},{"location":"api/shark/-object-growth-detector/#objectgrowthdetector","title":"ObjectGrowthDetector","text":"<p>[jvm]\\ class ObjectGrowthDetector(gcRootProvider: GcRootProvider, referenceReaderFactory: ReferenceReader.Factory<HeapObject>)</p> <p>Looks for objects that have grown in outgoing references in a new heap dump compared to a previous heap dump by diffing heap traversals.</p>"},{"location":"api/shark/-object-growth-detector/#constructors","title":"Constructors","text":"ObjectGrowthDetector [jvm]constructor(gcRootProvider: GcRootProvider, referenceReaderFactory: ReferenceReader.Factory<HeapObject>)"},{"location":"api/shark/-object-growth-detector/#types","title":"Types","text":"Name Summary Companion [jvm]object CompanionThis allows external modules to add factory methods for configured instances of this class as extension functions of this companion object."},{"location":"api/shark/-object-growth-detector/#functions","title":"Functions","text":"Name Summary findGrowingObjects [jvm]fun findGrowingObjects(heapGraph: HeapGraph, previousTraversal: HeapTraversalInput = InitialState()): HeapTraversalOutput"},{"location":"api/shark/-object-growth-detector/-object-growth-detector/","title":"object growth detector","text":"<p>//leakcanary-repo/shark/ObjectGrowthDetector/ObjectGrowthDetector</p>"},{"location":"api/shark/-object-growth-detector/-object-growth-detector/#objectgrowthdetector","title":"ObjectGrowthDetector","text":"<p>[jvm]\\ constructor(gcRootProvider: GcRootProvider, referenceReaderFactory: ReferenceReader.Factory<HeapObject>)</p>"},{"location":"api/shark/-object-growth-detector/find-growing-objects/","title":"Find growing objects","text":"<p>//leakcanary-repo/shark/ObjectGrowthDetector/findGrowingObjects</p>"},{"location":"api/shark/-object-growth-detector/find-growing-objects/#findgrowingobjects","title":"findGrowingObjects","text":"<p>[jvm]\\ fun findGrowingObjects(heapGraph: HeapGraph, previousTraversal: HeapTraversalInput = InitialState()): HeapTraversalOutput</p>"},{"location":"api/shark/-object-growth-detector/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectGrowthDetector/Companion</p>"},{"location":"api/shark/-object-growth-detector/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p> <p>This allows external modules to add factory methods for configured instances of this class as extension functions of this companion object.</p>"},{"location":"api/shark/-object-growth-detector/-companion/#functions","title":"Functions","text":"Name Summary forAndroidHeap [jvm]fun ObjectGrowthDetector.Companion.forAndroidHeap(referenceMatchers: List<ReferenceMatcher> = AndroidObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector forJvmHeap [jvm]fun ObjectGrowthDetector.Companion.forJvmHeap(referenceMatchers: List<ReferenceMatcher> = JvmObjectGrowthReferenceMatchers.defaults): ObjectGrowthDetector"},{"location":"api/shark/-object-inspector/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspector</p>"},{"location":"api/shark/-object-inspector/#objectinspector","title":"ObjectInspector","text":"<p>fun interface ObjectInspector</p> <p>Provides LeakCanary with insights about objects (classes, instances and arrays) found in the heap. inspect will be called for each object that LeakCanary wants to know more about. The implementation can then use the provided ObjectReporter to provide insights for that object.</p>"},{"location":"api/shark/-object-inspector/#inheritors","title":"Inheritors","text":"AppSingletonInspector ObjectInspectors"},{"location":"api/shark/-object-inspector/#functions","title":"Functions","text":"Name Summary inspect [jvm]abstract fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspector/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspector/inspect</p>"},{"location":"api/shark/-object-inspector/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ abstract fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspector/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-inspectors/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors</p>"},{"location":"api/shark/-object-inspectors/#objectinspectors","title":"ObjectInspectors","text":"<p>[jvm]\\ enum ObjectInspectors : Enum<ObjectInspectors> , ObjectInspector</p> <p>A set of default ObjectInspectors that knows about common JDK objects.</p>"},{"location":"api/shark/-object-inspectors/#entries","title":"Entries","text":"KEYED_WEAK_REFERENCE [jvm]KEYED_WEAK_REFERENCE CLASSLOADER [jvm]CLASSLOADER CLASS [jvm]CLASS ANONYMOUS_CLASS [jvm]ANONYMOUS_CLASS THREAD [jvm]THREAD"},{"location":"api/shark/-object-inspectors/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-object-inspectors/#functions","title":"Functions","text":"Name Summary inspect [jvm]abstract fun inspect(reporter: ObjectReporter) valueOf [jvm]fun valueOf(value: String): ObjectInspectorsReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<ObjectInspectors>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-object-inspectors/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/ObjectInspectors/valueOf</p>"},{"location":"api/shark/-object-inspectors/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): ObjectInspectors</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-object-inspectors/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-object-inspectors/values/","title":"Values","text":"<p>//leakcanary-repo/shark/ObjectInspectors/values</p>"},{"location":"api/shark/-object-inspectors/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<ObjectInspectors></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/ANONYMOUS_CLASS</p>"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/#anonymous_class","title":"ANONYMOUS_CLASS","text":"<p>[jvm]\\ ANONYMOUS_CLASS</p>"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspectors/ANONYMOUS_CLASS/inspect</p>"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspectors/-a-n-o-n-y-m-o-u-s_-c-l-a-s-s/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/CLASS</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/#class","title":"CLASS","text":"<p>[jvm]\\ CLASS</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspectors/CLASS/inspect</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/CLASSLOADER</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/#classloader","title":"CLASSLOADER","text":"<p>[jvm]\\ CLASSLOADER</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspectors/CLASSLOADER/inspect</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspectors/-c-l-a-s-s-l-o-a-d-e-r/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-inspectors/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/Companion</p>"},{"location":"api/shark/-object-inspectors/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-object-inspectors/-companion/#functions","title":"Functions","text":"Name Summary createLeakingObjectFilters [jvm]fun createLeakingObjectFilters(inspectors: Set<ObjectInspectors>): List<FilteringLeakingObjectFinder.LeakingObjectFilter>Creates a list of LeakingObjectFilter based on the passed in ObjectInspectors."},{"location":"api/shark/-object-inspectors/-companion/#properties","title":"Properties","text":"Name Summary jdkDefaults [jvm]val jdkDefaults: List<ObjectInspector> jdkLeakingObjectFilters [jvm]val jdkLeakingObjectFilters: List<FilteringLeakingObjectFinder.LeakingObjectFilter>Returns a list of LeakingObjectFilter suitable for common JDK projects."},{"location":"api/shark/-object-inspectors/-companion/create-leaking-object-filters/","title":"Create leaking object filters","text":"<p>//leakcanary-repo/shark/ObjectInspectors/Companion/createLeakingObjectFilters</p>"},{"location":"api/shark/-object-inspectors/-companion/create-leaking-object-filters/#createleakingobjectfilters","title":"createLeakingObjectFilters","text":"<p>[jvm]\\ fun createLeakingObjectFilters(inspectors: Set<ObjectInspectors>): List<FilteringLeakingObjectFinder.LeakingObjectFilter></p> <p>Creates a list of LeakingObjectFilter based on the passed in ObjectInspectors.</p>"},{"location":"api/shark/-object-inspectors/-companion/jdk-defaults/","title":"Jdk defaults","text":"<p>//leakcanary-repo/shark/ObjectInspectors/Companion/jdkDefaults</p>"},{"location":"api/shark/-object-inspectors/-companion/jdk-defaults/#jdkdefaults","title":"jdkDefaults","text":"<p>[jvm]\\ val jdkDefaults: List<ObjectInspector></p>"},{"location":"api/shark/-object-inspectors/-companion/jdk-defaults/#see-also","title":"See also","text":"ObjectInspectors"},{"location":"api/shark/-object-inspectors/-companion/jdk-leaking-object-filters/","title":"Jdk leaking object filters","text":"<p>//leakcanary-repo/shark/ObjectInspectors/Companion/jdkLeakingObjectFilters</p>"},{"location":"api/shark/-object-inspectors/-companion/jdk-leaking-object-filters/#jdkleakingobjectfilters","title":"jdkLeakingObjectFilters","text":"<p>[jvm]\\ val jdkLeakingObjectFilters: List<FilteringLeakingObjectFinder.LeakingObjectFilter></p> <p>Returns a list of LeakingObjectFilter suitable for common JDK projects.</p>"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/KEYED_WEAK_REFERENCE</p>"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/#keyed_weak_reference","title":"KEYED_WEAK_REFERENCE","text":"<p>[jvm]\\ KEYED_WEAK_REFERENCE</p>"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspectors/KEYED_WEAK_REFERENCE/inspect</p>"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspectors/-k-e-y-e-d_-w-e-a-k_-r-e-f-e-r-e-n-c-e/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectInspectors/THREAD</p>"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/#thread","title":"THREAD","text":"<p>[jvm]\\ THREAD</p>"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/#functions","title":"Functions","text":"Name Summary inspect [jvm]open override fun inspect(reporter: ObjectReporter)"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/inspect/","title":"Inspect","text":"<p>//leakcanary-repo/shark/ObjectInspectors/THREAD/inspect</p>"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/inspect/#inspect","title":"inspect","text":"<p>[jvm]\\ open override fun inspect(reporter: ObjectReporter)</p>"},{"location":"api/shark/-object-inspectors/-t-h-r-e-a-d/inspect/#see-also","title":"See also","text":"ObjectInspector"},{"location":"api/shark/-object-reporter/","title":"Index","text":"<p>//leakcanary-repo/shark/ObjectReporter</p>"},{"location":"api/shark/-object-reporter/#objectreporter","title":"ObjectReporter","text":"<p>[jvm]\\ class ObjectReporter(val heapObject: HeapObject)</p> <p>Enables ObjectInspector implementations to provide insights on heapObject, which is an object (class, instance or array) found in the heap.</p> <p>A given ObjectReporter only maps to one object in the heap, but is shared to many ObjectInspector implementations and accumulates insights.</p>"},{"location":"api/shark/-object-reporter/#constructors","title":"Constructors","text":"ObjectReporter [jvm]constructor(heapObject: HeapObject)"},{"location":"api/shark/-object-reporter/#functions","title":"Functions","text":"Name Summary whenInstanceOf [jvm]fun whenInstanceOf(expectedClassName: String, block: ObjectReporter.(HeapObject.HeapInstance) -> Unit)Runs block if ObjectReporter.heapObject is an instance of expectedClassName.[jvm]fun whenInstanceOf(expectedClass: KClass<out Any>, block: ObjectReporter.(HeapObject.HeapInstance) -> Unit)Runs block if ObjectReporter.heapObject is an instance of expectedClass."},{"location":"api/shark/-object-reporter/#properties","title":"Properties","text":"Name Summary heapObject [jvm]val heapObject: HeapObject labels [jvm]val labels: LinkedHashSet<String>Labels that will be visible on the corresponding heapObject in the leak trace. leakingReasons [jvm]val leakingReasons: MutableSet<String>Reasons for which this object is expected to be unreachable (ie it\u2019s leaking). notLeakingReasons [jvm]val notLeakingReasons: MutableSet<String>Reasons for which this object is expected to be reachable (ie it\u2019s not leaking)."},{"location":"api/shark/-object-reporter/-object-reporter/","title":"object reporter","text":"<p>//leakcanary-repo/shark/ObjectReporter/ObjectReporter</p>"},{"location":"api/shark/-object-reporter/-object-reporter/#objectreporter","title":"ObjectReporter","text":"<p>[jvm]\\ constructor(heapObject: HeapObject)</p>"},{"location":"api/shark/-object-reporter/heap-object/","title":"Heap object","text":"<p>//leakcanary-repo/shark/ObjectReporter/heapObject</p>"},{"location":"api/shark/-object-reporter/heap-object/#heapobject","title":"heapObject","text":"<p>[jvm]\\ val heapObject: HeapObject</p>"},{"location":"api/shark/-object-reporter/labels/","title":"Labels","text":"<p>//leakcanary-repo/shark/ObjectReporter/labels</p>"},{"location":"api/shark/-object-reporter/labels/#labels","title":"labels","text":"<p>[jvm]\\ val labels: LinkedHashSet<String></p> <p>Labels that will be visible on the corresponding heapObject in the leak trace.</p>"},{"location":"api/shark/-object-reporter/leaking-reasons/","title":"Leaking reasons","text":"<p>//leakcanary-repo/shark/ObjectReporter/leakingReasons</p>"},{"location":"api/shark/-object-reporter/leaking-reasons/#leakingreasons","title":"leakingReasons","text":"<p>[jvm]\\ val leakingReasons: MutableSet<String></p> <p>Reasons for which this object is expected to be unreachable (ie it\u2019s leaking).</p>"},{"location":"api/shark/-object-reporter/not-leaking-reasons/","title":"Not leaking reasons","text":"<p>//leakcanary-repo/shark/ObjectReporter/notLeakingReasons</p>"},{"location":"api/shark/-object-reporter/not-leaking-reasons/#notleakingreasons","title":"notLeakingReasons","text":"<p>[jvm]\\ val notLeakingReasons: MutableSet<String></p> <p>Reasons for which this object is expected to be reachable (ie it\u2019s not leaking).</p>"},{"location":"api/shark/-object-reporter/when-instance-of/","title":"When instance of","text":"<p>//leakcanary-repo/shark/ObjectReporter/whenInstanceOf</p>"},{"location":"api/shark/-object-reporter/when-instance-of/#wheninstanceof","title":"whenInstanceOf","text":"<p>[jvm]\\ fun whenInstanceOf(expectedClass: KClass<out Any>, block: ObjectReporter.(HeapObject.HeapInstance) -> Unit)</p> <p>Runs block if ObjectReporter.heapObject is an instance of expectedClass.</p> <p>[jvm]\\ fun whenInstanceOf(expectedClassName: String, block: ObjectReporter.(HeapObject.HeapInstance) -> Unit)</p> <p>Runs block if ObjectReporter.heapObject is an instance of expectedClassName.</p>"},{"location":"api/shark/-on-analysis-progress-listener/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener</p>"},{"location":"api/shark/-on-analysis-progress-listener/#onanalysisprogresslistener","title":"OnAnalysisProgressListener","text":"<p>[jvm]\\ fun interface OnAnalysisProgressListener</p> <p>Reports progress from the HeapAnalyzer as they occur, as Step values.</p>"},{"location":"api/shark/-on-analysis-progress-listener/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion Step [jvm]enum Step : Enum<OnAnalysisProgressListener.Step>"},{"location":"api/shark/-on-analysis-progress-listener/#functions","title":"Functions","text":"Name Summary onAnalysisProgress [jvm]abstract fun onAnalysisProgress(step: OnAnalysisProgressListener.Step)"},{"location":"api/shark/-on-analysis-progress-listener/on-analysis-progress/","title":"On analysis progress","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/onAnalysisProgress</p>"},{"location":"api/shark/-on-analysis-progress-listener/on-analysis-progress/#onanalysisprogress","title":"onAnalysisProgress","text":"<p>[jvm]\\ abstract fun onAnalysisProgress(step: OnAnalysisProgressListener.Step)</p>"},{"location":"api/shark/-on-analysis-progress-listener/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Companion</p>"},{"location":"api/shark/-on-analysis-progress-listener/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-on-analysis-progress-listener/-companion/#properties","title":"Properties","text":"Name Summary NO_OP [jvm]val NO_OP: OnAnalysisProgressListenerA no-op OnAnalysisProgressListener"},{"location":"api/shark/-on-analysis-progress-listener/-companion/-n-o_-o-p/","title":"n o o p","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Companion/NO_OP</p>"},{"location":"api/shark/-on-analysis-progress-listener/-companion/-n-o_-o-p/#no_op","title":"NO_OP","text":"<p>[jvm]\\ val NO_OP: OnAnalysisProgressListener</p> <p>A no-op OnAnalysisProgressListener</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/#step","title":"Step","text":"<p>[jvm]\\ enum Step : Enum<OnAnalysisProgressListener.Step></p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/#entries","title":"Entries","text":"PARSING_HEAP_DUMP [jvm]PARSING_HEAP_DUMP EXTRACTING_METADATA [jvm]EXTRACTING_METADATA FINDING_RETAINED_OBJECTS [jvm]FINDING_RETAINED_OBJECTS FINDING_PATHS_TO_RETAINED_OBJECTS [jvm]FINDING_PATHS_TO_RETAINED_OBJECTS FINDING_DOMINATORS [jvm]FINDING_DOMINATORS INSPECTING_OBJECTS [jvm]INSPECTING_OBJECTS COMPUTING_NATIVE_RETAINED_SIZE [jvm]COMPUTING_NATIVE_RETAINED_SIZE COMPUTING_RETAINED_SIZE [jvm]COMPUTING_RETAINED_SIZE BUILDING_LEAK_TRACES [jvm]BUILDING_LEAK_TRACES REPORTING_HEAP_ANALYSIS [jvm]REPORTING_HEAP_ANALYSIS"},{"location":"api/shark/-on-analysis-progress-listener/-step/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): OnAnalysisProgressListener.StepReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<OnAnalysisProgressListener.Step>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-on-analysis-progress-listener/-step/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/human-readable-name/","title":"Human readable name","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/humanReadableName</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/human-readable-name/#humanreadablename","title":"humanReadableName","text":"<p>[jvm]\\ val humanReadableName: String</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/valueOf</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): OnAnalysisProgressListener.Step</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-on-analysis-progress-listener/-step/values/","title":"Values","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/values</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<OnAnalysisProgressListener.Step></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-b-u-i-l-d-i-n-g_-l-e-a-k_-t-r-a-c-e-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/BUILDING_LEAK_TRACES</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-b-u-i-l-d-i-n-g_-l-e-a-k_-t-r-a-c-e-s/#building_leak_traces","title":"BUILDING_LEAK_TRACES","text":"<p>[jvm]\\ BUILDING_LEAK_TRACES</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-b-u-i-l-d-i-n-g_-l-e-a-k_-t-r-a-c-e-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-n-a-t-i-v-e_-r-e-t-a-i-n-e-d_-s-i-z-e/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/COMPUTING_NATIVE_RETAINED_SIZE</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-n-a-t-i-v-e_-r-e-t-a-i-n-e-d_-s-i-z-e/#computing_native_retained_size","title":"COMPUTING_NATIVE_RETAINED_SIZE","text":"<p>[jvm]\\ COMPUTING_NATIVE_RETAINED_SIZE</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-n-a-t-i-v-e_-r-e-t-a-i-n-e-d_-s-i-z-e/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-r-e-t-a-i-n-e-d_-s-i-z-e/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/COMPUTING_RETAINED_SIZE</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-r-e-t-a-i-n-e-d_-s-i-z-e/#computing_retained_size","title":"COMPUTING_RETAINED_SIZE","text":"<p>[jvm]\\ COMPUTING_RETAINED_SIZE</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-c-o-m-p-u-t-i-n-g_-r-e-t-a-i-n-e-d_-s-i-z-e/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-e-x-t-r-a-c-t-i-n-g_-m-e-t-a-d-a-t-a/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/EXTRACTING_METADATA</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-e-x-t-r-a-c-t-i-n-g_-m-e-t-a-d-a-t-a/#extracting_metadata","title":"EXTRACTING_METADATA","text":"<p>[jvm]\\ EXTRACTING_METADATA</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-e-x-t-r-a-c-t-i-n-g_-m-e-t-a-d-a-t-a/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-d-o-m-i-n-a-t-o-r-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/FINDING_DOMINATORS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-d-o-m-i-n-a-t-o-r-s/#finding_dominators","title":"FINDING_DOMINATORS","text":"<p>[jvm]\\ FINDING_DOMINATORS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-d-o-m-i-n-a-t-o-r-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-p-a-t-h-s_-t-o_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/FINDING_PATHS_TO_RETAINED_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-p-a-t-h-s_-t-o_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/#finding_paths_to_retained_objects","title":"FINDING_PATHS_TO_RETAINED_OBJECTS","text":"<p>[jvm]\\ FINDING_PATHS_TO_RETAINED_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-p-a-t-h-s_-t-o_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/FINDING_RETAINED_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/#finding_retained_objects","title":"FINDING_RETAINED_OBJECTS","text":"<p>[jvm]\\ FINDING_RETAINED_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-f-i-n-d-i-n-g_-r-e-t-a-i-n-e-d_-o-b-j-e-c-t-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-i-n-s-p-e-c-t-i-n-g_-o-b-j-e-c-t-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/INSPECTING_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-i-n-s-p-e-c-t-i-n-g_-o-b-j-e-c-t-s/#inspecting_objects","title":"INSPECTING_OBJECTS","text":"<p>[jvm]\\ INSPECTING_OBJECTS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-i-n-s-p-e-c-t-i-n-g_-o-b-j-e-c-t-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-p-a-r-s-i-n-g_-h-e-a-p_-d-u-m-p/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/PARSING_HEAP_DUMP</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-p-a-r-s-i-n-g_-h-e-a-p_-d-u-m-p/#parsing_heap_dump","title":"PARSING_HEAP_DUMP","text":"<p>[jvm]\\ PARSING_HEAP_DUMP</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-p-a-r-s-i-n-g_-h-e-a-p_-d-u-m-p/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-analysis-progress-listener/-step/-r-e-p-o-r-t-i-n-g_-h-e-a-p_-a-n-a-l-y-s-i-s/","title":"Index","text":"<p>//leakcanary-repo/shark/OnAnalysisProgressListener/Step/REPORTING_HEAP_ANALYSIS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-r-e-p-o-r-t-i-n-g_-h-e-a-p_-a-n-a-l-y-s-i-s/#reporting_heap_analysis","title":"REPORTING_HEAP_ANALYSIS","text":"<p>[jvm]\\ REPORTING_HEAP_ANALYSIS</p>"},{"location":"api/shark/-on-analysis-progress-listener/-step/-r-e-p-o-r-t-i-n-g_-h-e-a-p_-a-n-a-l-y-s-i-s/#properties","title":"Properties","text":"Name Summary humanReadableName [jvm]val humanReadableName: String name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-on-hprof-record-listener/","title":"Index","text":"<p>//leakcanary-repo/shark/OnHprofRecordListener</p>"},{"location":"api/shark/-on-hprof-record-listener/#onhprofrecordlistener","title":"OnHprofRecordListener","text":"<p>[jvm]\\ fun interface OnHprofRecordListener</p> <p>Listener passed in to StreamingRecordReaderAdapter.readRecords, gets notified for each HprofRecord found in the heap dump which types is in the set of the recordTypes parameter passed to StreamingRecordReaderAdapter.readRecords.</p>"},{"location":"api/shark/-on-hprof-record-listener/#functions","title":"Functions","text":"Name Summary onHprofRecord [jvm]abstract fun onHprofRecord(position: Long, record: HprofRecord)"},{"location":"api/shark/-on-hprof-record-listener/on-hprof-record/","title":"On hprof record","text":"<p>//leakcanary-repo/shark/OnHprofRecordListener/onHprofRecord</p>"},{"location":"api/shark/-on-hprof-record-listener/on-hprof-record/#onhprofrecord","title":"onHprofRecord","text":"<p>[jvm]\\ abstract fun onHprofRecord(position: Long, record: HprofRecord)</p>"},{"location":"api/shark/-on-hprof-record-tag-listener/","title":"Index","text":"<p>//leakcanary-repo/shark/OnHprofRecordTagListener</p>"},{"location":"api/shark/-on-hprof-record-tag-listener/#onhprofrecordtaglistener","title":"OnHprofRecordTagListener","text":"<p>[jvm]\\ fun interface OnHprofRecordTagListener</p> <p>Listener passed in to StreamingHprofReader.readRecords, gets notified for each HprofRecordTag found in the heap dump.</p> <p>Listener implementations are expected to read all bytes corresponding to a given tag from the provided reader before returning.</p>"},{"location":"api/shark/-on-hprof-record-tag-listener/#functions","title":"Functions","text":"Name Summary onHprofRecord [jvm]abstract fun onHprofRecord(tag: HprofRecordTag, length: Long, reader: HprofRecordReader)"},{"location":"api/shark/-on-hprof-record-tag-listener/on-hprof-record/","title":"On hprof record","text":"<p>//leakcanary-repo/shark/OnHprofRecordTagListener/onHprofRecord</p>"},{"location":"api/shark/-on-hprof-record-tag-listener/on-hprof-record/#onhprofrecord","title":"onHprofRecord","text":"<p>[jvm]\\ abstract fun onHprofRecord(tag: HprofRecordTag, length: Long, reader: HprofRecordReader)</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/#openjdkinstancerefreaders","title":"OpenJdkInstanceRefReaders","text":"<p>[jvm]\\ enum OpenJdkInstanceRefReaders : Enum<OpenJdkInstanceRefReaders> , ChainingInstanceReferenceReader.VirtualInstanceReferenceReader.OptionalFactory</p> <p>Defines VirtualInstanceReferenceReader factories for common OpenJDK data structures.</p> <p>Note: the expanders target the direct classes and don\u2019t target subclasses, as these might include additional out going references that would be missed.</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/#entries","title":"Entries","text":"LINKED_LIST [jvm]LINKED_LIST ARRAY_LIST [jvm]ARRAY_LIST COPY_ON_WRITE_ARRAY_LIST [jvm]COPY_ON_WRITE_ARRAY_LIST HASH_MAP [jvm]HASH_MAPHandles HashMap & LinkedHashMap CONCURRENT_HASH_MAP [jvm]CONCURRENT_HASH_MAP WEAK_HASH_MAP [jvm]WEAK_HASH_MAP HASH_SET [jvm]HASH_SETHandles HashSet & LinkedHashSet"},{"location":"api/shark/-open-jdk-instance-ref-readers/#functions","title":"Functions","text":"Name Summary create [jvm]abstract fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader? valueOf [jvm]fun valueOf(value: String): OpenJdkInstanceRefReadersReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<OpenJdkInstanceRefReaders>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-open-jdk-instance-ref-readers/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/valueOf</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): OpenJdkInstanceRefReaders</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-open-jdk-instance-ref-readers/values/","title":"Values","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/values</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<OpenJdkInstanceRefReaders></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/ARRAY_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#array_list","title":"ARRAY_LIST","text":"<p>[jvm]\\ ARRAY_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/ARRAY_LIST/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-a-r-r-a-y_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/CONCURRENT_HASH_MAP</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/#concurrent_hash_map","title":"CONCURRENT_HASH_MAP","text":"<p>[jvm]\\ CONCURRENT_HASH_MAP</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/CONCURRENT_HASH_MAP/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-n-c-u-r-r-e-n-t_-h-a-s-h_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/COPY_ON_WRITE_ARRAY_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#copy_on_write_array_list","title":"COPY_ON_WRITE_ARRAY_LIST","text":"<p>[jvm]\\ COPY_ON_WRITE_ARRAY_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/COPY_ON_WRITE_ARRAY_LIST/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-c-o-p-y_-o-n_-w-r-i-t-e_-a-r-r-a-y_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/HASH_MAP</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/#hash_map","title":"HASH_MAP","text":"<p>[jvm]\\ HASH_MAP</p> <p>Handles HashMap & LinkedHashMap</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/HASH_MAP/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/HASH_SET</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/#hash_set","title":"HASH_SET","text":"<p>[jvm]\\ HASH_SET</p> <p>Handles HashSet & LinkedHashSet</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/HASH_SET/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-h-a-s-h_-s-e-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/LINKED_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#linked_list","title":"LINKED_LIST","text":"<p>[jvm]\\ LINKED_LIST</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/LINKED_LIST/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-l-i-n-k-e-d_-l-i-s-t/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/WEAK_HASH_MAP</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#weak_hash_map","title":"WEAK_HASH_MAP","text":"<p>[jvm]\\ WEAK_HASH_MAP</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#functions","title":"Functions","text":"Name Summary create [jvm]open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/#properties","title":"Properties","text":"Name Summary name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/create/","title":"Create","text":"<p>//leakcanary-repo/shark/OpenJdkInstanceRefReaders/WEAK_HASH_MAP/create</p>"},{"location":"api/shark/-open-jdk-instance-ref-readers/-w-e-a-k_-h-a-s-h_-m-a-p/create/#create","title":"create","text":"<p>[jvm]\\ open override fun create(graph: HeapGraph): ChainingInstanceReferenceReader.VirtualInstanceReferenceReader?</p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/","title":"Index","text":"<p>//leakcanary-repo/shark/OpenJdkReferenceReaderFactory</p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/#openjdkreferencereaderfactory","title":"OpenJdkReferenceReaderFactory","text":"<p>[jvm]\\ class OpenJdkReferenceReaderFactory(referenceMatchers: List<ReferenceMatcher>) : ReferenceReader.Factory<HeapObject></p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/#constructors","title":"Constructors","text":"OpenJdkReferenceReaderFactory [jvm]constructor(referenceMatchers: List<ReferenceMatcher>)"},{"location":"api/shark/-open-jdk-reference-reader-factory/#functions","title":"Functions","text":"Name Summary createFor [jvm]open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject>"},{"location":"api/shark/-open-jdk-reference-reader-factory/-open-jdk-reference-reader-factory/","title":"open jdk reference reader factory","text":"<p>//leakcanary-repo/shark/OpenJdkReferenceReaderFactory/OpenJdkReferenceReaderFactory</p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/-open-jdk-reference-reader-factory/#openjdkreferencereaderfactory","title":"OpenJdkReferenceReaderFactory","text":"<p>[jvm]\\ constructor(referenceMatchers: List<ReferenceMatcher>)</p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/create-for/","title":"Create for","text":"<p>//leakcanary-repo/shark/OpenJdkReferenceReaderFactory/createFor</p>"},{"location":"api/shark/-open-jdk-reference-reader-factory/create-for/#createfor","title":"createFor","text":"<p>[jvm]\\ open override fun createFor(heapGraph: HeapGraph): ReferenceReader<HeapObject></p>"},{"location":"api/shark/-path-finding-results/","title":"Index","text":"<p>//leakcanary-repo/shark/PathFindingResults</p>"},{"location":"api/shark/-path-finding-results/#pathfindingresults","title":"PathFindingResults","text":"<p>[jvm]\\ class PathFindingResults(val pathsToLeakingObjects: List<ReferencePathNode>, val dominatorTree: DominatorTree?)</p>"},{"location":"api/shark/-path-finding-results/#constructors","title":"Constructors","text":"PathFindingResults [jvm]constructor(pathsToLeakingObjects: List<ReferencePathNode>, dominatorTree: DominatorTree?)"},{"location":"api/shark/-path-finding-results/#properties","title":"Properties","text":"Name Summary dominatorTree [jvm]val dominatorTree: DominatorTree? pathsToLeakingObjects [jvm]val pathsToLeakingObjects: List<ReferencePathNode>"},{"location":"api/shark/-path-finding-results/-path-finding-results/","title":"path finding results","text":"<p>//leakcanary-repo/shark/PathFindingResults/PathFindingResults</p>"},{"location":"api/shark/-path-finding-results/-path-finding-results/#pathfindingresults","title":"PathFindingResults","text":"<p>[jvm]\\ constructor(pathsToLeakingObjects: List<ReferencePathNode>, dominatorTree: DominatorTree?)</p>"},{"location":"api/shark/-path-finding-results/dominator-tree/","title":"Dominator tree","text":"<p>//leakcanary-repo/shark/PathFindingResults/dominatorTree</p>"},{"location":"api/shark/-path-finding-results/dominator-tree/#dominatortree","title":"dominatorTree","text":"<p>[jvm]\\ val dominatorTree: DominatorTree?</p>"},{"location":"api/shark/-path-finding-results/paths-to-leaking-objects/","title":"Paths to leaking objects","text":"<p>//leakcanary-repo/shark/PathFindingResults/pathsToLeakingObjects</p>"},{"location":"api/shark/-path-finding-results/paths-to-leaking-objects/#pathstoleakingobjects","title":"pathsToLeakingObjects","text":"<p>[jvm]\\ val pathsToLeakingObjects: List<ReferencePathNode></p>"},{"location":"api/shark/-primitive-type/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType</p>"},{"location":"api/shark/-primitive-type/#primitivetype","title":"PrimitiveType","text":"<p>[jvm]\\ enum PrimitiveType : Enum<PrimitiveType> </p> <p>A primitive type in the prof.</p>"},{"location":"api/shark/-primitive-type/#entries","title":"Entries","text":"BOOLEAN [jvm]BOOLEAN CHAR [jvm]CHAR FLOAT [jvm]FLOAT DOUBLE [jvm]DOUBLE BYTE [jvm]BYTE SHORT [jvm]SHORT INT [jvm]INT LONG [jvm]LONG"},{"location":"api/shark/-primitive-type/#types","title":"Types","text":"Name Summary Companion [jvm]object Companion"},{"location":"api/shark/-primitive-type/#functions","title":"Functions","text":"Name Summary valueOf [jvm]fun valueOf(value: String): PrimitiveTypeReturns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) values [jvm]fun values(): Array<PrimitiveType>Returns an array containing the constants of this enum type, in the order they\u2019re declared."},{"location":"api/shark/-primitive-type/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/byte-size/","title":"Byte size","text":"<p>//leakcanary-repo/shark/PrimitiveType/byteSize</p>"},{"location":"api/shark/-primitive-type/byte-size/#bytesize","title":"byteSize","text":"<p>[jvm]\\ val byteSize: Int</p> <p>The size in bytes for each value of that type.</p>"},{"location":"api/shark/-primitive-type/hprof-type/","title":"Hprof type","text":"<p>//leakcanary-repo/shark/PrimitiveType/hprofType</p>"},{"location":"api/shark/-primitive-type/hprof-type/#hproftype","title":"hprofType","text":"<p>[jvm]\\ val hprofType: Int</p> <p>The hprof defined \"basic type\".</p>"},{"location":"api/shark/-primitive-type/value-of/","title":"Value of","text":"<p>//leakcanary-repo/shark/PrimitiveType/valueOf</p>"},{"location":"api/shark/-primitive-type/value-of/#valueof","title":"valueOf","text":"<p>[jvm]\\ fun valueOf(value: String): PrimitiveType</p> <p>Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)</p>"},{"location":"api/shark/-primitive-type/value-of/#throws","title":"Throws","text":"IllegalArgumentException if this enum type has no constant with the specified name"},{"location":"api/shark/-primitive-type/values/","title":"Values","text":"<p>//leakcanary-repo/shark/PrimitiveType/values</p>"},{"location":"api/shark/-primitive-type/values/#values","title":"values","text":"<p>[jvm]\\ fun values(): Array<PrimitiveType></p> <p>Returns an array containing the constants of this enum type, in the order they\u2019re declared.</p> <p>This method may be used to iterate over the constants.</p>"},{"location":"api/shark/-primitive-type/-b-o-o-l-e-a-n/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/BOOLEAN</p>"},{"location":"api/shark/-primitive-type/-b-o-o-l-e-a-n/#boolean","title":"BOOLEAN","text":"<p>[jvm]\\ BOOLEAN</p>"},{"location":"api/shark/-primitive-type/-b-o-o-l-e-a-n/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-b-y-t-e/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/BYTE</p>"},{"location":"api/shark/-primitive-type/-b-y-t-e/#byte","title":"BYTE","text":"<p>[jvm]\\ BYTE</p>"},{"location":"api/shark/-primitive-type/-b-y-t-e/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-c-h-a-r/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/CHAR</p>"},{"location":"api/shark/-primitive-type/-c-h-a-r/#char","title":"CHAR","text":"<p>[jvm]\\ CHAR</p>"},{"location":"api/shark/-primitive-type/-c-h-a-r/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-companion/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/Companion</p>"},{"location":"api/shark/-primitive-type/-companion/#companion","title":"Companion","text":"<p>[jvm]\\ object Companion</p>"},{"location":"api/shark/-primitive-type/-companion/#properties","title":"Properties","text":"Name Summary byteSizeByHprofType [jvm]val byteSizeByHprofType: Map<Int, Int> primitiveTypeByHprofType [jvm]val primitiveTypeByHprofType: Map<Int, PrimitiveType> REFERENCE_HPROF_TYPE [jvm]const val REFERENCE_HPROF_TYPE: Int = 2The hprof defined \"basic type\" for references."},{"location":"api/shark/-primitive-type/-companion/-r-e-f-e-r-e-n-c-e_-h-p-r-o-f_-t-y-p-e/","title":"r e f e r e n c e h p r o f t y p e","text":"<p>//leakcanary-repo/shark/PrimitiveType/Companion/REFERENCE_HPROF_TYPE</p>"},{"location":"api/shark/-primitive-type/-companion/-r-e-f-e-r-e-n-c-e_-h-p-r-o-f_-t-y-p-e/#reference_hprof_type","title":"REFERENCE_HPROF_TYPE","text":"<p>[jvm]\\ const val REFERENCE_HPROF_TYPE: Int = 2</p> <p>The hprof defined \"basic type\" for references.</p>"},{"location":"api/shark/-primitive-type/-companion/byte-size-by-hprof-type/","title":"Byte size by hprof type","text":"<p>//leakcanary-repo/shark/PrimitiveType/Companion/byteSizeByHprofType</p>"},{"location":"api/shark/-primitive-type/-companion/byte-size-by-hprof-type/#bytesizebyhproftype","title":"byteSizeByHprofType","text":"<p>[jvm]\\ val byteSizeByHprofType: Map<Int, Int></p>"},{"location":"api/shark/-primitive-type/-companion/primitive-type-by-hprof-type/","title":"Primitive type by hprof type","text":"<p>//leakcanary-repo/shark/PrimitiveType/Companion/primitiveTypeByHprofType</p>"},{"location":"api/shark/-primitive-type/-companion/primitive-type-by-hprof-type/#primitivetypebyhproftype","title":"primitiveTypeByHprofType","text":"<p>[jvm]\\ val primitiveTypeByHprofType: Map<Int, PrimitiveType></p>"},{"location":"api/shark/-primitive-type/-d-o-u-b-l-e/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/DOUBLE</p>"},{"location":"api/shark/-primitive-type/-d-o-u-b-l-e/#double","title":"DOUBLE","text":"<p>[jvm]\\ DOUBLE</p>"},{"location":"api/shark/-primitive-type/-d-o-u-b-l-e/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-f-l-o-a-t/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/FLOAT</p>"},{"location":"api/shark/-primitive-type/-f-l-o-a-t/#float","title":"FLOAT","text":"<p>[jvm]\\ FLOAT</p>"},{"location":"api/shark/-primitive-type/-f-l-o-a-t/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-i-n-t/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/INT</p>"},{"location":"api/shark/-primitive-type/-i-n-t/#int","title":"INT","text":"<p>[jvm]\\ INT</p>"},{"location":"api/shark/-primitive-type/-i-n-t/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-l-o-n-g/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/LONG</p>"},{"location":"api/shark/-primitive-type/-l-o-n-g/#long","title":"LONG","text":"<p>[jvm]\\ LONG</p>"},{"location":"api/shark/-primitive-type/-l-o-n-g/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-primitive-type/-s-h-o-r-t/","title":"Index","text":"<p>//leakcanary-repo/shark/PrimitiveType/SHORT</p>"},{"location":"api/shark/-primitive-type/-s-h-o-r-t/#short","title":"SHORT","text":"<p>[jvm]\\ SHORT</p>"},{"location":"api/shark/-primitive-type/-s-h-o-r-t/#properties","title":"Properties","text":"Name Summary byteSize [jvm]val byteSize: IntThe size in bytes for each value of that type. hprofType [jvm]val hprofType: IntThe hprof defined \"basic type\". name [jvm]val name: String ordinal [jvm]val ordinal: Int"},{"location":"api/shark/-prioritizing-shortest-path-finder/","title":"Index","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/#prioritizingshortestpathfinder","title":"PrioritizingShortestPathFinder","text":"<p>[jvm]\\ class PrioritizingShortestPathFinder : ShortestPathFinder</p> <p>Not thread safe.</p> <p>Finds the shortest path from leaking references to a gc root, first ignoring references identified as \"to visit last\" and then visiting them as needed if no path is found.</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/#types","title":"Types","text":"Name Summary Event [jvm]interface Event Factory [jvm]class Factory(listener: PrioritizingShortestPathFinder.Event.Listener, referenceReaderFactory: ReferenceReader.Factory<HeapObject>, gcRootProvider: GcRootProvider, computeRetainedHeapSize: Boolean) : ShortestPathFinder.Factory"},{"location":"api/shark/-prioritizing-shortest-path-finder/#functions","title":"Functions","text":"Name Summary findShortestPathsFromGcRoots [jvm]open override fun findShortestPathsFromGcRoots(leakingObjectIds: Set<Long>): PathFindingResults"},{"location":"api/shark/-prioritizing-shortest-path-finder/find-shortest-paths-from-gc-roots/","title":"Find shortest paths from gc roots","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/findShortestPathsFromGcRoots</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/find-shortest-paths-from-gc-roots/#findshortestpathsfromgcroots","title":"findShortestPathsFromGcRoots","text":"<p>[jvm]\\ open override fun findShortestPathsFromGcRoots(leakingObjectIds: Set<Long>): PathFindingResults</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/","title":"Index","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/Event</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/#event","title":"Event","text":"<p>interface Event</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/#inheritors","title":"Inheritors","text":"StartedFindingPathsToRetainedObjects StartedFindingDominators"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/#types","title":"Types","text":"Name Summary Listener [jvm]fun interface Listener StartedFindingDominators [jvm]object StartedFindingDominators : PrioritizingShortestPathFinder.Event StartedFindingPathsToRetainedObjects [jvm]object StartedFindingPathsToRetainedObjects : PrioritizingShortestPathFinder.Event"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-listener/","title":"Index","text":"<p>//leakcanary-repo/shark/PrioritizingShortestPathFinder/Event/Listener</p>"},{"location":"api/shark/-prioritizing-shortest-path-finder/-event/-listener/#listener","title":"Listener","text":"<p>[jvm]\\ fun interface Listener</p>"},{"location":&qu