)]}'
{
  "log": [
    {
      "commit": "ca97ada4ec14373242de2452a6d0c16804007d66",
      "tree": "483cba96eb8cbc8e06a2ef8651f66d208626e30b",
      "parents": [
        "2e40c1c2e9c8cfc2d41a8960247bfa48e2500889"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Feb 02 09:25:31 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Feb 02 11:04:38 2018 -0800"
      },
      "message": "Change ClassFileLoadHook to lazily compute dex file\n\nCreating a dex file from the quickened or compact-dex\u0027d internal\nformat for calling the JVMTI ClassFileLoadHook is quite expensive.\nThis meant that agents could not generally listen for this event\nwithout causing unacceptable performance problems.\n\nSince agents will generally not touch the buffer, needing to\ninstrument only a handful of classes we will fix this problem by doing\nthe de-quickening lazily. This is done by mmaping an empty buffer with\nPROT_NONE and then filling it in when the program has a SEGV in the\nappropriate address range. This should improve the performance of any\nagent that listens for the ClassFileLoadHook but does not commonly do\nanything to the buffer.\n\nThis does have the disadvantage that we can no longer ensure that the\nbuffer size we pass down in class_data_len might no longer be fully\naccurate. Some agents that assert that class_data_len is exactly the\nsame as the dex-file will need to be updated.\n\nBug: 72402467\nBug: 72064989\nTest: ./test.py --host -j50\nTest: ./test.py --host --redefine-stress -j50\n\nChange-Id: I39354837f1417ae10a57c5b42cbb4f38f8a563dc\n"
    },
    {
      "commit": "64e4c145e9301615a339a0981b1bc34fbe78c2f9",
      "tree": "358bbb174574831ac5bca83eadfcdde7cbf8f9a0",
      "parents": [
        "0406e1e59970399393f53923704e1b9a828b2173"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 30 13:46:37 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 30 15:54:03 2018 -0800"
      },
      "message": "Refactor JVMTI ClassFileLoadHook handling\n\nMake initial load ClassFileLoadHook use the same helper structures as\nthe retransform path. This makes the system simpler and creates a\nsingle point where changes to the ClassFileLoadHook handling can be\ndone.\n\nTest: ./test.py --host -j50\nTest: ./test.py --redefine-stress --host -j50\nBug: 72064989\nChange-Id: I7df9fed267fea497d9efd4f4214506237e63339f\n"
    },
    {
      "commit": "06c42a571358b5e5adb69104b183af8f32f4c07d",
      "tree": "7b218fdb67fef74cdcbc2e3665757485ef89918b",
      "parents": [
        "7f14c2ec37c70010d99cab6806d85018df56c555"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 26 14:17:14 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 31 07:38:43 2017 -0700"
      },
      "message": "ART: Move openjdkjvmti to art/\n\nMove libopenjdkjvmti out of the runtime directory. Let\u0027s not\npollute the runtime library.\n\nTest: m test-art-host\nChange-Id: Idb6b9cebcd61777bd3200437a2ae584a63a4a341\n"
    },
    {
      "commit": "7f14c2ec37c70010d99cab6806d85018df56c555",
      "tree": "b06280436183a7c4cf637ced3a8b2e46fe186b53",
      "parents": [],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jul 31 14:24:02 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 31 14:24:02 2017 +0000"
      },
      "message": "Merge \"tools: art script fix for spuriously creating \"{arm,arm64,mips,mips64,x86,x86_64}\"  directory\""
    }
  ]
}
