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;
}