)]}'
{
  "commit": "ebe58477f476fe0d9ef0718f209e5b32903b386c",
  "tree": "1b7453520f9632f5499c499e172eae9493f06756",
  "parents": [
    "22b8bd000500b1f8640143d3cc7086d5cbc2c00c"
  ],
  "author": {
    "name": "Philipp Wollermann",
    "email": "philwo@chromium.org",
    "time": "Sat Jun 27 19:21:21 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:31 2026 -0700"
  },
  "message": "Share ResolvedTargetData across targets in --ide\u003djson\n\nGenerateJSON() builds a description for every resolved target, and\nTargetDescBuilder::BuildDescription() constructed a fresh\nResolvedTargetData for each one to compute inherited libs/frameworks.\nResolvedTargetData is a memoizing cache whose lib/framework computation\nrecurses over the transitive linked-deps subgraph; recreating it per\ntarget threw away all memoization and made the whole pass quadratic.\n\nAdd an optional ResolvedTargetData* parameter to\nDescBuilder::DescriptionForTarget() and have json_project_writer pass a\nsingle shared instance for all targets. Other callers (command_desc)\nkeep the previous per-call behavior via the nullptr default.\n\nFor a Chromium out/debug tree (31145 targets), \"gn gen --ide\u003djson\" drops\nfrom ~62.5s to ~2.1s for the JSON phase (total gen 64s -\u003e 3.8s). The\ngenerated 507 MB project.json is byte-identical before and after.\n\nChange-Id: I5480c5145b292221032b5a447f3eeaede6f1c54e\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/23460\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "143726d2e2b18c1423e35d6a1be31f5c07a157e4",
      "old_mode": 33188,
      "old_path": "src/gn/desc_builder.cc",
      "new_id": "8dce294ef87895352982b9d2d0cb8070c55f2aac",
      "new_mode": 33188,
      "new_path": "src/gn/desc_builder.cc"
    },
    {
      "type": "modify",
      "old_id": "e0e95a32172605411ba8c851532d1a30ccb36464",
      "old_mode": 33188,
      "old_path": "src/gn/desc_builder.h",
      "new_id": "57c7f88b8f117b34c702335fd428ccde05c3e741",
      "new_mode": 33188,
      "new_path": "src/gn/desc_builder.h"
    },
    {
      "type": "modify",
      "old_id": "9eb6e77f577189eb1829f4d5ab25cd61e550e8ad",
      "old_mode": 33188,
      "old_path": "src/gn/json_project_writer.cc",
      "new_id": "498c0b25c12ab5d90ed0df658b4ab1cb81c3a0a3",
      "new_mode": 33188,
      "new_path": "src/gn/json_project_writer.cc"
    }
  ]
}
