Stabilize test of Gradle's daemon for memory leaks

We need to wait for GC to finish, because GC can be concurrent
This commit is contained in:
Alexey Tsvetkov
2017-05-27 23:38:08 +03:00
parent d80a463735
commit 5fbb41bf86
@@ -31,7 +31,11 @@ import org.jetbrains.kotlin.incremental.BuildCacheStorage
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider
import org.jetbrains.kotlin.incremental.relativeToRoot import org.jetbrains.kotlin.incremental.relativeToRoot
import org.jetbrains.kotlin.incremental.stackTraceStr import org.jetbrains.kotlin.incremental.stackTraceStr
import org.jetbrains.kotlin.utils.addToStdlib.sumByLong
import java.io.File import java.io.File
import java.lang.management.ManagementFactory
internal class KotlinGradleBuildServices private constructor(gradle: Gradle): BuildAdapter() { internal class KotlinGradleBuildServices private constructor(gradle: Gradle): BuildAdapter() {
companion object { companion object {
@@ -164,12 +168,16 @@ internal class KotlinGradleBuildServices private constructor(gradle: Gradle): Bu
if (!shouldReportMemoryUsage) return null if (!shouldReportMemoryUsage) return null
log.lifecycle(FORCE_SYSTEM_GC_MESSAGE) log.lifecycle(FORCE_SYSTEM_GC_MESSAGE)
val gcCountBefore = getGcCount()
System.gc() System.gc()
System.runFinalization() while (getGcCount() == gcCountBefore) {}
System.gc()
val rt = Runtime.getRuntime() val rt = Runtime.getRuntime()
return (rt.totalMemory() - rt.freeMemory()) / 1024 return (rt.totalMemory() - rt.freeMemory()) / 1024
} }
private fun getGcCount(): Long =
ManagementFactory.getGarbageCollectorMXBeans().sumByLong { Math.max(0, it.collectionCount) }
} }