)]}'
{
  "log": [
    {
      "commit": "87712da946a5e10edb460ad1df03d8b26d6a0fdc",
      "tree": "daa744b983eb9033a61c1fb605d7d4a0500289eb",
      "parents": [
        "0c42b60d2f4d8cc1067c723396659720a94b388c"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Jan 17 15:50:02 2020 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jan 20 13:16:27 2020 +0000"
      },
      "message": "Revert^2 \"Generate mini-debug-info when running tests.\"\n\nThis reverts commit b9a8541380c2bdb9685e16d8d4b2ba034ddbf870.\n\nReason for revert: Reland after timeout issues disappeared.\n\nBug: 142039427\nChange-Id: I7373a0feaa0264a8dd8dd12378fee4aecc99215c\n"
    },
    {
      "commit": "0c42b60d2f4d8cc1067c723396659720a94b388c",
      "tree": "649b972cd61635c97bd82245123cbd837979aa1c",
      "parents": [
        "51e957ce2c1c3e906ced8d0986baa76d93a6adca"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Jan 17 15:50:59 2020 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jan 20 13:16:12 2020 +0000"
      },
      "message": "Revert^2 \"Generate mini-debug-info when running JIT tests.\"\n\nThis reverts commit 0b4479830e2614fc1582ced22a426fe7f473161b.\n\nReason for revert: Reland after timeout issues disappeared.\n\nBug: 142039427\nChange-Id: I5352b18e1cdd03dc02e2bb20734c5cc6b6d18394\n"
    },
    {
      "commit": "51e957ce2c1c3e906ced8d0986baa76d93a6adca",
      "tree": "33c2cd4c8034bec5aaddcd51b861d76559b3d192",
      "parents": [
        "691f1a4978eb69a062100810eb6204f7b651cb94"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 20 10:09:42 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 20 10:09:42 2020 +0000"
      },
      "message": "Blacklist 137-cfi on target 32.\n\nBug: 147910661\nTest: test.py\nChange-Id: I50d3e73551744af3aa5a35a63660f64326150e4d\n"
    },
    {
      "commit": "4f915d2a0988a262ebd48075e85de756ea43ce57",
      "tree": "408e61457ec4ada8ef22056abf9f2edffff20762",
      "parents": [
        "daca30367af71c50ed7c39443540c4c8630f4625"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 09 17:51:25 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Jan 18 01:55:30 2020 +0000"
      },
      "message": "Make --create-runner check the output when not --dev\n\nMake the script generated by --create-runner check the output of each\nrun against expected.txt. This is done only with diff not potential\n\u0027check\u0027 scripts at the moment.\n\nTest: Manual.\nChange-Id: I1bfcefce9b72c8c1bdc436e7fa9898a9ee15af82\n"
    },
    {
      "commit": "6442eaf8b21c85d60648f7a7498a6aeb299af861",
      "tree": "9a0fc7a9484e22e341b765b97adb9c517f78ddca",
      "parents": [
        "e30457c0b52caba839b21a03af56200df7a975e2"
      ],
      "author": {
        "name": "Andrei Onea",
        "email": "andreionea@google.com",
        "time": "Wed Jan 08 16:55:56 2020 +0000"
      },
      "committer": {
        "name": "Andrei Onea",
        "email": "andreionea@google.com",
        "time": "Fri Jan 17 15:59:09 2020 +0000"
      },
      "message": "Harden hidden api checks.\n\nAlso walk past j.l.r in stackwalk for Hidden API. This is a fix for an\nasan test failure (691-hiddenapi-proxy) introduced in https://r.android.com/1208005.\nInstead of always walking past j.l.r during the stackwalk, this CL adds an\nexception for j.l.r.Proxy.\n\nBug: 142365358\nTest: art/test/testrunner/testrunner.py --target --64 -t674-hiddenapi\nTest: art/test/testrunner/run_build_test_target.py -j110 art-asan\nChange-Id: I98dd46d7070dd2dd4318398d2a5d2ae4ece94015\n"
    },
    {
      "commit": "72325b603fad447082729eb43f11a8d83706bad5",
      "tree": "3546b831a215a0b1c46d77a0b38ba8aadb845b38",
      "parents": [
        "4f9d62b549ef755c5b77d09b1da2a8403f58b376"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 09 17:49:45 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 15 21:33:25 2020 +0000"
      },
      "message": "Add test for local-refs being updated by structural-redef\n\nWe don\u0027t have a good test that local-JNI-refs are correctly updated by\nstructural redefinition. This adds such a test.\n\nTest: ./test.py --host\nChange-Id: I56697fe1a4f9d726b5666c7be2d4036ee248bc58\n"
    },
    {
      "commit": "2ba6ff25938e6f1755748a4c7ef3ad0b45be6df7",
      "tree": "80d8b3f4142262c8b7099472617ae1e72eb776c5",
      "parents": [
        "46d7b24ddb2160123afb3facad4b54242422a45f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 08 14:47:26 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 15 10:49:45 2020 +0000"
      },
      "message": "Fix String.init tests with baseline JIT.\n\nBaseline JIT doesn\u0027t do deoptimizations, but the test assumes compiled\ncode will. Adjust the test to call ensureJitCompiled to force\nnon-baseline compilation.\n\nTest: testrunner.py --host --64 --jit -t 563 -t 575\nBug: 147209001\nChange-Id: I062650e07616610b01415e3add193687fcc35e30\n"
    },
    {
      "commit": "fe0ce64326bc0531616fb6b5388400cd9787370e",
      "tree": "2b176d562034d35949e9e646beec263006e29eb1",
      "parents": [
        "e8e544dc8909155560af0c7381df3833b2e7f701"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 07 13:14:18 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 15 08:24:52 2020 +0000"
      },
      "message": "Add structural redef tests to CTS\n\nThis adds structural redefinition and other JVMTI run-tests to CTS\nwhere possible.\n\nTest: atest -bit --test-mapping cts/hostsidetests/jvmti/TEST_MAPPING\nBug: 134162467\n\nChange-Id: If8e36ea8d228253928cb9b9f6a35a284250641e9\n"
    },
    {
      "commit": "e8e544dc8909155560af0c7381df3833b2e7f701",
      "tree": "4b8aeefcbbd0fc5bea795194bacd6c0cf812f7d0",
      "parents": [
        "628f48871a9c7a1f18c2d5e1a76aa7afc716810d"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Mon Jan 22 21:20:09 2018 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 15 08:18:19 2020 +0000"
      },
      "message": "Revert \"Work around a art test script bug mixing up bootclasspaths.\"\n\nThis reverts commit 437b54c730ab306208af5aa035b85c294d090024.\n\nReason for revert: This workaround should no longer be needed after CLs [1-2].\n\nBug: 70521453\nTest: art/test/testrunner/run_build_test_target.py -j40 art-interpreter\n\n[1] https://android-review.googlesource.com/c/platform/build/+/573902\n[2] https://android-review.googlesource.com/c/platform/build/soong/+/578623\n\nChange-Id: I09276cc5c2aae01dcd4a288881510d09ec144985\n"
    },
    {
      "commit": "9406c43b2de9b94b6d70f82474840eccd7699dc7",
      "tree": "5bc44e726bf2a8d0a6e37279056c3f226154afc6",
      "parents": [
        "08d064fb6d02006730710a683e84a4cc54229c67"
      ],
      "author": {
        "name": "Andrei-Valentin Onea",
        "email": "andreionea@google.com",
        "time": "Tue Jan 14 15:40:09 2020 +0000"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Tue Jan 14 21:37:43 2020 +0000"
      },
      "message": "Revert \"Harden hidden api checks.\"\n\nRevert submission 1203343-hidden-api-check-hardening\n\nReason for revert: art-asan target failure\nReverted Changes:\nI5af9f79f5: Add change id for hidden api check hardening\nIfc8d39ba2: Harden hidden api checks.\n\nChange-Id: Ifb824ff00cb78f03cd388c56dd7411f5c51bb531\n"
    },
    {
      "commit": "3bf51634271a5cb25eadc3ffc092233663253a41",
      "tree": "e96e45d7ace51f97468ecdac21f754c59eee4ce1",
      "parents": [
        "135b5c8fe69b27c5059a9f042c394a9d438c9788"
      ],
      "author": {
        "name": "Andrei Onea",
        "email": "andreionea@google.com",
        "time": "Wed Jan 08 16:55:56 2020 +0000"
      },
      "committer": {
        "name": "Andrei-Valentin Onea",
        "email": "andreionea@google.com",
        "time": "Tue Jan 14 14:04:46 2020 +0000"
      },
      "message": "Harden hidden api checks.\n\nAlso walk past j.l.r in stackwalk for Hidden API.\n\nBug: 142365358\nTest: art/test/testrunner/testrunner.py --target --64 -t674-hiddenapi\nChange-Id: Ifc8d39ba23808216bbb8dd21e3262d330f2c87f1\n"
    },
    {
      "commit": "135b5c8fe69b27c5059a9f042c394a9d438c9788",
      "tree": "219f60abe61d1eabec640550b9d62a97ac8901ac",
      "parents": [
        "786e1fe445821345ae895dac60a4dc7369dab522"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 08 14:23:55 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 14 09:12:09 2020 +0000"
      },
      "message": "Address checker tests around inline cache and the baseline compiler.\n\nI failed to repro b/147094528 locally, but there are known two sources\nof inline cache noises introduced by the baseline compiler:\n- ensureJitCompiled doesn\u0027t ensure the method is compile \u0027optimized\u0027.\n  That\u0027s what the tests expect.\n- when the GC is marking, we can potentially create duplicate entries of\n  the same class in the inline cache.\n\nBug: 147094528\nTest: test.py\nChange-Id: I5cd6e5874b2c7b3273a9f4c8cb0fca59263da034\n"
    },
    {
      "commit": "786e1fe445821345ae895dac60a4dc7369dab522",
      "tree": "58c29d0845f9cfd29007c681114ce057b5df5471",
      "parents": [
        "c4bf6679e14a54fde5bc7a994f0f1d4e4564fa23"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 13 15:17:07 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 14 09:11:52 2020 +0000"
      },
      "message": "invoke-super can also have implicit null checks.\n\nTest: 724-invoke-super-npe\nBug: 147364466\nChange-Id: I408e3bb5f84ee6b4d7a1cad149c8ccca8b35f1fa\n"
    },
    {
      "commit": "4681f2034034435d47eb0b5ef03bde69a1e4dde6",
      "tree": "c12cb99d4255c16357328429eead1472fe6b60ba",
      "parents": [
        "baf938f331eac62d28a215c065e56bfc9e38a3e2"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jan 10 09:27:57 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jan 13 18:37:35 2020 +0000"
      },
      "message": "Don\u0027t run AllTraces in test 911 on CTS\n\nAllTraces will (among other things) list every thread currently\nrunning. Unfortunately this means it breaks every time anyone adds a\nnew thread to the app environment. This happens somewhat regularly so\ninstead of maintaining an every-growing list of ignored threads we\nwill instead just skip this bit of the test.\n\nTest: ./test.py --host\nTest: atest CtsJvmtiRunTest911HostTestCases\nBug: 147267774\nChange-Id: I5126dd266272b44dcd00013f9b867cd3fac2bf89\n"
    },
    {
      "commit": "baf938f331eac62d28a215c065e56bfc9e38a3e2",
      "tree": "96244514cba5f2643c9c5ebbb3a459bbdfa4bd6d",
      "parents": [
        "63a57935e28190b6cb8ba26f13fd158950acc097"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jan 10 10:40:46 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jan 13 18:33:33 2020 +0000"
      },
      "message": "Add even more sanity checks to ti_redefine.cc and skips\n\nAdd some additional sanity checks so its more obvious if b/147207934\noccurs on any other gcs. The issue is that VisitObjects was missing\nsome objects causing assumptions to be broken.\n\nAlso add blanket skips for all structural redefinition tests to CMS\nruns. Since VisitObjects is not reliable on CMS we cannot really use\nthe structural redefinition feature there.\n\nTest: ./test.py --host\nBug: 147207934\nChange-Id: I52aa4f3defb352e988f18b5ab494c9f3a028f0e2\n"
    },
    {
      "commit": "ca145948bfb516385e7b32124ee408708a586b6c",
      "tree": "28a6b3a73d4f594273688f3a65766bb3afa088d5",
      "parents": [
        "6ac057f2ce45a5e1c7c51d3c99bad52f6950469c"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Jan 13 10:47:44 2020 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Jan 13 12:42:35 2020 +0000"
      },
      "message": "Disable 708-jit-cache-churn for all gcstress modes\n\nBug: 147358440\nTest: art/test.py --host --gcstress -v -r -t 708-jit-cache-churn\nChange-Id: I55eaf165cec83bc7cabab7aef1f7eccb534ff031\n"
    },
    {
      "commit": "a63b419a3a34ae6af628bc9b8cfeac17a7edf0e8",
      "tree": "5248bc7cb6078e2fab4fec5bccd85dfff6971e44",
      "parents": [
        "cdf2d7e5fa9750651fa6be5a669dd9d8a52fda40"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jan 10 09:35:10 2020 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jan 10 10:02:02 2020 +0000"
      },
      "message": "Disable 708-jit-cache-churn for gcstress + jit-on-first-use\n\nBug: 147358440\nTest: art/test.py --host --gcstress --jit-on-first-use -r -t 708-jit-cache-churn\nTest: art/test.py --host --jit-on-first-use -r -t 708-jit-cache-churn\nChange-Id: Ia00cec90c9133f85671183ef84b1775c8c570e92\n"
    },
    {
      "commit": "f1ede367e60f703cc4426f11e698f4016b7d6112",
      "tree": "ee7461c0f375dd2ef0efbda8b7c2e072dbdc7bb0",
      "parents": [
        "3f4041b42078e02002e3d297a5ddd056444d2221"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 09 11:00:11 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 10 08:44:44 2020 +0000"
      },
      "message": "Use HashSet for test 2005\n\nTest 2005 would sometimes fail due to all test threads filling up\ntheir results array before suspension occurs. This can cause the test\nto fail as it\u0027s an error to call SuspendThreadList without any\nthreads. To fix this we change the results list to a HashSet and no\nlonger have to worry about it filling up.\n\nTest: ./test.py --host\nBug: 147407925\nChange-Id: I8a5830e8f204993d674962ebb53092faacb651ed\n"
    },
    {
      "commit": "8e7ab70070c40df682345125045d1c44bac8d626",
      "tree": "b21563dd141e4524a18688aac1fbcbddfe6ea675",
      "parents": [
        "a3f8129f53394d315618e5c185e95fb8c9d2e28b"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 09 13:09:46 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 10 07:08:26 2020 +0000"
      },
      "message": "Remove extra shift in --create-runner handler in run-test\n\nrun-test --create-runner would eat an argument due to an extra shift.\nRemove this shift.\n\nTest: ./test/run-test --create-runner --jit --host 001-HelloWorld\n      examine output.\n\nChange-Id: Id8676fc90aa841d130437174e5958f29b9062311\n"
    },
    {
      "commit": "163652e59b452d10ab7d282024d11de7b5796a26",
      "tree": "1c7c3f8c4c1a33e5bc1baea2ed32fde9202decdc",
      "parents": [
        "14d1307c1b9f4a9e32665100dde5f1454ec197a7"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 08 15:18:25 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 09 00:55:08 2020 +0000"
      },
      "message": "Fix redefinition causing corrupt j.l.r.Field objects\n\nDuring (non-structural) redefinition we change the dex-field-indexs of\nall the ArtField\u0027s of the class being redefined. These ids are used by\nthe java/lang/reflect/Field class to avoid having to store a pointer\nto the ArtField. This meant that when a class was redefined any\nexisting j.l.r.Field objects pointing to its fields are rendered\ninvalid, due to the dex_field_index no longer being present on the\nclass.\n\nTo fix this we simply walk the heap during class redefinition and\nupdate any j.l.r.Field objects of the redefined class that we find.\n\nTest: ./test.py --host\nBug: 147310999\nBug: 147338896\nChange-Id: I3b038b4e669f8b7b4e804238248b4d03780ce2ca\n"
    },
    {
      "commit": "a18f5aeaecf9088f1ba1c43e7577dc149f85673f",
      "tree": "88a98d98edab2c83821a8df17768788245c039a1",
      "parents": [
        "7ee34a1eeba20c1b438f7bcad75adba65dd2a840"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 13 12:53:39 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 08 14:50:06 2020 +0000"
      },
      "message": "Fix StringBuilder append assumptions.\n\nDo not rely on use ordering, it can be different because of\nSimplifyReturnThis(); just use HBackwardInstructionIterator.\nInstead of checking that we find a StringBuilder.toString(),\ncheck that it is the invoke we\u0027re trying to simplify.\n\nAdd regression test 699-checker-string-append2.\n\nTest: testrunner.py --host --jvm -t 699-checker-string-append2\nBug: 19575890\nBug: 146014745\nChange-Id: I7b16f376c16ba5a4107e9718e0acf17d82280f54\n"
    },
    {
      "commit": "2f4942879da18c9789800878b0e5eb87fbedb7b0",
      "tree": "b14968d70ac2f623f980207b4afad64806470994",
      "parents": [
        "0b1afb7c63d99c88f90f17770ad94ccb0b0c57d3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 07 22:53:09 2020 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 07 17:31:43 2020 -0800"
      },
      "message": "Revert^2 \"Remove finalizable restriction on structural redefinition\"\n\nThis reverts commit 0b1afb7c63d99c88f90f17770ad94ccb0b0c57d3.\n\nDaemon shutdown is known to be somewhat flaky. That seems to be the\ncause of this failure.\n\nReason for revert: Removed Daemon threads from tests 2006 \u0026 2007.\nBug: 134162467\nTest: % ./art/test/run-test --create-runner --host --prebuild --compact-dex-level fast --jit --no-relocate --runtime-option -Xcheck:jni --debuggable --runtime-option -Xopaque-jni-ids:true --64 2007\n      ...\n      Runnable test script written to /tmp/allight/test-230585/runit.sh\n      ...\n      % ./art/tools/parallel_run.py -j80 /tmp/allight/test-230585/runit.sh --out failure.txt\nTest: ./art/test/run-test --create-runner --host --prebuild --compact-dex-level fast --jit --no-relocate --runtime-option -Xcheck:jni --debuggable --runtime-option -Xopaque-jni-ids:true --64 2006\n\nChange-Id: I392a2936995dd05b08feea36f11b616c1548ae46\n"
    },
    {
      "commit": "0b1afb7c63d99c88f90f17770ad94ccb0b0c57d3",
      "tree": "92e88de49a2e79c2a00ce8990e412febc81e5318",
      "parents": [
        "93be70effba70b78596fc4bda6b583615c3b6d0c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 07 22:51:03 2020 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 07 22:51:55 2020 +0000"
      },
      "message": "Revert \"Remove finalizable restriction on structural redefinition\"\n\nThis reverts commit 55d6fa4c352a1fadbd21b8d8e0929833e547b9e5.\n\nBug: 134162467\nTest: None, pure revert.\nReason for revert: Flaky segvs across multiple configurations.\n\nChange-Id: Iaa8ec6cbd2eee141e271cd3a56a1b6be8bbb3a7c\n"
    },
    {
      "commit": "93be70effba70b78596fc4bda6b583615c3b6d0c",
      "tree": "da679b13dee39a03f4854c53c0edcff4dddea0e9",
      "parents": [
        "55d6fa4c352a1fadbd21b8d8e0929833e547b9e5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 07 17:05:42 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 07 19:55:17 2020 +0000"
      },
      "message": "Revert^2 \"Make tests 1995, 2001, \u0026 2005 less likely to OOME.\"\n\nTest 2005 works by starting a bunch of threads, collecting all threads\nusing the thread-group, suspending them and then performing\nredefinition work. Unfortunately due to the API there is a race\nbetween figuring out how many threads their are and getting them with\nenumerate. In cases where enumerate is called with a larger array then\nneeded, due to some threads finishing (\u0027run\u0027 returning) the enumerate\ndoesn\u0027t fill in some of the array. This meant we called\nSuspendThreadList with \u0027null\u0027, which is interpreted as meaning the\ncurrent thread. This leads to a deadlock.\n\nThis reverts commit 01a09bfd3839401c32d537b9a03b7991c4ffd20c.\n\nBug: 147190668\nBug: 147278184\nTest: ./test.py --host\n\nReason for revert: Fixed issue causing occasional deadlock in test\n                   2005\n\nChange-Id: I01fb9f38c4516730821106ac291836eb61534a73\n"
    },
    {
      "commit": "55d6fa4c352a1fadbd21b8d8e0929833e547b9e5",
      "tree": "2f84bbe0ee1129aa754a30603269e34656b30f07",
      "parents": [
        "65c18a21e7cb0d48327788df498f15ae195e9e3c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Dec 20 12:58:14 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 07 19:43:10 2020 +0000"
      },
      "message": "Remove finalizable restriction on structural redefinition\n\nPreviously we restricted performing structural redefinition of classes\nwith finalizers. We did this because we need to be careful that\nfinalizers are not run on any obsolete objects and are run on the\nreplaced objects. This fixes these issues and removes the restriction.\n\nNote that the objects of classes that were initially non-finalizable\nand then redefined to be finalize able will never be called. This is\n(technically) compliant with the spec and avoids issues around safely\ncreating finalizer references. See comment in ti_redefine.cc for more\ninformation.\n\nTest: ./test.py --host\nBug: 134162467\nChange-Id: I51d4de3d15833dce989cd1e44c32b0e6a57f063a\n"
    },
    {
      "commit": "65c18a21e7cb0d48327788df498f15ae195e9e3c",
      "tree": "ba49c1f07e7cd2bc6d9ffbafc184bcad85e9ce45",
      "parents": [
        "c4d13ae39ec6f4b6b76b152818516081beb6bb56"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jan 03 23:37:13 2020 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Jan 07 17:40:19 2020 +0000"
      },
      "message": "Revert^4 \"Add spin loop to mutex, overhaul monitor\"\n\nThis reverts commit ead89ef62768faa06fedd279b86bccbed1464673.\n\nPS1 is identical to Revert^2.\n\nThis fixes a shutdown issue caused by prematurely hanging when we\nblock while trying to acquire system mutexes during shutdown.\n\nOnly refuse to wake up after shutdown is well under way.\n\nBug: 140590186\nBug: 121302864\nTest: Build and boot AOSP.\nTest: art/test/testrunner/testrunner.py --host -b -t 1932-monitor-events-misc\nTest: art/test/testrunner/testrunner.py --host -b -t 004-ThreadStress\nTest: art/test/testrunner/testrunner.py --host -b -t 132-daemon-locks-shutdown\nTest: 132-daemon-locks-shutdown repeated with increased thread counts and multiple\nconcurrent tests.\n\nChange-Id: Ic19d32652a2a05c1ca843b3e9c6e29e6770262da\n"
    },
    {
      "commit": "01a09bfd3839401c32d537b9a03b7991c4ffd20c",
      "tree": "c338d3d3e1e380681abbb0d345f87b5f14f0b53d",
      "parents": [
        "3cf233bf7ec0ce2ee1b714257dfcbd77dcb5cb0f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 07 14:29:22 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 07 14:29:38 2020 +0000"
      },
      "message": "Revert \"Make tests 1995, 2001, \u0026 2005 less likely to OOME.\"\n\nThis reverts commit 455bb387134bda286799ed727d4b33762ef1d5b1.\n\nBug: 147190668\nBug: 147278184\n\nReason for revert: b/147278184\n\nChange-Id: I2f81641ed3c69825207f425036e47f37c0eed687\n"
    },
    {
      "commit": "455bb387134bda286799ed727d4b33762ef1d5b1",
      "tree": "15ebdabc63d2cb82cd19a02c3b30127ad98e7941",
      "parents": [
        "467defb0519f45bf4274f9321d826ae8544b9874"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jan 06 14:07:26 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 07 09:56:27 2020 +0000"
      },
      "message": "Make tests 1995, 2001, \u0026 2005 less likely to OOME.\n\nIn some situations when run on a severly overloaded machine tests\n1995, 2001 and 2005 could fail due to OOMEs being thrown. Limit the\namount of memory the tests will use to prevent this from happening.\n\nTest: ./test.py --host\nBug: 147190668\nChange-Id: Ic5ea4405d6638c110456c3119b37c29d6f658bf7\n"
    },
    {
      "commit": "ead89ef62768faa06fedd279b86bccbed1464673",
      "tree": "27e3bef919a0775f45c0dfc08b6a26d7688e8a98",
      "parents": [
        "8d94dddfd60ab8122b0abb1a0d90fb13d752a7b6"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jan 03 21:37:10 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 03 22:50:59 2020 +0000"
      },
      "message": "Revert^3 \"Add spin loop to mutex, overhaul monitor\"\"\n\nThis reverts commit 3d52abe40e619497b1b59cfce92c74b5a417add5.\n\nReason for revert: Causes asan build timeout; Apparently the runtime\ngoes away while we\u0027re holding a system mutex. We now sleep forever\nwithout releasing it.\n\nBug: 140590186\nBug: 121302864\nChange-Id: I9e4dcaf820815c751aa803473809955451988ebd\n"
    },
    {
      "commit": "8d94dddfd60ab8122b0abb1a0d90fb13d752a7b6",
      "tree": "3c9195b1fd8a78ef3d112ed5b5663796946c9629",
      "parents": [
        "65a01a7a751f0ec8c0cbb5650c25724e1df93826"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Dec 18 11:13:03 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 03 22:11:47 2020 +0000"
      },
      "message": "Improve run-test tooling support\n\nA useful thing to do with run-test tests is to run them in parallel to\nreproduce low-probability flakes. We have a tool called\nparallel_run.py to do this. Unfortunately one had to manually create\nthe script that parallel_run.py would execute, making it rather\ndifficult to use. This adds a --create-runner flag to run-test that\nwill cause it to write a script (called $DEX_LOCATION/runit.sh) that\nis compatible with parallel_run.py\n\nTest: % ./test/run-test --host --64 --prebuild 001-HelloWorld\n      ...\n      Runnable test script written to /tmp/allight/test-180018/runit.sh\n      ...\n      % ./tools/parallel_run.py /tmp/allight/test-180018/runit.sh -j80\n\nChange-Id: I18d4ec72b51fb3c868ca4c6fe7f191e74f45b868\n"
    },
    {
      "commit": "3d52abe40e619497b1b59cfce92c74b5a417add5",
      "tree": "50c67eb9a980b1525f78e03d0941605bb9fa3887",
      "parents": [
        "eac38a141a95adc273059ba2f6ad26f073391ed3"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Nov 19 18:49:50 2019 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jan 03 19:15:21 2020 +0000"
      },
      "message": "Revert^2 \"Add spin loop to mutex, overhaul monitor\"\n\nThis reverts commit d56f7d1086b16f32c0771a41a4afb376b5fd3076.\n\nReason for revert: PS2 fixes the problems I identified.\n\nPS1 is straight revert^2 of, and thus identical to aosp/1111800.\n\nPS2 in addition:\n- Reduces the size of the test, when not modified to run as benchmark.\n- Disables the test in slow-running configurations, which timed out.\n- Stops using the mutex recursion count, and instead reintroduces\n  one at the monitor level. The plan is to eliminate the one in mutex\n  in a future CL.\n- Avoids modifying various monitor fields in suspended state.\n  MonitorInfo, deflation, etc., may look at the state of a suspended\n  thread and expect not to race. I don\u0027t think the original code had\n  this completely correct either, but PS1 made it worse.\n- Documents some aspects of the code that confused me at times.\n- Avoids dereferencing the monitor owner Thread* unless it holds the\n  thread list lock, and thus knows that the thread won\u0027t go away.\n- Stores a Thread* instead of a thread_id with the monitor owner method\n  and dex pc information used for debugging. This is required to avoid\n  extra thread list lock acquisitions, since we need to dereference the\n  owner to get the thread id.\n- Makes the thread list Contains method public, again in order to\n  support the above. (This ignores C/C++ restrictions on dangling\n  pointer use. We already rely on violating those elsewhere, and\n  the committees are trying to get their story straight about this.)\n- Causes the spin loop to give up immediately if the process is\n  shutting down. This gets us to an actual idle state sooner in that\n  case, and should hopefully mitigate the shutdown issues somewhat.\n  (We tried not spinnning in \"suspended\" state, but that reintroduced\n  some performance issues.)\n- Makes runtime shutdown code more defensive. Clear fields pointing to\n  deallocated objects. Always wait for quiescence AFTER all threads\n  are suspended.\n- Consistently checks for a runtime that\u0027s shutting down or missing\n  after waking up from a futex wait, thus avoiding touching deallocated\n  memory. I believe this was the cause of b/121302864, which PS1\n  managed to aggravate.\n- SleepForever() was a very light sleeper, waking up once a second.\n  Fix that, so the daemon threads we leak on runtime shutdown cost\n  us less.\n- Remove a data race from the \"was the runtime deleted\" logic.\n\nBug: 140590186\nBug: 121302864\nTest: Build and boot AOSP.\nTest: art/test/testrunner/testrunner.py --host -b -t 1932-monitor-events-misc\nTest: art/test/testrunner/testrunner.py --host -b -t 132-daemon-locks-shutdown\nTest: art/test/testrunner/testrunner.py --host -b -t 004-ThreadStress\n\nChange-Id: I6667c61beed2ba68c84cd4c0821fb8e21e188bbc\n"
    },
    {
      "commit": "2aa5a78482b4a1aedb35469117dfcc5238f1a1e1",
      "tree": "ef9a8dd472c45e2174251eb08c080695eab7d195",
      "parents": [
        "340fb0b49492cc8a0cab6108020793bf6e5fa339"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Dec 18 14:57:59 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 02 19:34:04 2020 +0000"
      },
      "message": "Add comment explaining global\n\nAdd a comment explaining why we use a global at one point in test 912\nas requested.\n\nTest: none\nChange-Id: I0760da74ed66e848b49a6a7f441dc27ff343e81e\n"
    },
    {
      "commit": "066dd902930582873e7d9372ac0c8483ac700cb9",
      "tree": "f3a0b47419fea78001faea017ba04e630e82fd2e",
      "parents": [
        "fb537087516e34e92e3c030ef2f7fc8b233d7a47"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Thu Dec 19 02:11:59 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 20 01:17:37 2019 +0000"
      },
      "message": "Revert submission 1194828-revert-1191937-art_apex_available-DWXQGTKMAR\n\nReason for revert: relanding with fix\nReverted Changes:\nIc4119368c:Revert submission 1191937-art_apex_available\nIa084976bb:Revert submission 1191937-art_apex_available\nIada86226d:Revert submission 1191937-art_apex_available\nIc76735eac:Revert submission 1191937-art_apex_available\nI1eb30e355:Revert submission 1191937-art_apex_available\nIcaf95d260:Revert submission 1191937-art_apex_available\nIe8bace4be:Revert submission 1191937-art_apex_available\nI8961702cf:Revert submission 1191937-art_apex_available\nI39316f9ef:Revert submission 1191937-art_apex_available\nI522a7e83b:Revert submission 1191937-art_apex_available\nI8b9424976:Revert submission 1191937-art_apex_available\nI48b998629:Revert submission 1191937-art_apex_available\n\nChange-Id: I7a101d39ff63c153675e4e741f9de1a15a778d33\n"
    },
    {
      "commit": "fb537087516e34e92e3c030ef2f7fc8b233d7a47",
      "tree": "f6663f1ee276c23e359acb3fa40904e5cddaa960",
      "parents": [
        "80599a28d1c865de7644a87111f49ee3b30f7c41"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 10 14:38:34 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 19 18:05:52 2019 +0000"
      },
      "message": "Remove class-hierarchy restriction from structural redefinition\n\nPreviously we restricted structural redefinition such that 2 or more\nclasses could not be redefined at the same time if one is a superclass\nof the other and the superclass was undergoing structural\nredefinition. This was done to simplify the creation of new objects.\nThis restriction is now removed by having the superclass take over the\ncreation of new instances for any subclasses, even if they are\nredefined too.\n\nTest: ./test.py --host\nBug: 134162467\nChange-Id: I8ae76e3b1fd17c1cf2a9993d7b82ed21a61503ef\n"
    },
    {
      "commit": "80599a28d1c865de7644a87111f49ee3b30f7c41",
      "tree": "e56dcf999630a752cd955a06c7f4c00b7add290b",
      "parents": [
        "1e88f980a85056165312331746862dc48186bc54"
      ],
      "author": {
        "name": "Joseph Murphy",
        "email": "murj@google.com",
        "time": "Thu Dec 19 01:06:54 2019 +0000"
      },
      "committer": {
        "name": "Joseph Murphy",
        "email": "murj@google.com",
        "time": "Thu Dec 19 01:06:54 2019 +0000"
      },
      "message": "Revert submission 1191937-art_apex_available\n\nOriginal Commit Message:\n\"\"\"\nRename modules that are APEX-only\n\nThe renamed modules are only available for APEXes, but not for the\nplatform. Use the \u003cmodule_name\u003e.\u003capex_name\u003e syntax to correctly install\nthe APEX variant of the modules.\n\"\"\"\n\nReason for revert: Build Cop - Breaks about 15 AOSP targets, with high confidence due to these changes being the only non-robot changes in those builds.\n\nReverted Changes:\nI190ce2d10:Use apex_available property\nI990e0a67e:Use apex_available property\nI0d1295683:Revert \"Avoid duplicated classes for boot dex jars...\nI5fb725403:Find the jar libraries in APEX from the correct pa...\nI322b1efcc:Rename modules that are APEX-only\nIfa2bd0f8f:Use apex_available property\nIac6533177:Use apex_available property\nIe999602c6:Use apex_available property\nI2a3d73397:Use apex_available property\nIc91bcbb9a:Use apex_available property\nIa6c324eed:Use apex_available property\nI964d0125c:Use apex_available property\n\nChange-Id: I1eb30e355cfce316b94cde0dd176002af8d222bb\n"
    },
    {
      "commit": "1e88f980a85056165312331746862dc48186bc54",
      "tree": "0cbeeaf951d6bd637a46f4f51faf80587f3ecc2b",
      "parents": [
        "c9af14e93f6a2691bf8231752d8d7c3e41b14c76"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Mon Dec 02 13:44:06 2019 +0900"
      },
      "committer": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Thu Dec 19 00:21:38 2019 +0000"
      },
      "message": "Use apex_available property\n\nUse apex_available property to prevent modules that are only for the ART\napex from being used outside of the APEX.\n\nThis change also fixes the reference to\n$(TARGET_OUT_SHARED_LIBRARIES)/$(lib).so to $(lib).com.android.art.debug\nphony module since the former is never installed to the system partition\ndue to their \u0027apex_available\u0027 settings.\n\nBug: 128708192\nBug: 133140750\nTest: m\nChange-Id: I990e0a67e066d9b1dc221748422a2f44449258da\n"
    },
    {
      "commit": "80777ed308b965175223455d738c890618a008b5",
      "tree": "ba8f6f8575f2a2a9d4157db7678328f4572d2458",
      "parents": [
        "c4cc618ad864c1f943daaef26914463d92d46ca0"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 17 17:07:33 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 18 20:05:06 2019 +0000"
      },
      "message": "Revert^2 \"Make sure all runtime threads are in the System thread group.\"\n\nThis reverts commit 9ca8b2bf46978e3a5698f8a27b48aa7eff3514df.\n\nThe test 2005 exposed an ABA race which could cause the test to\nsometimes fail with CHECK failures or GC corruption.\n\nReason for revert: Fixed issue causing ABA race in PreObjectAlloc with\n                   test.\nTest: ./test.py --host --debug-gc\nBug: 146178357\n\nChange-Id: If265f765e0c1e692755904b4c40bbc718d98f065\n"
    },
    {
      "commit": "219420ea349960863f35b01353356c10a3736e57",
      "tree": "1ccd6c5c8d7e47d61144d8a22a951d9860da9dce",
      "parents": [
        "acd7060266dac5dbbba1698df4ae086754e8a2bf"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 05 10:20:26 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Dec 18 17:11:27 2019 +0000"
      },
      "message": "Run-test: Support using --gdb and --gdbserver with --chroot\n\n--gdb and --gdbserver were unusable with --chroot due to --chroot\nchanging how dnslookup happened on device and differing symbol\ndirectory setup.\n\nThis CL does the basic setup so that gdb can connect to the remote\nprogram and (provided it is configured correctly) be used to debug it.\n\nIn order to get symbols one must set both the `solib-search-path` and\n`solib-absolute-prefix` appropriately. See GDB documentation for more\ninformation.\n\nTest: ./test/run-test --gdbserver --chroot /data/local/art-test-chroot --64 001-HelloWorld\nChange-Id: I598cb7654f5b8b669e1c658e25fb941c3d046666\n"
    },
    {
      "commit": "60d9775f9a56c6c4d18706528f0a31ac3707ea2c",
      "tree": "6b4031f59bf66206ac8c250bff7dc8ad958992c2",
      "parents": [
        "145f3c4aa4dc40b0682cac95a93163a79fb54f52"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 18 13:26:49 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 18 16:33:21 2019 +0000"
      },
      "message": "Prevent methods beint tested from being inline.\n\nOtherwise, we may end up never compiling them.\n\nTest: 566-polymorphic-inlining\nBug: 112676029\nChange-Id: Ic39058f55532a98cf689313f474c74fc2b7c1e3a\n"
    },
    {
      "commit": "00391824f4ee89f9fbed178a1ee32bc29fa77b3b",
      "tree": "aea6bc5e49801c5b4816257ab16a97181ef0d911",
      "parents": [
        "001e5b33ba7065dde0b85450830b605733ae1685"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 10 10:17:23 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 18 06:50:39 2019 +0000"
      },
      "message": "Add an implementation of Nterp for x64.\n\nAnd enable it on x64 when runtime and ArtMethod requirements are met\n(see nterp.cc).\n\nTest: test.py\nBug: 112676029\nChange-Id: I772cd20a20fdc0ff99529df7495801d773091584\n"
    },
    {
      "commit": "9ca8b2bf46978e3a5698f8a27b48aa7eff3514df",
      "tree": "4cca6a368f6adaee51360c819156ed4cd2e37e31",
      "parents": [
        "d03f8e63e6167af9148bc2ce374fd579e9a16202"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 17 08:36:45 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 17 08:37:33 2019 +0000"
      },
      "message": "Revert \"Make sure all runtime threads are in the System thread group.\"\n\nThis reverts commit 0e01c8d3f3c2d7cc4ac2cf5cf01ae913a4c6181e.\n\nBug: 146178357\nReason for revert: Breaks on debug-gc\n\nChange-Id: I2a305a271ef50263c2a722114f686a478d931c22\n"
    },
    {
      "commit": "d03f8e63e6167af9148bc2ce374fd579e9a16202",
      "tree": "41ec26974d148b569566c9069806b548e5ce8c26",
      "parents": [
        "0e01c8d3f3c2d7cc4ac2cf5cf01ae913a4c6181e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 13 11:51:58 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 17 07:25:50 2019 +0000"
      },
      "message": "Add a String.init range call.\n\nTest that ART can compile / interpret a range call to String.init.\n\nTest: 723-string-init-range\nChange-Id: If0f9e68978aed91e8e5a9b6a135489cc7bd72120\n"
    },
    {
      "commit": "0e01c8d3f3c2d7cc4ac2cf5cf01ae913a4c6181e",
      "tree": "81d5237a7aed99844527163d4739a64a60a1f96d",
      "parents": [
        "daad67f72f1d26fdb759326e504d540eab1e1392"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Dec 13 14:26:09 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Dec 17 03:25:23 2019 +0000"
      },
      "message": "Make sure all runtime threads are in the System thread group.\n\nWe want to be sure that one can suspend every thread in the \u0027main\u0027\nThreadGroup without affecting the ability of the runtime to perform\nnormal actions. Previously the jit thread-pool created threads in the\n\u0027main\u0027 thread group. Since some debugger actions can wait until all\njit threads are in a known good state, pausing all threads in the main\nthread-group can cause deadlocks.  To fix this we make the ThreadPool\ncreate all threads in the system thread-group.\n\nTo test this we perform structural redefinition with all threads\nexcept the main one suspended. Previously this would deadlock if run\nwith --jit, as we will pause the jit before performing redefinition.\n\nTest: ./test.py --host --jit\nTest: ./test.py --host\nBug: 146178357\nChange-Id: Ifcb0f29613d2fc22ca7913d4868a1e425b0bee5b\n"
    },
    {
      "commit": "b2e6d0fc6f4a7666627ab57e0f281036596d3c7f",
      "tree": "0917e7e98fe735c0377ff7a9ba06818ca97bff77",
      "parents": [
        "4847a071380288033e128986947d445e97827e5e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 12 17:15:23 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Dec 13 23:15:02 2019 +0000"
      },
      "message": "Fix incorrect DCHECK\n\nWe were incorrectly asserting that the disable_pop_frame_depth field\nalways increased instead of that it never decreased. This meant that\nwe would get DCHECK failures if one caused a recursive ClassPrepare or\nClassLoad event to trigger.\n\nTest: ./test.py --host\nBug: 146170757\nChange-Id: I980a8511033fa88f3fccebb7e654336133cf33bd\n"
    },
    {
      "commit": "4847a071380288033e128986947d445e97827e5e",
      "tree": "6dd09fa436f1be772713f39926701ad266c337e3",
      "parents": [
        "92e99406d1704a14a1969e2909986f590e980010"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 12 16:13:47 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Dec 13 23:15:02 2019 +0000"
      },
      "message": "Fix issue with observing invalid thread state.\n\nThreads have two references to their java.lang.Thread peers,\n\u0027tlsPtr_.opeer\u0027 and \u0027tlsPtr_.jpeer\u0027. The opeer is a direct\nmirror::Object* which is used while the thread is running. The jpeer\nis a global jobject used during early thread startup. As part of\nthread startup the new thread will delete and clear the \u0027jpeer\u0027 and\nonly use \u0027opeer\u0027 from then on. A minor (DCHECK\u0027d) consistency\nguarantee is that only one of these fields can be observed to be set\nat a time. Using JNI function table replacement it is possible to\nexecute JNI functions just before the DeleteGlobalRef of the jpeer. If\none calls other thread functions (such as through GetThreadInfo) these\nfunctions may DCHECK that jpeer is cleared. This would fail since\njpeer wasn\u0027t cleared until after the DeleteGlobalRef returns.\n\nThis fixes the bug by clearing the \u0027jpeer\u0027 field before calling\nDeleteGlobalRef.\n\nTest: ./test.py --host\nBug: 146170834\nChange-Id: I7e7941912a69fad9e75bbb55643eee0fa5d8a47d\n"
    },
    {
      "commit": "92e99406d1704a14a1969e2909986f590e980010",
      "tree": "04591869387a3544414a4af5d8749e3d84bf94bf",
      "parents": [
        "819b3626ad9690611db5113c4509cac1020163bf"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Dec 13 09:28:40 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 13 18:55:35 2019 +0000"
      },
      "message": "Add test 2000 to redefine-stress skips\n\nThe test uses invoke-polymorphic instruction which slicer doesn\u0027t know\nhow to decode.\n\nTest: ./test.py --host --redefine-stress -t 2000\nBug: 37272822\nBug: 146206656\nChange-Id: Id78f6baa03f90480fcdf554408d63e48aa5fd326\n"
    },
    {
      "commit": "270db1ce48377e3d9ca0c3dcec834ac807ca885b",
      "tree": "ffc553c6ff1ad37bdc3caca01ad686fa41ca0688",
      "parents": [
        "42b9c19772542457701d5efea26aae4449dec8c7"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 03 12:20:01 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 11 18:46:44 2019 +0000"
      },
      "message": "Revert^4 \"Allow structural redefinition on non-final classes.\"\n\nThis reverts commit 664999a12d6fc8a8ef5c0519b12ec1e8a51bb085.\n\nFixed issues with GC and quickened instructions in parent CLs.\n\nReason for revert: Fixed issues with GC CHECK fail and device SEGVs.\n\nTest: ./test.py --host\nTest: ./test.py --target\nBug: 134162467\nBug: 144168550\nChange-Id: Ibacddaf45beb72184f97d53d5d048bd442578658\n"
    },
    {
      "commit": "abd8f052512fa2bb404f1eb0a42ffe0e5d802b7e",
      "tree": "28bec78b6866aae9713c9eb471680c7aa4fb746b",
      "parents": [
        "3bdb97798d9a00c498833e00b49927f62b9e7f90"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Dec 06 10:49:17 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 10 22:51:35 2019 +0000"
      },
      "message": "Proactively dequicken on debuggable switch.\n\nPreviously we would generally not really consider dex2dex quickening\nwith debuggable processes. This could cause problems for structural\nredefinition since the -quick opcodes are incompatible with the types\nof changes structural redefinition allows. Furthermore this can cause\nsome unexpected behavior where (for example) check-casts might appear\nto pass even if debugger activity should cause it to fail.\n\nIn order to fix these issues we make the runtime more proactively\ndequicken dex-files when we start or switch to JAVA_DEBUGGABLE mode.\n\nTest: ./test.py --target --host\nTest: adb install -t ~/misc/Bandhook-Kotlin/app/build/outputs/apk/debug/app-debug.apk \u0026\u0026 adb shell monkey -p com.antonioleiva.bandhookkotlin -c android.intent.category.LAUNCHER 1\nBug: 134162467\nBug: 144168550\nChange-Id: I2673c91b72ae7048d2ff71a1cf68cf552d4e8004\n"
    },
    {
      "commit": "46845f6337f6036d9e09a4e84f099d768e9faba9",
      "tree": "61bc5e0fe796940d92c1ddcafac3983ce2739b23",
      "parents": [
        "1707bae46ae11b131478d994d7371241960a8427"
      ],
      "author": {
        "name": "Søren Gjesse",
        "email": "sgjesse@google.com",
        "time": "Tue Dec 10 09:14:16 2019 +0100"
      },
      "committer": {
        "name": "Søren Gjesse",
        "email": "sgjesse@google.com",
        "time": "Tue Dec 10 15:00:21 2019 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Remove reference to d8-compat-dx\"\"\"\"\n\nThis reverts commit 9561faf10d2e23f322da03743a30843296971fd0.\n\nTest: art/tools/buildbot-build.sh -j8 --host \u0026\u0026\n    art/tools/run-libcore-tests.sh \u0027--mode\u003dhost\u0027 \u0027--variant\u003dX64\u0027 --debug\nTest: art/test/testrunner/run_build_test_target.py -j80 art-test\n"
    },
    {
      "commit": "4ca2f4894ced84805c3c1b707cc1db790339a582",
      "tree": "08ba80b376bf0513589514913b1ba6a63667b0aa",
      "parents": [
        "dd09f7114ccdbe4cefd76c37f2db8b899a991923"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 25 16:07:22 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Dec 09 17:53:44 2019 +0000"
      },
      "message": "Enable JNI ID auto swap on debuggable\n\nMake JNI-ids automatically switch to Indices on debuggable processes.\nThis allows one to make use of structural redefinition in these\nprocesses.\n\nTest: Manual\nTest: listextensions agent\nBug: 134162467\nChange-Id: I097c16f26c9a42ab523b4cb06cdb603f70bb38bb\n"
    },
    {
      "commit": "9561faf10d2e23f322da03743a30843296971fd0",
      "tree": "6222d0135f32e9e4dc9b4f1372cd5fd0e88c19c6",
      "parents": [
        "b0a9747b363d1a368ed390fde07c6bfd6fbc78bf"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 06 13:35:59 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 06 16:03:40 2019 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Remove reference to d8-compat-dx\"\"\"\n\nThis reverts commit 64a5d1ae323efa384e317e3b8f2cc413a1ac2680.\n\nReason for revert: Breaks vogar.\n\nChange-Id: I561f577976648c10e5eec55bb8596c55ebd63948\n"
    },
    {
      "commit": "64a5d1ae323efa384e317e3b8f2cc413a1ac2680",
      "tree": "9ccd4683d427b7bc1cfcfb196cbc8414f2f2ff3b",
      "parents": [
        "b7bf843b04046f2758998c019e947611d0208217"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 06 11:06:52 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 06 11:08:16 2019 +0000"
      },
      "message": "Revert \"Revert \"Remove reference to d8-compat-dx\"\"\n\nThis reverts commit 1caa1270a53fa08ab9c6934d5bdd2da79c7bf89e.\n\nReason for revert: The R8 change has relanded.\n\nChange-Id: Ifa4e43410b895f0809860bb21c18142fd85500d3\n"
    },
    {
      "commit": "43f2f75df04495aa3dfd9bb80cf3180887d3b20e",
      "tree": "f1faf031608da284924e6ccd75b56307d55d17b1",
      "parents": [
        "9317031cd016e02a26cdeea8045df9925b33ffe2"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Dec 04 17:48:45 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 05 08:13:02 2019 +0000"
      },
      "message": "Revert^4 \"Implement Dot Product Vectorization for x86\"\n\nThis reverts commit 8e895008a3e2f2813bb46cb0c6bc76884e46e9ac.\n\nReason for revert: The test failure seems unrelated.\nBug: 144947842\n\nChange-Id: I7b437f0443d71a5c762e1a8372564ed989971cc9\n"
    },
    {
      "commit": "1caa1270a53fa08ab9c6934d5bdd2da79c7bf89e",
      "tree": "575686667078218972034ec7d695310c5aa88567",
      "parents": [
        "a142f712dffa675e3cd175bca89f37ff7160a07f"
      ],
      "author": {
        "name": "Jason Lee",
        "email": "jasl@google.com",
        "time": "Wed Dec 04 09:06:41 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 04 19:36:21 2019 +0000"
      },
      "message": "Revert \"Remove reference to d8-compat-dx\"\n\nThis reverts commit 1755ad0062e97d0e358c65600fd5e51b40b85d95.\n\nReason for revert: Potential culprit for Bug 145645482 - verifying through Forrest before revert submission\n\nChange-Id: I56d829b824630b0a5a408c1d8cda75086ebbb89d\n"
    },
    {
      "commit": "1755ad0062e97d0e358c65600fd5e51b40b85d95",
      "tree": "e838741fe9ac5530564bc5c0c1d3d0caadc61152",
      "parents": [
        "6c030d4174b9009808c6d72b9ab9955b1115a7fc"
      ],
      "author": {
        "name": "Søren Gjesse",
        "email": "sgjesse@google.com",
        "time": "Tue Dec 03 13:05:47 2019 +0100"
      },
      "committer": {
        "name": "Søren Gjesse",
        "email": "sgjesse@google.com",
        "time": "Wed Dec 04 07:48:48 2019 +0000"
      },
      "message": "Remove reference to d8-compat-dx\n\nTest: ./art/test/testrunner/run_build_test_target.py -j80 art-test\nChange-Id: Ifaf76a5804e6fa77168f319dd8c95ff2ea6fe326\n"
    },
    {
      "commit": "6c030d4174b9009808c6d72b9ab9955b1115a7fc",
      "tree": "158e75ca4828b8bae91e74080072c2c0270d0476",
      "parents": [
        "4f2e0889d10ae930f944c3c3f3d76e920a86c665"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 03 13:56:33 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 03 18:33:10 2019 +0000"
      },
      "message": "Pass a large code cache for test 638-checker-inline-cache-intrinsic.\n\nTest relies on the inline caches not being collected.\n\nTest: 638-checker-inline-cache-intrinsic\nChange-Id: I64b3756cba207d3583a98696051aa47e430fe249\n"
    },
    {
      "commit": "664999a12d6fc8a8ef5c0519b12ec1e8a51bb085",
      "tree": "f4ae1b0844ac075807229db9695ead7dec07ff8a",
      "parents": [
        "642af13b1b14794d8ab0db5cc82206213e648fa1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 03 08:47:26 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 03 08:47:45 2019 +0000"
      },
      "message": "Revert \"Revert^2 \"Allow structural redefinition on non-final classes.\"\"\n\nThis reverts commit f1b809ce611e943f926fff97cefe0930226ffcc2.\n\nReason for revert: Tests still fail\n\nBug: 134162467\nBug: 144168550\nChange-Id: Icdebc826b8630920b716afbfd6f338a29669fcc2\n"
    },
    {
      "commit": "bc19b7559e887310664a4c86ad3eb3b47749b087",
      "tree": "820961050c6904f89d9bfe67f8b936f2a5ec9d9c",
      "parents": [
        "0a19e212e56fc6fe2809b58072ddcf4acfdc568d"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Dec 02 18:54:13 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 20:35:34 2019 +0000"
      },
      "message": "Revert^2 \"Make opaque-jni-ids:swapable more efficient\"\n\nThis reverts commit 42c52f53b3c85b5e3c984bca8eaec2e03893dd2e.\nThis un-reverts commit 4e7dd70e3ee7a25089bed791df8865966cb4b837.\n\nWe were missing some null-checks that caused a null-pointer\ndereference to occur if one tried to get a jmethodID for an obsolete\nmethod when we start with index-ids.\n\nReason for revert: Fixes issue causing failure in art-jit config.\nTest: Manual\nTest: count-fields.py\nBug: 134162467\n\nChange-Id: Ie36c7a4edb70f96655b3b85e5f5eaa6bf47f5cc7\n"
    },
    {
      "commit": "0a19e212e56fc6fe2809b58072ddcf4acfdc568d",
      "tree": "6e5ef4a1bd1d08917ada2a49d5f807cfbc9a4e1a",
      "parents": [
        "42c52f53b3c85b5e3c984bca8eaec2e03893dd2e"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 27 14:35:24 2019 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Dec 02 18:56:46 2019 +0000"
      },
      "message": "Add null check in AppendToBootClassPath\n\nAim to diagnose test 1002 that crashed once due to having a null\nelement in ClassLinker::boot_class_path_.\n\nBug: 144895912\nTest: test/testrunner/test.py --host -j32\n\nChange-Id: Ibc072dbc1bd48cfde0ad5d3b56ebdc348d441085\n"
    },
    {
      "commit": "42c52f53b3c85b5e3c984bca8eaec2e03893dd2e",
      "tree": "1589dd3831503767b445734c02bf5e9e4abaaa0e",
      "parents": [
        "f1b809ce611e943f926fff97cefe0930226ffcc2"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Dec 02 18:50:16 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Dec 02 18:52:38 2019 +0000"
      },
      "message": "Revert \"Make opaque-jni-ids:swapable more efficient\"\n\nThis reverts commit 4e7dd70e3ee7a25089bed791df8865966cb4b837.\n\nReason for revert: Breaks art-jit column\n\nChange-Id: If1ea54c45f340a06b4601c1c8494b7dd7e8f7bf8\nTest: Manual\nTest: count-fields.py\nBug: 134162467\n"
    },
    {
      "commit": "f1b809ce611e943f926fff97cefe0930226ffcc2",
      "tree": "f75675383cf8018f9f333e608df35edbacf1c913",
      "parents": [
        "20b7a9b8aeaf76fc8f3248f211489fd00af73170"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 26 18:52:06 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 18:34:20 2019 +0000"
      },
      "message": "Revert^2 \"Allow structural redefinition on non-final classes.\"\n\nWe were incorrectly racing with the rest of the runtime in a couple of\nplaces. First we would return an ObjPtr of a newly defined class after\nholding it over a suspend point. This could lead to DefineClass\nreturning an obsolete class in some cases.\n\nWe also failed to ensure the class-status was synchronized between the\nold and new classes during structural redefinition. This could lead to\na class appearing to go backwards in status.\n\nThis reverts commit 88b1c83080afcb2bfb6f781ded1c90fe8f9eab4d.\n\nReason for revert: Fixed issues causing test failures.\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\n\nChange-Id: I4d0f7718490532f0ef14a9561b8e7000ef292b12\n"
    },
    {
      "commit": "be52a17c0f6af1c7563d8b9736ac4ace9b7ae0f0",
      "tree": "15575d6bd4cedacf667010359bf66d4a2e4a7700",
      "parents": [
        "26dbdcf69175ec3329ba8269b9a58b8d38862ecd"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Dec 02 16:48:17 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 18:14:41 2019 +0000"
      },
      "message": "Extend 952-invoke-custom to test invoke-custom/range\n\nTest: art/test/run-test --host 952-invoke-custom\nChange-Id: I44034c05a57ee4f89ab6f5a96f1e82a5b1b34906\n"
    },
    {
      "commit": "4e7dd70e3ee7a25089bed791df8865966cb4b837",
      "tree": "3cd2e8afc92262f0cdf474bcdbddde1723976575",
      "parents": [
        "08d0984bfeaff1a1bc2db2d51ecf45f2867b3bc4"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 25 13:47:01 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 16:57:13 2019 +0000"
      },
      "message": "Make opaque-jni-ids:swapable more efficient\n\n-Xopaque-jni-ids:swapable was rather memory inefficient, allocating an\nentire PointerSizedArray to mark a method/field as having a\nPointer-id. Since normally these will not be used once the JNI id type\nmoves to kPointer this is rather wasteful. By changing to instead have\na single marker object which is used instead of the full PointerArray\nwe can use significantly less memory in common use-cases.\n\nTest: Manual\nTest: count-fields.py\nBug: 134162467\nChange-Id: I224f0810373afef2335fad092eb758f91455f9e5\n"
    },
    {
      "commit": "08d0984bfeaff1a1bc2db2d51ecf45f2867b3bc4",
      "tree": "3c8c47aae746f4057d541448f873d6e287a092d6",
      "parents": [
        "2d8b7f4ef7a305b98dd54d259e0c2b9f6aed4fd7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 02 12:38:49 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 02 15:44:20 2019 +0000"
      },
      "message": "Allow late lookup for @FastNative methods.\n\nAvoid failing a runtime state assertion.\n\nTest: Enable tests in 178-app-image-native-method\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nBug: 112189621\nChange-Id: I3eb5c9fd239743732866e8ea0863a84bf85f7b20\n"
    },
    {
      "commit": "457e9fa3833ef11530056d010f247ad087fd2184",
      "tree": "54b8a9dcf44646c3e43a9085d581660c5d9a0132",
      "parents": [
        "17a39babb7f42cbe108d6fab2760cbdc68b821a2"
      ],
      "author": {
        "name": "Usama Arif",
        "email": "usama.arif@linaro.org",
        "time": "Mon Nov 11 15:29:59 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 28 09:51:05 2019 +0000"
      },
      "message": "ARM64: FP16 greater/less/greaterEquals/lessEquals intrinsics for ARMv8\n\nThis CL implements intrinsics for greater, greaterEquals, less,\nlessEquals methods with ARMv8.2 FP16 instructions. This requires the\nARMv8.2 AArch64 asimd half precision extension.\n\nThe time required in milliseconds to execute the below code for the four\nintrinsics on Pixel3 is (The code below is for FP16.less but is similar\nfor the rest of the intrinsics):\n\n- Java implementation libcore.util.FP16.less():\n    - big cluster only: 19876\n    - little cluster only: 47525\n- arm64 Intrinisic implementationi for less:\n    - big cluster only: 14526 (~27% faster)\n    - little cluster only: 45815 (~4% faster)\n\n- Java implementation libcore.util.FP16.lessEquals():\n    - big cluster only: 19856\n    - little cluster only: 47419\n- arm64 Intrinisic implementation for lessEquals:\n    - big cluster only: 14469 (~27% faster)\n    - little cluster only: 45762 (~4% faster)\n\n- Java implementation libcore.util.FP16.greater():\n    - big cluster only: 19854\n    - little cluster only: 47623\n- arm64 Intrinisic implementation for greater:\n    - big cluster only: 14519 (~27% faster)\n    - little cluster only: 45722 (~4% faster)\n\n- Java implementation libcore.util.FP16.greaterEquals():\n    - big cluster only: 19865\n    - little cluster only: 47216\n- arm64 Intrinisic implementation for greaterEquals:\n    - big cluster only: 14485 (~27% faster)\n    - little cluster only: 45729 (~4% faster)\n\npublic static boolean benchmarkComparison(){\n    boolean ret \u003d false;\n    long before \u003d 0;\n    long after \u003d 0;\n    before \u003d System.currentTimeMillis();\n    for(long i \u003d 0; i \u003c 1e9; i++){\n        // FP16.toHalf(12.3) \u003d 0x4a26, FP16.toHalf(12.4) \u003d 0x4a33\n        // FP16.toHalf(-12.3) \u003d 0xca26, FP16.toHalf(-12.4) \u003d 0xca33\n        ret |\u003d FP16.less((short) 0x4a26,(short) 0x4a33);\n        ret |\u003d FP16.less((short) 0x4a33,(short) 0x4a26);\n        ret |\u003d FP16.less((short) 0xca26,(short) 0xca33);\n        ret |\u003d FP16.less((short) 0xca33,(short) 0xca26);\n    }\n    after \u003d System.currentTimeMillis();\n    System.out.println(\"Time of FP16.less (ms): \" + (after - before));\n    System.out.println(ret);\n    return ret;\n}\n\nTest: 580-fp16\nTest: art/test/testrunner/run_build_test_target.py -j80 art-test-javac\nChange-Id: Id1a2c3e7328c82c798fcaf1fa74f5908a822cd0b\n"
    },
    {
      "commit": "a2c4d61e482a15974e3e220bcd62a64043ee536f",
      "tree": "ab630ea6c4aa6d8dd9b585724873d89aca769d51",
      "parents": [
        "7dac864d7eae3d731eeacf55cfc7f71b4df6cee3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 27 11:33:18 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 27 11:35:28 2019 +0000"
      },
      "message": "Allow test 178 to pass for --no-image.\n\nJust avoid checking that the app image is loaded.\n\nTest: testrunner.py --host --no-image -t 178\nBug: 112189621\nChange-Id: Ic7315ba273306e78316da466ce5af4a31af1dbec\n"
    },
    {
      "commit": "7dac864d7eae3d731eeacf55cfc7f71b4df6cee3",
      "tree": "9f27bb1c0b6f076c2dd1b721441200f9f7a78022",
      "parents": [
        "047081a1509762879a9eb51981982af65f419bac"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 06 17:09:30 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 27 10:02:22 2019 +0000"
      },
      "message": "Clean up JNI dlsym lookup trampoline.\n\nMake sure the GenericJniTrampoline recognizes the trampoline\nin primary boot image oat file. Rename that trampoline, add\na test and flag some issues in the code.\n\nTest: New test 178-app-image-native-method.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: testrunner.py --host -t 178-app-image-native-method\nBug: 112189621\nChange-Id: I8f8cd11998af536fd3842dd4183a25f0367655a6\n"
    },
    {
      "commit": "f92f6f12f3be976afb8f2ac8e8bbeaef72ef8b33",
      "tree": "172d92f23364dab93e94ef003d38f8a72dbf0062",
      "parents": [
        "0aa02069a224384f0c6a8d78c3465290b61bdf67"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 26 12:37:14 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 26 12:56:54 2019 -0800"
      },
      "message": "Skip 909 \u0026 126 with zipapex\n\nTests 909 and 126 fail on zipapex due to their \u0027run\u0027 scripts doing\nnon-standard things. Add support for run-test skipping based on a\n\u0027zipapex\u0027 selector and add these tests to the skip list.\n\nTest: ./test/testrunner.py --no-build-dependencies --runtime-zipapex \u003cpath\u003e -t 909 -t 910\nBug: 135507613\nChange-Id: I75c103f90d73c8703649e9370c9dfc8059dd858d\n"
    },
    {
      "commit": "0aa02069a224384f0c6a8d78c3465290b61bdf67",
      "tree": "b1cc859ce0449e0943e756544d2a7a581cf870ca",
      "parents": [
        "88b1c83080afcb2bfb6f781ded1c90fe8f9eab4d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 21 16:24:09 2019 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 26 17:26:31 2019 +0000"
      },
      "message": "Add resetJitCounters\n\nUsed to avoid Jit counters from class preloading being recorded in the\nboot profiles.\n\nBug: 139883463\nBug: 142564450\nTest: test/run-test 2230-profile-save-hotness\nChange-Id: I69c548ea336e9fb33e74988668e5d3c93b8a6705\n"
    },
    {
      "commit": "88b1c83080afcb2bfb6f781ded1c90fe8f9eab4d",
      "tree": "e3ee63ccca83c60c5790e51610349889f44daacf",
      "parents": [
        "8e895008a3e2f2813bb46cb0c6bc76884e46e9ac"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Nov 26 14:13:44 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 26 15:55:26 2019 +0000"
      },
      "message": "Revert \"Allow structural redefinition on non-final classes.\"\n\nThis reverts commit c47040d31cbcd8cddd5fadb552b4f0f6c94b5bd0.\n\nReason for revert: Breaks ART tests (see e.g. b/145197371).\n\nBug: 145197371\nBug: 134162467\nBug: 144168550\nChange-Id: Ia8e5788655057e380fc723a38900d26d69cda938\n"
    },
    {
      "commit": "8e895008a3e2f2813bb46cb0c6bc76884e46e9ac",
      "tree": "c30e54521e1b31eb50e282b54be138f888d9870e",
      "parents": [
        "7c9cfe8b3f986e7cbc18350ad7b9b72f58f5846c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 26 14:05:40 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 26 14:06:21 2019 +0000"
      },
      "message": "Revert \"Revert^2 \"Implement Dot Product Vectorization for x86\"\"\n\nThis reverts commit 7cf5607f472020711e36eedbbfebb25b40d3f90e.\n\nBug: 144947842\n\nReason for revert: Seems to have broken android.jvmti.cts.JvmtiHostTest1936#testJvmt\n\nChange-Id: Ied6ff6ddf1cb2e3e76adcaa0fda5e36af254b7c5\n"
    },
    {
      "commit": "c47040d31cbcd8cddd5fadb552b4f0f6c94b5bd0",
      "tree": "50df569420cd6746daadf1487933719d1f86d66b",
      "parents": [
        "dc540dfffb6863177143d024dd6f491775d77585"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 13 09:33:52 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 26 02:11:19 2019 +0000"
      },
      "message": "Allow structural redefinition on non-final classes.\n\nThis adds support for structurally redefining non-final,\nnon-finalizable classes. The only restriction is that one cannot\nredefine a class at the same time as any of its supertypes, if a\nstructural redefinition is occurring. The structural redefinition may\nnot remove any fields or methods, change the superclass or change the\nimplemented interfaces. Adding new methods or fields, both static or\nnon-static, public, private, protected, or package-private, is\nsupported.\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\nChange-Id: I32e9e854b3e56270170b10e8f5aba9de8f6bfdfa\n"
    },
    {
      "commit": "aedc9bc5ebdacadc9efe4465173e1b7ca7edc226",
      "tree": "5889afe345495e831f6c390f215fc0ca611b630d",
      "parents": [
        "3c036885d2d5e6129c1d6b5933be2fce13fbdc79"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 04 15:31:42 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 25 13:54:49 2019 +0000"
      },
      "message": "Ensure we can always enter OSR code\n\nWhen the the loop header is not the target of a back-edge,\nwe used to never enter the OSR code even if it\u0027s been compiled.\n\nTest: testrunner.py --host --jit -t 570-checker-osr-locals\n      (it used to get stuck, you can kill the dalvikvm to check that\n      the weirdLoop was OSR-compiled)\nBug: 136743846\n\nChange-Id: Iae55463eff92adccf9adec842e04f8ff6d9d8568\n"
    },
    {
      "commit": "505e56bb5519ac5ebc50ab1cc79509aa0de640cb",
      "tree": "c24eb3c35c4a4d4882206c7dde929ac93ad166d2",
      "parents": [
        "3e9d7ae3c2b303be546e84f73a3a3c2d7cbd74e3"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Nov 20 08:49:24 2019 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Nov 20 16:07:10 2019 +0000"
      },
      "message": "Temporary hack: Force the use of `signal_dumper` as timeout handler on host.\n\nThe use of signal_dumper has been globally disabled in\n`test/etc/run-test-jar` since\nhttps://android-review.googlesource.com/c/platform/art/+/1144349/\n(commit 352482c000830755405f5da3624891ff4690a36a) in order to get\nfiner observations of the process timing out in\n`test/testrunner/testrunner.py`, implemented (as a temporary measure)\nin https://android-review.googlesource.com/c/platform/art/+/1145595\n(commit 2bd8bfd716d4b07d7df017596af7b8394006cf38).\n\nForce-restore the use of `signal_dumper` in `test/etc/run-test-jar` on\nhost, so that we can get backtraces when a host run-test times out.\n\nTest: Test the code path locally with very low timeout.\nTest: Rely on the Android Build (master-art-host) and the ART Buildbot.\nBug: 144333851\nBug: 144360582\nChange-Id: I3960f0b4346de0bf640ba0b671c21b4025550d76\n"
    },
    {
      "commit": "986914bfd60c1cace9726e9029598d72cbf279e1",
      "tree": "556e5549254e4d5b280a63451fa8673ab36fba7b",
      "parents": [
        "5697faba0e910374da285f5f848d2aaf7ee6ffec"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 19 01:12:25 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 19 17:15:48 2019 +0000"
      },
      "message": "Revert^4 \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit 2f8c1ac61b0c611d67badea70261c851ed19b82a.\n\nIf there were pending tasks to jit compile a method which is made\nobsolete the JIT would CHECK fail, since the newly obsolete method is\nmarked DontCompile. This didn\u0027t happen with non-structural\nredefinition since in that case the \u0027valid\u0027 ArtMethod always remains\nthe same.\n\nTo fix this we just have the JitTask check if the method it\u0027s\ncompiling is compilable and fail if it\u0027s not.\n\nReason for revert: Fixed JIT check failure.\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\nBug: 144729319\nChange-Id: Ib867b2de13bb4c2978b4538a5851c647caf0e1cc\n"
    },
    {
      "commit": "d56f7d1086b16f32c0771a41a4afb376b5fd3076",
      "tree": "41e048cb90e749ffb7e6496db841d4ca80628b5b",
      "parents": [
        "9965feffb2f55ff1e6dfacd396f65e642c22b799"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Nov 19 06:03:11 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Nov 19 10:28:55 2019 +0000"
      },
      "message": "Revert \"Add spin loop to mutex, overhaul monitor\"\n\nThis reverts commit 0d508a01106746e0d8865752850f4f03bcce1e01.\n\nReason for revert: Preparing revert, in case the art/ci/host-x86_64-cdex-fast failure recurs.\n\nBug: 140590186\n\nChange-Id: I404b6ee498ff4eda73ec3b8fc4bf8e92efb2705f\n"
    },
    {
      "commit": "9965feffb2f55ff1e6dfacd396f65e642c22b799",
      "tree": "e90f112521b2484897dfe22bc53b3d5098ecd314",
      "parents": [
        "ffc791c748dd28cc6bc7fff825b3c1b7af96abb3"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Nov 19 09:23:16 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Nov 19 09:25:20 2019 +0000"
      },
      "message": "Revert \"Temporary hack: Also print extra backtraces on test timeouts on host.\"\n\nThis reverts commit 25d536e67fc69e0413298989f1b21b6fdcece682.\n\nReason for revert: build infra does not have python 3.5, so subprocess.run().\nBug: 142039427\nBug: 144333851\nBug: 144360582\n\nChange-Id: Ide90b3e78a458f6c941c1e36b4f5fb084259f5b1\n"
    },
    {
      "commit": "2f8c1ac61b0c611d67badea70261c851ed19b82a",
      "tree": "97f87c13f69d033cf3f4120af66a7c5391c2da35",
      "parents": [
        "96d8585ebb9e21fc27a59ddd4173ca62ad93c194"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 19 01:09:31 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 19 01:11:18 2019 +0000"
      },
      "message": "Revert^3 \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit 8ba9738d55c11dfb7f85a7de9b1d6a4e1225ad20.\n\nReason for revert: Seems to be failing with `Check failed: method-\u003eIsCompilable()`\n\nTest: None\nBug: 134162467\nBug: 144168550\nBug: 144729319\nChange-Id: Ida9228fa171ae16d803b5ad4438e233a2ed4ffb2\n"
    },
    {
      "commit": "8ba9738d55c11dfb7f85a7de9b1d6a4e1225ad20",
      "tree": "5aabe6d6af38514af0822ab9529a39f542aaa175",
      "parents": [
        "0d508a01106746e0d8865752850f4f03bcce1e01"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 18 17:52:55 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 18 20:19:43 2019 +0000"
      },
      "message": "Revert^2 \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit d0e354e54da2f2e79b6fc2ff0e13d53c74976b08.\n\nWe were incorrectly continuing to use an ObjPtr over a suspend point\n(in this case a CollectGarbageInternal). This led for the ObjPtr to be\ninvalidated. Instead we should have been using a Handle (that already\nexists).\n\nReason for revert: Fixed stale ObjPtr use.\n\nTest: ./test.py --host\nTest: ./test/testrunner/run_build_test_target.py -j80 art-debug-gc\nBug: 134162467\nBug: 144168550\nBug: 144590579\nChange-Id: Ied9856a707d377e97d34c7450376caf2a0b83255\n"
    },
    {
      "commit": "0d508a01106746e0d8865752850f4f03bcce1e01",
      "tree": "727e9b6a420c3ff1206e97a9ab0369b9947cd797",
      "parents": [
        "25d536e67fc69e0413298989f1b21b6fdcece682"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Aug 30 16:14:32 2019 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Nov 18 18:06:50 2019 +0000"
      },
      "message": "Add spin loop to mutex, overhaul monitor\n\nSince Linux context switch overhead is typically larger than a\nmicrosecond, this may greatly reduce the overhead of waiting for a\nmutex that is only briefly held by another thread. Rather than going\nto sleep and having to be woken back up again, at a cost of several\nmicroseconds, we just spin, hopefully for much less than microsecond,\nuntil the mutex becomes available. It does waste some CPU cycles\nwhen spinning fails, either because the lock is held too long, or\nwe are being scheduled against the thread holding the lock. But we\nexpect those to be unlikely.\n\nWe test the lock only a few times, with pauses in between. It\u0027s\nunclear that\u0027s beneficial; we should perhaps just loop reading\nthe variable. In general, this needs further tuning.\n\nAdd a test that mutual exclusion works, which can also be run as\nlock microbenchmark.\n\nThe old monitor implementation did not benefit much from this, because\nit used mutex only as a low-level lock to protect the monitor data\nstructure. Instead use monitor_lock_ as the actual lock providing\nmutual exclusion for the monitor, i.e. hold onto it while the monitor\nis fatlocked.  Among other things, this requires that the monitor_lock_\nalways be acquired by, or explicitly on behalf of, the thread holding\nthe monitor.\n\nThis in turn makes it really hard to deflate a monitor held by another\nthread. Just stop doing that, since it was unclear whether that\u0027s\nactually beneficial.\n\nThe main advantages of the monitor change are:\n- Half the number of mutex acquisitions.\n- Easier to effectively spin.\n- No possibility of blocking while trying to release a monitor.\n\nNo longer compute owner method and dex pc values on monitor entry\nunless we\u0027re tracing. This was expensive and increased lock hold times\nsufficiently that it often made spinning ineffective.\n\nHave mutex acquisition call futex wait in a loop between updating\nwaiter count. The old way resulted in extra futex wakeups in highly\ncontended situations.\n\nConditionally disable frame size warning for Heap::PreZygoteFork().\nOtherwise the platform doesn\u0027t build with ART_USE_FUTEXES \u003d 0, which\nwe needed for testing.\n\nBased on the new test, this appears to get us about a decimal order\nof magnitude in inflated contended locking performance. Single-threaded\nor scalable applications (i.e. most) should be unaffected. But it should\nprevent applications that do encounter contention from \"falling off a\ncliff\", or at least greatly reduce the height of the cliff. And it\nshould make performance more repeatable by making it less dependent on\nwhether a monitor happens to get inflated.\n\nBug: 111835365\nBug: 140590186\nTest: Successfully built and ran monitor tests. Boots AOSP.\nTest: Build platform with ART_USE_FUTEXES \u003d 0.\nTest: Check contention messages in log after booting AOSP.\nTest: Check systrace output while partially running new test.\n\nChange-Id: Iff7457fff59efcb24e25d35a4ef71b67b8a9082a\n"
    },
    {
      "commit": "25d536e67fc69e0413298989f1b21b6fdcece682",
      "tree": "fa497dbf5ce019cca5c7e84c51a4bba86373f39b",
      "parents": [
        "fcd5a282ceaa6ff4573cb9d08b7e359684943cb2"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Nov 15 13:43:50 2019 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Nov 18 18:02:57 2019 +0000"
      },
      "message": "Temporary hack: Also print extra backtraces on test timeouts on host.\n\nThere is no `debuggerd` on host, and `gdb` may require root\npermissions to run `ptrace()`. Send `SIGQUIT` to ART to ask it to dump\ninformation via its signal handler instead.\n\nTest: Rely on the Android Build (master-art-host) and the ART Buildbot.\nBug: 142039427\nBug: 144333851\nBug: 144360582\nChange-Id: I7d057015d27234c5c2db68c15e1d0103b1c0a9d9\n"
    },
    {
      "commit": "d0e354e54da2f2e79b6fc2ff0e13d53c74976b08",
      "tree": "743c595ef2cd94f89b487974e698d18c7d297330",
      "parents": [
        "c0200a984cacb6c0911d046a018cd11c7d20646b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 18 08:37:50 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 18 08:38:15 2019 +0000"
      },
      "message": "Revert \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit 283bb322de84ac570b987c65a1015e2dbcbfad7c.\n\nReason for revert: Test flakes\n\nBug: 134162467\nBug: 144168550\nBug: 144590579\nChange-Id: I2259c030f03a72f6b7bcda10288bd23cb3258164\n"
    },
    {
      "commit": "283bb322de84ac570b987c65a1015e2dbcbfad7c",
      "tree": "18f5d68c78e56a2d398192c8340269a60706b7a0",
      "parents": [
        "2c5dfe16ab2b0f8fbd14dedc161eb4658a8673fc"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 29 11:15:05 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Nov 16 00:26:03 2019 +0000"
      },
      "message": "Initial support for adding virtuals with structural redefinition\n\nInitial implementation of adding virtual methods and non-static fields\nusing structural redefinition. Currently this is limited to \u0027final\u0027,\nnon-finalizable classes. These restrictions will be removed or\nloosened in the future.\n\nAll non-collected instances of the redefined class will be made\nobsolete and reallocated. This can cause significant GC load.\n\nThis feature does not work with any of the -quick opcodes and should\nonly be used with dex files that haven\u0027t undergone dex2dex\ncompilation (that is --debuggable and BCP dex files).\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\n\nChange-Id: Ia401d97395cfe498eb849a661ea9a900dfaa6da3\n"
    },
    {
      "commit": "56f1332113c3b8b1844c04683b9cb9dc5a0bd346",
      "tree": "849942dca13874ef8e86f6ad9cce76ad5152b429",
      "parents": [
        "3e20d0a7748c8810bff9fe99298758930fbe5300"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 15 14:07:19 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 15 17:42:51 2019 +0000"
      },
      "message": "Fix pruning invoke environment for StringBuilder append pattern.\n\nTest: Extra test in 697-checker-string-append\nTest: testrunner.py --host --optimizing\nBug: 19575890\nBug: 144300699\nChange-Id: I3934eb01a62dbbed8b8f9f94ce3ba02051538bb0\n"
    },
    {
      "commit": "2221bafe9ad4f7f69d8dc67fa19aaee0f2e51bcd",
      "tree": "d5f0bb16efdef93fc50dbcc9390874cbc684d7c5",
      "parents": [
        "b8012103855f50651bbe2e6d5f2ff3079afccbc9"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 13 12:35:20 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 13 21:59:46 2019 +0000"
      },
      "message": "Add ForkJoinPool* threads to 911 Ignored regex\n\nCTS tests now sometimes have a ForkJoinPool thread live during test\nrunning. This thread needs to be ignored by our test.\n\nTest: ./test.py --host\nTest: atest CtsJvmtiRunTest911HostTestCases\nBug: 144234269\nChange-Id: I3e9d64903f680ecdd6994d5ae1f1fa6362feda10\n"
    },
    {
      "commit": "b8012103855f50651bbe2e6d5f2ff3079afccbc9",
      "tree": "085fc7431f9856ae55a1bc0385092043186895d9",
      "parents": [
        "94fd9eaee76e862932dded6583a9c052e5aa9efc"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 13 01:41:04 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 13 20:55:58 2019 +0000"
      },
      "message": "Revert^2 \"Correctly quote -Xbootclasspath argument in run-test-jar\"\n\nThis reverts commit a8a17a4b92b290892627f0ccc38973c847e0a7fb.\n\nThis limits the quoting to only --gdbserver, which is the one case\nwhere we know there is a problem with the glob characters.\n\nReason for revert: Fixed issue causing debug-gc to fail\nTest: ./test.py --host\nTest: ./test/testrunner/run_build_test_target.py art-debug-gc\nTest: ./test/run-test --host --strace --64 001-HelloWorld\n\nChange-Id: I60f40d21b08b0514c24ac6a3db260aad19a539b8\n"
    },
    {
      "commit": "688ff644f023e91cb50709306f4c8eb713632f64",
      "tree": "182c5b9d119dacb6294f8870122b8a48c69f3872",
      "parents": [
        "df66de0b5e3fda8ff7af2b39cb133e38884ce958"
      ],
      "author": {
        "name": "Ian Zerny",
        "email": "zerny@google.com",
        "time": "Mon Nov 04 18:42:09 2019 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 13 08:48:39 2019 +0000"
      },
      "message": "Update 913-heaps expectation for change in D8 register assignments.\n\nTest: testrunner.py --host -t 913\nChange-Id: I36f4e1bc4cf02612ca82c461b39e2064d8d0b340\n"
    },
    {
      "commit": "a8a17a4b92b290892627f0ccc38973c847e0a7fb",
      "tree": "4a21892770798756ab9b8846685e5438e6010920",
      "parents": [
        "682715ee1448959801640975005abb8b876b80b3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 13 01:37:32 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 13 01:39:32 2019 +0000"
      },
      "message": "Revert \"Correctly quote -Xbootclasspath argument in run-test-jar\"\n\nThis reverts commit cb809bb89eca9889a7ad443372e6a918f3c14650.\n\nReason for revert: failing debug-gc it seems.\n\nChange-Id: I7f56e22a7075a4160d9082cb8fcb8b414cd67607\nTest: None\n"
    },
    {
      "commit": "cb809bb89eca9889a7ad443372e6a918f3c14650",
      "tree": "7aba43ca4009dbcf30363836e542a8fe82283d0e",
      "parents": [
        "681692b6291008caaddf4971eab7ea9f9b25d9ca"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 11 15:16:28 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 12 22:04:55 2019 +0000"
      },
      "message": "Correctly quote -Xbootclasspath argument in run-test-jar\n\nWe were passing shell glob-characters to dalvikvm but didn\u0027t always\nquote them correctly. This could cause issues as tools like gdb would\ntry (and fail) to expand them.\n\nTest: ./test.py --host --optimizing\nTest: ./test/run-test --host --gdbserver --64 001-HelloWorld\nChange-Id: Id20ace4be0b71582de3a500282a7f59c71f366f1\n"
    },
    {
      "commit": "681692b6291008caaddf4971eab7ea9f9b25d9ca",
      "tree": "cad26b5b6016cc27baa480e5f4b83faac3317ef0",
      "parents": [
        "665aac46784684dfb85fe999f6a566ed0cf173ef"
      ],
      "author": {
        "name": "Usama Arif",
        "email": "usama.arif@linaro.org",
        "time": "Wed Oct 30 16:23:26 2019 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Nov 12 20:58:17 2019 +0000"
      },
      "message": "ARM64: FP16.rint() intrinsic for ARMv8\n\nThis CL implements an intrinsic for rint() method with\nARMv8.2 FP16 instructions.\n\nThis intrinsic implementation achieves bit-level compatibility with the\noriginal Java implementation android.util.Half.rint().\n\nThe time required in milliseconds to execute the below code on Pixel3:\n- Java implementation android.util.Half.rint():\n    - big cluster only: 19828\n    - little cluster only: 61457\n- arm64 Intrinisic implementation:\n    - big cluster only: 14186 (~28% faster)\n    - little cluster only: 54405 (~11% faster)\n\nAnalysis of this function with simpleperf showed that approximately only\n60-65% of the time is spent in libcore.util.FP16.rint. So the percentage\nimprovement using intrinsics is likely to be more than the numbers stated\nabove.\n\nAnother reason that the performance improvement with intrinsic is lower\nthan expected is because the java implementation for values between -1 and\n1 (abs \u003c 0x3c00) only requires a few instructions and should almost give\na similar performance to the intrinsic in this case. In the benchmark function\nbelow, 46.8% of the values tested are between -1 and 1.\n\npublic static short benchmarkrint(){\n    short ret \u003d 0;\n    long before \u003d 0;\n    long after \u003d 0;\n    before \u003d System.currentTimeMillis();\n    for(int i \u003d 0; i \u003c 50000; i++){\n        for (short h \u003d Short.MIN_VALUE; h \u003c Short.MAX_VALUE; h++) {\n            ret +\u003d FP16.rint(h);\n        }\n    }\n    after \u003d System.currentTimeMillis();\n    System.out.println(\"Time of FP16.rint (ms): \" + (after - before));\n    System.out.println(ret);\n    return ret;\n}\n\nTest: 580-fp16\nTest: art/test/testrunner/run_build_test_target.py -j80 art-test-javac\nChange-Id: I075c3e85a36fd9bce14deee437c5b961bd667b5d\n"
    },
    {
      "commit": "665aac46784684dfb85fe999f6a566ed0cf173ef",
      "tree": "343d6956068b1c21e0fc4af018e1322d7685411b",
      "parents": [
        "b9f02c2f8624bbf0746939e3b2735a1537a567b6"
      ],
      "author": {
        "name": "Usama Arif",
        "email": "usama.arif@linaro.org",
        "time": "Tue Oct 29 11:13:18 2019 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Nov 12 20:58:17 2019 +0000"
      },
      "message": "ARM64: FP16.ceil() intrinsic for ARMv8\n\nThis CL implements an intrinsic for ceil() method with\nARMv8.2 FP16 instructions.\n\nThis intrinsic implementation achieves bit-level compatibility with the\noriginal Java implementation android.util.Half.ceil().\n\nThe time required in milliseconds to execute the below code on Pixel3:\n- Java implementation android.util.Half.ceil():\n    - big cluster only: 19447\n    - little cluster only: 62638\n- arm64 Intrinisic implementation:\n    - big cluster only: 14260 (~27% faster)\n    - little cluster only: 54387 (~13% faster)\n\nAnalysis of this function with simpleperf showed that approximately only\n60-65% of the time is spent in libcore.util.FP16.ceil. So the percentage\nimprovement using intrinsics is likely to be more than the numbers stated\nabove.\n\nAnother reason that the performance improvement with intrinsic is lower\nthan expected is because the java implementation for values between -1 and\n1 (abs \u003c 0x3c00) only requires a few instructions and should almost give\na similar performance to the intrinsic in this case. In the benchmark function\nbelow, 46.8% of the values tested are between -1 and 1.\n\npublic static short benchmarkCeil(){\n    short ret \u003d 0;\n    long before \u003d 0;\n    long after \u003d 0;\n    before \u003d System.currentTimeMillis();\n    for(int i \u003d 0; i \u003c 50000; i++){\n        for (short h \u003d Short.MIN_VALUE; h \u003c Short.MAX_VALUE; h++) {\n            ret +\u003d FP16.ceil(h);\n        }\n    }\n    after \u003d System.currentTimeMillis();\n    System.out.println(\"Time of FP16.ceil (ms): \" + (after - before));\n    System.out.println(ret);\n    return ret;\n}\n\nTest: 580-fp16\nTest: art/test/testrunner/run_build_test_target.py -j80 art-test-javac\nChange-Id: I5474c1d0d7c08ec77a6f82c4fb67f555253bfa67\n"
    },
    {
      "commit": "b9f02c2f8624bbf0746939e3b2735a1537a567b6",
      "tree": "ac6ad1f4125bd459a3b424cb5ff8b8029a3d5c7e",
      "parents": [
        "f1b18facd1edd6c8652c42085c5432c878507c8e"
      ],
      "author": {
        "name": "Usama Arif",
        "email": "usama.arif@linaro.org",
        "time": "Fri Oct 25 17:37:33 2019 +0100"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Nov 12 20:58:17 2019 +0000"
      },
      "message": "ARM64: FP16.floor() intrinsic for ARMv8\n\nThis CL implements an intrinsic for floor() method with ARMv8.2 FP16\ninstructions. This intrinsic calls a template GenerateFP16Round function\nwhich will be used to implement other intrinisics such as ceil and\nrint.\n\nThis intrinsic implementation achieves bit-level compatibility with the\noriginal Java implementation android.util.Half.floor().\n\nThe time required in milliseconds to execute the below code on Pixel3:\n- Java implementation android.util.Half.floor():\n    - big cluster only: 18623\n    - little cluster only: 60424\n- arm64 Intrinisic implementation:\n    - big cluster only: 14213 (~24% faster)\n    - little cluster only: 54398 (~10% faster)\n\nAnalysis of this function with simpleperf showed that approximately only\n60-65% of the time is spent in libcore.util.FP16.floor. So the percentage\nimprovement using intrinsics is likely to be more than the numbers stated\nabove.\n\nAnother reason that the performance improvement with intrinsic is lower\nthan expected is because the java implementation for values between -1 and\n1 (abs \u003c 0x3c00) only requires a few instructions and should almost give\na similar performance to the intrinsic in this case. In the benchmark function\nbelow, 46.8% of the values tested are between -1 and 1.\n\npublic static short benchmarkFloor(){\n    short ret \u003d 0;\n    long before \u003d 0;\n    long after \u003d 0;\n    before \u003d System.currentTimeMillis();\n    for(int i \u003d 0; i \u003c 50000; i++){\n        for (short h \u003d Short.MIN_VALUE; h \u003c Short.MAX_VALUE; h++) {\n            ret +\u003d FP16.floor(h);\n        }\n    }\n    after \u003d System.currentTimeMillis();\n    System.out.println(\"Time of FP16.floor (ms): \" + (after - before));\n    System.out.println(ret);\n    return ret;\n}\n\nTest: 580-fp16\nTest: art/test/testrunner/run_build_test_target.py -j80 art-test-javac\n\nChange-Id: Iad1dd032d456af54932f13c5cf27228f8652a0b5\n"
    },
    {
      "commit": "2462789806df0281c52fa9bb60fa37fe3ff606b6",
      "tree": "a26da1d669e88b34b10b0f6c76b06abd8b694473",
      "parents": [
        "28b6efed2c2e38d3df787f8f68e2b8d55efabd06"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 06 10:28:21 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 11 16:58:12 2019 +0000"
      },
      "message": "Ensure structural redefinition can shadow functions/fields\n\nPreviously when we structurally redefined a class and a new field or\nfunction shadowed a super type field or function the shadowed version\nmight still get called. This was due to the old version remaining in\nthe dex-caches of other classes. To fix this we just remove from all\ndex-caches any entries that might be (invisibly) shadowed by a new\nfunction/field. This is any non-virtual methods or non-private field\nof a supertype of the redefined class with the same name \u0026 signature\nas a method/field in the redefined class.\n\nTest: ./test.py --host\nBug: 134162467\n\nChange-Id: Iae8e7a3e7f8ecedbd2f314816b140156fce3e5fd\n"
    },
    {
      "commit": "2764f615865d65592d03276325fd2602fea2ed08",
      "tree": "25d407375e6adb2e00e39be3d794d4244bd1ba9f",
      "parents": [
        "1c5949ee99d5eb01ea9abe706cf372d59f02e891"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Nov 11 14:36:20 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 11 16:29:31 2019 +0000"
      },
      "message": "MethodHandles: fix missing nominal type return value conversion\n\nFixes missing adaption path when a method handle has a nominal type\nset from MH.asType().\n\nBug: 113855305\nTest: art/test/run-test --host 956\nChange-Id: Id203e5ab6bd5df03fd728944f52f6e267c3a38f3\n"
    },
    {
      "commit": "4f7c0cc6b272f9998074d0cde36b24bdd7b06bf9",
      "tree": "dd732c75952f863c9a63c566b68a06977e6d387a",
      "parents": [
        "64bac15658065a8cdcfdc118e9b374dffbcf557c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 08 13:11:49 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 08 13:11:49 2019 +0000"
      },
      "message": "Disable zygote-jit-deopt under gcstress while investigating timeouts.\n\nTest: zygote-jit-deopt\nBug: 137887811\nChange-Id: Idde7e64eef910c65719d1274c3193eb90cee91b3\n"
    },
    {
      "commit": "64bac15658065a8cdcfdc118e9b374dffbcf557c",
      "tree": "7edf0aefc141536194662e935467591f373b9507",
      "parents": [
        "62f62f38f40199ecb32632194b7a529b2aa2f839"
      ],
      "author": {
        "name": "Usama Arif",
        "email": "usama.arif@linaro.org",
        "time": "Mon Oct 28 12:11:21 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 08 10:41:28 2019 +0000"
      },
      "message": "Restructure 580-fp16 tests into functions\n\nThere are a lot of tests present in main and their number is increasing.\nRestructure these into functions to make it easier to find related tests.\n\nTest: 580-fp16\nTest: art/test/testrunner/run_build_test_target.py -j80 art-test-javac\nChange-Id: I8d0e766d1ebab0cf6d6829300a1d09c4a2244365\n"
    },
    {
      "commit": "d3d00c06a439f5204b290505a3333f780dd00bce",
      "tree": "7fb793aa293908b9218267acbf8e10da14e95031",
      "parents": [
        "0f7c792f12905558836cc01f3406d6ba364cefd7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 07 15:09:07 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 07 16:46:05 2019 +0000"
      },
      "message": "Refactor oat.h.\n\nMove OatClassType and OatMethodOffsets to oat_file.h and\nmake all dependencies on oat.h explicit instead of relying\non transitive #includes. This reduces the number of files\nthat need to be rebuilt for oat version changes.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I89c8e397a4f423043d7a036a995cc33548b25051\n"
    },
    {
      "commit": "2191069047034ad891ea15f60a217246edc38d53",
      "tree": "5fcdb37aa8d1e052979631adac01fe74794748b3",
      "parents": [
        "add69acb7db965bd8d817a185e962e5474f690d1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 06 13:27:03 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 07 14:04:57 2019 +0000"
      },
      "message": "Revert^4 \"Boot image extension.\"\n\nThis reverts commit f5c5eb30fc71e0c305d678bd3c1c995a5c36d508.\n\nRemoved wrong check for no dex files. Dex files can also be\nspecified with zip-location and file descriptors. Added a\nregression test to dex2oat_test.\n\nFixed the image checksums validation to use the appropriate\npart of BCP rather then full BCP. This fixes errorneous\nrejection of oat files compiled against partial BCP.\n\nChanged dex2oat_image_test to use ART_BASE_ADDRESS to try\nand avoid failures when reserving space for loading the\ncompiled images.\n\nTest: Additional tests in dex2oat_{,image_}_test\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 119800099\nBug: 143492855\nBug: 144001974\nChange-Id: I062cbecd0020f5c24353eb75643ea5905cb6f4fd\n"
    },
    {
      "commit": "f5c5eb30fc71e0c305d678bd3c1c995a5c36d508",
      "tree": "2f08c5562d3b35b7f0139f772b6324a9689d01ea",
      "parents": [
        "acdb9a350fede0776e1f4d6d04dc3246249345e3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 06 12:25:10 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 06 13:25:07 2019 +0000"
      },
      "message": "Revert^3 \"Boot image extension.\"\n\nThis reverts commit 02820f424714e711bbd4cb4b04a109416eb0c8b8.\nAlso reverts commit beb66b38dcce937d7eee9ef2d07b6402c720f8ee\nthat contained a follow-up fix.\n\nReason for revert: b/144001974\n\nBug: 119800099\nBug: 143492855\nBug: 144001974\nChange-Id: I4da5330c3efa9f0c3508e85344c031d3b360ca0a\n"
    },
    {
      "commit": "beb66b38dcce937d7eee9ef2d07b6402c720f8ee",
      "tree": "4bdf0034b5fbd4aa6bb07c73f8c38f9eac03669e",
      "parents": [
        "a48f0bbb2939fa743904f7553a060b12846f100e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 01 14:59:36 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 05 09:42:18 2019 +0000"
      },
      "message": "Fix boot image extension relocation.\n\nStore boot image begin and size to the extension header as\nit is needed for relocation; this requires rewriting the\nImageHeader::IsAppImage(). Also mark the class roots as\nvisited to satisfy a DCHECK() for extension relocation.\n\nAnd re-enable loading boot image extensions for tests.\n\nTest: Add relocation tests to dex2oat_image_test.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --relocate --no-relocate\nTest: testrunner.py --target --64 --optimizing --relocate\nBug: 119800099\nChange-Id: Ie7e883beaa927ca4dc91f0ae660c8de74f7d4ddb\n"
    }
  ],
  "next": "5fd05e5cfd06c9e682d8b3a097bf0b30e2a85ed4"
}
