diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/DelayMeter.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/DelayMeter.java index a09d6eddf54e..b427b916ee44 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/DelayMeter.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/DelayMeter.java @@ -47,19 +47,24 @@ class DelayMeter { } double getMin() { - return myStats.getMin() / 1000000.0D; + return myStats.getMin(); } double getMax() { - return myStats.getMax() / 1000000.0D; + return myStats.getMax(); } double getMean() { - return myStats.getMean() / 1000000.0D; + return myStats.getMean(); } double getStandardDeviation() { - return myStats.getStandardDeviation() / 1000000.0D; + return myStats.getStandardDeviation(); } + + public String stat() { + return myStats.stat(); + } + } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/ImmediatePainterImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/ImmediatePainterImpl.java index 1858dceb9725..0f0071d4ec8f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/ImmediatePainterImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/ImmediatePainterImpl.java @@ -173,7 +173,7 @@ class ImmediatePainterImpl implements ImmediatePainter { myCharsTyped++; if (myCharsTyped == TYPING_STATS_SAMPLE_SIZE) { - String stats = formatTypingLatencyStats(myTypingLatencyMeter); + String stats = "Zero-latency: "+isZeroLatencyTypingEnabled()+"; "+myTypingLatencyMeter.stat(); printToEventLog(stats); resetTypingLatencyStats(); @@ -181,12 +181,6 @@ class ImmediatePainterImpl implements ImmediatePainter { } } - private static String formatTypingLatencyStats(DelayMeter meter) { - return String.format("Zero-latency: %3s; typing delay, ms: min: %5.1f | max: %5.1f | avg: %5.1f | sigma: %4.1f", - isZeroLatencyTypingEnabled() ? "on" : "off", - meter.getMin(), meter.getMax(), meter.getMean(), meter.getStandardDeviation()); - } - private void printToEventLog(String message) { NotificationGroup group = NotificationGroup.logOnlyGroup("typing-delay-stats"); Notification notification = group.createNotification(message, NotificationType.INFORMATION); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SummaryStatistics.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SummaryStatistics.java index 06d1d08ed16b..274e7cc98509 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SummaryStatistics.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SummaryStatistics.java @@ -15,21 +15,25 @@ */ package com.intellij.openapi.editor.impl; +import gnu.trove.TDoubleArrayList; + /** * @author Pavel Fatin */ class SummaryStatistics { - private int myCount = 0; + private int myCount; private double myMin = Double.MAX_VALUE; - private double myMax = 0.0D; + private double myMax; - private double myMean = 0.0D; + private double myMean; - private double myS = 0.0D; + private double myS; + private final TDoubleArrayList values = new TDoubleArrayList(); void accept(double value) { + values.add(value); myCount++; myMin = Math.min(myMin, value); @@ -47,18 +51,25 @@ class SummaryStatistics { } double getMin() { - return myMin == Double.MAX_VALUE ? 0.0D : myMin; + return (myMin == Double.MAX_VALUE ? 0.0D : myMin) / 1000000; } double getMax() { - return myMax; + return myMax / 1000000; } double getMean() { - return myMean; + return myMean / 1000000; } double getStandardDeviation() { - return Math.sqrt(myS / (myCount - 1)); + return Math.sqrt(myS / (myCount - 1)) / 1000000; + } + + public String stat() { + values.sort(); + double median = values.get(values.size() / 2)/1000000; + return String.format("typing delay, ms: min: %5.1f | max: %5.1f | avg: %5.1f | median: %4.1f", + getMin(), getMax(), getMean(), median); } }