)]}'
{
  "commit": "ce0659e06b9c7da83f8627966eaa906a4a74005f",
  "tree": "70f24174fc72a29f075f5db9933f5fa9510dc5ee",
  "parents": [
    "f11197d3fd47bffc3ce5f0948ceb0ef3249bf8b7"
  ],
  "author": {
    "name": "Lokbondo Kung",
    "email": "lokokung@google.com",
    "time": "Wed Jul 02 22:28:34 2025 -0700"
  },
  "committer": {
    "name": "Dawn LUCI CQ",
    "email": "dawn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed Jul 02 22:28:34 2025 -0700"
  },
  "message": "[dawn][native] Make a separate entry point for ExecutionQueue for callbacks.\n\n- We have seen lock inversion issues w.r.t the lock in ExecutionQueue\n  and the device lock before (see 417802523). In order to avoid this\n  as the device-lock is a temporary solution for multithreading, this\n  change introduces a separate function that we can use to implement\n  new code without running into the lock ordering issue.\n- This change also depends on the fact that the device lock is now\n  recursively acquireable and makes all implementations (modulo Metal)\n  explicitly acquire the device lock for CheckAndUpdateCompletedSerials.\n  We may be able to remove some of those locks, as we go forwards hence\n  the TODOs.\n- This change reverts the change in:\n  https://dawn-review.googlesource.com/c/dawn/+/246534 so that we can\n  guarantee callback ordering. For context, if we call the callbacks\n  like we did before outside of the lock after moving them into a\n  temporary vector, two threads updating serials 1 and 2 respectively\n  can race and each remove one task, then in the non-critical section,\n  serial 2\u0027s thread can run first resulting in what appears to be\n  out of order callback execution. This design has some restrictions\n  documented in the comments, but may be alleviated in the future if\n  needed by using a recursive mutex for the waiting tasks in\n  ExecutionQueue.\n\nBug: 412761228, 412761367, 40643114, 42240396\nChange-Id: I61b217db066d09f22756c5a242968cffc9c9f19c\nReviewed-on: https://dawn-review.googlesource.com/c/dawn/+/249099\nCommit-Queue: Loko Kung \u003clokokung@google.com\u003e\nReviewed-by: Kai Ninomiya \u003ckainino@chromium.org\u003e\nReviewed-by: Corentin Wallez \u003ccwallez@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6162896385e9e52dc21b7e8937032504f9edf15a",
      "old_mode": 33188,
      "old_path": "src/dawn/native/EventManager.cpp",
      "new_id": "0ef0401ab16e34bb04a41a5191b1fe4ac927b8de",
      "new_mode": 33188,
      "new_path": "src/dawn/native/EventManager.cpp"
    },
    {
      "type": "modify",
      "old_id": "464510629d7f9e4302274ac6b7f4d45b5032f620",
      "old_mode": 33188,
      "old_path": "src/dawn/native/ExecutionQueue.cpp",
      "new_id": "b0df0d0af5f0bedeb9473a8cad6afbc66680cb2b",
      "new_mode": 33188,
      "new_path": "src/dawn/native/ExecutionQueue.cpp"
    },
    {
      "type": "modify",
      "old_id": "13692f96758a0194fcb5ee9fe8ecad2e0eb756b1",
      "old_mode": 33188,
      "old_path": "src/dawn/native/ExecutionQueue.h",
      "new_id": "ff20f78af06d3fe9fabedbe96898a94c9f8926be",
      "new_mode": 33188,
      "new_path": "src/dawn/native/ExecutionQueue.h"
    },
    {
      "type": "modify",
      "old_id": "abe671ddea5f2d85b7a29cb64afd15ad4e7dc561",
      "old_mode": 33188,
      "old_path": "src/dawn/native/d3d11/QueueD3D11.cpp",
      "new_id": "87d4837b25e8ed6a15bf9437fb091cfee6ff4b77",
      "new_mode": 33188,
      "new_path": "src/dawn/native/d3d11/QueueD3D11.cpp"
    },
    {
      "type": "modify",
      "old_id": "2c6d610c79d4e3b2a60d3ae98bde1e9d1b6a0d0c",
      "old_mode": 33188,
      "old_path": "src/dawn/native/d3d12/QueueD3D12.cpp",
      "new_id": "652a2bcf9aea67be564051c6229ea88cfb705764",
      "new_mode": 33188,
      "new_path": "src/dawn/native/d3d12/QueueD3D12.cpp"
    },
    {
      "type": "modify",
      "old_id": "e1d959ff7314b03ff1a1e11bb9ae7483695109ff",
      "old_mode": 33188,
      "old_path": "src/dawn/native/metal/QueueMTL.mm",
      "new_id": "9bb90baf23b2639423a90e7084a3a7ca4dec737d",
      "new_mode": 33188,
      "new_path": "src/dawn/native/metal/QueueMTL.mm"
    },
    {
      "type": "modify",
      "old_id": "68fcd291175586a73b85fd1e3430a8497c18d257",
      "old_mode": 33188,
      "old_path": "src/dawn/native/opengl/QueueGL.cpp",
      "new_id": "d97c180bb028b55214dae14b20a29af118fc0ede",
      "new_mode": 33188,
      "new_path": "src/dawn/native/opengl/QueueGL.cpp"
    },
    {
      "type": "modify",
      "old_id": "225426c19f1dddc693f78c7d3defc090f355f0c1",
      "old_mode": 33188,
      "old_path": "src/dawn/native/vulkan/QueueVk.cpp",
      "new_id": "7652951bff34330be20441f4ed2bc196dd64ab93",
      "new_mode": 33188,
      "new_path": "src/dawn/native/vulkan/QueueVk.cpp"
    }
  ]
}
