Add StopWatch to HitBooleanTable/MatchCache Change-Id: Ibb104f91cb73034ae11c28b3644d80a588d58401
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/HitBooleanTable.java b/src/main/java/com/googlesource/gerrit/plugins/task/HitBooleanTable.java index 8271fb9..39365cb 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/task/HitBooleanTable.java +++ b/src/main/java/com/googlesource/gerrit/plugins/task/HitBooleanTable.java
@@ -27,6 +27,7 @@ public long size; public int numberOfRows; public int numberOfColumns; + public long sumNanosecondsLoading; } protected Statistics statistics; @@ -44,6 +45,13 @@ return value; } + public StopWatch createLoadingStopWatch() { + if (statistics == null) { + return StopWatch.DISABLED; + } + return new StopWatch.Enabled().setNanosConsumer(ns -> statistics.sumNanosecondsLoading += ns); + } + @Override public void initStatistics() { statistics = new Statistics();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/MatchCache.java b/src/main/java/com/googlesource/gerrit/plugins/task/MatchCache.java index 55cae12..b1dcda5 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/task/MatchCache.java +++ b/src/main/java/com/googlesource/gerrit/plugins/task/MatchCache.java
@@ -16,6 +16,7 @@ import com.google.gerrit.entities.Change; import com.google.gerrit.exceptions.StorageException; +import com.google.gerrit.index.query.Matchable; import com.google.gerrit.index.query.QueryParseException; import com.google.gerrit.server.query.change.ChangeData; @@ -36,6 +37,7 @@ return null; } + @SuppressWarnings("try") public boolean match(ChangeData changeData, String query) throws StorageException, QueryParseException { if (query == null || "true".equalsIgnoreCase(query)) { @@ -43,8 +45,11 @@ } Boolean isMatched = resultByChangeByQuery.get(query, changeData.getId()); if (isMatched == null) { - isMatched = predicateCache.getPredicate(query).asMatchable().match(changeData); - resultByChangeByQuery.put(query, changeData.getId(), isMatched); + Matchable<ChangeData> matchable = predicateCache.getPredicate(query).asMatchable(); + try (StopWatch stopWatch = resultByChangeByQuery.createLoadingStopWatch()) { + isMatched = matchable.match(changeData); + resultByChangeByQuery.put(query, changeData.getId(), isMatched); + } } return isMatched; }