)]}'
{
  "commit": "6aaff2a54df115dd12b5034d03a2c58c39e4881b",
  "tree": "8c8b88e9b4669fad858c40a801761dbdb82c3bf2",
  "parents": [
    "087507107e7a5d352dbcd8bd5618b5f82bb160eb"
  ],
  "author": {
    "name": "Ryan Prichard",
    "email": "rprichard@google.com",
    "time": "Fri Oct 09 05:08:36 2020 -0700"
  },
  "committer": {
    "name": "Ryan Prichard",
    "email": "rprichard@google.com",
    "time": "Tue Nov 03 22:56:12 2020 +0000"
  },
  "message": "Fix __cxa_atexit run-time regression with many registrations\n\nWhen an array element is added or removed, make only the relevant page\nwritable, rather than the entire array. The entire array is still made\nwritable during recompaction and expansion.\n\nThis change fixes most of a large regression in __cxa_atexit runtime\n(blueline, taskset 10, performance governor, 100000 registrations,\ntimes are in seconds)\n - Q: _Exit\u003d0.292380, exit\u003d0.626801\n - R: _Exit\u003d28.435082, exit\u003d95.785110\n - new: _Exit\u003d0.352285, exit\u003d0.713893\n\nTest: bionic unit tests\nTest: adb shell taskset 10 \\\n  /data/benchmarktest64/bionic-spawn-benchmarks/bionic-spawn-benchmarks \\\n  --benchmark_filter\u003d\u0027atexit\u0027 \\\n  --benchmark_display_aggregates_only\u003dtrue \\\n  --benchmark_repetitions\u003d10\nBug: http://b/168043760\nChange-Id: I88cc15c29c9890b422b7f621f29f98a03ca1f886\nMerged-In: I88cc15c29c9890b422b7f621f29f98a03ca1f886\n(cherry picked from commit de523c02bbea1923ee5fbe9d1d60a905f6e965b0)\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "df306afe11803b6ad5f18233751b47912a9a74ec",
      "old_mode": 33188,
      "old_path": "libc/bionic/atexit.cpp",
      "new_id": "5dbf322e3f4b290696135c2d09dc6201ac734776",
      "new_mode": 33188,
      "new_path": "libc/bionic/atexit.cpp"
    }
  ]
}
