Avoid AutoProfiler overhead in AbstractBlazeQueryEnvironment#evaluateQuery. -- MOS_MIGRATED_REVID=139113333
diff --git a/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java index 32d8617..c16a592 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/AbstractBlazeQueryEnvironment.java
@@ -24,7 +24,6 @@ import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.packages.DependencyFilter; import com.google.devtools.build.lib.packages.Target; -import com.google.devtools.build.lib.profiler.AutoProfiler; import com.google.devtools.build.lib.query2.engine.OutputFormatterCallback; import com.google.devtools.build.lib.query2.engine.QueryEnvironment; import com.google.devtools.build.lib.query2.engine.QueryEvalResult; @@ -61,7 +60,8 @@ protected final List<QueryFunction> extraFunctions; private final QueryExpressionEvalListener<T> evalListener; - private static final Logger LOG = Logger.getLogger(AbstractBlazeQueryEnvironment.class.getName()); + private static final Logger logger = + Logger.getLogger(AbstractBlazeQueryEnvironment.class.getName()); protected AbstractBlazeQueryEnvironment(boolean keepGoing, boolean strictScope, @@ -122,36 +122,39 @@ final OutputFormatterCallback<T> callback) throws QueryException, InterruptedException, IOException { EmptinessSensingCallback<T> emptySensingCallback = createEmptinessSensingCallback(callback); - try (final AutoProfiler p = AutoProfiler.logged("evaluating query", LOG)) { - // In the --nokeep_going case, errors are reported in the order in which the patterns are - // specified; using a linked hash set here makes sure that the left-most error is reported. - Set<String> targetPatternSet = new LinkedHashSet<>(); - expr.collectTargetPatterns(targetPatternSet); + long startTime = System.currentTimeMillis(); + // In the --nokeep_going case, errors are reported in the order in which the patterns are + // specified; using a linked hash set here makes sure that the left-most error is reported. + Set<String> targetPatternSet = new LinkedHashSet<>(); + expr.collectTargetPatterns(targetPatternSet); + try { + preloadOrThrow(expr, targetPatternSet); + } catch (TargetParsingException e) { + // Unfortunately, by evaluating the patterns in parallel, we lose some location information. + throw new QueryException(expr, e.getMessage()); + } + IOException ioExn = null; + try { + callback.start(); + evalTopLevelInternal(expr, emptySensingCallback); + } catch (QueryException e) { + throw new QueryException(e, expr); + } catch (InterruptedException e) { + throw e; + } finally { try { - preloadOrThrow(expr, targetPatternSet); - } catch (TargetParsingException e) { - // Unfortunately, by evaluating the patterns in parallel, we lose some location information. - throw new QueryException(expr, e.getMessage()); + callback.close(); + } catch (IOException e) { + // Only throw this IOException if we weren't about to throw a different exception. + ioExn = e; } - IOException ioExn = null; - try { - callback.start(); - evalTopLevelInternal(expr, emptySensingCallback); - } catch (QueryException e) { - throw new QueryException(e, expr); - } catch (InterruptedException e) { - throw e; - } finally { - try { - callback.close(); - } catch (IOException e) { - // Only throw this IOException if we weren't about to throw a different exception. - ioExn = e; - } - } - if (ioExn != null) { - throw ioExn; - } + } + if (ioExn != null) { + throw ioExn; + } + long elapsedTime = System.currentTimeMillis() - startTime; + if (elapsedTime > 1) { + logger.info("Spent " + elapsedTime + " milliseconds evaluating query"); } if (eventHandler.hasErrors()) {