)]}'
{
  "commit": "fac322b1ef7a9acbe71f3718143c0dae43fb5833",
  "tree": "5af69abe21a50ebc88a3e307eacfbd716e1cff50",
  "parents": [
    "074c9c494b6d4d1252a1f8d31094da3f36b30fdf"
  ],
  "author": {
    "name": "jmmv",
    "email": "jmmv@google.com",
    "time": "Thu Mar 21 07:53:51 2019 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Thu Mar 21 07:55:49 2019 -0700"
  },
  "message": "Optimize deleteTreesBelow.\n\nMake deleteTreesBelow faster by assuming that the directories to be deleted\nare readable and writable.  We create most of the trees we delete via this\nfunction anyway, so we know that they are accessible for the most part.\n\nThe previous code was blindly resetting read/write/execute permissions for\neach traversed directory, and was doing so individually, which means we\nissued 3 extra syscalls per directory.\n\nAnd on Unix file systems, go even further by taking advantage of the fact\nthat readdir returns the type of each entry: there is no need to issue a\nseparate stat for each entry to determine if it is a subdirectory or not.\nDo this from our JNI code because there really is no reason to pay the\ncost of going in an out of Java for each file: we are traversing very\nlarge directory trees, so every bit helps.\n\nA fully-local build of a large iOS app on a Mac Pro 2013 shows that this\nreduces build times from about 7300s to 5100s.  A build of a similar app\non a MacBook Pro 2015 shows a reduction from 7500s to 5400s.  The impact\non these builds using dynamic execution is much smaller, and there is\nno observable improvement in smaller builds.\n\nAddresses https://github.com/bazelbuild/bazel/issues/7527.\n\nRELNOTES: None.\nPiperOrigin-RevId: 239594433\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "96697eea225da68aee0f0bf21720ad9f96320eae",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/unix/NativePosixFiles.java",
      "new_id": "dba8d2c16cd111ce0772b5d8c2d78d6542729d3a",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/unix/NativePosixFiles.java"
    },
    {
      "type": "modify",
      "old_id": "c68cad1324840044453b283753553710dacebd4e",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/unix/UnixFileSystem.java",
      "new_id": "7e043f987a3d997c25f369fd302dc7b8dce31e63",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/unix/UnixFileSystem.java"
    },
    {
      "type": "modify",
      "old_id": "ad38ee57a0a382de1a6e272acd628dca5e144f4e",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/vfs/FileSystem.java",
      "new_id": "97e1933f3e4c500627f5543ed528bde5041d887d",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/vfs/FileSystem.java"
    },
    {
      "type": "modify",
      "old_id": "c9ec3dd5d656e59b6e23c3cbd65e819359cce804",
      "old_mode": 33188,
      "old_path": "src/main/native/unix_jni.cc",
      "new_id": "eb9930e9713df2ff95e05a2a38189a646f4dd875",
      "new_mode": 33188,
      "new_path": "src/main/native/unix_jni.cc"
    }
  ]
}
