xref: /aosp_15_r20/external/leakcanary2/shark-android/src/main/java/shark/AndroidBuildMirror.kt (revision d9e8da70d8c9df9a41d7848ae506fb3115cae6e6)
1 package shark
2 
3 /**
4  * Caches values from the android.os.Build class in the heap dump.
5  * Retrieve a cached instances via [fromHeapGraph].
6  */
7 class AndroidBuildMirror(
8   /**
9    * Value of android.os.Build.MANUFACTURER
10    */
11   val manufacturer: String,
12   /**
13    * Value of android.os.Build.VERSION.SDK_INT
14    */
15   val sdkInt: Int,
16 
17   /**
18    * Value of android.os.Build.ID
19    */
20   val id: String
21 ) {
22   companion object {
23     /**
24      * @see AndroidBuildMirror
25      */
fromHeapGraphnull26     fun fromHeapGraph(graph: HeapGraph): AndroidBuildMirror {
27       return graph.context.getOrPut(AndroidBuildMirror::class.java.name) {
28         val buildClass = graph.findClassByName("android.os.Build")!!
29         val versionClass = graph.findClassByName("android.os.Build\$VERSION")!!
30         val manufacturer = buildClass["MANUFACTURER"]!!.value.readAsJavaString()!!
31         val sdkInt = versionClass["SDK_INT"]!!.value.asInt!!
32         val id = buildClass["ID"]!!.value.readAsJavaString()!!
33         AndroidBuildMirror(manufacturer, sdkInt, id)
34       }
35     }
36   }
37 }
38