• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<lambda>null1 package shark
2 
3 import com.github.ajalt.clikt.core.CliktCommand
4 import shark.SharkCliCommand.Companion.echo
5 import shark.SharkCliCommand.Companion.retrieveHeapDumpFile
6 import shark.SharkCliCommand.Companion.sharkCliParams
7 import java.io.File
8 
9 class AnalyzeCommand : CliktCommand(
10   name = "analyze",
11   help = "Analyze a heap dump."
12 ) {
13 
14   override fun run() {
15     val params = context.sharkCliParams
16     analyze(retrieveHeapDumpFile(params), params.obfuscationMappingPath)
17   }
18 
19   companion object {
20     fun CliktCommand.analyze(
21       heapDumpFile: File,
22       proguardMappingFile: File?
23     ) {
24       val proguardMapping = proguardMappingFile?.let {
25         ProguardMappingReader(it.inputStream()).readProguardMapping()
26       }
27       val objectInspectors = AndroidObjectInspectors.appDefaults.toMutableList()
28 
29       val listener = OnAnalysisProgressListener { step ->
30         SharkLog.d { "Analysis in progress, working on: ${step.name}" }
31       }
32 
33       val heapAnalyzer = HeapAnalyzer(listener)
34       SharkLog.d { "Analyzing heap dump $heapDumpFile" }
35 
36       val heapAnalysis = heapAnalyzer.analyze(
37         heapDumpFile = heapDumpFile,
38         leakingObjectFinder = FilteringLeakingObjectFinder(
39           AndroidObjectInspectors.appLeakingObjectFilters
40         ),
41         referenceMatchers = AndroidReferenceMatchers.appDefaults,
42         computeRetainedHeapSize = true,
43         objectInspectors = objectInspectors,
44         proguardMapping = proguardMapping,
45         metadataExtractor = AndroidMetadataExtractor
46       )
47       echo(heapAnalysis)
48     }
49   }
50 }
51