in testDuration-server/src/main/java/org/jetbrains/teamcity/testDuration/TestsWatchdog.java [22:55]
public List<BuildProblemData> computeProblems(@NotNull List<STestRun> currentTests, @NotNull List<SFinishedBuild> previousBuilds) {
List<BuildProblemData> result = new ArrayList<BuildProblemData>();
Set<Long> processedTests = new HashSet<Long>();
for (STestRun run : currentTests) {
TestName testName = run.getTest().getName();
final long testNameId = run.getTest().getTestNameId();
if (!processedTests.add(testNameId))
continue;
if (!mySettings.isInteresting(run))
continue;
int duration = run.getDuration();
for (SFinishedBuild referenceBuild : previousBuilds) {
Map<Long, STestRun> referenceStat = getBuildStatistics(referenceBuild);
STestRun referenceTestRun = referenceStat.get(testNameId);
if (referenceTestRun == null || referenceTestRun.isIgnored() || referenceTestRun.isMuted()) continue;
int referenceDuration = referenceTestRun.getDuration();
if (mySettings.isSlow(referenceDuration, duration)) {
int slowdown = (int) ((duration - referenceDuration) * 100.0 / Math.max(1, referenceDuration));
TestSlowdownInfo info = new TestSlowdownInfo(run.getTestRunId(), duration, referenceTestRun.getTestRunId(), referenceDuration, referenceBuild.getBuildId());
result.add(BuildProblemData.createBuildProblem(String.valueOf(testNameId),
TestDurationFailureCondition.PROBLEM_TYPE,
"Test '" + testName.getAsString() + "' became " + slowdown + "% slower",
info.asString()));
}
break;
}
}
return result;
}