fun formattedData()

in reactor/Core/src/jetbrains/mps/logic/reactor/util/Profiler.kt [57:88]


    fun formattedData(): Map<String, String> {
        val name2data = rawProfilingData().entries.toMutableList()
        val sum = name2data.asSequence().fold(0L) { acc, e -> acc + e.value.dur }
        var toReport = (sum * 0.98).toLong()
        // sort in-pace descending
        Collections.sort(name2data, Comparator.comparingLong<Map.Entry<String, DurFreq>?>({it.value.dur}).reversed())
        val result = LinkedHashMap<String, String>()
        name2data.asSequence()
            .takeWhile { (_, data) -> toReport > 0 && data.dur > 10000 }
            .forEach { (name, data) ->
                toReport -= data.dur

                val parentName2Dur = data.parentDurs.entries.toMutableList()
                val parentsTotal = parentName2Dur.fold(0L) { acc, e -> acc + e.value }
                var parentsToReport = (parentsTotal * 0.98).toLong()

                //sort in-place descending
                Collections.sort(parentName2Dur, Comparator.comparingLong<MutableMap.MutableEntry<String, Long>?>({it.value}).reversed())
                val sb = StringBuilder("[time: %1\$Ts.%1\$TLs count: %2\$d]".format(millis(data.dur), data.freq))
                parentName2Dur
                    .asSequence()
                    .takeWhile { (_, dur) -> parentsToReport > 0 && dur > 10000 }
                    .forEach { (parentName, dur) ->
                        parentsToReport -= dur
                        sb.append("\n    \\-- ${parentName}")
                            .append(" [time: %1\$Ts.%1\$TLs".format(millis(dur)))
                            .append(" count: %1\$d]".format(data.parentFreqs[parentName] ?: 0)) }

                result.put(name, sb.toString())
            }
        return result
    }