)]}'
{
  "commit": "0b88469034e0e93ed8f5e42f57c0468a9f4c2b24",
  "tree": "b5bd2feb3e5c34cb61dbb3d126159f52966de135",
  "parents": [
    "6c870d0d2261e8931af759c984d24a61a3360bd3"
  ],
  "author": {
    "name": "Lokbondo Kung",
    "email": "lokokung@google.com",
    "time": "Fri Jan 09 16:02:41 2026 -0800"
  },
  "committer": {
    "name": "Dawn LUCI CQ",
    "email": "dawn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Fri Jan 09 16:02:41 2026 -0800"
  },
  "message": "[dawn] Make the Instance simply RefCounted.\n\n- Before, the Instance needed to be externally refcounted because\n  there wasn\u0027t a way to get the Instance once the last external\n  reference was dropped, hence it could cause any WaitAnyOnly or\n  AllowProcessEvent events to be leaked. Since then, we have\n  added a `GetInstance()` API on the Adapter which means that as\n  long as we have a Device (which has `GetAdapter()`) on it, the\n  instance can be reached. As a result, we only need to clear all\n  events when the last device reference is dropped. This means\n  that the Instance can just be a simple refcounted object now.\n- This is also necessary because the `WaitAny()` and\n  `ProcessEvents()` APIs implicitly assume that if they are called,\n  that the Instance is externally alive. However, because users\n  can drop the last external reference, then get a new one when\n  they need it via the Device/Adapter, some teardown code in\n  Chromium could cause a crash by calling those APIs on an\n  Instance retrieved via the getter APIs after the original\n  external reference was dropped.\n\nBug: 467732049, 474662276\nChange-Id: Ib04c6243538983c2ba4c3060beb23487da66a499\nReviewed-on: https://dawn-review.googlesource.com/c/dawn/+/283515\nReviewed-by: Kai Ninomiya \u003ckainino@chromium.org\u003e\nReviewed-by: Sunny Sachanandani \u003csunnyps@chromium.org\u003e\nAuto-Submit: Loko Kung \u003clokokung@google.com\u003e\nCommit-Queue: Kai Ninomiya \u003ckainino@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "045b3d99afe12d846a4e72fb67b1fc1def429738",
      "old_mode": 33188,
      "old_path": "src/dawn/native/Instance.cpp",
      "new_id": "35e935423d5b0ac89f750e9fd3cfde6ae7cdf2c0",
      "new_mode": 33188,
      "new_path": "src/dawn/native/Instance.cpp"
    },
    {
      "type": "modify",
      "old_id": "f1ee301c94f9fa22f520e45fe457656d77a80ab0",
      "old_mode": 33188,
      "old_path": "src/dawn/native/Instance.h",
      "new_id": "7a266579e48e94bbebcbf2590fcf92a6f32aef36",
      "new_mode": 33188,
      "new_path": "src/dawn/native/Instance.h"
    },
    {
      "type": "modify",
      "old_id": "c2d60bf1ba08082818ea69656fa195f612795402",
      "old_mode": 33188,
      "old_path": "src/dawn/tests/end2end/EventTests.cpp",
      "new_id": "efd6c19e70387929b4102cd1796da9e910bfe4e1",
      "new_mode": 33188,
      "new_path": "src/dawn/tests/end2end/EventTests.cpp"
    }
  ]
}
