)]}'
{
  "log": [
    {
      "commit": "b7c640d364d32b79cb52d04750b063667a9a0c86",
      "tree": "9caafc96879f83f8e5dd3cd45b9005be6e2b7deb",
      "parents": [
        "3ffb5b1576f8af0c361284ebd8d2d54c70ede3ff"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Mar 20 15:52:13 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 10 18:33:25 2019 +0000"
      },
      "message": "JVMTI Force early return\n\nAdd support for can_force_early_return jvmti capability. This allows\none to force java frames to exit early. Exited frames have all of\ntheir normal locks released.\n\nWe implement this by modifying the existing method exit events to\nallow one to modify the exit value during the callback. This is used\nto implement ForceEarlyReturn by adding internal-only events that will\nchange the return value of methods once they return (using\nkForcePopFrame) avoiding the need to modify the actual interpreter\nvery deeply. This also makes it simple to continue to use the standard\ndeoptimization functions to force the actual return.\n\nIn order to simplify book-keeping the internal event is refcounted,\nnot associated with any specific jvmtiEnv, and only settable on\nspecific threads. The internal event is added by the ForceEarlyReturn\nfunction and then removed by the MethodExit event when we update the\nreturn value.\n\nBug: 130028055\nTest: ./test.py --host\nChange-Id: Ifa44605b4e8032605f503a654ddf4bd2fc6b60bf\n"
    },
    {
      "commit": "342b69492cd0789d1c0903bb6d948e505e708048",
      "tree": "ab3cbcdd37a1afc1b0ae96bf756c332a2b4ccbdc",
      "parents": [
        "b34981b0b7a16b084a4ab30ce509ee98bf171e63"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue May 07 15:28:39 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed May 08 19:42:49 2019 +0000"
      },
      "message": "Fix JVMTI GetStackTrace bug\n\nGetStackTrace would incorrectly return ERR(ILLEGAL_ARGUMENT) if the\nnumber frames returned was less then the start depth and start depth\nwas \u003e\u003d 0. This made some legal stack trace calls impossible.\n\nInstead it should have been checking that at least one frame was\nretrieved (since otherwise the start-depth was off the stack).\n\nTest: ./test.py --host\nBug: 132196976\nChange-Id: I9f959569f90dbb75de0010173b119472a4b5864e\n"
    },
    {
      "commit": "a4cdd36ba332b63ccaae8416f68d3ac98d7dd68f",
      "tree": "7224dda71c3fd35959b0f968f5478af4f92a145d",
      "parents": [
        "4160c12d4e93dd7a9da68a82f63cff4c23fb5c17"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Apr 18 09:17:10 2019 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Apr 23 18:15:06 2019 +0000"
      },
      "message": "Prevent concurrent GC stack-walks during deoptimization\n\nWe could end up modifying the instrumentation stack at the same time\nthe GC or thread-flip stack walks are occurring. This could cause\ncrashes or check-failures as the stack is in an inconsistent state.\n\nTo fix this we changed the deoptimization process to block GC stack\nwalks.\n\nWe also standardized openjdkjvmti.so deoptimization to use a single\nentrypoint.\n\nBug: 72608560\nTest: ./test.py --host\nTest: ./tools/parallel_run.py\n\nChange-Id: I942ff891930d22a579345265897916cf84842a1c\n"
    },
    {
      "commit": "679dec1c8ade054feea745cf31d0f4f9f9cb1d9b",
      "tree": "8434793b8a4bed850799c3b352c4c17b70c53a42",
      "parents": [
        "66a655029c98de9492570f4cfd06476c0fde9cd1"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Apr 08 16:30:14 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Apr 09 18:37:42 2019 +0000"
      },
      "message": "Revert^2 \"Use RAII for preventing user-code suspensions\"\n\nThis reverts commit c723b81ea2c34b096c1a7ab88bce23c98f6419f5.\n\nReason for revert: Rebased without CL causing underlying issue.\nTest: ./test.py --host\nBug: 130150240\n\nChange-Id: I1a48138846a2b76de6f81bb3caca82c5e771712d\n"
    },
    {
      "commit": "c723b81ea2c34b096c1a7ab88bce23c98f6419f5",
      "tree": "c3d1dc0591110c8443f948aaade8f735a23ea907",
      "parents": [
        "d271809c58fa2c2d8021022b436f25e4d0b9acc1"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Apr 08 16:13:24 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Apr 08 16:17:19 2019 +0000"
      },
      "message": "Revert \"Use RAII for preventing user-code suspensions\"\n\nThis reverts commit 9c8f34448e0e2b0b0b0094d75dadc3116f5610fa.\n\nBug: 130150240\nReason for revert: Parent causes lock-level violations in gcstress.\n\nChange-Id: I6c29a0d37a933ac37ab835e171750c2ae5ca0599\n"
    },
    {
      "commit": "9c8f34448e0e2b0b0b0094d75dadc3116f5610fa",
      "tree": "54cc8bd2990af9ca030fee3ec27e82181ef22067",
      "parents": [
        "3fa8b6db7b556035f192d037b35210677250798e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Apr 04 15:01:42 2019 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Apr 04 15:11:15 2019 -0700"
      },
      "message": "Use RAII for preventing user-code suspensions\n\nIn some places we want to prevent a thread from being suspended by a\nkForUserCode suspension. Doing this requires gaining a lock,\nchecking our current suspension state and possibly retrying. To\nsimplify this we added a new RAII ScopedNoUserCodeSuspension\ncapability that does the needed checks.\n\nTest: ./test.py --host\nChange-Id: I48c08bc8f99b3574d241e7bfc6945b3358b6d082\n"
    },
    {
      "commit": "f52d92fce224c86491d9b0fd6fca805564119426",
      "tree": "fbf38f272a980e965627918d9dc6bbb536395c00",
      "parents": [
        "e660f7232a19a2c173f562b8e0987755a78ee298"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 29 12:33:02 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 01 09:37:59 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify Monitor/-Pool.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 31113334\nChange-Id: I2d2ebc5ef56e73e5678e0cfcd84c479611dfcca8\n"
    },
    {
      "commit": "3dacdd6343ea9a6471692914c7a9dff66d6453c7",
      "tree": "5e0a3b8f99e914a7fbd49822e5c8fb1bd4709f5c",
      "parents": [
        "939798e6a565a92e597136c589428e89c28bffd5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 12 15:45:47 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 12 09:52:59 2019 -0700"
      },
      "message": "Revert^4 \"Remove Global deopt requirement for several jvmti events\"\n\nIt was possible for the top frame of a thread to enter the\nartQuickToInterpreterBridge during runtime shutdown. This could be\ncaused by the libjdwp agent. If this happens the caller of the frame\nwill be \u0027null\u0027, which could cause a segv if not detected correctly.\n\nThis reverts commit 939798e6a565a92e597136c589428e89c28bffd5.\n\nReason for revert: Fixed issue that could cause crash during process\n                   shutdown.\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\nTest: ./test.py --host\n\nChange-Id: I2aad1705c761edb4ed788cec4fc8a3068d67aee5\n"
    },
    {
      "commit": "939798e6a565a92e597136c589428e89c28bffd5",
      "tree": "3274ff355163df18cd2d7343ce0d34214f9d09c9",
      "parents": [
        "a55e8b5c9827cc4dc4e7f7c7ee07ef1fdafc35e0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 12 14:26:22 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 12 14:26:42 2019 +0000"
      },
      "message": "Revert \"Revert^2 \"Remove Global deopt requirement for several jvmti events\"\"\n\nThis reverts commit a75e5892fba6d0208f33e9ab8e19e732daf94996.\n\nReason for revert: Fails jdwp tests.\n\nChange-Id: Ic883f4f0108b07f1609c6c6a9565eae5903bfd2c\n"
    },
    {
      "commit": "a75e5892fba6d0208f33e9ab8e19e732daf94996",
      "tree": "3daff8c3ce1608bacba7358711ccf9bd61c0bb05",
      "parents": [
        "dd83a40a3c4fea0d917577de96742900a61ab548"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Mar 11 15:49:40 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Mar 11 21:59:44 2019 +0000"
      },
      "message": "Revert^2 \"Remove Global deopt requirement for several jvmti events\"\n\nThis reverts commit ad344b6a14feba90a06a205760e9bc766c56cab0.\n\nJit-on-first-use would cause the runtime to skip sending FramePop\nevents for exceptions in some circumstances due to longjmp-ing over\nthe frames. This requires forcing jit off from the first instant a\nthread can get frame popped events, which is unfortunate.\n\nReason for revert: Fixed issue causing 1925 to fail on\n                   jit-on-first-use and redefine-stress\nTest: ./test.py --host\nTest: ./art/test/testrunner/run_build_test_target.py -j50 art-jit-on-first-use\n\nChange-Id: I6ec2a799db1041262a055be10e1af1faece6f2fc\n"
    },
    {
      "commit": "e5d2398fa5be5effbc552b244387119dc53a9671",
      "tree": "f32b3f3d67c469d9bdc83961ef9c4d863c351f0a",
      "parents": [
        "639b2b1f3a675135d443fc380323fbc48639a7eb"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jan 08 10:34:26 2019 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 09 12:38:30 2019 -0800"
      },
      "message": "ART: Forward-declare Context\n\nMove deletion to thread.cc, which allows to forward-declare\nContext.\n\nBug: 119869270\nTest: mmma art\nChange-Id: Ifd9006cd3457d4ab708a289a7f6e1cdf2591c596\n"
    },
    {
      "commit": "c7d878d4be3f0971d4b86266308c7540a26c2856",
      "tree": "041a6d897df81ae64f25c211f16e8640959a35f5",
      "parents": [
        "d295a75d952742604eaae0530daea19dd6fd782c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 19 18:42:06 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 19 17:09:07 2018 -0800"
      },
      "message": "Revert^4 \"ART: Add StackVisitor accepting a lambda\"\n\nThis reverts commit ec43a01e0ac948c59d5b1f9c3812f2901b48942a.\n\nReason for revert: Added missing code.\n\nBug: 115837065\nTest: m test-art-host\nChange-Id: Id30ccdf9aa9a6e56a914254793e399f2712c882d\n"
    },
    {
      "commit": "ec43a01e0ac948c59d5b1f9c3812f2901b48942a",
      "tree": "57e1a23dcc0beba8e98841b8cf063f6153b08c9b",
      "parents": [
        "3d477f3a3eea757a49ca621cc579f711f22fccdd"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Nov 17 13:10:40 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Nov 17 13:10:40 2018 +0000"
      },
      "message": "Revert \"Revert^2 \"ART: Add StackVisitor accepting a lambda\"\"\n\nThis reverts commit 3d477f3a3eea757a49ca621cc579f711f22fccdd.\n\nBug: 115837065\n\nReason for revert: Breaks jdwp tests.\n\nChange-Id: I09249331798970751a20c6b41675c3efef72adfb\n"
    },
    {
      "commit": "3d477f3a3eea757a49ca621cc579f711f22fccdd",
      "tree": "b4b402d0181610c62062c8c597ef30ee2840b6b1",
      "parents": [
        "54c7da9c50ee85ade636605cd6ea18b4c2bc69fa"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 16:40:45 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 10:13:38 2018 -0800"
      },
      "message": "Revert^2 \"ART: Add StackVisitor accepting a lambda\"\n\nThis reverts commit 8248490f24e8582ce2ead8cd878d8a2c38310a48.\n\nReason for revert: Fixed instrumentation.cc\n\nBug: 115837065\nTest: m test-art-host\nChange-Id: I484833f4712c835fcaf3452dca4cae5b031d5a7d\n"
    },
    {
      "commit": "8248490f24e8582ce2ead8cd878d8a2c38310a48",
      "tree": "f542af6560561526fc413e361e3323a615b5429c",
      "parents": [
        "36f8d22c672498753b9edc66ba11acc9816b2a17"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 00:47:49 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 00:47:49 2018 +0000"
      },
      "message": "Revert \"ART: Add StackVisitor accepting a lambda\"\n\nThis reverts commit 36f8d22c672498753b9edc66ba11acc9816b2a17.\n\nReason for revert: Seems to be breaking test 687\n\nBug: 115837065\nChange-Id: I83bb1a9d76cc701c3d582778e5047ebd5dab5d29\nTest: TreeHugger\n"
    },
    {
      "commit": "36f8d22c672498753b9edc66ba11acc9816b2a17",
      "tree": "7a7195bf16db14d7f56f94a4d6421f6837b2f686",
      "parents": [
        "a53da8f8170ddaff3e4160641938ba1b7806202c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Oct 08 08:13:42 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 02 16:01:30 2018 -0700"
      },
      "message": "ART: Add StackVisitor accepting a lambda\n\nTo simplify implementation of visitors. Rewrite some\nvisitors.\n\nBug: 115837065\nTest: mmma art\nTest: m test-art-host\nChange-Id: I04172d7626b702c1d69c63eba65526378935a25d\n"
    },
    {
      "commit": "ae45cbb288ddcaab3fd518cd00b9e6c1604ec4e1",
      "tree": "34e961fd7fc6a2342920712b0041442b2128f19a",
      "parents": [
        "7b97f75673301b8d59eb4388dc3f2f1adde05c30"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Oct 18 15:49:56 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 19 09:11:20 2018 -0700"
      },
      "message": "Add a get_last_error_message JVMTI extension.\n\nThis adds a com.android.art.misc.get_last_error_message and\ncom.android.art.misc.clear_last_error_message extension functions.\nThese allow one to get some error messages that were previously only\nexposed through logcat. Not all error messages are exposed. Only\nexposes error messages associated with the exact jvmtiEnv used. Errors\nmust be cleared manually. Not all error conditions will update the\nsaved error-message.\n\nBug: 117234143\nTest: ./test.py --host\nChange-Id: I75b6de9029791035f56c0c63d8958edea500715d\n"
    },
    {
      "commit": "6e8977690147b75096c0a993efb53ae329e3fd2c",
      "tree": "dd2e653b893e2d91a9c238a3468f66a3def98743",
      "parents": [
        "0de385f9eb5f8c066121ea2d43e8b8eea6a726fa"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 16 13:09:32 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Oct 17 12:17:28 2018 -0700"
      },
      "message": "ART: Refactor for bugprone-argument-comment\n\nHandles openjdkjvmti.\n\nBug: 116054210\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: Ic73e3f32b08f3b6d9300428ad95d12a696db0458\n"
    },
    {
      "commit": "0aa7a5a6a7bc350b79351f52e26c97747e927acf",
      "tree": "a583889668d9703d16d37586d56421bd27c62661",
      "parents": [
        "e12575640dca5118bf96245f373acda276c22178"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 10 15:58:14 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Oct 11 16:41:54 2018 -0700"
      },
      "message": "Revert^4 \"JVMTI PopFrame support\"\n\nThis reverts commit 202b617acf477e8e8e11915f467120a0bd518e74.\nThis unreverts commit 202b617acf.\nThis unreverts commit 88a2a9d7a1.\n\nThere were several bugs with the implementation of pop-frame related\nto interactions between the jit, exception handling, class-loading,\nand deoptimization.\n\n- We were instrumenting the target thread stack in cases where it was\n  unnecessary which caused the exception handler to incorrectly\n  determine that a method was not deoptimizable. This caused the\n  pop-frame to be ignored.\n\n- We were incorrectly sending ExceptionCatch events if an exception\n  suppressed by pop-frame would have been caught in the current frame.\n\n- We were allowing pop-frame to be used on threads suspended in the\n  ClassLoad or ClassPrepare events despite having surprising semantics\n  in that situation (see b/117615146).\n\nNeeded to modify test 1953 slightly for inclusion in CTS. I needed to\nmake the CTS entrypoint not run the class-load tests (since the cts\nconfiguration means the classes are loaded by the verifier and not the\ninterpreter). I updated the expected.txt and check script to reflect\nthis.\n\nReason for revert: Fixed issue causing Exception events to sometimes\n                   eat PopFrame and other issues.\n\nTest: ./test.py --host\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\n\nBug: 73255278\nBug: 111357976\nBug: 117533193\nBug: 117615146\n\nChange-Id: I655c4fe769938cf41d7589f931d6710cf2001506\n"
    },
    {
      "commit": "202b617acf477e8e8e11915f467120a0bd518e74",
      "tree": "4d1124b540984f970acaf494f4fd85cc347fbd57",
      "parents": [
        "1c7b1fcf0ff29d83d13d38d0451a54474ccf5964"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 10 07:47:58 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 10 07:47:58 2018 +0000"
      },
      "message": "Revert \"Revert^2 \"JVMTI PopFrame support\"\"\n\nThis reverts commit 1c7b1fcf0ff29d83d13d38d0451a54474ccf5964.\n\nBug: 73255278\nBug: 111357976\nbug: 117533193\n\nReason for revert: Test failures\n\nChange-Id: I9da863fd95264007c4efeb85539e704e83499dcf\n"
    },
    {
      "commit": "1c7b1fcf0ff29d83d13d38d0451a54474ccf5964",
      "tree": "b978817acd252f10bd4648d3582ac9459fc9a0f4",
      "parents": [
        "59b950f53152c169464ba8c63d44102eeba1e594"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 23:42:12 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 08 13:18:35 2018 -0700"
      },
      "message": "Revert^2 \"JVMTI PopFrame support\"\n\nThis reverts commit f67d0cbf2743b29aa6e1be7ae2f71762b8762785.\n\nRedefine-stress causes classes to be loaded at slightly different\nplaces due to the deep verification needed to redefine a class. This\nwould cause the parts of tests 1953 and 1954 to fail due to classes\nloading at unexpected times. We changed the test to skip these\ntest-cases when they cannot be correctly executed.\n\nReason for revert: Fixed issue causing tests to fail under\n                   redefine-stress\nTest: ./test.py --host\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\nTest: ./test/testrunner/testrunner.py --host --redefine-stress\nBug: 73255278\nBug: 111357976\nChange-Id: I46fb4aed878bcc9398f2b73ad5040d7c97aec3ef\n"
    },
    {
      "commit": "f67d0cbf2743b29aa6e1be7ae2f71762b8762785",
      "tree": "b0b1b8a1908541791bfeb18c1117482d559ded38",
      "parents": [
        "88a2a9d7a14b67e10525d93b0ee57d9dd6bc345a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 23:39:54 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 23:40:30 2018 +0000"
      },
      "message": "Revert \"JVMTI PopFrame support\"\n\nThis reverts commit 88a2a9d7a14b67e10525d93b0ee57d9dd6bc345a.\n\nReason for revert: Fails class-load/prepare tests with jit-at-first-use.\nBug: 73255278\nBug: 111357976\nTest: None\nChange-Id: Id8dea6dcf124d56e3a8dfa19e6ed39cc70370c34\n"
    },
    {
      "commit": "88a2a9d7a14b67e10525d93b0ee57d9dd6bc345a",
      "tree": "a19af813a97be817a76072534139a77b16f3ad87",
      "parents": [
        "fc7d33fc052d993eaa205337e6a805022d2cd822"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Mar 14 14:44:29 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Oct 04 11:04:49 2018 -0700"
      },
      "message": "JVMTI PopFrame support\n\nImplement support for the JVMTI can_pop_frames capability. This works\nby marking shadow-frames with a bit that forces it to be popped or an\ninstruction to be retried. When a PopFrame is requested the plugin\nwill deoptimize the targeted thread and force the interpreter to deal\nwith the frame pop. If the can_pop_frames capability is enabled the\nruntime will be forced to handle all exceptions through the\ninterpreter. This is required to support PopFrame during some\nexception events.\n\nTest: ./test.py --host\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\nBug: 73255278\nBug: 111357976\nChange-Id: I62d6b1f4ff387c794ba45093c3d6773aaf642067\n"
    },
    {
      "commit": "44b3174732f8fb1fd7efe7a73cb03bbbbf151f18",
      "tree": "ee00d1e253e18fe8ef7c21c4786390d1446e8390",
      "parents": [
        "d6266f3292eab5b043262c6366ed6b8131e152c5"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Oct 01 19:30:57 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Oct 01 19:30:57 2018 -0700"
      },
      "message": "ART: Mark move constructors with noexcept\n\nAs libc++ is pessimized even under -fno-exception, revert our\nprevious opinion on clang-tidy warnings and add noexcept keywords.\n\nBug: 117098004\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: I4ab3ad1976f6feb6da98d36e62490e31dbe6a6b2\n"
    },
    {
      "commit": "fa6a1b0a1d9d186a0ad9bb413a4e49f1ffd187d8",
      "tree": "6d3bef945030868d7e78162dc3f4f35a07ce410a",
      "parents": [
        "a0878aa9f4f4102e56a6381b28a8d7c38dec80b9"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Sep 07 08:11:55 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Sep 07 09:13:50 2018 -0700"
      },
      "message": "ART: Continue adding override annotations\n\nUse Clang-tidy\u0027s modernize-use-override to add more annotations. Ignore\ninferred annotations on destructors.\n\nBug: 32619234\nTest: mmma art\nChange-Id: Ic432c928e398d44df9171e42db04ee19946e6887\n"
    },
    {
      "commit": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\n"
    },
    {
      "commit": "6baa1c928ba2bd9127b370729d96ff4bcaafcea4",
      "tree": "0fa0d509c5b8b72df07ce1b4ce854cfea339e1d4",
      "parents": [
        "ad70b322fe9b2d3601dcdcfab915b651716ee448"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri May 25 16:17:49 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri May 25 16:19:32 2018 -0700"
      },
      "message": "ART: Ensure correct thread state for stack trace collection\n\nAs the closure needs the mutator lock, the calling thread must hold\nthe mutator lock. Ensure that that is the case.\n\nTest: m test-art-host\nTest: art/test/testrunner/testrunner.py -b --host --trace --interpreter 911\nChange-Id: I47d36abba83a0f38b398b9e3ef6f485b5e735622\n"
    },
    {
      "commit": "a3ad0cdd711857f04f477e2cdc5b56a2c74a3018",
      "tree": "7e0e4c7888c2497d86ce96c9574d7c9886721ccf",
      "parents": [
        "abd9e1515bc6be88372c61071971c5432a51553d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 10:06:38 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 09 11:11:09 2018 +0100"
      },
      "message": "ART: Move JNI files to runtime/jni/ .\n\nTest: Rely on TreeHugger.\nChange-Id: I9cae11191ef1567ae9453be498882a7767285140\n"
    },
    {
      "commit": "a5cd4c05a8218b18a650b411b9978a44d7fc2f78",
      "tree": "21f6e76ed109524091f5e51f002a0f0075a152b3",
      "parents": [
        "41a10575b319ca9549d7b3e8a9fe91c1cc602659"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Mar 28 16:07:39 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Mar 28 16:07:39 2018 -0700"
      },
      "message": "Ensure that we don\u0027t suspend during GetOwnedMonitorInfoCommon\n\nWe incorrectly failed to tell the synchronous checkpoint in\nGetOwnedMonitorInfoCommon that the calling thread needs to avoid\nsuspending. Because of this it is possible for the monitors being\ntransfered between threads to miss gc-marking. If the function is\ncalled during a GC this can lead to illegal reads.\n\nBug: 76003243\nTest: while ./test/run-test --host 1922; do; done\nTest: ./test.py --host\nChange-Id: I99be60b0541ee82f241605e6492610a21f5ee4ec\n"
    },
    {
      "commit": "e153e71209cae906d2b79cc9e22ec0f9baf67a35",
      "tree": "645ecf1e9c1b70f34fc783aa4c692bf46a995204",
      "parents": [
        "224219cc4e7c60a5e28ea9a869163f17f65de79c",
        "318afe6c3ac1e734adbd769bbf22b8c7e373e80b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 23 23:39:45 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Mar 23 23:39:45 2018 +0000"
      },
      "message": "Merge \"Remove unneeded ScopedGCCriticalSections from openjdkjvmti.\""
    },
    {
      "commit": "318afe6c3ac1e734adbd769bbf22b8c7e373e80b",
      "tree": "2dada0828636c2dc8e40e0f34b2b3f01e6caa0a5",
      "parents": [
        "ba1e9e73c07bffc046f651414db43aeee9953d15"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Mar 22 16:50:10 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Mar 23 14:19:35 2018 -0700"
      },
      "message": "Remove unneeded ScopedGCCriticalSections from openjdkjvmti.\n\nWe used ScopedGCCriticalSections in many parts of the openjdkjvmti\noften unnecessarily.\n\nWe removed a totally unneeded GCCriticalSection that was acquired when\nmodifying the instrumentation listeners.\n\nWe also removed RequestGCSafeSynchronousCheckpoint and the change to\nuse GcRoots instead.  We added RequestGCSafeSynchronousCheckpoint as a\nway to prevent the GC from running when we are doing some JVMTI\noperations on other threads.  This could interact with running GCs in\nnon-trivial ways, potentially causing deadlocks in some situations.\nThis changes the code to instead use read-barriers and GcRoots to\nensure that we do not read data from the wrong gc space.\n\nIn order for this to work correctly we need to make sure that we are\nonly ever reading the GcRoots from the thread that eventually needs\nthe reference. This required some re-writing of the checkpoint\nclosures since they would often just call AddLocalReference on\nnon-local Thread objects.\n\nChanges to Thread::RequestSynchronousCheckpoint and art::Barrier were\nneeded in order to allow this all to work since we needed to ensure\nthat the requesting thread did not suspend as the checkpoint was being\nrun.\n\nThis is a partial revert of commit 7585b91bfc77b8.\n\nBug: 67838964\nBug: 76003243\n\nTest: use gapid\nTest: ./test.py --host -j50\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\n\nChange-Id: I26d871089829639eccb973cecc315194f7bcf681\n"
    },
    {
      "commit": "19a7d4f1719c693a5f94e010280eb4aeea9d6b42",
      "tree": "1e70c7f316f3fae71958543df5da509e35b1d778",
      "parents": [
        "08a6c3dd9f65a91cfa0df13c055262bb496f3a98"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Mar 23 10:05:49 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Mar 23 10:05:49 2018 -0700"
      },
      "message": "Fix incorrect null checks in 2 JVMTI functions\n\nThe functions GetThreadListStackTraces and GetOwnedMonitorInfo would\nincorrectly fail to check all their arguments for null-pointers. This\ncould cause crashes if called with incorrect arguments.\n\nBug: 76204023\nTest: ./test.py --host -j50\nChange-Id: I0be69a63b9bbb0a6aaf1092fde725332ae3296e8\n"
    },
    {
      "commit": "0225f8e2939a9340cb7dcebfcfe7996a2bd9bce9",
      "tree": "fd32362dff4ecdc8ff8b0d800a1b46fb0d9d0104",
      "parents": [
        "c7e546ff3963a1d51b1f100d308db735bd19f736"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Jan 31 08:52:24 2018 +0000"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Jan 31 01:24:53 2018 -0800"
      },
      "message": "Revert \"Revert \"Make libdexfile build independent of runtime dir\"\"\n\nThis reverts commit 787784f9effb126b5d0d3dc97d544c4a477b5daf.\n\nReason for revert: Bot configuration issue.\n\nChange-Id: I6a10bb4a9571f89c7e4dd095f9157e830a44e2de\nBug: 22322814\nTest: make -j 50 checkbuild\n"
    },
    {
      "commit": "787784f9effb126b5d0d3dc97d544c4a477b5daf",
      "tree": "1ff6d9fd284a4dd2a337165dff20e71137997c9d",
      "parents": [
        "b40b7e73469339a6b667b4a2e2b8690112a74dc9"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 18:48:51 2018 +0000"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 18:48:51 2018 +0000"
      },
      "message": "Revert \"Make libdexfile build independent of runtime dir\"\n\nThis reverts commit b40b7e73469339a6b667b4a2e2b8690112a74dc9.\n\nReason for revert: on device libdexfile.so missing\n\nChange-Id: I9bd61a98bef870400580e8c991cb061d3f57fa72\n"
    },
    {
      "commit": "b40b7e73469339a6b667b4a2e2b8690112a74dc9",
      "tree": "7e8a34d9c7894c4c946f674f19f0a0a512b95184",
      "parents": [
        "9690ad794b324ba54e936608881ac0f62538b97a"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 25 17:11:07 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 01:17:58 2018 -0800"
      },
      "message": "Make libdexfile build independent of runtime dir\n\nRemove libdexfile\u0027s dependency on utils.cc and move utf.cc into\n/dex.  Remove libdexfile\u0027s constituent sources from libart and\nuse libdexfile wherever libart is. Also remove some ART-specific\ninterfaces.  Libdexfile\u0027s tests remain to be converted, plus\nmoving the files to a new directory peer to runtime/.\n\nBug: 22322814\nTest: make -j 50 test-art-host\nChange-Id: Ifaf695216e4a0e43d3aa377984d933f7a2a243c2\n"
    },
    {
      "commit": "9e734c7ab4599d7747a05db0dc73c7b668cb6683",
      "tree": "dce1d1993734a947fb2e6f626eb1b425cb72143b",
      "parents": [
        "b496af808eaf3af5ebac50aef4fbec33323b5016"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 04 17:56:19 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Jan 05 11:07:19 2018 -0800"
      },
      "message": "Create dex subdirectory\n\nMove all the DexFile related source to a common subdirectory dex/ of\nruntime.\n\nBug: 71361973\nTest: make -j 50 test-art-host\nChange-Id: I59e984ed660b93e0776556308be3d653722f5223\n"
    },
    {
      "commit": "1d32a16f93d8bb479523fd237277ecbbff5bf1f4",
      "tree": "399e9c129d6d1bc6ca761026654711ba774879a4",
      "parents": [
        "9ad08a3ea53487066cd39fafa46b98bb70685b14",
        "55256cb60e11d4fac71affb4b9760a2931a3598d"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 22 20:09:22 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 22 20:09:22 2017 +0000"
      },
      "message": "Merge \"Extensions to check JNI.\""
    },
    {
      "commit": "55256cb60e11d4fac71affb4b9760a2931a3598d",
      "tree": "fc1ed6885b013e0aa2bcfd9ef4dd94fec29bd382",
      "parents": [
        "64bae9fb677aa0e2406d13ea9f8ebaa92e16f978"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Dec 21 17:07:11 2017 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Dec 22 10:11:39 2017 -0800"
      },
      "message": "Extensions to check JNI.\n\nEnsure critical lock isn\u0027t held when returning from a down-call.\nLog a warning if the critical lock is held for a significant period of\ntime.\nRefactor JNIEnvExt to be a class rather than a struct.\n\nTest: mma test-art-host\n\nChange-Id: I4d149cb04d3a7308a22b92b196e51e2f1ae17ede\n"
    },
    {
      "commit": "808c7a57bb913b13c22884f57cdacd59bf1fdb3f",
      "tree": "d7f0d7cabaac5a7646c25bae584a82a9aa279cc0",
      "parents": [
        "64bae9fb677aa0e2406d13ea9f8ebaa92e16f978"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 15 11:19:33 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 22 09:41:17 2017 -0800"
      },
      "message": "Make CodeItem fields private\n\nMake code item fields private and use accessors. Added a hand full of\nfriend classes to reduce the size of the change.\n\nChanged default to be nullable and removed CreateNullable.\nCreateNullable was a bad API since it defaulted to the unsafe, may\nadd a CreateNonNullable if it\u0027s important for performance.\n\nMotivation:\nHave a different layout for code items in cdex.\n\nBug: 63756964\nTest: test-art-host-gtest\nTest: test/testrunner/testrunner.py --host\nTest: art/tools/run-jdwp-tests.sh \u0027--mode\u003dhost\u0027 \u0027--variant\u003dX32\u0027 --debug\n\nChange-Id: I42bc7435e20358682075cb6de52713b595f95bf9\n"
    },
    {
      "commit": "d9aff1372e6a2f573b14d124f3d6f5305bdc6080",
      "tree": "2e0eaeb39c909167ecb5190b51f908e3622940cd",
      "parents": [
        "df00a1ed1a0b633a1e66f1f650f53c22ea260e5b"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 31 22:30:05 2017 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 01 18:49:04 2017 +0000"
      },
      "message": "Revert \"Revert \"Prevent races with GC when transferring objects between threads\"\"\n\nThis reverts commit e5179ce0ca8becf34ba6e7b2f3988874fe647c26.\n\nReason for revert: Fixed issues with:\n  Checkpoint flag set without pending checkpoint in parent CL.\n\nBug: 67838964\nTest: ./test.py --host -j50\n\nChange-Id: I7622f9c18866b58ee3cbd9f4fe38a29b2cf84a88\n"
    },
    {
      "commit": "e5179ce0ca8becf34ba6e7b2f3988874fe647c26",
      "tree": "6d1bad18374493e2e85f715a575dea65f1725317",
      "parents": [
        "7585b91bfc77b8e4b821ccfa716fa86e46455275"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 31 22:28:11 2017 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 31 22:28:11 2017 +0000"
      },
      "message": "Revert \"Prevent races with GC when transferring objects between threads\"\n\nThis reverts commit 7585b91bfc77b8e4b821ccfa716fa86e46455275.\n\nReason for revert: Seems to be causing fatal error: \n  Checkpoint flag set without pending checkpoint\n\nChange-Id: I98ea653e629d73e854907115583afed3ed5ac68e\nTest: None.\nBug: 67838964\n"
    },
    {
      "commit": "7585b91bfc77b8e4b821ccfa716fa86e46455275",
      "tree": "b37517925ac9ab701cbae7f446dc8bb624ddd492",
      "parents": [
        "0d2b2ad6cd9ca650d7a3f85a42afaf518cbfa4e0"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 30 15:33:58 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 30 16:16:41 2017 -0700"
      },
      "message": "Prevent races with GC when transferring objects between threads\n\nWe could have races with the GC when JVMTI code transfers a local\nreference from one thread to another. This race would happen if a GC\nwas currently underway causing an unmoved reference to be transferred\nto a thread that has already fixed up all of its references. This\nmeant that the receiving thread would now have a reference belonging\nto the from-space on its stack.\n\nThis could cause memory errors and CHECK failures.\n\nTo fix this we make sure to run all checkpoints where local references\nmight be transferred in a GC-critical-section.\n\nWe also needed to fix a too-strict check in the method verifier where\nwe were incorrectly asserting that suspension be allowable when in\nfact it was not necessary in all cases.\n\nTest: ./test.py --host -j50\nBug: 67838964\n\nChange-Id: Ib9166cc233d3c1b488864c0aff33246a3f99e436\n"
    },
    {
      "commit": "373a9b5c718a45ac484afcf4fe6ce84f4bb562b3",
      "tree": "52a3e78fa8bc94a76674caaae837c728332d05dc",
      "parents": [
        "d0332e01ac26c2fd0a900de000a55ed5768ff936"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Oct 18 09:01:57 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Oct 25 10:13:59 2017 -0700"
      },
      "message": "ART: Depend on libnativehelper headers only\n\nDepend on header-only versions where possible. Move projects\nexcluding libart to libnativehelper_header_only.\n\nBug: 65522645\nTest: mmma art\nChange-Id: I53dd3b2a97e94ee685f72de007ed3858f7f5c6b6\n"
    },
    {
      "commit": "1b2f884ba96eaaa41c661faf323ef21a7b8fffdf",
      "tree": "03efdd315f049417849ce0fb450690caa7880e9f",
      "parents": [
        "a64eaf9023ac0c2f788ecd9ca138b003207b0760",
        "b1e31a8337b9cce2f3160a972123886b355dce27"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Oct 20 00:55:12 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 20 00:55:12 2017 +0000"
      },
      "message": "Merge \"Change RequestSynchronousCheckpoint to release thread_list_lock_\""
    },
    {
      "commit": "b6106d5a9db392f7b9ce78fecd49949dd3e3f5a5",
      "tree": "0a3127da47e46ea7c022113ae51067ba41a185e4",
      "parents": [
        "24276374dcaf95bfc52be2b8193eb4e337de62e4"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 18 15:02:15 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Oct 19 09:23:59 2017 -0700"
      },
      "message": "Use r/w Mutex to control access to jvmtiEnv event information.\n\nWe were previously relying on the mutator_lock_ to provide\nsynchronization when accessing control information for some jvmti\nevents. This was not fully thread safe. To fix this problem we\ninstead use a ReaderWriterMutex to control access to this data.\n\nRefactorings to allow all methods to have appropriate lock annotations\nwill follow in later CL (see bug).\n\nPerformance Impact:\n    Tested performance by running main piece of test 993 10 times.\n    Printing redirected to /dev/null.\n    Total of ~270 breakpoints are executed.\n\n    Before: 2.62 seconds / run\n    After:  2.72 seconds / run\n\nTest: ./test.py --host -j50\nTest: ./art/tools/run-prebuilt-libjdwp-tests.sh --debug\n\nBug: 62821960\nBug: 67958496\nBug: 67962439\n\nChange-Id: Ib2935c2e10bc2113e8430b49a9a7b76144e4235e\n"
    },
    {
      "commit": "b1e31a8337b9cce2f3160a972123886b355dce27",
      "tree": "30413acc04bd03c385b3b6023e332ecc535ff4ee",
      "parents": [
        "8cdfac752808784d29185710095ad104922cd861"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 04 16:57:36 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 18 17:01:37 2017 -0700"
      },
      "message": "Change RequestSynchronousCheckpoint to release thread_list_lock_\n\nThe RequestSynchronousCheckpoint function in some cases needs to\nrelease the thread_list_lock_ as it waits for a checkpoint to be\nexecuted. This means that the thread being checkpointed might be\ndeleted. Previously it was not obvious this was the case since the\nthread_list_lock_ seemed to be held throughout the execution of the\nmethod.\n\nIn order to prevent bugs we make RequestSynchronousCheckpoint\nexplicitly release the thread_list_lock_ when executed, meaning code\nwill be aware that threads might die during its execution.\n\nBug: 67362832\nTest: ./test.py --host -j50\nChange-Id: I1cbdf7660096dc1908b0eeabc1062447307bc888\n"
    },
    {
      "commit": "3dea2121a90cc95c215736ef84d093e396f5525f",
      "tree": "6887dbb76c67c6d5102e125d91e4c648a7d8dae7",
      "parents": [
        "432d91004b79c79deebeee6f6197e43adf6caafd"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 11 15:56:48 2017 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 11 10:07:52 2017 -0700"
      },
      "message": "Revert \"Revert \"Ensure Proxy frames work with JVMTI stack frame functions\"\"\n\nThis reverts commit d108d9eaae26df9e4480cf46d26e8c75f142bd6a.\n\nIt seems we have a bug somewhere in our proxy or stack-visitor code\ncausing StackVisitor::GetThisObject to return an object with a null\nklass_. Added a temporary skip for the test configurations that expose\nthis until it can be fixed.\n\nBug: 66903662\nBug: 67679263\n\nReason for revert: Added skip for test that exposes a pre-existing bug\nin our stack-visitor/proxy-object support.\n\nTest: ./test.py --host -j40\nTest: ./test/testrunner/testrunner.py --host --gcstress -t 1939\n\nChange-Id: I8a457112af404c3f4c94e3a2029b744d453ced5d\n"
    },
    {
      "commit": "d108d9eaae26df9e4480cf46d26e8c75f142bd6a",
      "tree": "9a9566b73bd916befb9ce1c31c2ff309d63ff28e",
      "parents": [
        "a03a9eeb9d1b2ebca17cc326f52c84a5abca6707"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 11 10:29:19 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 11 10:29:19 2017 +0000"
      },
      "message": "Revert \"Ensure Proxy frames work with JVMTI stack frame functions\"\n\nReason for revert: gcstress 1914-get-local-instance failures,\n  object-inl.h:163] Check failed: GetClass\u003ckVerifyNone\u003e() !\u003d nullptr\n\nBug: 66903662\n\nThis reverts commit a03a9eeb9d1b2ebca17cc326f52c84a5abca6707.\n\nChange-Id: I5c68616d61566dd4ade713c4dad5e462b76d9af7\n"
    },
    {
      "commit": "a03a9eeb9d1b2ebca17cc326f52c84a5abca6707",
      "tree": "3a52462cba8002df6c086ee57d6b7e71a400c74a",
      "parents": [
        "baeedfee3521c295916e3ae85afa2cb5dee7d6a5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 10 16:20:10 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 10 16:20:10 2017 -0700"
      },
      "message": "Ensure Proxy frames work with JVMTI stack frame functions\n\nWe were incorrectly returning errors and crashing when stack frame\nJVMTI functions were used with Proxy methods. This fixes those issues\nand adds a test for them.\n\nBug: 66903662\nTest: ./test.py --host -j40\nChange-Id: Ia7c768d631c5ac4d8339d70a9d4761d5b4bc284e\n"
    },
    {
      "commit": "7ddc23d9ea95848724754eae270a0a1ce108edb9",
      "tree": "3d68e2745d0be0cdf95c05d45edc94859f1438ac",
      "parents": [
        "ba461c3c5b588b0b65d3cc99aa12fe46a673962c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Sep 22 15:33:41 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Sep 25 11:35:38 2017 -0700"
      },
      "message": "Consolidate all JVMTI jthread decoding.\n\nWe had multiple places where we would decode jthreads. This meant that\nwe did not always check all required constraints before using it. This\nCL consolidates all jthread decoding into the\nThreadUtil::GetNativeThread function and adds a helper\nThreadUtil::GetAliveNativeThread function to check the most common\nrequirements on jthreads passed to JVMTI.\n\nBug: 66709480\nTest: ./test.py --host -j50\nTest: cd openjdkjvmti \u0026\u0026 git grep -W FromManagedThread\nChange-Id: Ib6f4bc8510012e0332831bea67e1842a49092917\n"
    },
    {
      "commit": "e2abbc604ce003c776c00ecf1293796bb4c4ac5a",
      "tree": "f7d124d1861cad2162c30dfe932bb4e1beaf41ef",
      "parents": [
        "7090dfe84f78b1928fcbdfd664d0dd9ea52633ff"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Sep 15 11:59:26 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 18 11:36:24 2017 -0700"
      },
      "message": "ART: Move kDexNoIndex to dex_file_types.h\n\nDefine the constant with the types to allow lowering the dependency\non DexFile.\n\nTest: m\nChange-Id: I3c61421db45be96d2057e01b1a7825883d8bd178\n"
    },
    {
      "commit": "e814f9d09c0fb1b678e610780d11ce3577db3599",
      "tree": "fd0aeecb079c0e2383d73907410c831f3e172779",
      "parents": [
        "02cb397857c979dffae95e2db2678a72ec407cf0"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jul 31 16:14:39 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Aug 29 14:52:11 2017 -0700"
      },
      "message": "JVMTI NotifyFramePop support\n\nAdds support for the JVMTI can_generate_frame_pop_events capability.\nThis includes the NotifyFramePop function and the FramePop event.\n\nWe mark the interpreter shadowframes directly to get the events. This\nrelies on the fact that we never replace extant shadow-frames on the\ninterpreter stack to ensure that we can distinguish which jvmti-envs\nrequested the frame pops.\n\nTest: ./test.py --host -j50\nBug: 34414072\nBug: 62821960\nBug: 65129403\n\nChange-Id: I6e79e39f62fdf79268540c5c1be6311df704cff7\n"
    },
    {
      "commit": "88e1ddd4078c0aa1305e1f50d7bf330062f4defe",
      "tree": "aa779320c587f83d5b86e3f24e572bf9aa76d493",
      "parents": [
        "db65a35f703132ee02790d6fa04bcf9513d7da79"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Aug 21 13:09:55 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Aug 24 16:31:00 2017 -0700"
      },
      "message": "Enable JVMTI GetOwnedMonitorInfo and GetOwnedMonitorStackDepthInfo\n\nThis enables the can_get_owned_monitor_info and\ncan_get_owned_monitor_stack_depth_info JVMTI capabilities and\nimplements all associated behaviors and functions.\n\nTest: ./test.py --host -j50\nBug: 34415266\nBug: 62821960\n\nChange-Id: Ia88d042259d5b15a4718f0b7698df7e7add87f1d\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\""
    }
  ]
}
