fun openTrace()

in src/main/kotlin/com/uber/nanoscope/Nanoscope.kt [151:192]


        fun openTrace(file: File, sampleFile : File, stateFile : File) {
            val adapter = Moshi.Builder().add(KotlinJsonAdapterFactory()).build().adapter(OpenHandler.TraceEvent::class.java)
            val events = sortedSetOf<OpenHandler.Event>()
            var nanotraceFile = file

            file.bufferedReader().use {
                if (it.readLine().startsWith("[")) {
                    // This appears to be a Chrome trace file so convert to a Nanoscope trace file before opening.
                    nanotraceFile = createTempFile("nanoscope", ".txt")
                    file.useLines { lines ->
                        lines
                                .filter { it != "["  && it != "]" && "{}" !in it}
                                .map { adapter.fromJson(it)!! }
                                .filter { it.ph == "X" }
                                .forEach {
                                    val startUs = it.ts.toDouble()
                                    val endUs = startUs + it.dur!!.toDouble()
                                    val start = startUs * 1000
                                    val end = endUs * 1000
                                    val duration = end - start
                                    events.add(OpenHandler.Event(it.name, start, true, duration))
                                    events.add(OpenHandler.Event(it.name, end, false, duration))
                                }
                    }

                    nanotraceFile.printWriter().use { out ->
                        var firstTimestamp: Long? = null
                        events.forEach {
                            var timestamp = it.timestamp.toLong()
                            if (firstTimestamp == null) {
                                firstTimestamp = timestamp
                                println("first timestamp: $firstTimestamp")
                            }
                            timestamp -= firstTimestamp!!
                            out.println(if (it.start) "$timestamp:+${it.name}" else "$timestamp:POP")
                        }
                    }
                }
            }

            displayTrace(nanotraceFile, sampleFile, stateFile)
        }