Reland "[base] Fix trace events and blocking types when blocked on modal dialogs"

This is a reland of 2ecb8d17bc59b94113efae9607c82ab976d541f4

Revert reason seemed unrelated, but FindIt is strangely convinced.
The TSAN issue was fixed in
https://chromium-review.googlesource.com/c/chromium/src/+/2618393
nonetheless.

Original change's description:
> [base] Fix trace events and blocking types when blocked on modal dialogs
>
> Sheriff notes: This is expected to artificially reduce IOJank* metrics.
>
> Modal dialogs launched via GetAppOutputInternal in launch_posix.cc
> are guaranteed to block and thus should use WILL_BLOCK semantics
> (as opposed to MAY_BLOCK like it did).
>
> However, Process::WaitForExit can't use WILL_BLOCK semantics because
> of an existing workaround for TestLauncher to not use
> ScopedBlockingCallWithBaseSyncPrimitives when waiting on processes or
> TestLauncher ends up creating or TestLauncher ends up flooding
> the pool to 256 workers regardless of --test-launcher-jobs
> (it posts each test as a task right off the bat and expects the
> pool to cap the parallelism...).
>
> The best solution to get proper tracing and thread restrictions
> right is thus to add custom trace events and keep assertions
> that waiting is allowed when launching the process.
>
> Each platform was doing something slightly different here, this
> CL brings all platforms inline with annotations that are visible
> in tracing but ignored by IOJank metrics.
>
> Example broken trace showing up in IOJank slow reports on Linux:
> https://goto.google.com/btbzu (SS: https://snipboard.io/7sDO1r.jpg)
>
> R=fdoray@chromium.org
>
> Bug: 1064645, 1144161, 899897
> Change-Id: Id087f91df8c2201ca10db5438456c638f9b791e9
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2233299
> Commit-Queue: Gabriel Charette <gab@chromium.org>
> Reviewed-by: Wez <wez@chromium.org>
> Reviewed-by: François Doray <fdoray@chromium.org>
> Reviewed-by: Joe Downing <joedow@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#837874}

TBR=fdoray@chromium.org,wez@chromium.org
(identical as before)

Bug: 1064645
Bug: 1144161
Bug: 899897
Change-Id: I8f4161d9c614db1670648b54d5949fdfe49a6b02
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2621912
Reviewed-by: Gabriel Charette <gab@chromium.org>
Reviewed-by: Wez <wez@chromium.org>
Reviewed-by: Joe Downing <joedow@chromium.org>
Commit-Queue: Gabriel Charette <gab@chromium.org>
Cr-Commit-Position: refs/heads/master@{#842081}
10 files changed
tree: 94b3398872afeb078a88d2cc2acb40f5f9237914
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. cloud_print/
  13. codelabs/
  14. components/
  15. content/
  16. courgette/
  17. crypto/
  18. dbus/
  19. device/
  20. docs/
  21. extensions/
  22. fuchsia/
  23. gin/
  24. google_apis/
  25. google_update/
  26. gpu/
  27. headless/
  28. infra/
  29. ios/
  30. ipc/
  31. jingle/
  32. media/
  33. mojo/
  34. native_client_sdk/
  35. net/
  36. pdf/
  37. ppapi/
  38. printing/
  39. remoting/
  40. rlz/
  41. sandbox/
  42. services/
  43. skia/
  44. sql/
  45. storage/
  46. styleguide/
  47. testing/
  48. third_party/
  49. tools/
  50. ui/
  51. url/
  52. weblayer/
  53. .clang-format
  54. .clang-tidy
  55. .eslintrc.js
  56. .git-blame-ignore-revs
  57. .gitattributes
  58. .gitignore
  59. .gn
  60. .vpython
  61. .vpython3
  62. .yapfignore
  63. AUTHORS
  64. BUILD.gn
  65. CODE_OF_CONDUCT.md
  66. codereview.settings
  67. DEPS
  68. DIR_METADATA
  69. ENG_REVIEW_OWNERS
  70. LICENSE
  71. LICENSE.chromium_os
  72. OWNERS
  73. PRESUBMIT.py
  74. PRESUBMIT_test.py
  75. PRESUBMIT_test_mocks.py
  76. README.md
  77. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure .

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.