xref: /aosp_15_r20/external/leakcanary2/shark/src/main/java/shark/internal/JavaFrames.kt (revision d9e8da70d8c9df9a41d7848ae506fb3115cae6e6)

<lambda>null1 package shark.internal
2 
3 import shark.GcRoot.JavaFrame
4 import shark.HeapGraph
5 
6 internal object JavaFrames {
7 
8   private fun getJavaFramesByThreadSerialNumber(graph: HeapGraph) =
9     graph.context.getOrPut(JavaFrames::class.java.name) {
10       graph.gcRoots.asSequence().filterIsInstance<JavaFrame>().groupBy { javaFrame ->
11         javaFrame.threadSerialNumber
12       }
13     }
14 
15   fun getByThreadObjectId(graph: HeapGraph, threadObjectId: Long): List<JavaFrame>? {
16     val threadObject = ThreadObjects.getByThreadObjectId(graph, threadObjectId) ?: return null
17     val javaFrameByThreadSerial = getJavaFramesByThreadSerialNumber(graph)
18     return javaFrameByThreadSerial[threadObject.threadSerialNumber]
19   }
20 }
21