xref: /aosp_15_r20/external/leakcanary2/shark-hprof/src/main/java/shark/Hprof.kt (revision d9e8da70d8c9df9a41d7848ae506fb3115cae6e6)
1 package shark
2 
3 import java.io.Closeable
4 import java.io.File
5 
6 /**
7  * Hprof is deprecated, and we offer partial backward compatibility. Any code that was
8  * previously using HprofReader directly now has to call [StreamingHprofReader.readerFor] or
9  * [HprofRandomAcccessReader.readerFor]
10  */
11 @Deprecated("Replaced by HprofStreamingReader.readerFor or HprofRandomAccessReader.openReaderFor")
12 class Hprof private constructor(
13   val file: File,
14   val header: HprofHeader
15 ) : Closeable {
16 
17   val reader: HprofReader = HprofReader(this)
18 
19   val heapDumpTimestamp: Long
20     get() = header.heapDumpTimestamp
21 
22   val hprofVersion: HprofVersion
23     get() = HprofVersion.valueOf(header.version.name)
24 
25   val fileLength: Long
26     get() = file.length()
27 
28   private val closeables = mutableListOf<Closeable>()
29 
30   /**
31    * Maintains backward compatibility because [Hprof.open] returns a closeable. This allows
32    * consuming libraries to attach a closeable that will be closed whe [Hprof] is closed.
33    */
attachClosablenull34   fun attachClosable(closeable: Closeable) {
35     closeables += closeable
36   }
37 
closenull38   override fun close() {
39     closeables.forEach { it.close() }
40   }
41 
42   @Deprecated(message = "Moved to top level class", replaceWith = ReplaceWith("shark.HprofVersion"))
43   enum class HprofVersion {
44     JDK1_2_BETA3,
45     JDK1_2_BETA4,
46     JDK_6,
47     ANDROID;
48 
49     val versionString: String
50       get() = shark.HprofVersion.valueOf(name).versionString
51   }
52 
53   companion object {
54     @Deprecated(
55       message = "Replaced by HprofStreamingReader.readerFor or HprofRandomAccessReader.openReaderFor"
56     )
opennull57     fun open(hprofFile: File): Hprof = Hprof(hprofFile, HprofHeader.parseHeaderOf(hprofFile))
58   }
59 }