IncludeScanner: use includePool on spawn completion

Previously, the ListenableFuture callback was running using a direct
executor, which means it gets run in the thread that completes the
remote spawn future. In some cases, this may be a much smaller thread
pool, which can have a significant (negative) impact on build
performance.

Note that we primarily need to decouple the callback attached to the
remote spawn future. Subsequent futures can use direct executor if we're
reasonably sure that the attached-to future is already using the
includePool and there's no additional performance win due to
parallelism possible.

There is one problem here, which is that we use a slack pool for include
scanning, which does not guarantee decoupling, as it can reuse the
caller thread if the pool is fully used; this does not seem to be a
performance problem for the benchmark I tested.

With this change, I see no significant performance difference between
the sync and async include scanners.

PiperOrigin-RevId: 251812988
3 files changed
tree: a55ad84f3698e5cf6686e85fe7e75deac3bd4bae
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .gitattributes
  10. .gitignore
  11. AUTHORS
  12. BUILD
  13. CHANGELOG.md
  14. CODEOWNERS
  15. combine_distfiles.py
  16. combine_distfiles_to_tar.sh
  17. compile.sh
  18. CONTRIBUTING.md
  19. CONTRIBUTORS
  20. distdir.bzl
  21. ISSUE_TEMPLATE.md
  22. LICENSE
  23. README.md
  24. WORKSPACE
README.md

Bazel

{Fast, Correct} - Choose two

Build and test software of any size, quickly and reliably.

  • Speed up your builds and tests: Bazel only rebuilds what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.

  • One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.

  • Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.

  • Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.

Getting Started

Documentation

Contributing to Bazel

See CONTRIBUTING.md

Build status

Bazel is released in ‘Beta’. See the product roadmap to learn about the path toward a stable 1.0 release.