)]}'
{
  "commit": "58a8b055ee306f56f9d56cffcdf9cf5946f95a38",
  "tree": "3cf0a833e624fbbafa1bd23d2b99347c24261014",
  "parents": [
    "1632b4ae7b77ac04b93f08a2a2171cc6cb72dff8"
  ],
  "author": {
    "name": "Konstantin Shcheglov",
    "email": "scheglov@google.com",
    "time": "Wed Sep 24 13:05:22 2025 -0700"
  },
  "committer": {
    "name": "dart-internal-monorepo",
    "email": "dart-internal-monorepo@dart-ci-internal.iam.gserviceaccount.com",
    "time": "Wed Sep 24 13:07:22 2025 -0700"
  },
  "message": "Fine. Write URIs and lookup names as string refs in manifests\n\nSwitch serialization of heavily repeated strings (URIs, `LookupName`s,\nand select identifiers) from inline UTF-8 blobs to string references\nbacked by a per-blob string table. Readers now initialize the table from\nthe end of the buffer, and writers emit it once at the end.\n\nThis cuts duplication in library/requirements/diagnostics bundles and\nimproves both size and speed when analyzing the analyzer:\n- size: 112 MB → 62 MB (~45% smaller)\n- time: 450 ms → 310 ms (~31% faster)\n\nKey changes\n- Use `writeStringReference` / `readStringReference` for:\n  - URIs (`writeUri`/`readUri`); parse via `uriCache.parse`.\n  - `LookupName`, `BaseName`, and various manifest/type strings\n    (e.g., token buffers, member/top-level names, record field names,\n    named parameter names).\n- Add `writeStringTableAtEnd()` in all writers that produce persisted\n  blobs, and `initializeStringTableFromEnd()` in matching readers:\n  - `LinkedBundleProvider` (get/put paths)\n  - `LibraryDiagnosticsBundle` (toBytes/fromBytes)\n  - Manifest and requirements assert-serialization paths\n- Bump `AnalysisDriver.DATA_VERSION` to 561 to invalidate old caches.\n\nWhy this works\n- Manifests and requirements repeat the same URIs and names across many\n  entries. Interning them through a string table removes redundancy and\n  reduces I/O.\n- `uriCache.parse` avoids repeated `Uri` allocations and speeds up\n  lookup.\n\nTrade-offs\n- Writers must call `writeStringTableAtEnd()` exactly once after all\n  payload writes and before `takeBytes()`.\n- Readers that consume string references must initialize the table\n  before any reference reads.\n\nChange-Id: I2346e02fa34e0f421b6f15ccd485a0d19b00062d\nReviewed-on: https://dart-review.googlesource.com/c/sdk/+/451126\nReviewed-by: Paul Berry \u003cpaulberry@google.com\u003e\nCommit-Queue: Konstantin Shcheglov \u003cscheglov@google.com\u003e\n\nhttps://dart.googlesource.com/sdk/+/17abf40e0f2c6f1b2d03774523726570a2dc8967\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "06b0a4178b1e058f19a5d254e34ec6ba0529853c",
      "old_mode": 33188,
      "old_path": "DEPS",
      "new_id": "be59eab32b8c0e28f6ee1598d6ad2c0bf21986fd",
      "new_mode": 33188,
      "new_path": "DEPS"
    },
    {
      "type": "modify",
      "old_id": "8273f891d4b6afd82f4b2a271974f0c2925efb1f",
      "old_mode": 33188,
      "old_path": "commits.json",
      "new_id": "a156ec2b291b18268686522656eb2c6a6320c496",
      "new_mode": 33188,
      "new_path": "commits.json"
    }
  ]
}
