)]}'
{
  "commit": "a754274e2bb5c67349fa78451e8b6a8cdf94a078",
  "tree": "9645754b02acb9e11695bd022cd9eb11fdf8af9e",
  "parents": [
    "fc295f3ac7ca4fe7acc6cb5fb052d22909ef3a8f"
  ],
  "author": {
    "name": "David \u0027Digit\u0027 Turner",
    "email": "digit@google.com",
    "time": "Thu Nov 25 21:45:02 2021 +0100"
  },
  "committer": {
    "name": "Commit Bot",
    "email": "commit-bot@chromium.org",
    "time": "Thu Dec 09 11:28:22 2021 +0000"
  },
  "message": "Improve Builder performance.\n\nThe Builder class runs single-threaded to perform target\nresolution, and is critical for performance. This CL improves\nit in three distinct ways, which all improve \u0027gn gen\u0027 times\nand reduce RAM usage:\n\n- Implement BuilderRecordSet as PointerSet\u003cBuilderRecord\u003e\n  which measures favoribly over competing implementations\n  (i.e. std::set\u003c\u003e, std::unordered_set\u003c\u003e and\n  base::flat_set\u003c\u003e).\n\n- Remove the unresolved_deps_ member from the class since\n  the exact set is not needed during target resolution,\n  instead, replace it with a simple unresolved_counter_.\n\n  The GetUnresolvedDeps() method is added to collect\n  the unresolved dependencies by scanning all_deps_\n  instead. This is only used out of the performance\n  critical loop though.\n\n- Provide a faster/smaller BuilderRecordMap type\n  used by the Builder class to map Labels to BuilderRecord\n  instances.\n\nOverall results for Fuchsia is \"gn gen\" time is reduced by\n3s (-19.7%) and RAM usage by 130 MiB (-4.95%).\n\nBug: NONE\n\n------------------------------------------------------\nMeasurements for Fuchsia \"gn gen\":\n\nBEFORE gn-target-set\n\nDone. Made 173214 targets from 5389 files in 15042ms\nDone. Made 173214 targets from 5389 files in 15143ms\nDone. Made 173214 targets from 5389 files in 15436ms\nDone. Made 173214 targets from 5389 files in 15642ms\nDone. Made 173214 targets from 5389 files in 15649ms *\nDone. Made 173214 targets from 5389 files in 15754ms\nDone. Made 173214 targets from 5389 files in 15790ms\nDone. Made 173214 targets from 5389 files in 16151ms\nDone. Made 173214 targets from 5389 files in 16760ms\n\n3252084\n3255684 *\n3264448\n\nAFTER gn-builder-record\n\nDone. Made 173214 targets from 5389 files in 11610ms\nDone. Made 173214 targets from 5389 files in 11663ms\nDone. Made 173214 targets from 5389 files in 12243ms\nDone. Made 173214 targets from 5389 files in 12467ms\nDone. Made 173214 targets from 5389 files in 12558ms *\nDone. Made 173214 targets from 5389 files in 12578ms\nDone. Made 173214 targets from 5389 files in 12803ms\nDone. Made 173214 targets from 5389 files in 12900ms\nDone. Made 173214 targets from 5389 files in 12906ms\n\n3114220\n3125024 *\n3135548\n\nChange-Id: Ifc8fbedf0b4e9c47ceea708931fd53600f0138a5\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/12584\nReviewed-by: Brett Wilson \u003cbrettw@chromium.org\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "cc6e8350b1522509df9308c152f24b5fbc0c7862",
      "old_mode": 33261,
      "old_path": "build/gen.py",
      "new_id": "772d090de09f293969e8b3f9fb5990e746750746",
      "new_mode": 33261,
      "new_path": "build/gen.py"
    },
    {
      "type": "modify",
      "old_id": "d1ba66283fd756b12027520dc0f795f18dd0ba6f",
      "old_mode": 33188,
      "old_path": "src/gn/builder.cc",
      "new_id": "7e36debed74be2bc0ae290816bf1f466b2552aa6",
      "new_mode": 33188,
      "new_path": "src/gn/builder.cc"
    },
    {
      "type": "modify",
      "old_id": "bd62c18dd367d958eb2937a3dff95d75816f2a2f",
      "old_mode": 33188,
      "old_path": "src/gn/builder.h",
      "new_id": "4b85824e237b88849cdfaa5e4c64aa9aa34db2fc",
      "new_mode": 33188,
      "new_path": "src/gn/builder.h"
    },
    {
      "type": "modify",
      "old_id": "6325cdc5f3b56e6b451b813c2e6ead180c5e87b9",
      "old_mode": 33188,
      "old_path": "src/gn/builder_record.cc",
      "new_id": "7849d9143ede9d503c7534506567d6584288b0b9",
      "new_mode": 33188,
      "new_path": "src/gn/builder_record.cc"
    },
    {
      "type": "modify",
      "old_id": "439893b65e254062c0821825dd9dcbffdee3a486",
      "old_mode": 33188,
      "old_path": "src/gn/builder_record.h",
      "new_id": "28f75fe3f8afca2de467fcb21e2c34087bea3ee1",
      "new_mode": 33188,
      "new_path": "src/gn/builder_record.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "58ce7126010ea717874ca135bdd366c4af56c237",
      "new_mode": 33188,
      "new_path": "src/gn/builder_record_map.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b26ed5ce72dadfaf49f11e6dca811ddd0b2fbfa2",
      "new_mode": 33188,
      "new_path": "src/gn/builder_record_map_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "81b9f89338f156f9eb219d64466c3209d2e3f95b",
      "old_mode": 33188,
      "old_path": "src/gn/builder_unittest.cc",
      "new_id": "2a354d5e319ad2659a374b5dc64f873467e14999",
      "new_mode": 33188,
      "new_path": "src/gn/builder_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "c6151705fa2229aec40e8862f15c5372807f9962",
      "old_mode": 33188,
      "old_path": "src/gn/loader.cc",
      "new_id": "9d46103818512a89e820cddd5eba9a1cd493f166",
      "new_mode": 33188,
      "new_path": "src/gn/loader.cc"
    }
  ]
}
