)]}'
{
  "commit": "c19bcf77829ea4342a2d478e352663a43bfa69d2",
  "tree": "93879da9fa5737929298dcfaf72f23d6b10de12a",
  "parents": [
    "4850f9ea18385d188827dbc30d8cb5d836e5b7e1"
  ],
  "author": {
    "name": "Guocheng Wei",
    "email": "guochengwei@fuchsia.infra.roller.google.com",
    "time": "Wed Oct 28 08:57:30 2026 -0700"
  },
  "committer": {
    "name": "Copybara Service",
    "email": "copybara-worker@google.com",
    "time": "Wed Oct 28 08:57:30 2026 -0700"
  },
  "message": "[roll] Roll fuchsia [starnix][perf] Trim epoll_wait overhead when events are ready\n\nepoll_wait() did per-call work even when events were already ready, the\ncommon case in busy event loops: it read the clock to compute its\ndeadline, and EpollFileObject::wait() heap-allocated its pending and\nresult lists and a hash set to deduplicate pending events, reallocated\nits recheck list, and registered and immediately removed a waiter\ncallback for every level-triggered fd that was still ready.\n\nCompute the deadline only when the wait is about to block (an infinite\ntimeout needs no clock read at all). Keep up to 16 pending items and\nresults inline, the max_events of Android\u0027s Looper, and find repeated\nitems by scanning the earlier ones, with a hash set only for longer\nlists. Also keep the recheck list\u0027s allocation across waits, and make\nWaiter::wake_immediately() run the handler and notify the waiter\ndirectly.\n\nThe timeout now starts after the first readiness check, less than a\nmicrosecond later than before, well within the 50 us default timer\nslack that Linux applies to epoll timeouts of non-realtime tasks.\n\nfuchsia.starnix.gvisor_benchmarks:\n                             x64                vim3\n    EpollAllEvents/2       3041 ns   -7.0%     3983 ns  -10.7%\n    EpollAllEvents/8       7007 ns   -7.6%    11.09 us   -9.5%\n    EpollAllEvents/64     43.84 us  -10.4%    84.75 us   -9.5%\n    EpollAllEvents/512    333.6 us  -10.3%    713.0 us   -8.3%\n    EpollAllEvents/1024   698.4 us  -10.9%     2415 us  -14.4%\n\nEpollTimeout/1 is 0.2 us (x64) and 0.5 us (vim3) longer because of the\nlater timeout start. The few other metrics that perfcompare flagged are\nin unrelated code.\n\nTest: starnix_core_tests and gVisor epoll, eventfd and pipe tests (CQ).\nOriginal-Original-Bug: 577120110\nOriginal-Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1906749\nOriginal-Original-Revision: 4cc1a157b6592f0fcd0df94d5764869498d0464f\nGitOrigin-RevId: 643ac7931184daea8ac3e78194354e3f7917e061\nChange-Id: I2f989860c066f174c1f486c8887a3f320623f3e9\nReviewed-on: https://fuchsia-review.googlesource.com/c/integration/+/1926037\nCr-Commit-Position: refs/heads/main@{#208949}\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "038a2775c3b2fa91f8ccb7f5b9ca5fe29cd0cbcf",
      "old_mode": 33188,
      "old_path": "stem",
      "new_id": "6dd7d1404f17a33a2b59c814832842dd386e43af",
      "new_mode": 33188,
      "new_path": "stem"
    }
  ]
}
