)]}'
{
  "commit": "24411bec62d0d848e466e5ab9d5e61dd6d9f88d4",
  "tree": "5eb069afe085b5856220a563195deeff7bcb2486",
  "parents": [
    "3941394b9943eb5c095e7d71febbe6764295ca77"
  ],
  "author": {
    "name": "Takuto Ikuta",
    "email": "tikuta@google.com",
    "time": "Wed Mar 20 07:50:39 2019 +0900"
  },
  "committer": {
    "name": "Commit Bot",
    "email": "commit-bot@chromium.org",
    "time": "Tue Mar 19 23:04:42 2019 +0000"
  },
  "message": "Make gn check faster\n\nThis CL skip re-calculation of unreachable check by caching unreachable\nresult.\nIn chromium, unreachable targets are sometimes there if an included\nheader file is listed in sources of several targets.\n\ne.g.\n```\nsource_set(\"x\") {\n  sources \u003d [ \"x.cc\", \"y.cc\" ] # both x.cc and y.cc have #include \"a.h\"\n  deps \u003d [ \":a\" ]\n}\n\nsource_set(\"a\") {\n  sources \u003d [ \"a.h\" ]\n}\n\nsource_set(\"a2\") {\n  sources \u003d [ \"a.h\" ]\n}\n\nsource_set(\"a3\") {\n  sources \u003d [ \"a.h\" ]\n}\n```\n\nIn above example, dependency checker tries to find dependency path from\n\"x\" to \"a\", \"a2\" and \"a3\". If \"a\" is not checked first, checker does\nunreachable check for \"a2\" or \"a3\". And checker does such unreachable\ncheck for \"a.h\" found in both x.cc and y.cc.\nThat seems the main reason of duplicate check in chromium.\ne.g. gfx_export.h listed in sources of multiple targets.\nhttps://cs.chromium.org/search/?q\u003dgfx_export.h+file:gn\u0026sq\u003dpackage:chromium\u0026type\u003dcs\n\nWith this CL, `gn gen --check` for chromium on Z840 Win10 improved from\n53.2s to 24.5s\n\nI hope this makes \u0027generate_build_files\u0027 step faster on win7-rel\nbuilder.\ne.g. tooks nearly 3mins in\nhttps://ci.chromium.org/p/chromium/builders/try/win7-rel/42250\n\nBug: chromium:941946\nChange-Id: I7b797c8739a899b3a8519a81a1b1629e5affa659\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/4240\nReviewed-by: Brett Wilson \u003cbrettw@chromium.org\u003e\nCommit-Queue: Brett Wilson \u003cbrettw@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6f0b9d04c410b7c0e6542ffdea0e32086570a50e",
      "old_mode": 33188,
      "old_path": "tools/gn/header_checker.cc",
      "new_id": "8407bd0f043d24e93e691669ea92a9380be7336a",
      "new_mode": 33188,
      "new_path": "tools/gn/header_checker.cc"
    },
    {
      "type": "modify",
      "old_id": "46a47b98406886405b45aa5bd962b0bf57862f53",
      "old_mode": 33188,
      "old_path": "tools/gn/header_checker.h",
      "new_id": "3932001f8fbb63cb2df5f724e54703adf734e7a2",
      "new_mode": 33188,
      "new_path": "tools/gn/header_checker.h"
    },
    {
      "type": "modify",
      "old_id": "ab0a6c8ca4bfd8001326d6428145cc1ba22ce7e7",
      "old_mode": 33188,
      "old_path": "tools/gn/header_checker_unittest.cc",
      "new_id": "c6529d51dfa45638d356f84744ba8769e3aea656",
      "new_mode": 33188,
      "new_path": "tools/gn/header_checker_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "d5cb1c31bd18800a538f9be4f4c2f69b0d00be9b",
      "old_mode": 33188,
      "old_path": "tools/gn/substitution_writer.h",
      "new_id": "530f06476959e0af1886a7c02384d55d1b244b9d",
      "new_mode": 33188,
      "new_path": "tools/gn/substitution_writer.h"
    }
  ]
}
