Skip to content

Commit

Permalink
Revisit matchers APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
pyricau committed Apr 29, 2024
1 parent 365c391 commit 1efa808
Show file tree
Hide file tree
Showing 21 changed files with 912 additions and 868 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import shark.HprofHeapGraph.Companion.openHeapGraph
import shark.IgnoredReferenceMatcher
import shark.ObjectDominators
import shark.ObjectDominators.OfflineDominatorNode
import shark.ReferenceMatcher
import shark.ValueHolder

sealed interface TreeMapState {
Expand Down Expand Up @@ -65,7 +66,7 @@ class TreeMapViewModel @Inject constructor(
AndroidReferenceMatchers.REFERENCES, AndroidReferenceMatchers.FINALIZER_WATCHDOG_DAEMON
)
val ignoredRefs =
AndroidReferenceMatchers.buildKnownReferences(weakAndFinalizerRefs).map { matcher ->
ReferenceMatcher.fromListBuilders(weakAndFinalizerRefs).map { matcher ->
matcher as IgnoredReferenceMatcher
}

Expand Down Expand Up @@ -153,7 +154,7 @@ fun OnDeviceHeapTreemapPreview() {
AndroidReferenceMatchers.REFERENCES, AndroidReferenceMatchers.FINALIZER_WATCHDOG_DAEMON
)
val ignoredRefs =
AndroidReferenceMatchers.buildKnownReferences(weakAndFinalizerRefs).map { matcher ->
ReferenceMatcher.fromListBuilders(weakAndFinalizerRefs).map { matcher ->
matcher as IgnoredReferenceMatcher
}

Expand Down
12 changes: 6 additions & 6 deletions leakcanary/leakcanary-core/api/leakcanary-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,18 @@ public final class leakcanary/DateFormatHeapDumpFileProvider$Companion {
}

public final class leakcanary/DateFormatHeapDumpFileProviderKt {
public static final fun dateFormattedFileProvider (Lleakcanary/HeapDumpFileProvider$Companion;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Lleakcanary/HeapDumpFileProvider;
public static synthetic fun dateFormattedFileProvider$default (Lleakcanary/HeapDumpFileProvider$Companion;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lleakcanary/HeapDumpFileProvider;
public static final fun datetimeFormattedFileProvider (Lleakcanary/HeapDumpFileProvider$Companion;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Lleakcanary/HeapDumpFileProvider;
public static synthetic fun datetimeFormattedFileProvider$default (Lleakcanary/HeapDumpFileProvider$Companion;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lleakcanary/HeapDumpFileProvider;
}

public final class leakcanary/DumpingDeletingOnCloseHeapGraphProvider : shark/HeapGraphProvider {
public final class leakcanary/DumpingAndDeletingHeapGraphProvider : shark/HeapGraphProvider {
public fun <init> (Lleakcanary/HeapDumpFileProvider;Lleakcanary/HeapDumper;)V
public fun openHeapGraph ()Lshark/CloseableHeapGraph;
}

public final class leakcanary/DumpingDeletingOnCloseHeapGraphProviderKt {
public static final fun dumpingAndDeletingGraphProvider (Lshark/HeapGraphProvider$Companion;Lleakcanary/HeapDumper;Lleakcanary/HeapDumpFileProvider;)Lleakcanary/DumpingDeletingOnCloseHeapGraphProvider;
public static synthetic fun dumpingAndDeletingGraphProvider$default (Lshark/HeapGraphProvider$Companion;Lleakcanary/HeapDumper;Lleakcanary/HeapDumpFileProvider;ILjava/lang/Object;)Lleakcanary/DumpingDeletingOnCloseHeapGraphProvider;
public final class leakcanary/DumpingAndDeletingHeapGraphProviderKt {
public static final fun dumpingAndDeletingGraphProvider (Lshark/HeapGraphProvider$Companion;Lleakcanary/HeapDumper;Lleakcanary/HeapDumpFileProvider;)Lleakcanary/DumpingAndDeletingHeapGraphProvider;
public static synthetic fun dumpingAndDeletingGraphProvider$default (Lshark/HeapGraphProvider$Companion;Lleakcanary/HeapDumper;Lleakcanary/HeapDumpFileProvider;ILjava/lang/Object;)Lleakcanary/DumpingAndDeletingHeapGraphProvider;
}

public abstract interface class leakcanary/HeapDumpFileProvider {
Expand Down
26 changes: 13 additions & 13 deletions shark/shark-android/api/shark-android.api
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public final class shark/AndroidBuildMirror {
}

public final class shark/AndroidBuildMirror$Companion {
public final fun applyIf (Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;
public final fun fromHeapGraph (Lshark/HeapGraph;)Lshark/AndroidBuildMirror;
}

Expand All @@ -15,21 +16,20 @@ public final class shark/AndroidExtensionsKt {
public static final fun getIdentityHashCode (Lshark/HeapObject$HeapInstance;)Ljava/lang/Integer;
}

public abstract class shark/AndroidHeapGrowthIgnoredReferences : java/lang/Enum {
public static final field ANDROID_DEFAULTS Lshark/AndroidHeapGrowthIgnoredReferences;
public static final field COMPOSE_TEST_CONTEXT_STATES Lshark/AndroidHeapGrowthIgnoredReferences;
public static final field Companion Lshark/AndroidHeapGrowthIgnoredReferences$Companion;
public static final field HEAP_TRAVERSAL Lshark/AndroidHeapGrowthIgnoredReferences;
public static final field RESOURCES_THEME_REFS Lshark/AndroidHeapGrowthIgnoredReferences;
public static final field STRICT_MODE_VIOLATION_TIME Lshark/AndroidHeapGrowthIgnoredReferences;
public static final field VIEW_ROOT_IMPL_W_VIEW_ANCESTOR Lshark/AndroidHeapGrowthIgnoredReferences;
public abstract class shark/AndroidHeapGrowthReferenceMatchers : java/lang/Enum, shark/ReferenceMatcher$ListBuilder {
public static final field ANDROID_LEAK_DETECTION_IGNORED_MATCHERS Lshark/AndroidHeapGrowthReferenceMatchers;
public static final field COMPOSE_TEST_CONTEXT_STATES Lshark/AndroidHeapGrowthReferenceMatchers;
public static final field Companion Lshark/AndroidHeapGrowthReferenceMatchers$Companion;
public static final field HEAP_TRAVERSAL Lshark/AndroidHeapGrowthReferenceMatchers;
public static final field RESOURCES_THEME_REFS Lshark/AndroidHeapGrowthReferenceMatchers;
public static final field STRICT_MODE_VIOLATION_TIME Lshark/AndroidHeapGrowthReferenceMatchers;
public static final field VIEW_ROOT_IMPL_W_VIEW_ANCESTOR Lshark/AndroidHeapGrowthReferenceMatchers;
public synthetic fun <init> (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public static fun valueOf (Ljava/lang/String;)Lshark/AndroidHeapGrowthIgnoredReferences;
public static fun values ()[Lshark/AndroidHeapGrowthIgnoredReferences;
public static fun valueOf (Ljava/lang/String;)Lshark/AndroidHeapGrowthReferenceMatchers;
public static fun values ()[Lshark/AndroidHeapGrowthReferenceMatchers;
}

public final class shark/AndroidHeapGrowthIgnoredReferences$Companion {
public final fun buildKnownReferences (Ljava/util/Set;)Ljava/util/List;
public final class shark/AndroidHeapGrowthReferenceMatchers$Companion {
public final fun getDefaults ()Ljava/util/List;
}

Expand Down Expand Up @@ -87,7 +87,7 @@ public final class shark/AndroidObjectInspectors$Companion {
public final fun getAppLeakingObjectFilters ()Ljava/util/List;
}

public abstract class shark/AndroidReferenceMatchers : java/lang/Enum {
public abstract class shark/AndroidReferenceMatchers : java/lang/Enum, shark/ReferenceMatcher$ListBuilder {
public static final field ACCESSIBILITY_ITERATORS Lshark/AndroidReferenceMatchers;
public static final field ACCESSIBILITY_NODE_ID_MANAGER Lshark/AndroidReferenceMatchers;
public static final field ACCESSIBILITY_NODE_INFO__MORIGINALTEXT Lshark/AndroidReferenceMatchers;
Expand Down
7 changes: 7 additions & 0 deletions shark/shark-android/src/main/java/shark/AndroidBuildMirror.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,12 @@ class AndroidBuildMirror(
AndroidBuildMirror(manufacturer, sdkInt, id)
}
}

fun applyIf(patternApplies: AndroidBuildMirror.() -> Boolean): (HeapGraph) -> Boolean {
return { graph ->
fromHeapGraph(graph)
.patternApplies()
}
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package shark

import java.util.EnumSet
import shark.ReferencePattern.Companion.instanceField
import shark.ReferencePattern.Companion.staticField

enum class AndroidHeapGrowthReferenceMatchers : ReferenceMatcher.ListBuilder {

ANDROID_LEAK_DETECTION_IGNORED_MATCHERS {
override fun add(references: MutableList<ReferenceMatcher>) {
references += AndroidReferenceMatchers.appDefaults.filterIsInstance<IgnoredReferenceMatcher>()
}
},

HEAP_TRAVERSAL {
override fun add(references: MutableList<ReferenceMatcher>) {
references += HeapTraversalOutput.ignoredReferences
}
},

STRICT_MODE_VIOLATION_TIME {
override fun add(references: MutableList<ReferenceMatcher>) {
// https://cs.android.com/android/_/android/platform/frameworks/base/+/6985fb39f07294fb979b14ba0ebabfd2fea06d34
references += staticField("android.os.StrictMode", "sLastVmViolationTime").ignored()
}
},

COMPOSE_TEST_CONTEXT_STATES {
override fun add(references: MutableList<ReferenceMatcher>) {
// TestContext.states has unbounded growth
// https://issuetracker.google.com/issues/319693080
references += instanceField("androidx.compose.ui.test.TestContext", "states").ignored()
}
},

RESOURCES_THEME_REFS {
override fun add(references: MutableList<ReferenceMatcher>) {
// Every time a new theme is generated, a weak reference is added to that list. That list is cleared at growing thresholds, and
// only the cleared weak refs are removed.
// https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/content/res/Resources.java;l=182;drc=c4f2605b0cbde5813bf4030d9209c62cd0839f81
references += instanceField("android.content.res.Resources", "mThemeRefs").ignored()
}
},

VIEW_ROOT_IMPL_W_VIEW_ANCESTOR {
override fun add(references: MutableList<ReferenceMatcher>) {
// Stub allowing the system server process to talk back to a view root impl. Cleared when the GC runs
// in the system server process and then the receiving app.
// https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/core/java/android/view/ViewRootImpl.java;l=10538;drc=803ac6538fd26e39942e51930a0a3c7d8a0e8e06
references += instanceField("android.view.ViewRootImpl\$W", "mViewAncestor").ignored()
}
},

;

companion object {
val defaults: List<ReferenceMatcher>
get() = ReferenceMatcher.fromListBuilders(
EnumSet.allOf(AndroidHeapGrowthReferenceMatchers::class.java)
)
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package shark

fun ObjectGrowthDetector.Companion.androidDetector(
referenceMatchers: List<ReferenceMatcher> = AndroidHeapGrowthIgnoredReferences.defaults
referenceMatchers: List<ReferenceMatcher> = AndroidHeapGrowthReferenceMatchers.defaults
): ObjectGrowthDetector {
return ObjectGrowthDetector(
gcRootProvider = MatchingGcRootProvider(referenceMatchers),
Expand Down
Loading

0 comments on commit 1efa808

Please sign in to comment.