)]}'
{
  "commit": "8d1b023dec36ab50138d427e807175fd99b5bb57",
  "tree": "15a70bb1d2dc8ffafddb6dc28ed403c368b41ffc",
  "parents": [
    "ebe58477f476fe0d9ef0718f209e5b32903b386c"
  ],
  "author": {
    "name": "Philipp Wollermann",
    "email": "philwo@chromium.org",
    "time": "Sat Jun 27 20:09:32 2026 +0900"
  },
  "committer": {
    "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Sun Jun 28 22:20:36 2026 -0700"
  },
  "message": "Parallelize per-target JSON rendering in --ide\u003djson\n\nGenerateJSON() built each target\u0027s description and serialized it to JSON\non the main thread, one target at a time. The desc building and JSON\nserialization are independent per target, so render them on a WorkerPool\ninto a pre-sized, order-preserving vector; only appending to the shared\noutput buffer and collecting toolchains stays serial.\n\nThe shared ResolvedTargetData is safe for concurrent access -- the\nparallel Ninja target writers already share a single instance the same\nway (see TargetWriteInfo in command_gen.cc). Verified race-free with a\nThreadSanitizer build over a full Chromium out/debug tree (0 reports).\n\nFor that tree (31145 targets) the JSON phase drops from ~2.1s to ~0.4s\n(5.2x), bringing total \"gn gen --ide\u003djson\" to ~2.1s vs ~1.7s for plain\n\"gn gen\". The generated project.json is byte-identical before and after.\n\nChange-Id: I04de9bec3965d5636a431e50d7ddeae2e9cea1c3\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/23461\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "498c0b25c12ab5d90ed0df658b4ab1cb81c3a0a3",
      "old_mode": 33188,
      "old_path": "src/gn/json_project_writer.cc",
      "new_id": "79df92e744b1bc894159c38d23fb543a01d900d4",
      "new_mode": 33188,
      "new_path": "src/gn/json_project_writer.cc"
    }
  ]
}
