)]}'
{
  "commit": "3a46000222f95a6daca60fc777dd7deb0d7ced21",
  "tree": "9e346168039ce6a8f0c71572a3e77b0151bddd61",
  "parents": [
    "494789feb7b3aeb27f85d9685b2c7598c5ae2637"
  ],
  "author": {
    "name": "Robert Phillips",
    "email": "robertphillips@google.com",
    "time": "Wed May 20 11:21:20 2026 -0400"
  },
  "committer": {
    "name": "skcq-be@skia-corp.google.com.iam.gserviceaccount.com",
    "email": "skcq-be@skia-corp.google.com.iam.gserviceaccount.com",
    "time": "Wed May 20 09:20:12 2026 -0700"
  },
  "message": "[ganesh] Add GrUniquelyKeyedProxyRegistry to simplify unique key management\n\nWhen using DDLs, we want the Recorder to have a map from uniqueKey to TextureProxy but, when that TextureProxy is deleted, we want the Recorder\u0027s map to be updated. This is made difficult by snapped DDLs being calved off, submitted and, possibly deleted, on a different thread. Additionally, and the focus of the bug, the Recorder can be deleted before its calved DDLs.\n\nTo resolve all these issues this CL adds a new ref-counted GrUniquelyKeyedProxyRegistry that thread-safely encapsulates the uniqueKey tracking and can live beyond its generating Recorder.\n\n\nBug: b/513050931\nChange-Id: I2711e39f14675b3c32653ad4b094998d2b4ff1c7\nReviewed-on: https://skia-review.googlesource.com/c/skia/+/1239676\nReviewed-by: Michael Ludwig \u003cmichaelludwig@google.com\u003e\nCommit-Queue: Robert Phillips \u003crobertphillips@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3430e2d5b3f8e4e7999007629df4ebbba100a3b9",
      "old_mode": 33188,
      "old_path": "gn/tests.gni",
      "new_id": "3a0a91524449f92a0329436070f8a60f26fc1d79",
      "new_mode": 33188,
      "new_path": "gn/tests.gni"
    },
    {
      "type": "modify",
      "old_id": "24ddd2e1f2a91adee428348a1db601b2c53606da",
      "old_mode": 33188,
      "old_path": "src/gpu/ganesh/GrDeferredDisplayListRecorder.cpp",
      "new_id": "300fb3771a82e30dadc635a011740ea14b3ea3c6",
      "new_mode": 33188,
      "new_path": "src/gpu/ganesh/GrDeferredDisplayListRecorder.cpp"
    },
    {
      "type": "modify",
      "old_id": "d3a0c3c9ef56d61000251701b30b4bf729a04df1",
      "old_mode": 33188,
      "old_path": "src/gpu/ganesh/GrProxyProvider.cpp",
      "new_id": "2df572ec020b48b316f876fe96eb5462df12f71e",
      "new_mode": 33188,
      "new_path": "src/gpu/ganesh/GrProxyProvider.cpp"
    },
    {
      "type": "modify",
      "old_id": "b07459718679795ac15c7f9f1b9a6d4681abde24",
      "old_mode": 33188,
      "old_path": "src/gpu/ganesh/GrProxyProvider.h",
      "new_id": "f915793609b0f4701fc226fa0c4fcd49c5b86cbe",
      "new_mode": 33188,
      "new_path": "src/gpu/ganesh/GrProxyProvider.h"
    },
    {
      "type": "modify",
      "old_id": "9ed45eba9932fc87c3c373b758e8c909ba1452b9",
      "old_mode": 33188,
      "old_path": "src/gpu/ganesh/GrResourceCache.cpp",
      "new_id": "d9989f091abdd118ed2a20718fd762c3d39d3d62",
      "new_mode": 33188,
      "new_path": "src/gpu/ganesh/GrResourceCache.cpp"
    },
    {
      "type": "modify",
      "old_id": "383d919117d1c0aab3afc99b22a75e6851022242",
      "old_mode": 33188,
      "old_path": "src/gpu/ganesh/GrTextureProxy.cpp",
      "new_id": "a48f9731f73f4a7aec81b3027439f05da926a128",
      "new_mode": 33188,
      "new_path": "src/gpu/ganesh/GrTextureProxy.cpp"
    },
    {
      "type": "modify",
      "old_id": "14a4b5eb064ac317729f258b86b1d901f936cfef",
      "old_mode": 33188,
      "old_path": "src/gpu/ganesh/GrTextureProxy.h",
      "new_id": "fd0a7e6e8b000c3105d4d20aa0c2235fcda41064",
      "new_mode": 33188,
      "new_path": "src/gpu/ganesh/GrTextureProxy.h"
    },
    {
      "type": "modify",
      "old_id": "5ae1a1e9e0581e7ad43274c73edda936c5673698",
      "old_mode": 33188,
      "old_path": "src/gpu/ganesh/GrTextureProxyCacheAccess.h",
      "new_id": "4da16295f359c369e5944f11abb032211a8eb418",
      "new_mode": 33188,
      "new_path": "src/gpu/ganesh/GrTextureProxyCacheAccess.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d32d1ef2a5c0bce72c3c6e8a5993849c8fe16b1a",
      "new_mode": 33188,
      "new_path": "tests/GrUniqueProxyTest.cpp"
    },
    {
      "type": "modify",
      "old_id": "5fc4f4542479286b25c54a253e656cafb3624b7e",
      "old_mode": 33188,
      "old_path": "tests/TextureProxyTest.cpp",
      "new_id": "53e6c97c29b271482e40d4220da1739ca2d7833e",
      "new_mode": 33188,
      "new_path": "tests/TextureProxyTest.cpp"
    }
  ]
}
