Created reset method.
This commit is contained in:
@@ -19,6 +19,8 @@ package org.jetbrains.kotlin.util
|
|||||||
import java.lang.management.ManagementFactory
|
import java.lang.management.ManagementFactory
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger
|
||||||
|
import java.util.concurrent.atomic.AtomicLong
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This counter is thread-safe for initialization and usage.
|
* This counter is thread-safe for initialization and usage.
|
||||||
@@ -43,6 +45,14 @@ public abstract class PerformanceCounter protected constructor(val name: String)
|
|||||||
enabled = enable
|
enabled = enable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fun resetAllCounters() {
|
||||||
|
synchronized(allCounters) {
|
||||||
|
allCounters.forEach {
|
||||||
|
it.reset()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public jvmOverloads fun create(name: String, reenterable: Boolean = false): PerformanceCounter {
|
public jvmOverloads fun create(name: String, reenterable: Boolean = false): PerformanceCounter {
|
||||||
return if (reenterable)
|
return if (reenterable)
|
||||||
ReenterableCounter(name)
|
ReenterableCounter(name)
|
||||||
@@ -65,7 +75,7 @@ public abstract class PerformanceCounter protected constructor(val name: String)
|
|||||||
protected val excludedFrom: MutableList<CounterWithExclude> = ArrayList()
|
protected val excludedFrom: MutableList<CounterWithExclude> = ArrayList()
|
||||||
|
|
||||||
private var count: Int = 0
|
private var count: Int = 0
|
||||||
protected var totalTimeNanos: Long = 0
|
private var totalTimeNanos: Long = 0
|
||||||
|
|
||||||
init {
|
init {
|
||||||
synchronized(allCounters) {
|
synchronized(allCounters) {
|
||||||
@@ -90,6 +100,15 @@ public abstract class PerformanceCounter protected constructor(val name: String)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fun reset() {
|
||||||
|
count = 0
|
||||||
|
totalTimeNanos = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final fun incrementTime(delta: Long) {
|
||||||
|
totalTimeNanos += delta
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract fun countTime<T>(block: () -> T): T
|
protected abstract fun countTime<T>(block: () -> T): T
|
||||||
|
|
||||||
public fun report(consumer: (String) -> Unit) {
|
public fun report(consumer: (String) -> Unit) {
|
||||||
@@ -110,7 +129,7 @@ private class SimpleCounter(name: String): PerformanceCounter(name) {
|
|||||||
return block()
|
return block()
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
totalTimeNanos += PerformanceCounter.currentTime() - startTime
|
incrementTime(PerformanceCounter.currentTime() - startTime)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,7 +153,7 @@ private class ReenterableCounter(name: String): PerformanceCounter(name) {
|
|||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (needTime) {
|
if (needTime) {
|
||||||
totalTimeNanos += PerformanceCounter.currentTime() - startTime
|
incrementTime(PerformanceCounter.currentTime() - startTime)
|
||||||
leaveCounter(this)
|
leaveCounter(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -163,21 +182,21 @@ private class CounterWithExclude(name: String, vararg excludedCounters: Performa
|
|||||||
get() = getCallStack(this)
|
get() = getCallStack(this)
|
||||||
|
|
||||||
override fun <T> countTime(block: () -> T): T {
|
override fun <T> countTime(block: () -> T): T {
|
||||||
totalTimeNanos += callStack.push(true)
|
incrementTime(callStack.push(true))
|
||||||
try {
|
try {
|
||||||
return block()
|
return block()
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
totalTimeNanos += callStack.pop(true)
|
incrementTime(callStack.pop(true))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun enterExcludedMethod() {
|
fun enterExcludedMethod() {
|
||||||
totalTimeNanos += callStack.push(false)
|
incrementTime(callStack.push(false))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun exitExcludedMethod() {
|
fun exitExcludedMethod() {
|
||||||
totalTimeNanos += callStack.pop(false)
|
incrementTime(callStack.pop(false))
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CallStackWithTime {
|
private class CallStackWithTime {
|
||||||
|
|||||||
Reference in New Issue
Block a user