)]}'
{
  "log": [
    {
      "commit": "00fbe4fc833f680e78f692bd7fc4d41ef35f437c",
      "tree": "267cfd885e884602a4b62eb6cbe727042751cbad",
      "parents": [
        "e28c18beef88a19d3050a5c718da291343c45698"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 02 16:52:38 2019 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 10 15:34:56 2019 -0800"
      },
      "message": "Add region padding for app images\n\nFor app images, partition the image such that no object spans cross\nregion boundaries.\n\nBug: 116059983\nBug: 116874661\nTest: test-art-host\n\nChange-Id: Iedffe9fac4b9b59f81de7dd607030ad3a8bcb602\n"
    },
    {
      "commit": "fc81d802243c7fd24b5aa63841217727594dacab",
      "tree": "7cb975ef4f99aa8a548c21c2101f34e22c8a5777",
      "parents": [
        "e352152209d7fdab4eae46cb9ad4c61c82e04598"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Dec 07 13:39:05 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Dec 07 15:43:20 2018 -0800"
      },
      "message": "Adjust instrumentation CHECK to be correct WRT obsolete methods\n\nSome instrumentation sanity-check code didn\u0027t take into account\nobsolete methods and so could sometimes spuriously fail if the right\nsequence of redefines and deoptimizations occur.\n\nThis can occur if one tries debugging a test using inline-mockito, for\nexample.\n\nTest: atest -wbit RecentsAnimationTest and attach debugger with\n      breakpoint in test\nTest: ./test.py --host\n\nBug: 120630577\n\nChange-Id: Iaeb79aebb084990b397e59f56a186e0feaffd654\n"
    },
    {
      "commit": "12dd9aee74a588bf31f151cebba930849b4baceb",
      "tree": "9d04404a17b4f3e5e9e2b1150fc575a74ecd37c2",
      "parents": [
        "5725e7c4aab576384649de60557dc1f52eb21b9f"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Nov 06 13:32:06 2018 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Nov 06 14:31:16 2018 +0000"
      },
      "message": "Use unified libvixl(d) instead of per-supported-arch libvixl(d)-arm(64).\n\nUsing a unified libvixl(s) saves space by sharing code that was common\nto libvixl(d)-arm and libvixl(d)-arm64 and also addresses multiple\ndefinitions issues that would cause ODR violations.\n\nTest: 32-bit-only device boot test\nTest: 32/64-bit device boot test\nChange-Id: I1d67c43897e08bc0f5743eb038fe574ce2fb54f3\n"
    },
    {
      "commit": "65ed42a3d3a7bf1a42e759ed53c16b179f54813a",
      "tree": "77930ed648604f50fe6a46059f4cc659b443ddb7",
      "parents": [
        "8a94003e66f337fe84870ff68d3f6f234555cf06"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 30 12:33:04 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 30 12:33:04 2018 +0000"
      },
      "message": "Revert \"Link compression libs statically into libartbase and use those everywhere.\"\n\nThis reverts commit 8a94003e66f337fe84870ff68d3f6f234555cf06.\n\nReason for revert: Breaks asan and dex2oats.\n\nChange-Id: Idea760bbd2b25078ecd1ee5a39da94f6b74432a7\nbug: 118374951\n"
    },
    {
      "commit": "8a94003e66f337fe84870ff68d3f6f234555cf06",
      "tree": "0271729b2571c969238786d21a45ce05120b96e0",
      "parents": [
        "ce2a00daa92670a4fc01ef59fdbc3769a846f69c"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Wed Oct 24 15:02:55 2018 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Mon Oct 29 21:20:43 2018 +0000"
      },
      "message": "Link compression libs statically into libartbase and use those everywhere.\n\nAll targets using these compression libs already use libartbase. This grows\nlibartbase VM size by 314K on 64 bit, but only these targets pack on the\nextra the bloat of liblz4 (84K) and liblzma (174K): dexanalyze, dexdump2,\ndexlayout(d), dexlist. libbacktrace and libunwindstack gain liblz4 only.\n\nOn the other hand this gets rid of static instances in several shared libs.\n\nTest: mmma art\nTest: art/test.py --host --64 --optimizing\nTest: env ART_TEST_NO_SYNC\u003dtrue make -j4 test-art-target-gtest\nTest: art/test/testrunner/testrunner.py -j4 --target --64 --optimizing\nBug: 118374951\nChange-Id: Ida103546d2d16ef892d09e9ca3a0ae5e3b42a541\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": "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": "068a9bec8d637ce907f6c2829b772a99cae60611",
      "tree": "f099925c0269895935c9eea9a0caca8e8f801dce",
      "parents": [
        "bc550bbbf2fcd82b5b888683a4e3708a26d0efe6",
        "f67d0cbf2743b29aa6e1be7ae2f71762b8762785"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 23:41:16 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 05 23:41:16 2018 +0000"
      },
      "message": "Merge \"Revert \"JVMTI PopFrame support\"\""
    },
    {
      "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": "dd0f77c4006544a58a82cb90088ee3d8dedb86e1",
      "tree": "9203806e4016928577872e5c1401b876a5d519d7",
      "parents": [
        "c6adcbdb278aa2e235c39e69e7b5421ad560d9f4",
        "88a2a9d7a14b67e10525d93b0ee57d9dd6bc345a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 17:58:45 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 05 17:58:45 2018 +0000"
      },
      "message": "Merge \"JVMTI PopFrame support\""
    },
    {
      "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": "a497a39fe8830fe7b1c1c23b413753fe4e12923b",
      "tree": "c1f02f404feefb94fa105a563f0e6c1146ab22b8",
      "parents": [
        "d6266f3292eab5b043262c6366ed6b8131e152c5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Sep 26 10:52:50 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 02 08:54:11 2018 +0100"
      },
      "message": "Remove patchoat.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: Pixel 2 XL boots.\nBug: 77856493\nChange-Id: I6686ce9d23e02aa8b8ef4081b302dbd860d07718\n"
    },
    {
      "commit": "819824bbafc5bfea0d3896e1d3e1d4ed2188d09e",
      "tree": "975df03373d8b36d90ae90371423d180f8380863",
      "parents": [
        "b7ac4a077a99d3f2a41bef0a5c6cc74343458dcf"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Sep 22 11:39:38 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Sep 22 11:39:38 2018 +0000"
      },
      "message": "Revert \"Test for jit deadlock\"\n\nThis reverts commit b7ac4a077a99d3f2a41bef0a5c6cc74343458dcf.\n\nBug: 112074977\nBug: 70838465\n\nReason for revert: Test segfaults here:\nhttps://build.chromium.org/p/client.art/builders/bullhead-armv7-gcstress-ndebug/builds/1719/steps/test%20optimizing/logs/stdio\n\nChange-Id: I9e105b630b1509689d27a154cc356fbe11018fce\n"
    },
    {
      "commit": "b7ac4a077a99d3f2a41bef0a5c6cc74343458dcf",
      "tree": "2f715b3defc49a180e0374bbe1f61c37b3eda2d0",
      "parents": [
        "f035463650ada4a2bc07a38ca23dd96758e3db92"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Aug 28 15:53:22 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 20 10:17:11 2018 -0700"
      },
      "message": "Test for jit deadlock\n\nThis should deadlock if one can get the JIT to load a class. The code\nin the test seems to usually cause this to happen.\n\nTest: ./test/testrunner/testrunner.py --host -t 1952\nBug: 112074977\nBug: 70838465\nChange-Id: I6d31a98e300879bee361036a46effcf7db312368\n"
    },
    {
      "commit": "ec5ed06b59a3b85e7f98ffc50e0539e5a77d1ba1",
      "tree": "c09b7debef2c19d2ea79488d9d3357b49020da26",
      "parents": [
        "9c568f10f68cdbeb285e41cb4538c06f5e90c1b2"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jan 26 16:20:02 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 06 14:00:25 2018 -0700"
      },
      "message": "ART: Refactor static include list\n\nCreate default objects. This allows chaining the sets, and also\ncan separate between host and target.\n\nTest: mmma art\nChange-Id: I68a80068d442b20c6430e9e576df7f74375e7e49\n"
    },
    {
      "commit": "e85595e8edf1dade430f53e6149cffd41d74f629",
      "tree": "df6d474f41b38d1deddceb63bb6c6a5a84611cf5",
      "parents": [
        "134380d7c70d95962ed818458185e608ad17ff08"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Aug 17 15:54:34 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Aug 17 15:54:34 2018 -0700"
      },
      "message": "Add explicit native method test to 988\n\nRealized this test doesn\u0027t include any explicit check that native\nmethods are traced correctly and this will be useful to have for\nfuture work.\n\nTest: ./test.py --host -j50\nChange-Id: I208458b6fe7d69e4d78e6757aa5ef2b437665edb\n"
    },
    {
      "commit": "c98f83e301451cb7a62aab21a7dfcddc8eb17c42",
      "tree": "18d0477a315cf35352e4c44b3a66ce5d185a5fc4",
      "parents": [
        "f5dcd31d89282b6c9324fdc960e6e7e2281c16f1"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jul 26 08:28:36 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jul 26 11:33:25 2018 -0700"
      },
      "message": "Add raw_monitor_enter_no_suspend extension\n\nIn some circumstances it is useful to be able to lock a jvmti-monitor\nwithout having to worry about the suspension state of the current\nthread. This adds an extension\ncom.android.art.concurrent.raw_monitor_enter_no_suspend that allows\none to do that. This function will gain the monitor lock and return\neven if the current thread is suspended. The normal RawMonitorLock\nwill not return unless the thread is not in a suspended state.\n\nTest: ./test.py --host\nBug: 76205593\n\nChange-Id: I9d9fcd586d1d2555f4adc8ac85597daa3dfcb0c4\n"
    },
    {
      "commit": "ce75049c31e7064b00104ca7f65fe12faeabc391",
      "tree": "6f7bb5977a99db0d89c74238576956f0aa1d4dad",
      "parents": [
        "0495fb053094181de232e3fa390806a9110ba208"
      ],
      "author": {
        "name": "Alexey Grebenkin",
        "email": "a.grebenkin@samsung.com",
        "time": "Thu May 31 23:42:20 2018 +0300"
      },
      "committer": {
        "name": "Alexey Grebenkin",
        "email": "a.grebenkin@samsung.com",
        "time": "Fri Jul 13 17:07:25 2018 +0300"
      },
      "message": "Revert \"Revert \"Handle a special case of lock aliasing during lock verification\"\"\n\nThis reverts commit 753a055b5398fcf00d2633565452679c8fb93e9d.\n\nReason for revert: Fixed failing tests\n\nTest: m test-art-host\n\nChange-Id: I4a8be656288199108c05c9d302393e1efa41a7a4\n"
    },
    {
      "commit": "225ed1dd42d008bdb189da92e185906d08b2ff2f",
      "tree": "c3fb25ce505581e5c6cc2bb78dbbdba826db9cfd",
      "parents": [
        "e83d3416e09e6454af38c250a4fda81537d8da9f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 12 10:33:02 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 12 10:33:02 2018 -0700"
      },
      "message": "Everyone -- even \"NDK\" users -- gets C++14 by default now.\n\nBug: http://b/32019064\nTest: builds\nChange-Id: I87b169661620c4fd788eea7670060f5e3020e453\n"
    },
    {
      "commit": "fbee398d00ab994eb1d7609d7f4e1d0c698d4aa6",
      "tree": "c07e1071e6d30efa77bc9c72f4cade6813c3a691",
      "parents": [
        "e46752658eaf41c0cc818c51a3e1cd95876bac93"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu May 24 10:28:46 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu May 24 11:47:04 2018 -0700"
      },
      "message": "Remove hard-coded Object class from test 980\n\nWe redefined Object to a hard-coded dex-file in test 980. This led to\nproblems whenever anything tried to change the Object class. This\nchange makes us use slicer to modify the Object class instead.\n\nTest: ./test.py --host\nChange-Id: Ic888281f57f5796ec4a284ce79fa322669266899\n"
    },
    {
      "commit": "1f010164bea4714e9f653c52e8948c5d5305040b",
      "tree": "e69b2c3f4d2645d4097655f8914325945fe5dbbd",
      "parents": [
        "a7d37cf735f05cfc3a3585a5c44eb65d8a279874"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue May 15 08:59:32 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed May 16 13:01:34 2018 -0700"
      },
      "message": "Move ArtDexFileLoader to libdexfile\n\nAdds a dependency from libdexfile on libartbase, but allows the use of\nMemMap loaders, etc.\n\nBug: 78652467\nTest: make -j 40 checkbuild\nChange-Id: I15cf33893ca9192050762f8350a3cc1e39f88dc5\n"
    },
    {
      "commit": "8865914de5d83bb4d8165d26c01202bc2c500763",
      "tree": "0f7a700a251fdb950926b059cdf041744a052ab6",
      "parents": [
        "04d81ff75ae339c082b1ecbea38ba34f873059cb"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue May 15 10:53:06 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue May 15 11:27:23 2018 -0700"
      },
      "message": "Make static libtistress version\n\nIt turned out to be difficult to actually run the libtistress on\nactual apps due to the fact it linked shared to a lot of libraries.\nThis adds libtistresss and libtistressds targets which build static\nversions of libtistress both without and with debug checks.\n\nThis also adds a simple Agent_OnAttach entrypoint for the agent. No\nspecial processing is performed. The agent is setup as though it were\nrunning OnLoad.\n\nTest: m -j50 libtistressds\n      adb push $OUT/data/nativetest64/art/arm64/libtistressds.so /data/local/tmp\n      adb shell setenforce 0\n      adb shell am start-activity \\\n        --attach-agent /data/local/tmp/libtistressds.so\u003djvmti-stress,trace \\\n        com.antonioleiva.bandhookkotlin/.ui.screens.main.MainActivity\n\nChange-Id: I75d3a81011864c62cde785fd7351c59dbd269237\n"
    },
    {
      "commit": "adc9086aac1f9442f5ec80cec5734909f0b0f262",
      "tree": "b55804542510f8592c1c5b9e522a16d35567b2f1",
      "parents": [
        "54c42cea2b73e664c36fc4efaa28a33aea39b97c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 11 13:03:06 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 11 13:05:40 2018 -0700"
      },
      "message": "Revert \"Revert \"Do not load app image for class collisions\"\"\n\nFixed bug in oat file assistant to allow the special shared library\nmarker.\n\nBug: 77342775\nBug: 79200502\nBug: 79575750\nTest: test-art-host\n\nThis reverts commit 2c7e13b120926d3c3c18d649cd9849ea31b81477.\n\nChange-Id: I647f55a07e4aef8bef56fb1ad7ff23056174b135\n"
    },
    {
      "commit": "2c7e13b120926d3c3c18d649cd9849ea31b81477",
      "tree": "74766773ba254c40b44b53012156061ff2527c88",
      "parents": [
        "b12c46f8382ca939f55abc0c20fb48fb17b2c1be"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 11 19:40:17 2018 +0000"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 11 19:43:32 2018 +0000"
      },
      "message": "Revert \"Do not load app image for class collisions\"\n\nThis reverts commit d8860b42e47d48fcc47db9d0daf5a1b9432180a1.\n\nBug: 77342775\nBug: 79200502\nBug: 79575750\n\nReason for revert: Some regressions in boot time.\nTest: test-art-host\n\nChange-Id: Id5e5844b5156d048a54011708378c7cdb0650f68\n"
    },
    {
      "commit": "d8860b42e47d48fcc47db9d0daf5a1b9432180a1",
      "tree": "c5522fa9c6d1e9e63cb497da7dc84b72b6b11531",
      "parents": [
        "48af3b39cd7c8abaa7f9671191ec8260630239b2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 02 14:58:12 2018 +0100"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 10 16:17:30 2018 -0700"
      },
      "message": "Do not load app image for class collisions\n\nEven for special shared libraries that are compiled with\n\u0027--class-loader-context\u003d\u0026\u0027, we must reject the app image\nif there are duplicate classes.\n\nIn the case where \"\u0026\" is not specified, avoid the collision check.\nThis is safe since the class loader context check was actually run.\n\nTest: 172-app-image-twice\nBug: 77342775\nBug: 79200502\n\nChange-Id: Idc2d59166680948d4d34d0f224491f77ecad2974\n"
    },
    {
      "commit": "d5f8de8bc61160bb2cecdcc0f5aa54d151b6176a",
      "tree": "efecd6d3dffd3a1d768b87a111d9e60335d9108c",
      "parents": [
        "9417b6b81393253a56b1b9bb4c7d8a2a2966707e"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Apr 27 14:12:03 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue May 01 16:23:42 2018 -0700"
      },
      "message": "Add CommonArtTest\n\nAdd a test framework that does not start up a Runtime object.\n\nBug: 78651010\nTest: make -j 40 test-art-host\nChange-Id: I6c8af384af5fe1289c6cf137635e94934ac3795d\n"
    },
    {
      "commit": "82d046e7c9daad9b706cbec7df7025c5a4ef9163",
      "tree": "92b7deea052015dd64bea6fc72d76c67f69e0e5d",
      "parents": [
        "5a87e19e4bf1b6719c2aad3effde1b38d2c3085c"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Apr 23 08:14:19 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Apr 26 12:37:04 2018 -0700"
      },
      "message": "Add a profiling library\n\nMove profile_compilation_info to a separate library.  Another step\ntowards building many of our tools without libart[d].\n\nBug: 78459333\nTest: make -j 50 checkbuild\nChange-Id: Ib281d3d1fde6d06ebb429c5d39d62a7038af0f44\n"
    },
    {
      "commit": "f889c70e79643373320f5742cc719d6c467531b9",
      "tree": "ada543c87521fbfd98bbbe0004ca9e89c36a9489",
      "parents": [
        "740a50992ea1a200068eb4486a172a151c9b329c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Feb 23 15:25:45 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Apr 19 10:30:50 2018 -0700"
      },
      "message": "Always allow agent attach on userdebug builds with kArtTiVersion\n\nWe added support for the jvmti-alike ArtTi for use by debuggers on\nuserdebug/eng builds of android. Extend this support to allow any\nagent to be loaded on any process of a userdebug device. These agents\nwill need to make use of kArtTiVersion (0x70010200) envs.\n\nTest: build\nTest: ./test.py --host -j50\nTest: ensure AS profiler continues to work with userdebug devices\nBug: 78195998\nChange-Id: I984d1ea937eb49afb376a48bea3d67085192020e\n"
    },
    {
      "commit": "9e7859cb2449d6150b97c7d8ff9646a5405737f8",
      "tree": "9de6fe78c6229d487a0756b11c7a772ec7ce6eb1",
      "parents": [
        "d1ede32d56d2b6c95f94a8c67d8b9f309940d9de"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Apr 05 13:49:43 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Apr 10 23:12:07 2018 +0000"
      },
      "message": "Prevent deadlock calling transformation functions in ClassLoad callback.\n\nIf an agent called RetransformClasses or RedefineClasses from the\nClassLoad event callback and the class that caused the event is\nincluded the thread would deadlock. This happened because the\nverification code would try to wait for the class to be linked but\nsince the current thread is responsible for doing that this will never\nhappen. To prevent this from happening we make those functions simply\nreturn JVMTI_ERROR_INTERNAL if they are called on the same thread the\nclass is being loaded on.\n\nIn order to test this we needed to modify the test helper code to keep\ntrack of the current jvmtiEventCallbacks state.\n\nBug: 77652488\nTest: ./test.py --host -j50\n\nChange-Id: I0a196b999a08ec3bf9cdf98357e223f89fdcd666\n"
    },
    {
      "commit": "be4c2bd892bd167a50b4dfa7133e70a809197698",
      "tree": "150898533382fb98c160e265a5f31f66ded754f0",
      "parents": [
        "bfce631960ae2ab381180beb55cf34ab3b445aaa"
      ],
      "author": {
        "name": "Alexey Grebenkin",
        "email": "a.grebenkin@samsung.com",
        "time": "Thu Feb 01 19:09:59 2018 +0300"
      },
      "committer": {
        "name": "Artem Udovichenko",
        "email": "artem.u@samsung.com",
        "time": "Tue Mar 13 17:01:21 2018 +0300"
      },
      "message": "Fix dangling SingleImplementations left after class unloading\n\nTest: make test-art-host, manual using sample code\n\nbug: 73143991\n\nChange-Id: I4d56b39c69d4ed60266a8b90b9e9d18fba7b8227\n"
    },
    {
      "commit": "1613cd18a3c47bc863f76ee27768d4c88e62286b",
      "tree": "4eaabfa51a49e38038f12ebc5ac5258a40bfb951",
      "parents": [
        "1c128fa54eee5405be816402ac7fb0b299e9106d",
        "e34fe44a04a28d5688e0ae5effee9922c26c5916"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Feb 22 06:13:24 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 22 06:13:24 2018 +0000"
      },
      "message": "Merge \"Ensure redefinition does not break breakpoint deoptimization\""
    },
    {
      "commit": "e34fe44a04a28d5688e0ae5effee9922c26c5916",
      "tree": "289970e1ed4e6d8d6cc7d88558b7012316327222",
      "parents": [
        "535d381b8b14faa8711a003ce3de3f70ac7ac08e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Feb 21 17:35:55 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Feb 22 02:08:22 2018 +0000"
      },
      "message": "Ensure redefinition does not break breakpoint deoptimization\n\nWe had a bug where redefining a method with breakpoints made it\nimpossible to deoptimize the (newly redefined) method. This meant that\nbreakpoints added after the redefinition might not work. We fixed this\nby removing the breakpoints earlier in the redefinition process,\nwhen we were still capable of removing the deoptimization.\n\nBug: 73742185\nTest: ./test.py --host -j50\nChange-Id: I86973fbdce370a3ae7bc78b5fc71470d99046044\n"
    },
    {
      "commit": "fee188b96a0b882f6acdd70f01db1726cc54b2e1",
      "tree": "ba7c5b2daafada250d1ac063ffcee429b9758375",
      "parents": [
        "f13343eb8b2738e2812fd7bd9d5592f529e93c21",
        "cb5125d8a3a50e738e29163cf0debcb61219f70b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Feb 21 23:15:43 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 21 23:15:43 2018 +0000"
      },
      "message": "Merge \"ART: Compile libctstiagent with the NDK\""
    },
    {
      "commit": "f13343eb8b2738e2812fd7bd9d5592f529e93c21",
      "tree": "a5fcc3a5e22b917cc18dde99a0411bcd5d9f1aec",
      "parents": [
        "ea81a71bdad720ba494461d4e8f6d21e6a0ac4f4",
        "c758875461cca47d1b342c3c56a218a704b04365"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Feb 21 21:01:44 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 21 21:01:44 2018 +0000"
      },
      "message": "Merge \"Add get_class_loader_class_descriptors JVMTI extension method\""
    },
    {
      "commit": "c758875461cca47d1b342c3c56a218a704b04365",
      "tree": "59827b439d9b0008a80bf9cb3193b94633c3bb91",
      "parents": [
        "535d381b8b14faa8711a003ce3de3f70ac7ac08e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Feb 20 11:15:54 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Feb 21 08:39:53 2018 -0800"
      },
      "message": "Add get_class_loader_class_descriptors JVMTI extension method\n\nThis adds a new JVMTI extension:\ncom.android.art.class.get_class_loader_class_descriptors. This will\nenumerate all of the classes known to be loadable with a given\nclass-loader as the defining class loader. The function gets this by\nlooking at all dex-files associated with the given class-loader.\n\nBug: 73504235\nTest: ./test.py --host -j50\nChange-Id: Ie54223cd40109056396ba609f92b6c02d81dd4ab\n"
    },
    {
      "commit": "cb5125d8a3a50e738e29163cf0debcb61219f70b",
      "tree": "bb5a82c0238a975948614818cec25538fe8233df",
      "parents": [
        "9462a56f881bce9b4890e178e4558ffa9957b294"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 20 09:36:54 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 20 09:36:54 2018 -0800"
      },
      "message": "ART: Compile libctstiagent with the NDK\n\nTo properly make it available to CTS, compile libctstiagent with the NDK.\n\nBug: 73206894\nTest: mmma art\nChange-Id: I1bda81ece3665ed16acd95e2400c23fbc56fe9e9\n"
    },
    {
      "commit": "9462a56f881bce9b4890e178e4558ffa9957b294",
      "tree": "40c84aa4fbd0c037afa999fbef783ac9e0dccd83",
      "parents": [
        "38321bb87c3630afaef76f312e90df5bca6a0554"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 20 09:35:21 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 20 09:35:21 2018 -0800"
      },
      "message": "ART: Fix up libartagent deps\n\nCorrectly depend on libdexfile vs libdexfiled.\n\nBug: 22322814\nTest: mmma art\nChange-Id: I645525a9e86e74c01195fc196ad712d86bb5c8c6\n"
    },
    {
      "commit": "11088ad5d79fe9ac7875b625fcea01ddf42db3bf",
      "tree": "fac57f2119c3fc6a97b5a7a7779946bc0062a406",
      "parents": [
        "87df7addc6194ec5f2e0e1b85c59d96bafd94efd",
        "ad0777d89df7eb21d7d2001f9743882d10de3f5c"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Feb 20 13:50:18 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 20 13:50:18 2018 +0000"
      },
      "message": "Merge \"Visit proxy methods reference arguments when visiting Quick frames roots.\""
    },
    {
      "commit": "0694a5527862fc76056458622759976fa41d4da6",
      "tree": "0c6ac24a3ffed9060c9ef7149734606510c4742d",
      "parents": [
        "d937c49b19a6005cf94e23d464415be47e995d9b",
        "59484b9fbbfd79cf485fbcdddffe35c706c5f70d"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Feb 16 17:58:39 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 16 17:58:39 2018 +0000"
      },
      "message": "Merge \"ART: Refactor run-test 983 dex verification\""
    },
    {
      "commit": "59484b9fbbfd79cf485fbcdddffe35c706c5f70d",
      "tree": "fea1d7098390938be408eaf77f1ec0e8acd9b8c8",
      "parents": [
        "7fe39afe80098d147e34149dac1d6304e858fe44"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Feb 14 14:00:46 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Feb 15 22:45:22 2018 -0800"
      },
      "message": "ART: Refactor run-test 983 dex verification\n\nSplit the source for use in run-tests (using libdexfile) and\nCTS (using slicer). In preparation for compilation with the\nNDK.\n\nTest: m test-art-host\nTest: m cts\nChange-Id: Ie514445d90c77391ec685b53726f1f9dd50f1991\n"
    },
    {
      "commit": "3e55ea3118c97f0ffecc24939a193a9d40dc315d",
      "tree": "cbb4230d449d0837e6a62e32b24fb3a93ad4d2ea",
      "parents": [
        "7fe39afe80098d147e34149dac1d6304e858fe44",
        "fcbe15ce26930c0c4bb33998fc2abbe4f8770dbe"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Feb 16 01:28:31 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 16 01:28:31 2018 +0000"
      },
      "message": "Merge \"Build debug library libdexfiled\""
    },
    {
      "commit": "fcbe15ce26930c0c4bb33998fc2abbe4f8770dbe",
      "tree": "6513a2eaf1251e93578916b5171dc42984de7da3",
      "parents": [
        "b40fa7c33075292beeb6840ac679ffd08fd1f719"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Feb 15 09:41:13 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Feb 15 15:15:13 2018 -0800"
      },
      "message": "Build debug library libdexfiled\n\nAdd a debug version of libdexfile for use when CHECKs, etc., are\nenabled.\n\nBug: 22322814\nTest: make -j 50 checkbuild\nChange-Id: I263138611bcdde9dbc8f619bcb2a0a6d3a09fbf6\n"
    },
    {
      "commit": "ad0777d89df7eb21d7d2001f9743882d10de3f5c",
      "tree": "15bf8fbfd1a3534972195d4ada9d92f1d0c98903",
      "parents": [
        "db8d9091bbab41060584ab80882b60df20337da7"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Feb 12 20:00:18 2018 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Feb 15 18:51:24 2018 +0000"
      },
      "message": "Visit proxy methods reference arguments when visiting Quick frames roots.\n\nThe arguments of a proxy method, stored in the proxy method\u0027s stack\nframe, need to be visited as GC roots. This is especially important\nin the case of a moving GC, where these reference arguments may be\nmoved like any object. Previously, we would only visit the target\n(`this` argument) of proxy methods when visiting Quick frames roots.\n\nTest: art/test/testrunner/testrunner.py --gcstress -t 999-proxy-method-arguments\nTest: m test-art-host\nTest: m test-art-target\nBug: 73149739\nBug: 70216372\nBug: 67679263\nChange-Id: Ieacc966ab1038935600f2193c14e6ca01e88602e\n"
    },
    {
      "commit": "8fd08569ac9c93c17742569965bf72f713998145",
      "tree": "7e999ee63e12454d044e7b7fc616849b092c7806",
      "parents": [
        "d1652d14fbf477b3091eec3764b9890f2c072055"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Feb 13 10:09:03 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Feb 15 10:12:09 2018 -0800"
      },
      "message": "Refactor test 983 to prepare for inclusion in CTS\n\nIn order for test 983 to be included in CTS we needed to make changes\nto remove its custom Agent_OnLoad and ensure that all printing is done\nthrough System.out.\n\nTest: ./test.py --host -j50\nBug: 73252141\nChange-Id: If18e58305a1a4dd7d915fabfbacbe95c8212e801\n"
    },
    {
      "commit": "db8d9091bbab41060584ab80882b60df20337da7",
      "tree": "3585c3670a82f2c810298a0dcab578ec7a07584e",
      "parents": [
        "7c16fea9ba2cf27c67613811b0953c13ff748d1d",
        "d0ed0d9cfc6b84ed3035c6f040572e0547c38ef8"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Feb 13 16:58:18 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 13 16:58:18 2018 +0000"
      },
      "message": "Merge \"ART: Refactor libctstiagent build\""
    },
    {
      "commit": "d0ed0d9cfc6b84ed3035c6f040572e0547c38ef8",
      "tree": "449b817be70ac536f3d8fbb152f2c47494230828",
      "parents": [
        "9ffad492d84c845f8fca622a75b61891c9d8eb97"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Feb 12 15:03:36 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Feb 12 18:27:35 2018 -0800"
      },
      "message": "ART: Refactor libctstiagent build\n\nRefactor the build to include platform dependencies statically\nand wholesale, so the file does not depend on libraries on\ndevice.\n\nBug: 73206894\nTest: m test-art-host\nChange-Id: Iae5b3eaa3d192540ce858ca8e8aedcfe4d7266d5\n"
    },
    {
      "commit": "0e84118e875038ee5e90571489abcde86da3db81",
      "tree": "dbfa7f12c0747f7bcd36aa3393912bae85461a11",
      "parents": [
        "722d6719954fe8cedb41cc300e463c3ac973f2c4"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Feb 12 17:42:50 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Feb 12 10:01:59 2018 -0800"
      },
      "message": "Revert^6 \"Prevent UAF issues caused by static destructors\"\n\nThis reverts commit 4798222e3b3c22435d0a8d915d272fe67c80bd01.\n\nReason for revert: Fixed issue in underlying change.\n\nBug: 69591477\nTest: ./test.py --host -j50\nChange-Id: I31f0ba00ade607f388e248f287801ff878c7296f\n"
    },
    {
      "commit": "4798222e3b3c22435d0a8d915d272fe67c80bd01",
      "tree": "94392ba66bcfa8efac830f00d91ef687af5e956a",
      "parents": [
        "ed0180ce356a2ecb395422c84c392728289d93ba"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 12 12:54:15 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 12 12:55:58 2018 +0000"
      },
      "message": "Revert \"Revert^4 \"Prevent UAF issues caused by static destructors\"\"\n\nrun-test changes cause issues.\n\nBug: 69591477\n\nThis reverts commit e9dc52492979364748e0c39682c0b2e9728ee50c.\n\nChange-Id: I1ee05747cdc9292c6e1ce9f3ed8fc31a3d3fd6b8\n"
    },
    {
      "commit": "e9dc52492979364748e0c39682c0b2e9728ee50c",
      "tree": "9dcc109e565626bfc4d3eac0bf8ea97af060fa87",
      "parents": [
        "1fbd5309858e5f70b5adaa1d70b9e438eaf18d33"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Feb 09 14:08:08 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Feb 09 23:37:45 2018 +0000"
      },
      "message": "Revert^4 \"Prevent UAF issues caused by static destructors\"\n\nThe test 1944 was not very robust and could spuriously fail for\nseveral reasons. Most notably it did not actually check that the exit\nvalue was what we expected and it could cause linker warning messages\nto be printed. The first we solved by checking for the exit value\ndirectly. The second cannot be simply solved so we simply filter these\nmessages out.\n\nThis reverts commit 70f4415d0485f67922323557f2657b009f20696d.\n\nReason for revert: Made test more robust.\n\nTest: ./test.py --host -j50\nBug: 69591477\nChange-Id: I8580973e16d63583e0cb80825892b4604c2591b6\n"
    },
    {
      "commit": "70f4415d0485f67922323557f2657b009f20696d",
      "tree": "ef3fa215aef9a1d5a98cae8e5bb3e55e9477d75e",
      "parents": [
        "6280f87f24c420676bff3fcd3a9698246df366b9"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Feb 08 09:28:21 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Feb 08 09:28:21 2018 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Prevent UAF issues caused by static destructors\"\"\"\n\nThis reverts commit 6280f87f24c420676bff3fcd3a9698246df366b9.\n\nReason for revert: test failures\n\nhttps://build.chromium.org/p/client.art/builders/angler-armv8-ndebug/builds/2415/steps/test%20optimizing/logs/stdio\n\nChange-Id: I857562ae54340956fe83f68ee995b49e1d8416e3\n"
    },
    {
      "commit": "6280f87f24c420676bff3fcd3a9698246df366b9",
      "tree": "d5eeef1adb6300d60c9e319f768323baafe1d257",
      "parents": [
        "661078b3346c20aa6ad8bf0d3b73722bd04cdc1b"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Feb 07 13:58:29 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Feb 07 14:05:50 2018 -0800"
      },
      "message": "Revert \"Revert \"Prevent UAF issues caused by static destructors\"\"\n\nWe were not initializing the frame_pop_enabled field of EventHandler\nso it was undefined. If it happened to be true then the FramePop\nhandlers will never be installed and the FramePop events will never be\ntriggered.\n\nThis reverts commit 6a94cec7343bf006234b62525398c83bb55858eb.\n\nReason for revert: fixed issue with frame pop\n\nTest: ./test/testrunner/testrunner.py -a --host -t 923\nBug: 69591477\n\nChange-Id: Id47f91a76b6e7c9326e94d7cbdf8c5472bffb58a\n"
    },
    {
      "commit": "6a94cec7343bf006234b62525398c83bb55858eb",
      "tree": "f5da5a1cd1588edd45bca8da5ab434b76d0943bf",
      "parents": [
        "480dc3c0085095c401555d19328aac1a0ec46122"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Feb 07 09:42:26 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Feb 07 09:43:28 2018 +0000"
      },
      "message": "Revert \"Prevent UAF issues caused by static destructors\"\n\nThis reverts commit 123aeb716563d0783c73f309c3afef6dfd8f8b9e.\n\nBug: 69591477\n\nChange-Id: I368802d0c0c64143568d63a6fb02f969702c881e\n"
    },
    {
      "commit": "123aeb716563d0783c73f309c3afef6dfd8f8b9e",
      "tree": "3501e34c54fab3e20bcfd8c937b8d1af6ed762a4",
      "parents": [
        "edbe4cca764412f7aed425e903f4a07e0b4e993e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Feb 06 15:30:13 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Feb 06 15:39:28 2018 -0800"
      },
      "message": "Prevent UAF issues caused by static destructors\n\nAgents calling exit(3) would cause static destructors to run on\nseveral openjdkjvmti data-structures. This caused problems as other\nthreads could still be running and might hit UAF issues, causing\nerrors. We fix this by making sure that no important jvmti\ndata-structures are statically allocated. Since these data-structures\nmust be live for the whole program runtime this is not a big issue.\n\nBug: 69591477\nTest: ./test.py --host -j50\nTest: while ./test/run-test --host 1944; do; done\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost --test \\\n          org.apache.harmony.jpda.tests.jdwp.VirtualMachine.ExitTest.testExit001\nChange-Id: I25b01fc129d46c5f15bce1b9ec7952d29088a5a2\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": "cec262e99d2be886fa0b39de87cf937b69878ed3",
      "tree": "9cdd156b576249d968bbd0283da27575e64a0b79",
      "parents": [
        "85f890b792d1547182d195db3f43240180ab880b",
        "56776014d181b7ee386a2ba5d85cf66d8bb4dd22"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 30 19:19:41 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 30 19:19:41 2018 +0000"
      },
      "message": "Merge \"ART: Call ThreadGroup.add for attached threads\""
    },
    {
      "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": "56776014d181b7ee386a2ba5d85cf66d8bb4dd22",
      "tree": "21b9f0411f565d9e49bce916e720b70a79145750",
      "parents": [
        "47ec7ad0f819c171e41d323aff71f5ac425b1ccd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jan 26 17:40:55 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jan 30 09:26:22 2018 -0800"
      },
      "message": "ART: Call ThreadGroup.add for attached threads\n\nWhen attaching threads to the runtime, call ThreadGroup.add to\nlet the thread\u0027s group know that the thread is now started. This\nfixes incorrect internal accounting.\n\nTest: art/test/testrunner/testrunner.py -b --host -t 169\nTest: m test-art-host\nChange-Id: I60362b6b53acf06b97779ea9b3b0bc6264f1dc2d\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": "11b67b201adb173d5f6f1b7a3fd337fda91e200f",
      "tree": "90870c2ec271002ab36cb57484c185076e424f3a",
      "parents": [
        "8714435022757567aa078601f54244b8339bbed1"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Jan 18 16:41:40 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Jan 24 14:21:50 2018 +0000"
      },
      "message": "Set up a test for hidden API enforcement\n\nSubmitting the test first for easier review. The expected outcome\nis that all currently class members are discoverable and accessible.\nFuture CLs will implement the enforcement and change the expected\noutcome.\n\nThe test itself has two JARs - parent declares classes and child\ntries to access them using reflection, JNI and static linking.\nThe test driver (\"Main\" class) loads these JARs as follows:\n(a) both with class loaders\n(b) parent in boot class path, child with class loader\n(c) both in boot class path\n\nIn (a), there should be no enforcement as the JAR does not have\nhidden API access flags (would not load otherwise). In situation(b),\nchild should only be allowed to access parent\u0027s public, non-hidden\nmembers. And in (c), parent contains hidden API access flags but\nchild is exempt from access checks.\n\nBug: 64382372\nTest: art/test.py -b -r -t 674-hiddenapi\nChange-Id: I19f5f7c30c0c7913703209817d36006b161c6778\n"
    },
    {
      "commit": "f4ed7e8b19b24444a7cdd600a8c211aafd3bc0d3",
      "tree": "9d1757bf86470cfb0e1294568f7e3b13a38ffb22",
      "parents": [
        "ec0be6e7018ed686134532101ee8fed0a412857f"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 17 11:52:36 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 17 11:52:36 2018 -0800"
      },
      "message": "Fix misc issues with non-generated-code fault handlers\n\nWe had a few issues preventing the use of FaultHandler with\nnon-generated code. The first was we would only call these handlers in\ngenerated code. The second is that we would segfault if we tried to\nremove any of them due to an typo\u0027d iterator name.\n\nAdded a test that this all works.\n\nTest: ./test.py --host -j50\nBug: 72064989\nChange-Id: I0d4d5235ac7c1c165a4a14dfbda72ef7060772f3\n"
    },
    {
      "commit": "4d77dafb032e6e14ce619842dec70862172dbaee",
      "tree": "0636a9e023c87d135800a32453093e6331caead0",
      "parents": [
        "b6f3464a934910e84e9a76e9f453bec71bffed5c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 04 11:51:14 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 04 18:20:16 2018 -0800"
      },
      "message": "Correct behavior of thread suspension around Raw monitors\n\nThe interaction between raw monitors and thread suspension was\ndifferent than some real-world agents expected. Real-world agents rely\non the RawMonitorWait function acting as a suspend point.\n\nChanged the raw-monitor implementation to match this behavior.\n\nAdd tests for this behavior and for the behavior of RawMonitorExit\n(which does not act as a suspend point).\n\nBug: 66904725\nBug: 62821960\n\nTest: ./test.py --host -j50\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\n\nChange-Id: Ibaed6a7e6910b7b612f0fb1313958857fbe54595\n"
    },
    {
      "commit": "2196c651ecc77e49992c6c329dfce45f78ff46cb",
      "tree": "4eb151632fc7b851101b4264286ce5e900fa06b5",
      "parents": [
        "dc93cac66f1db225474cec5bf0350fd7a148085e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 30 16:16:07 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 30 16:20:39 2017 +0000"
      },
      "message": "Revert^4 \"JIT JNI stubs.\"\n\nThe original CL,\n    https://android-review.googlesource.com/513417 ,\nhas a bug fixed in the Revert^2,\n    https://android-review.googlesource.com/550579 ,\nand this Revert^4 adds two more fixes:\n    - fix obsolete native method getting interpreter\n      entrypoint in 980-redefine-object,\n    - fix random JIT GC flakiness in 667-jit-jni-stub.\n\nTest: testrunner.py --host --prebuild --no-relocate \\\n      --no-image --jit -t 980-redefine-object\nBug: 65574695\nBug: 69843562\n\nThis reverts commit 056d7756152bb3ced81dd57781be5028428ce2bd.\n\nChange-Id: Ic778686168b90e29816fd526e23141dcbe5ea880\n"
    },
    {
      "commit": "8f8bd8bfce0f2433bc66ac90a471e5f58cd2e2cc",
      "tree": "cbcfcee8846c8f9298b64f52e3523d2268e179ca",
      "parents": [
        "111b7d409a3f77cb0d16bc1df74a3a698795c1d1",
        "056d7756152bb3ced81dd57781be5028428ce2bd"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 30 09:12:35 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 30 09:12:35 2017 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Revert \"JIT JNI stubs.\"\"\"\""
    },
    {
      "commit": "056d7756152bb3ced81dd57781be5028428ce2bd",
      "tree": "154ae8968a450a2e02d88207fa09e380fd380553",
      "parents": [
        "e7441631a11e2e07ce863255a59ee4de29c6a56f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 30 09:12:13 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 30 09:12:13 2017 +0000"
      },
      "message": "Revert \"Revert \"Revert \"JIT JNI stubs.\"\"\"\n\nStill seeing occasional failures on 667-jit-jni-stub\n\nBug: 65574695\nBug: 69843562\n\nThis reverts commit e7441631a11e2e07ce863255a59ee4de29c6a56f.\n\nChange-Id: I3db751679ef7bdf31c933208aaffe4fac749a14b\n"
    },
    {
      "commit": "e7441631a11e2e07ce863255a59ee4de29c6a56f",
      "tree": "a0488fac018ea391d01b751b7254719937bdee8f",
      "parents": [
        "aa25db7d2a6f7f507c27ce49c99a33daf3059f8f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 29 13:00:56 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 29 14:04:26 2017 +0000"
      },
      "message": "Revert \"Revert \"JIT JNI stubs.\"\"\n\nThe original CL,\n    https://android-review.googlesource.com/513417 ,\nhad a bug for class unloading where a read barrier was\nexecuted at the wrong time from\n    ConcurrentCopying::MarkingPhase() -\u003e\n    ClassLinker::CleanupClassLoaders() -\u003e\n    ClassLinker::DeleteClassLoader() -\u003e\n    JitCodeCache::RemoveMethodsIn() -\u003e\n    JitCodeCache::JniStubKey::UpdateShorty() -\u003e\n    ArtMethod::GetShorty().\nThis has been fixed by removing sources of the read barrier\nfrom ArtMethod::GetShorty().\n\nTest: testrunner.py --host --prebuild --jit --no-relocate \\\n      --no-image -t 998-redefine-use-after-free\nBug: 65574695\nBug: 69843562\n\nThis reverts commit 47d31853e16a95393d760e6be2ffeeb0193f94a1.\n\nChange-Id: I06e7a15b09d9ff11cde15a7d1529644bfeca15e0\n"
    },
    {
      "commit": "aaf0d38d9e3bd35aaf5ea2be6409bf2f3575f0ad",
      "tree": "a1eb3414c972f866b606dd1d11b3203640f30880",
      "parents": [
        "23f8f50ace964ed597261f19e87ac050f415957e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 27 14:10:21 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 28 12:01:32 2017 -0800"
      },
      "message": "ART: Change lock dumping\n\nReturn dex registers as well as dex PCs from FindLocksAtDexPc.\n\nIt is necessary to return the registers as the register used for\na monitor-enter operation may be aliased and overwritten by the\ntime the requested dex PC is reached.\n\nIt is at this point necessary to return a set of registers as\noptimizations may have eliminated dead registers, and the verifier\nhas no notion of liveness.\n\nA client of FindLocksAtDexPc should not assume that all registers\ncan be successfully retrieved from a stack frame, with the possibility\nof none. Only a properly verified method (i.e., lock verification succeeded)\nimplies that at least one register should work for all locks held at\nany point in the program.\n\nBug: 68703210\nTest: art/test/testrunner/testrunner.py -b --host -t 167\nChange-Id: I9027787e395cf8df0e7699a606665edb2ecb5136\n"
    },
    {
      "commit": "47d31853e16a95393d760e6be2ffeeb0193f94a1",
      "tree": "344b0fddbbcc9a64bed2ba20dbe73fb227c2bdf4",
      "parents": [
        "3417eaefe4e714c489a6fb0cb89b4810d81bdf4d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 28 18:36:12 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 28 18:36:12 2017 +0000"
      },
      "message": "Revert \"JIT JNI stubs.\"\n\nSeems to break 998-redefine-use-after-free in\nsome --no-image configuration.\n\nBug: 65574695\nBug: 69843562\n\nThis reverts commit 3417eaefe4e714c489a6fb0cb89b4810d81bdf4d.\n\nChange-Id: I2dd157b931c17c791522ea2544c1982ed3519b86\n"
    },
    {
      "commit": "3417eaefe4e714c489a6fb0cb89b4810d81bdf4d",
      "tree": "fe97f5191d25d26ef4250280f4c599b3a50f2059",
      "parents": [
        "7bdc6e73fd97eb75f30b77f183e4fe6c2c599a09"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 21 18:14:28 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 28 13:00:09 2017 +0000"
      },
      "message": "JIT JNI stubs.\n\nAllow the JIT compiler to compile JNI stubs and make sure\nthey can be collected once they are not in use anymore.\n\nTest: 667-jit-jni-stub\nTest: Pixel 2 XL boots.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --jit\nTest: testrunner.py --target --jit\nBug: 65574695\nChange-Id: Idf81f50bcfa68c0c403ad2b49058be62b21b7b1f\n"
    },
    {
      "commit": "b284f8d775ac32d8109744d94b99da451570beef",
      "tree": "c720648f1c018d224410314b30a891f2752bc781",
      "parents": [
        "e6779fde5a3c0a8bb484a61398da439a37d25b92"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 21 00:00:48 2017 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 20 16:58:05 2017 -0800"
      },
      "message": "Revert \"Revert \"Make JVMTI DisposeEnvironment and GetEnv thread safe.\"\"\n\nThis reverts commit af9341087aab0146b8323ece156bde8130948465.\n\nWe needed to allow TopLockLevel locks to be acquired when the\nmutator_lock_ is exclusive held. This is required for spec\nconformance. To ensure there are no deadlocks the mutator_lock_ is the\nonly lock level with this exception and one cannot acquire the\nmutator_lock_ when one holds any kTopLockLevel locks.\n\nReason for revert: Fixed issue causing test 913 failure in art-gc-gss-tlab\nTest: ART_DEFAULT_GC_TYPE\u003dGSS \\\n      ART_USE_TLAB\u003dtrue \\\n      ART_USE_READ_BARRIER\u003dfalse\n      ./test.py --host -j50\nBug: 69465262\n\nChange-Id: Ic1a4d9bb3ff64382ba7ae22ba27a4f44628ed095\n"
    },
    {
      "commit": "af9341087aab0146b8323ece156bde8130948465",
      "tree": "d79c8ff901ab2017dd6308f9bd43d02b877a5c9e",
      "parents": [
        "e5a2ae30bdbe379695dc886861b23dce57de0825"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 20 23:58:35 2017 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 20 23:58:35 2017 +0000"
      },
      "message": "Revert \"Make JVMTI DisposeEnvironment and GetEnv thread safe.\"\n\nThis reverts commit e5a2ae30bdbe379695dc886861b23dce57de0825.\n\nReason for revert: fails art-gc-gss-tlab column.\nTest: None\nBug: 69465262\n\nChange-Id: I70af77297bc7870d281ed8ffb319d144ddb12838\n"
    },
    {
      "commit": "e5a2ae30bdbe379695dc886861b23dce57de0825",
      "tree": "41efa0e726e23607557fe7d8bbc03854cf06ea0f",
      "parents": [
        "8acd00f9e65078f0f9d3c6fa7fea19ee0c17567a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Nov 17 16:39:01 2017 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 20 10:58:30 2017 -0800"
      },
      "message": "Make JVMTI DisposeEnvironment and GetEnv thread safe.\n\nPreviously we were relying on the mutator lock to keep these safe but\nit turns out this was not sufficient. We give the list of active\njvmtiEnv\u0027s it\u0027s own lock to synchronize access.\n\nWe also changed it so that during events we would collect all the\nenvironments and callbacks prior to actually calling any of them.\nThis is required for making sure that we don\u0027t hold locks across user\ncode or potentially miss any environments. This does have implications\nfor when one is last able to prevent an environment from getting an\nevent but since the spec is vague about this anyway this is not an\nissue. Doing this required a major re-write of our event-dispatch\nsystem.\n\nTest: ./test.py --host -j50\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\nBug: 69465262\n\nChange-Id: I170950db6c6e43b5f3c8bdca1b8d087937070496\n"
    },
    {
      "commit": "8c2b929696cac235e8fd8bf4cae0ca751603b570",
      "tree": "ef280c4ff76d44ba867d65564ec192ba4a90e874",
      "parents": [
        "a16fec549253638268dda3d83e6e34a500cbfc1c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Nov 09 13:21:01 2017 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 14 17:09:35 2017 -0800"
      },
      "message": "Add JVMTI DDMS extension method and event.\n\nAdd a new jvmti extension method\n\u0027com.android.art.internal.ddm.process_chunk\u0027 that can be used to\nrequest that the system process a DDMS chunk with a given type and\ndata payload. It returns the processed chunk type and data. Agents can\nuse this to interact with DDMS.\n\nAlso add a new jvmti extension event\n\u0027com.android.art.internal.ddm.publish_chunk\u0027 that will be called\nwhenever the system wishes to send an unrequested chunk of data to be\nprocessed. This is triggered by code executing \u0027DdmServer#sendChunk\u0027\nor by other internal mechanisms.\n\nBoth of these extensions are provided mainly to aid in the maintenence\nof backwards compatibility with existing DDMS applications.  Generally\nagents should prefer to use the normal JVMTI events and controls over\ninterpreting DDMS data or calling DDMS functions.\n\nBug: 62821960\nTest: ./test.py --host -j50\nTest: ./art/tools/run-jdwp-tests.sh --mode\u003dhost \\\n            --test org.apache.harmony.jpda.tests.jdwp.DDM.DDMTest\nChange-Id: I39f22d3d096d12b59713ec7b8b0c08d0d68ff422\n"
    },
    {
      "commit": "df00a1ed1a0b633a1e66f1f650f53c22ea260e5b",
      "tree": "82b965a44ce46f51def31e1e311a26ee991ee868",
      "parents": [
        "a2cbb2b0723a3fa05cc44e13cbe90543b3236883"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 01 09:29:53 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 01 11:47:01 2017 -0700"
      },
      "message": "Prevent abort in situations with recursive checkpoints\n\nIn situations where there were multiple checkpoints queued and the\nfirst one causes the thread to suspend itself again then the\nRunCheckpointFunction function will hit a LOG(FATAL) and abort. This\nis because the recursive checkpoint will clear out the checkpoint\nbacklog and the first RunCheckpointFunction invocation will\nunexpectedly find itself without any more checkpoints to run and\nabort.\n\nTo fix this, and simplify the code at the same time, we have changed\nthe RunCheckpointFunction method to (as its name suggests) only run a\nsingle checkpoint function. It will pop this function off the stack of\npending checkpoints and run it relying on the caller to ensure that\nall pending checkpoints are handled. This is fine since, due to the\nmultithreaded nature of checkpoints, the caller must call\nRunCheckpointFunction in a loop anyway to ensure it does not advance\nuntil all checkpoints have been handled.\n\nWe add test 203-multi-checkpoints that tests that the checkpoint\nsystem does not fall over if there are multiple checkpoints some of\nwhich can suspend.\n\nBug: 67838964\nTest: ./test.py --host -j50\nChange-Id: Ib6a3e083e6069d4839647d194bee6849d973633e\n"
    },
    {
      "commit": "057f1e4cfb6debd496b03c9f97de6c058aa6d850",
      "tree": "dad8f9f0a42f41646d6dd0fcf16532f88f67c106",
      "parents": [
        "f856934689a289b2bc82462e8757a170242bb44d"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Oct 03 14:11:48 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Oct 16 13:45:12 2017 -0700"
      },
      "message": "Use target.linux for all linux kernel based targets\n\nNow in Android.bp files, target.linux applies to all targets running a\nlinux kernel (android, linux_glibc, linux_bionic). So common\nflags/sources/etc can be combined instead of copying them to each\ntarget.\n\nTest: m\nChange-Id: I33ca98425abdf4cae7a47aefa9b8708a1a41fa82\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": "f1671357148b0ed205c93d051efd03f49e774885",
      "tree": "3a54ee282a807d5f2ee6a878945aa9e896131288",
      "parents": [
        "844a4edc7f72e33a3b328c3d53ef710909d2273d",
        "54d39dc42630cd83f2d1bec5704805febb894819"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 03 18:29:28 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 03 18:29:28 2017 +0000"
      },
      "message": "Merge changes from topic \"thread-stop\"\n\n* changes:\n  Implement JVMTI can_signal_thread capability.\n  Implement asynchronous exception support\n"
    },
    {
      "commit": "54d39dc42630cd83f2d1bec5704805febb894819",
      "tree": "a23da52ebe6a98a125929a5ae2dacc87db5f7965",
      "parents": [
        "848574ca50bb7e2d109608359d1086b3ca6bb4b3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Sep 25 17:00:16 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 02 15:13:27 2017 -0700"
      },
      "message": "Implement JVMTI can_signal_thread capability.\n\nImplements the JVMTI can_signal_thread capability and all associated\nmethods and behaviors. This includes both the StopThread and\nInterruptThread functions.\n\nThis CL contains the tests for the previous CL.\n\nTest: ./test.py --host -j50\nTest: stress --cpu 59 \u0026\u0026 while ./test/run-test --host 1934; do; done\n\nBug: 62821960\nBug: 34415266\nChange-Id: I7b6fc37da0d2673caa993e486f078cf129d74c0f\n"
    },
    {
      "commit": "99988f8dcad80e5baa02be571a9ec7c2540f1544",
      "tree": "de9794012369be66763e6c76ea88fd752469c7e2",
      "parents": [
        "f67f115423c9ef5aa62a33c12670cd8f89457c9c"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Oct 02 10:41:07 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Oct 02 10:41:07 2017 -0700"
      },
      "message": "Rename target.linux[_x86[_64]] to target.linux_glibc[_x86[_64]]\n\nIn the future, target.linux will apply to all targets running a linux kernel\n(android, linux_glibc, linux_bionic). So move all current users to the specific\nlinux_glibc.\n\nThere will be another cleanup pass later that will move some instances back to\ntarget.linux if the properties should be shared with target.android and\ntarget.linux_bionic, but target.linux needs to be removed first.\n\nTest: out/soong/build.ninja identical before/after\nChange-Id: Iea59380a4936c6d0555534d69b891b8ffdb9dfb6\nExempt-From-Owner-Approval: build system cleanup\n"
    },
    {
      "commit": "0e503b50d5eb48b57b7ca53ee42e4eb1603a650b",
      "tree": "73edf360ff0573bdda2bd62e243c13843ffcb8c7",
      "parents": [
        "9486eab7114f7d20f42030998406c2068e256121"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 27 16:05:49 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 27 17:35:28 2017 -0700"
      },
      "message": "Rename libz-host -\u003e libz\n\nTest: m host\nChange-Id: I602f624562f7042bc70fabc67016ae189ba87a4b\n"
    },
    {
      "commit": "2ca278036432eefbdbf39502dfcfb7e38a54332c",
      "tree": "8aa7ab585414f2b54186ee4285f2435be90de335",
      "parents": [
        "9389ae7309180f4dccc3c34e26798ed428f0d054"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 27 14:57:43 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 27 15:11:33 2017 -0700"
      },
      "message": "Run bpfmt\n\ncd art; find . -name \u0027*.bp\u0027 | xargs bpfmt -w\n\nTest: mmma art\nChange-Id: Iec406b734180313b98a58b99a776738772e63cc1\n"
    },
    {
      "commit": "9389ae7309180f4dccc3c34e26798ed428f0d054",
      "tree": "d8ff0d871506ad2559c505b92495b1f5125fc4f6",
      "parents": [
        "350546494d6964daee2b9236820b7f85b88dfd59"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 27 11:58:43 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 27 15:11:33 2017 -0700"
      },
      "message": "Simplify Android.bp files\n\nRemove clang: true, it\u0027s the default.\n\nRemove target.android.shared_libs \"libdl\", since it\u0027s already part of\nthe system_shared_libs list.\n\nRemove host_ldlibs, since -ldl and -lpthread are automatically added on\nDarwin and Linux. -lrt is automatically added on Linux.\n\nTest: mmma art\nChange-Id: I18aa6aa5b49cad31caf6820b1974057ad14a2798\n"
    },
    {
      "commit": "545412b4b250d6024ff071c094c226187860a086",
      "tree": "9dccf6033809113a7c741f84c33ee27542b18c97",
      "parents": [
        "38a03535e4abf24cda22a13e514454d9847b9682"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu Aug 17 15:26:54 2017 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu Sep 21 14:10:32 2017 -0700"
      },
      "message": "compiler: layout OatMethodQuickCode by profile hotness\n\nRe-arrange all the compiled oat code by using the profile information.\nIf no profile is available, it retains the original order\n(sorted by class_def_idx, method_idx).\n\nMethods are all binned together in a group according to the hotness flags:\n -- not hot at all\n -- all hot\n -- all hot and startup\n -- all hot and post-startup\n -- all hot and startup and poststartup\n -- all startup\n -- all startup and post-startup\n -- all post-startup\n\n(See MethodHotness enum definition for up-to-date binning order.)\n\nMethods within a bin also retain the original order. A deduped method\nwill appear in the bin of the smallest (class_def_idx, method_idx).\n\nSaves 700KB of memory (PSS) for system_server on most devices.\n\nBug: 64577026\nTest: art/test.py  # no regressions\nTest: art/testrunner/testrunner.py -t 661-oat-writer-layout  # new test\nChange-Id: I40e9907d095b4a3b48bff0df8799954ef135fc19\n"
    },
    {
      "commit": "77fee87b262e969b29a9ac121a8bcbf87b68d9ce",
      "tree": "3280ba8d887045217bfbcb81eb624f571eeee7d0",
      "parents": [
        "ec995142998f6c7371734e6df95b5e2c80b18d27"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 05 14:51:49 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 14 09:57:03 2017 -0700"
      },
      "message": "Add support for JVMTI monitor events.\n\nAdds support for the JVMTI can_generate_monitor_events capability and\nall associated events. This adds support for the\nJVMTI_EVENT_MONITOR_WAIT, JVMTI_EVENT_MONITOR_WAITED,\nJVMTI_EVENT_MONITOR_CONTENDED_ENTER, and\nJVMTI_EVENT_MONITOR_CONTENDED_ENTERED events.\n\nBug: 65558434\nBug: 62821960\nBug: 34415266\n\nTest: ./test.py --host -j50\n\nChange-Id: I0fe8038e6c4249e77d37a67e5056b5d2a94b6f48\n"
    },
    {
      "commit": "ec995142998f6c7371734e6df95b5e2c80b18d27",
      "tree": "ee73943d5a092216114f7b2752861f62898f0ef0",
      "parents": [
        "d25c91583512fceebc7f865b27387025695aa11f",
        "21a71444755c13a12d24d04680137a31213266dd"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Sep 07 22:41:56 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 07 22:41:56 2017 +0000"
      },
      "message": "Merge changes from topic \"ti-stress slicer\"\n\n* changes:\n  Undefine CHECK while including slicer headers.\n  Suppress warnings caused by including slicer headers in ti-stress\n  Move ti-stress to use slicer directly\n"
    },
    {
      "commit": "ceae954edb5a7337c122e446f69a3fc4f0823d28",
      "tree": "92d51c717b781b9bad76b502c918b9504fa43db1",
      "parents": [
        "82629c9182dffb823f05dec30f7ac72cf8fb3ba5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 07 13:28:00 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 07 13:28:00 2017 -0700"
      },
      "message": "Move ti-stress to use slicer directly\n\nNow that slicer is in the AOSP tree we can use it directly for ti\nstress tests.\n\nTest: ./test/run-test --host --jvmti-redefine-stress 001-HelloWorld\n\nChange-Id: I89a9f532458b24466b453f493ab63c9c4af6de6d\n"
    },
    {
      "commit": "ce56864b347983155a6b810c19eaa8297d77be96",
      "tree": "c572198fee2fe2cc4b2291b7af124c5429e63f7e",
      "parents": [
        "82629c9182dffb823f05dec30f7ac72cf8fb3ba5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 05 16:54:25 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Sep 06 17:50:27 2017 -0700"
      },
      "message": "Add support for JVMTI GetObjectMonitorUsage function.\n\nAdds support for the can_get_monitor_info capability and all\nassociated functionality. Also fixes a minor bug where monitor info\nincorrectly said that an unlocked monitor had 1 entry in some cases.\n\nTest: ./test.py --host -j50\nTest: art/tools/run-jdwp-tests --mode\u003dhost\n\nBug: 62821960\nBug: 34409230\n\nChange-Id: I9a4817ea309aaf94c56e9c0a694b88c93e7b629c\n"
    },
    {
      "commit": "9fb1ab1f6bb58bdaccef78bc81b3202d0121e2ed",
      "tree": "f4ec9bb10a2191f4aa80b1ee40332071bed38bab",
      "parents": [
        "c101222c854a0c476f5b6ae64e20adbd38126a3c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 05 09:32:49 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 05 10:54:05 2017 -0700"
      },
      "message": "Revert \"Revert \"JVMTI Exception and ExceptionCatch events\"\"\n\nFixed error where we were incorrectly not updating a ShadowFrame\ndex_pc causing deoptimization errors.\n\nBug: 62821960\nBug: 65049545\n\nTest: ./test.py --host -j50\nTest: ./art/tools/run-libcore-tests.sh \\\n            --mode\u003dhost --variant-X32 --debug\n\nThis reverts commit 959742483885779f106e000df6dd422fc8657931.\n\nChange-Id: I91ab2bc3e645ddf0359c189b19a59a3ecf0d8921\n"
    },
    {
      "commit": "959742483885779f106e000df6dd422fc8657931",
      "tree": "413cbb42607eb92012cfc20f7e0d32d0da3e9875",
      "parents": [
        "798eab03120f6189e8f6aa804d67af1b1d9f00b0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 04 08:45:51 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 04 08:45:51 2017 +0000"
      },
      "message": "Revert \"JVMTI Exception and ExceptionCatch events\"\n\nBreaks tests.\n\nBug: 62821960\nBug: 65049545\n\nThis reverts commit 798eab03120f6189e8f6aa804d67af1b1d9f00b0.\n\nChange-Id: Ie96903df06bbbe41f288f5b75a5114b142998fac\n"
    },
    {
      "commit": "798eab03120f6189e8f6aa804d67af1b1d9f00b0",
      "tree": "828a9a896619a8575bcf20a078f193df54354899",
      "parents": [
        "9c4feaa082d8e8c00611a0657c3f80b1c1179a6f"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Aug 23 12:54:53 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Sep 01 10:10:14 2017 -0700"
      },
      "message": "JVMTI Exception and ExceptionCatch events\n\nAdd support for the JVMTI can_generate_exception_events capability.\nThis includes the Exception and ExceptionCatch events and all their\nassociated behaviors.\n\nTest: ./test.py --host -j50\nBug: 62821960\nBug: 65049545\n\nChange-Id: I21cc8522c01033cdeb47bf34fa433bf04bf7ca5c\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": "23aa74818272a9d659414536324ae9133ecb8743",
      "tree": "cc7c33d31e508c931cb010c564fa75bf1aa264ed",
      "parents": [
        "3ed4a4018ad11ea292cd1e04b0dfe005195d1e3c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Aug 16 10:01:13 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Aug 24 11:37:24 2017 -0700"
      },
      "message": "Fix issue with RawMonitors around thread suspension.\n\nInvestigation of real-world JVMTI agents revealed that some rely on\nthe RawMonitorEnter function acting as a Java suspend point. If it\nfails to act as one the agent could end up deadlocked.\n\nTest: ./test.py --host -j50\nBug: 62821960\nBug: 34415266\n\nChange-Id: I3daf5c49c1c9870e1f69eebfd4c6f2ad15224510\n"
    },
    {
      "commit": "2c30e4a2a2bd73c3e9d327d4b5d059b75cc0f798",
      "tree": "698286ee61f457069b5a53ca6869319b8d9e5acb",
      "parents": [
        "3157fc26d96951ff4acfb4feb4597e74a92da2a7"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Aug 23 11:31:32 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Aug 23 16:06:00 2017 -0700"
      },
      "message": "ART: Remove art and art/runtime include_dir directives\n\nRemove some overly broad or unnecessary include directives. Fix up\ncode.\n\nTest: mmma art\nChange-Id: Ic2da319f39102d59566e780f3e15fe007a3c36d6\n"
    },
    {
      "commit": "3157fc26d96951ff4acfb4feb4597e74a92da2a7",
      "tree": "93c3a03a8eae4fc9f430531f25d8be3d4d8b5af7",
      "parents": [
        "27bd4dd81962b0e59df9318ae8efc83df99ebe0a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Aug 23 09:43:46 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Aug 23 16:06:00 2017 -0700"
      },
      "message": "ART: Move cmdline parser to header library\n\nExpress the cmdline parser as a header library.\n\nTODO: Express the libart dependency correctly.\n\nTest: m\nChange-Id: I9e90029d047ab0d75a455a2361d5213a8fa6f361\n"
    },
    {
      "commit": "8c399a5e3d344ee84944708bbcd0967d78b328df",
      "tree": "1207aa6a38bbb33067ecd15d04b0059f18479be9",
      "parents": [
        "34acbf4525a686dec99216fc4b0b27a68b370a98",
        "1d8a9741d2979d09a21942fbf9107d212ce2511b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Aug 22 20:51:40 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 22 20:51:40 2017 +0000"
      },
      "message": "Merge \"Fix interaction of VMInit and ThreadStart events.\""
    },
    {
      "commit": "1d8a9741d2979d09a21942fbf9107d212ce2511b",
      "tree": "d630dccfbe632247f04a0428f8a72766c3b673fe",
      "parents": [
        "bf9e516f4964ee900d2996abaf60977c1c643aa3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Aug 17 11:12:06 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Aug 21 11:11:30 2017 -0700"
      },
      "message": "Fix interaction of VMInit and ThreadStart events.\n\nReal world agents require that one is able to create, and run, new\nthreads while the VMInit event is still being executed. Further, these\nrequire that ThreadStart events can occur concurrently with the VMInit\nevent. This CL enables this behavior and adds a test for the\ninteraction of these two events.\n\nTest: ./test.py --host -j50\nBug: 62821960\nBug: 34415266\n\nChange-Id: I305f1ce3f1df9bf5a7e33027e0724f5fbac5c0f1\n"
    }
  ],
  "next": "3c3911ec4c7727d5f48c1f063e9100cd11a25fd5"
}
