)]}'
{
  "log": [
    {
      "commit": "e3f775bace85f4fe02dfd4042091d2f7d6fcbc25",
      "tree": "41446ada658dc05abb073edc5c2c134e83802619",
      "parents": [
        "621738039bbca55a2513bddb6ea66d4934fa7089"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 04 14:41:52 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Dec 05 13:34:57 2019 +0000"
      },
      "message": "Address comments from aog/1180224.\n\nMove handling of objects in interpreter cache to weak objects.\n\nBug: 119800099\nTest: test.py\nChange-Id: Ie7b2b2e285607a7c1460fd4f0b4ea690f9a16594\n"
    },
    {
      "commit": "9317031cd016e02a26cdeea8045df9925b33ffe2",
      "tree": "b1278f6d99c2e4c1375c1d9031d552c9875a4e3c",
      "parents": [
        "a0b4631f73547b44bff5c0c01b605d867cd083cc"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Dec 04 13:46:11 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 05 01:53:26 2019 +0000"
      },
      "message": "Move thread-local mark-stack revocation outside SOA\n\nRevoking mark-stack inside a ScopedObjectAccess scope could potentially\ncall checkpoints in its destructor, which may trigger read-barrier,\nafter the mark-stack is revoked.\n\nTest: art/test/testrunner/testrunner.py --target\nBug: 140119552\nChange-Id: I90d62cbf5edbaf953de73aeb2b3b59612b6897d3\n"
    },
    {
      "commit": "a0b4631f73547b44bff5c0c01b605d867cd083cc",
      "tree": "c3463a2d168385e9441801002e96d43dd42f30c3",
      "parents": [
        "13e951d2bf4f989b0c561b96eed967e8f84d64ea"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Dec 04 22:06:48 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 05 00:50:37 2019 +0000"
      },
      "message": "Revert submission\n\nReason for revert: b/140119552 has been fixed. The change no longer needed.\n\nChange-Id: I66c4744d8d72992bf01042a5043bd3dcfbbbe005\n"
    },
    {
      "commit": "13e951d2bf4f989b0c561b96eed967e8f84d64ea",
      "tree": "68edc727335048994abf31fc5cdf5bd5c6743b93",
      "parents": [
        "1caa1270a53fa08ab9c6934d5bdd2da79c7bf89e"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Nov 01 16:48:28 2019 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Dec 04 23:25:06 2019 +0000"
      },
      "message": "Fix mallinfo result interpretation\n\nWe assumed that mallinfo.hblkhd represents the amount of memory\nin large blocks allocated directly with mmap. That appears to be\nthe intended interpretation for glibc, but not jemalloc.\n\nIn the jemalloc case, remove the attempt to sanity check and repair\nthe uordblks field based on this information. The bug requiring it\nthere was fixed long ago. Based on old notes, the check may still be\nrequired for glibc. Out of an abundance of caution, leave it there for\nnow.\n\nAdd a conditional sanity check of the argument for\nRegisterNativeAllocation().\n\nThis was externally reported through unofficial channels.\n\nTest: Build and boot AOSP.\nChange-Id: I5d10f239057ed3efeb39f28e8c7d87849ee60ff0\n"
    },
    {
      "commit": "a00b54b74bee06c006b8bebfbef85e2801de293c",
      "tree": "6edb2a96c1f89ae913e6b5f190b117cb290239e8",
      "parents": [
        "e571a283b73fb4621c401811f523503b3266564b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 03 14:36:42 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 04 12:04:36 2019 +0000"
      },
      "message": "Helpers and refactorings to prepare for interpreter optimizations (x64)\n\n- Add data structure offsets that will be used in assembly code.\n- Be explicit about a stack overflow in a fault handler.\n- Move assembly helper code in asm_support so interpreter can use it.\n- Support putting literals in InterpreterCache.\n- Fix artHandleFillArrayDataFromCode for x64.\n\nBug: 119800099\nTest: test.py\nChange-Id: I2729f87fe5d09c04ae2e7081636f0cd89ac14c21\n"
    },
    {
      "commit": "a59af8aeaad8fe7d68d8f8de63eab9cf85b6ab31",
      "tree": "83195c74b135731cc4555254763a8f449691c1b0",
      "parents": [
        "5c8cc64b5f1580faf510f27527e7e22987174963"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 27 17:42:32 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 03 14:32:09 2019 +0000"
      },
      "message": "JIT baseline: trigger optimized compilation on hotness threshold.\n\n- Add a new hotness count in the ProfilingInfo to not conflict with\ninterpreter hotness which may use it for OSR.\n- Add a baseline flag in the OatQuickMethodHeader to identify baseline\ncompiled methods.\n- Add a -Xusetieredjit flag to experiment and test.\n\nBug: 119800099\nTest: test.py with Xusetieredjit to true\n\nChange-Id: I8512853f869f1312e3edc60bf64413dee9143c52\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": "20b7a9b8aeaf76fc8f3248f211489fd00af73170",
      "tree": "33a09412c220b5bfc9935a84fabd92a39aa4c35f",
      "parents": [
        "c6ca1170904c9f5bbdf0ee5b12d6d4cb093739fc"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 26 10:47:43 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 18:34:20 2019 +0000"
      },
      "message": "Fix Missing ReflectiveHandleScope in Class_newInstance\n\nThe Class_newInstance method (the native implementation of the\nj.l.Class.newInstance function) incorrectly held an ArtMethod* for the\nconstructor over a suspend point. This could lead to an obsolete\nmethod being called or (worst case) CHECK failures due to not\nfinishing the initialization of the class if it\u0027s made obsolete.\n\nTest: ./test/run-test --host 2001\nBug: 145197371\nBug: 134162467\nChange-Id: I7813977bfdd17165da810a1705197654eef024a1\n"
    },
    {
      "commit": "c6ca1170904c9f5bbdf0ee5b12d6d4cb093739fc",
      "tree": "b87de8f1391ed8ff0763f9d02f110edd032d7a91",
      "parents": [
        "be52a17c0f6af1c7563d8b9736ac4ace9b7ae0f0"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Nov 27 15:47:02 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 18:22:10 2019 +0000"
      },
      "message": "Assert mutator doesn\u0027t get mark-stack assigned once destroyed\n\nWrite a non-null value to thread-local mark-stack pointer when\na mutator revokes the previously assigned thread-local mark-stack\nso that we can catch the mutator if it ever invokes the read-barrier\nor executes the flip function, both of which may assign mark-stack\nto the mutator.\n\nTest: art/test/testrunner/testrunner.py\nBug:140119552\nChange-Id: I82f43c8a3aab6dacb0f6bd35471fc2cdd969b154\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": "de3e51d655ac46b4e570ad66c664308745c3e8f8",
      "tree": "389ce5668a712e78a273dd686a5bd7edd0c24e34",
      "parents": [
        "20036d80f246b564331e0943aa07ec3b50fc15d9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 28 16:29:55 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Nov 29 08:39:19 2019 +0000"
      },
      "message": "If a collection is in progress, we need to mark new code.\n\nOtherwise, the GC will collect it.\n\nThis got accidentally removed here:\nhttps://android-review.googlesource.com/c/platform/art/+/719573\n\nBug: 136108889\nTest: test.py\nChange-Id: I00a803b7fe8220bd84f55c039d6d0e52b1469459\n"
    },
    {
      "commit": "36ec598a4d887746291d003c97c2cb28b5987768",
      "tree": "65ad09ff02502ed74328f2f930f9301de85ad929",
      "parents": [
        "457e9fa3833ef11530056d010f247ad087fd2184"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 28 10:55:16 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 28 15:42:23 2019 +0000"
      },
      "message": "Simplify name verification in ClassLoaderContext.\n\nDo not go through OatFile::ResolveRelativeEncodedDexLocation\nto avoid unnecessary handling of multi-dex suffix. That was\nbroken anyway because `abs_dex_location` is not expected to\nbe a multi-dex location as demonstrated by an additional\ntest which would have previously failed.\n\nTest: Improved test in class_loader_context_test.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I0a292ed1442393a3de4e8a360593b607b1b37cfd\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": "49af4cae5674c68d492659ab4b4015c3a6562970",
      "tree": "09456eb05bfb6b86cb1e93a47d70cc768945f402",
      "parents": [
        "e2a3aa988630b3c2952ac44943f03dde60454195"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 27 14:35:49 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 27 16:23:15 2019 +0000"
      },
      "message": "Fix oat version error message formatting.\n\nTest: m\nChange-Id: I3ae3ac5c982a85c07145d94a85f4b5d2f2152b8b\n"
    },
    {
      "commit": "e2a3aa988630b3c2952ac44943f03dde60454195",
      "tree": "acee7012af6e2b161c91e6cd8b7b4d12eb5aa927",
      "parents": [
        "a2c4d61e482a15974e3e220bcd62a64043ee536f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 25 17:52:58 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 27 14:04:43 2019 +0000"
      },
      "message": "Baseline JIT: update inline caches in compiled code.\n\nIn trying to remove profiling from interpreter, to speed up\ninterpreter performance.\n\nBug: 119800099\nTest: test.py --baseline\nChange-Id: Ica1fa41a889b31262d9f5691b30a31fbcec01b34\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": "047081a1509762879a9eb51981982af65f419bac",
      "tree": "d4a4460d88c4ccda074017f25f7869b7a1bc780c",
      "parents": [
        "f585c1e4f8b011b7399668800da53ec726fbeb40"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Nov 27 02:51:25 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 27 04:23:51 2019 +0000"
      },
      "message": "Revert \"Revert^2 \"Revoke CC\u0027s thread-local mark stack in ~Thread\"\"\n\nThis reverts commit add69acb7db965bd8d817a185e962e5474f690d1.\n\nBug: 140119552\nReason for revert: Causes b/144408451\n\nChange-Id: Ifaa78a3a13cbcc0524fa0fb8e25d377b6fd6ed2b\n"
    },
    {
      "commit": "f585c1e4f8b011b7399668800da53ec726fbeb40",
      "tree": "bd7a532ba4fdca8bc037a1b5faaef491a37f98e1",
      "parents": [
        "f92f6f12f3be976afb8f2ac8e8bbeaef72ef8b33"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Mon Nov 25 10:41:23 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 27 02:32:51 2019 +0000"
      },
      "message": "Protect/Unprotect regions (region space) only in debug build\n\nDuring performance analysis it was observed that the\nallocation-intensive workloads get negatively impacted by the region\nprotect/unprotect. Therefore, we enable this only on debug builds.\n\nSome of the most affected benchmarks on Golem are as follows:\n\nBenchmark                           | armv8 | armv7 |  x64  |  x32\n------------------------------------------------------------------\nBinaryTrees                         |   8%  |   8%  |  13%  |  12%\nMicroAllocThreeFinalThrice          |  13%  |   8%  |  27%  |  30%\nMicroAllocThreeFinalTwice           |  13%  |   9%  |  32%  |  30%\nMicroAllocThreeFinal                |  13%  |   8%  |  33%  |  30%\nMicroAllocTwoFinal                  |  11%  |   9%  |  32%  |  31%\nMicroAllocOneFinal                  |  11%  |   9%  |  33%  |  31%\nMicroAllocBaseline                  |  12%  |   9%  |  33%  |  34%\nKotlinMicroTree                     | -0.4% |  0.7% |   8%  |   9%\nKotlinMicroMap                      |   6%  |   3%  | 0.7%  |   1%\nKotlinImgProc-CheckerboardMultiply  |   5%  |  0.5% |   0%  |-0.5%\nSplay                               |   5%  |   4%  |   2%  |   3%\nMicroLazyInitSingleThreadedSlow     |   8%  |  -2%  |  17%  |   7%\nMicroLazyInitImmutableSlow          |   5%  |  -2%  |  24%  |   8%\n\nTest: golem benchmarking\nBug:140130889\nChange-Id: I6be646bcc069d59625112c1b9ab91bbbc5f9f627\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": "d3ed4ada0d2bf6ffa0e997692734fe5016d365e3",
      "tree": "43a7359bb3f5dd56ff13729b4dd9b65f47bc4850",
      "parents": [
        "c47040d31cbcd8cddd5fadb552b4f0f6c94b5bd0"
      ],
      "author": {
        "name": "Shalini Salomi Bodapati",
        "email": "shalini.salomi.bodapati@intel.com",
        "time": "Mon Oct 21 11:47:39 2019 +0530"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 26 09:14:31 2019 +0000"
      },
      "message": "Handle Special case div and rem by 2 in art interpreter\n\n4% gain in division \u0026 3.1% gain in modulus\noperation on Intel(R) Atom Architecture\n\nTest: 411-checker-hdiv-hrem-pow2\n\nChange-Id: I338a51f2a867ed7f7cb1caf851b8fc8c9fa62d10\nSigned-off-by: Shalini Salomi Bodapati \u003cshalini.salomi.bodapati@intel.com\u003e\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": "dc540dfffb6863177143d024dd6f491775d77585",
      "tree": "91a2fe20c625790cead209c36ed4a45e0cf97c06",
      "parents": [
        "882d41435982c518506f544ab79a9fa0a90cc78f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Nov 15 17:11:44 2019 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 25 23:00:08 2019 +0000"
      },
      "message": "Add ScopedAllowThreadSuspension\n\nAdd a way to temporarily re-allow thread suspension. This makes it\ncleaner to do the pre alloc visitor stuff in heap-inl.\n\nTest: test-art-host\nChange-Id: Ifbb2725923df84e8e0bd073d415e99cb8090e681\n"
    },
    {
      "commit": "882d41435982c518506f544ab79a9fa0a90cc78f",
      "tree": "5b5902f9ba26b45c2ced2367f168d82f33ad7b7c",
      "parents": [
        "da3653f1424236c4778cf3806861d04f2ba9b07e"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Nov 21 13:27:10 2019 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 25 21:33:30 2019 +0000"
      },
      "message": "Use nativePostForkSystemServer for system server profiling\n\nNeed to use nativePostForkSystemServer instead of nativePostForkChild\nsince nativePostForkChild is called after the class loader is created.\n\n(cherry-picked from commit 0712f2969c0f19fa2cc41f99751d39ee1852ebbc)\nBug: 139883463\nBug: 144383344\nTest: showmap `pid system_server` and verify\nTest: atest BootImageProfileTest\n\nMerged-In: I7c4f61b08d286ef6056931231f6b835749092720\nChange-Id: I7c4f61b08d286ef6056931231f6b835749092720\n"
    },
    {
      "commit": "da3653f1424236c4778cf3806861d04f2ba9b07e",
      "tree": "6c0056048e04698b25d4ce0ea664417eb5a951c2",
      "parents": [
        "0ac78cf94fac523ab9bea0a42edac8eb8c09a05d"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Mon Nov 25 10:07:56 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 25 19:37:04 2019 +0000"
      },
      "message": "Fix reinterpret cast in ImmuneSpaceCaptureRefsVisitor\n\nTest: art/test/testrunner/testrunner.py\nBug:145134481\nChange-Id: I5795aa22939fdc8b958f2298a196e63e28d5883e\n"
    },
    {
      "commit": "0ac78cf94fac523ab9bea0a42edac8eb8c09a05d",
      "tree": "5aa7e192fc054f2837de61e660446ef33c317197",
      "parents": [
        "80f1c2850a6cc501c42ff1cfa306ec725e2bf61f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 25 15:46:19 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 25 17:53:48 2019 +0000"
      },
      "message": "Fix vtable relocation for boot image extension.\n\nCheck relocated reference against destination address\nrange rather than source address range.\n\nTest: No crashes seen when framework is compiled as\n      a boot image extension (cherry-pick WIP CLs).\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 119800099\nChange-Id: Ica5d898c80db7817a511d64046f3a84830cb2a45\n"
    },
    {
      "commit": "7ed2d385b513ced901e42181ae9a83e220b47912",
      "tree": "ace75719b974de2e38d1473d607a247f7eb85da9",
      "parents": [
        "aedc9bc5ebdacadc9efe4465173e1b7ca7edc226"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 25 10:41:53 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 25 15:18:48 2019 +0000"
      },
      "message": "Fix boot image extension class exclusion.\n\nThe code in CompilerDriver was too permissive for arrays and\nthe code in Transaction was not even checking interfaces.\nMove the check to AotClassLinker and fix it.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I3400b6c0e212e25acf17e3740ba19a8b407e03d3\n"
    },
    {
      "commit": "cb177da21e46df1ef58a537e87df0e042ed1418b",
      "tree": "f9a192a3949cc8d8f649865d1c7b5d30d539ea6a",
      "parents": [
        "78a44b9863cc88da3f546b39f9cf3081561b5c51"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Thu Nov 21 16:40:06 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 22 03:03:42 2019 +0000"
      },
      "message": "Convert \u0027thread to mark-stack map empty\u0027 assertion into a CHECK\n\nUsing LOG(FATAL) doesn\u0027t print threads\u0027 headers, which is needed to\nidentify the thread(s) which has a mark-stack assigned.\n\nBug:144408451\nTest: art/test/testrunner/testrunner.py --host\nChange-Id: Ib273dd866e00f231ab67d9da7cad14659cbb7c6b\n"
    },
    {
      "commit": "a8f39186b26f66671c5e960e7f7a3b7ce231eab1",
      "tree": "231b20d3394af6305d89ecdefea34d755d622ee0",
      "parents": [
        "e61f16af3976ca8c0ab82cd3f21e5dff66225520"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 21 10:08:58 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 21 13:35:02 2019 +0000"
      },
      "message": "Clean up some image tests.\n\nMake ImageSpaceLoadingTest\u003cfalse,.,.\u003e use a custom image\nlocation based on ScratchFile to avoid accidentally finding\na pre-compiled boot image in default location.\n\nAdd -Xnoimage-dex2oat to Dex2oatImageTest to avoid useless\ndex2oat invocations that just slow down the test. Suppress\nerror messages from image loading that is supposed to fail.\nCompile only 3 dex files in TestModesAndFilters to make the\ntest faster (29s-\u003e20s on host).\n\nTest: m test-art-host-gtest\nChange-Id: Ia92e85f056027003d2fb50aa871c9fae7a5fdc01\n"
    },
    {
      "commit": "e61f16af3976ca8c0ab82cd3f21e5dff66225520",
      "tree": "4eb932e907b165f267755549361db870d1b51778",
      "parents": [
        "55d9aaad5d5ec9729ce7522eb88b0c69a0b3342d"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 20 13:49:19 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Nov 21 00:38:16 2019 +0000"
      },
      "message": "Add missing WriteBarrier on VisitReflectiveTargets\n\nWe weren\u0027t performing write-barriers during VisitReflectiveTargets.\nThis could lead to incorrect marking.\n\nTest: ./test.py --host --gcstress\nChange-Id: I153f319e257675d83cae6ec25e041cbddecf1a94\n"
    },
    {
      "commit": "55d9aaad5d5ec9729ce7522eb88b0c69a0b3342d",
      "tree": "7e21d1f7f777aaf524660e7d1386a31adf71c306",
      "parents": [
        "505e56bb5519ac5ebc50ab1cc79509aa0de640cb"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Tue Nov 19 19:02:34 2019 -0800"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Nov 20 19:01:14 2019 +0000"
      },
      "message": "Assert no-thread-mark-stack mapping after switching to shared mode\n\nBug:144408451\nTest: art/test/testrunner/testrunner.py --host -t 004-ThreadStress\nChange-Id: I6e7eddb138ba90a2c4bef7a39e48036ff5184e38\n"
    },
    {
      "commit": "3e9d7ae3c2b303be546e84f73a3a3c2d7cbd74e3",
      "tree": "f143dd7f5acf7a4b23d500cbebcffa01b7e51ede",
      "parents": [
        "c526e42d6091b8f2b3b4ac810299ccba9506e380"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Nov 18 15:21:51 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 20 14:05:18 2019 +0000"
      },
      "message": "Don\u0027t use addr2line for dex and jar files.\n\nBug: 144594370\nTest: Modify a run-test to invoke String.length interpreter intrinsic \\\n  and call Runtime::Abort from interpreter intrinsic implementation\nChange-Id: I2997dbfa59ce2bbe9d725f1d7fe7eed565f698fe\n"
    },
    {
      "commit": "a879bdf5e9e1f2e1ff01ce9a66af3682188079bf",
      "tree": "0621e683ad6710e590a26fd7ae399bb077edc7de",
      "parents": [
        "142816a6ac2a9261d37cffb7a7367a96f712fde2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 19 16:25:47 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 20 09:43:45 2019 +0000"
      },
      "message": "Revert^2 \"Fix CompilerDriver\u0027s handling of boot image extension.\"\n\nThis reverts commit 96d8585ebb9e21fc27a59ddd4173ca62ad93c194.\n\nFixed verification from oat files when compiling a boot\nimage extension. Normal verification can fail if the\nprimary boot image is quickened.\n\nTest: `art/tools/buildbot-build.sh --target` with master-art manifest\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 119800099\nBug: 144751090\nChange-Id: Ibc4e7ab1ec8451c9b5c87b6e87ab9807ac22e284\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": "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": "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": "a9bbc08daad6d601c870c8493323f57b70373336",
      "tree": "8ca74373cac0fe52aced5f32cc6f6e1f9c3239b5",
      "parents": [
        "56f1332113c3b8b1844c04683b9cb9dc5a0bd346"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Nov 14 14:51:41 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 15 19:17:23 2019 +0000"
      },
      "message": "Implement STL iterators on ObjectArray and add helpers\n\nIterating over an ObjectArray is rather cumbersome, requiring manual\nfor-loops. To improve ergonomics and STL standard-ness this implements\nstd::iterator\u0027s for ObjectArray and converts code to use this (in\nsimple situations). This should allow us to use standard STL functions\nin the future when dealing with ObjectArrays.\n\nAlso adds some helpers such as ZipCount and ZipLeft.\n\nTest: ./test.py --host\nChange-Id: Ifd515b8321775424b3256a6faf47b2ba970177d3\n"
    },
    {
      "commit": "889b72d80e192a2e30698f9966a4a7171a1c1df8",
      "tree": "d325bfb4ff44ffaf49650f32a2cfafbaa9f43603",
      "parents": [
        "afaa457b6f56c6d3bff9dce9b314825f4726fdf9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 12 11:01:13 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 15 10:34:24 2019 +0000"
      },
      "message": "Load classes for boot image extension.\n\nPreviously we actually failed to load and initialize classes\nfor boot image extensions. Though some classes may have been\nresolved by other code paths, extension art files did not\ncontain the intended classes. This CL fixes that and some\nother bugs that were exposed by this class initialization.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I63a1970f7ff45dc37b14ebd24c5a68f3edacd6ef\n"
    },
    {
      "commit": "1592cfc31c4a5b898bd93ca5cdc36b8ea57e2208",
      "tree": "ad5edd191089baecd30d9b2abd750dc4a7baf741",
      "parents": [
        "d830263af8b612b9c00fb4ceb50f1815df9a039d"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Nov 13 17:52:33 2019 -0800"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Fri Nov 15 04:21:41 2019 +0000"
      },
      "message": "Add mark-stack related assertions in marking phase\n\nTest: art/test/testrunner/testrunner.py\nBug:144408451\nBug:140119552\nChange-Id: Ic2d4bbef939e4f2a020e2492683a7b8cc35b9a6e\n"
    },
    {
      "commit": "d830263af8b612b9c00fb4ceb50f1815df9a039d",
      "tree": "16cbd33fd597144bd418ecf423bc03913e9b5bd0",
      "parents": [
        "52f8e5c2d3f9a475f6877b716642cf2af41dd4d7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 14 13:16:16 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 14 17:09:18 2019 +0000"
      },
      "message": "Fix image checksum verification.\n\nMove over the separator \u0027:\u0027 for checking subsequent dex file\nchecksums. The bug, introduced in\n    https://android-review.googlesource.com/1091189 ,\ncaused rejection of oat files if the boot class path had\nmore than one module that was not part of the boot image.\n\nTest: Add a new test to image_space_test.\nTest: Manual fake OTA with extra logging for checksum mismatch.\nBug: 119800099\nBug: 144146443\nChange-Id: I9eb8328348b30ee4769468924f9e6ac65b70d4cb\n"
    },
    {
      "commit": "149cddaa22a1a78e8dde179d2c33b745cb500629",
      "tree": "af751d1b98fad44a2742089c6928677261f9f580",
      "parents": [
        "fdbe207596c11cf84c23855123d87ea6e15b70ff"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 12 15:02:51 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 13 11:52:43 2019 +0000"
      },
      "message": "Check stored references in transactional interpreter.\n\nFor boot image extension, we need to reject references to\nclasses that are defined in a dex file belonging to the boot\nimage we\u0027re compiling against but not actually in the boot\nimage. Allowing such references could yield duplicate class\nobjects from multiple extensions.\n\nTest: Additional tests in transaction_test.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --interp-ac\nChange-Id: I99eaec331f6d992dba60aeb98a88c268edac11ac\n"
    },
    {
      "commit": "af9ab6de388c14cc42166ab3fab30e2dac0b8693",
      "tree": "d654bb01f6e1408744d917ebb78beef6317a1fca",
      "parents": [
        "688ff644f023e91cb50709306f4c8eb713632f64"
      ],
      "author": {
        "name": "Chuwei Xu",
        "email": "xucw@motorola.com",
        "time": "Tue Nov 05 22:06:01 2019 +0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 13 10:19:40 2019 +0000"
      },
      "message": "art: extend the supported cpu_variant list for arm64\n\nadd kryo300 to the supported cpu_variant list\n\nBug: b/143929263\nChange-Id: I2eb4ec0e98f84f19270b8555696191ff1aa8ac0a\n"
    },
    {
      "commit": "682715ee1448959801640975005abb8b876b80b3",
      "tree": "db230f9af26acef7d5fd30317429432fa924a183",
      "parents": [
        "be08b201e20900d590c235eb7a933ace2212ccbc"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Nov 11 18:45:29 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 13 01:35:34 2019 +0000"
      },
      "message": "Set system server package name to \"android\" when profiling\n\nSystem server does not set a value for it\u0027s runtime package name.\nConfigure it before we start the profile saver so that we can annotate the\nsamples with a proper name.\n\nTest: manual\nBug: 139884006\nChange-Id: Id09cf493b9e7227f85d0c7554aef248253f2a44d\n"
    },
    {
      "commit": "0f6bde0ee40de32e404d5c7882fe8c8aa47de0a3",
      "tree": "86ee936d14a432290aa54f1b15e775bf757801be",
      "parents": [
        "83aacb23d88c3df3d7fe655655b715f8229078f9"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Nov 11 18:38:10 2019 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Nov 13 00:33:20 2019 +0000"
      },
      "message": "Adjust profile version when the boot image profiling is switched on\n\nThe current profile version needs to be updated if the boot image\nprofiling was switched on dynamically. Otherwise we will not be able to\nadd new data to the file since we will have a version mismatch.\n\nTest: manual \u0026 profile_compilation_info_test\nBug: 139884006\nChange-Id: I85e9970c5e26d3f2144a644e7052f2b6a433e1db\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": "f1b18facd1edd6c8652c42085c5432c878507c8e",
      "tree": "856465341f025debf8a526490c7f00cee06d3694",
      "parents": [
        "2462789806df0281c52fa9bb60fa37fe3ff606b6"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 11 14:22:00 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 11 14:33:19 2019 -0800"
      },
      "message": "Use explicit list of mirrored class when checking CanRedefine\n\nWe were assuming that the ClassRoots contained all the mirror\u0027d\nclasses but this is not the case. Instead we should use an explicit\nlist of the mirror\u0027d classes.\n\nTest: ./test.py --host\nTest: m test-art-host-gtest-class_linker_test64\nBug: 134162467\n\nChange-Id: Idd4c258ee0134e42afd0175b948123ea052704e1\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": "28b6efed2c2e38d3df787f8f68e2b8d55efabd06",
      "tree": "ae82be3edc0277cc7614df2ec3cc56c852744ca7",
      "parents": [
        "2764f615865d65592d03276325fd2602fea2ed08"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 06 12:49:41 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 11 16:58:12 2019 +0000"
      },
      "message": "Don\u0027t visit invalid Dex-cache slots\n\nWe were incorrectly visiting invalid dex-cache slots during\nVisitReflectiveTargets. This didn\u0027t cause any real problems but it is\nneither expected nor useful.\n\nTest: ./test.py --host\nBug: 134162467\nChange-Id: I2dedbcff66bfb4fa093d23ea79e1054aa5a9636b\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": "1c5949ee99d5eb01ea9abe706cf372d59f02e891",
      "tree": "a0ebfcfc2c651bd46e1bbb98e11f1f98b4a5cdab",
      "parents": [
        "7a20cbdd42fbab5ad562bf98b867c533b0a12164"
      ],
      "author": {
        "name": "Victor Chang",
        "email": "vichang@google.com",
        "time": "Mon Nov 04 19:36:00 2019 +0000"
      },
      "committer": {
        "name": "vichang",
        "email": "vichang@google.com",
        "time": "Mon Nov 11 13:04:11 2019 +0000"
      },
      "message": "libicu_jni needs to be initialized before libopenjdk{d}\n\njava.lang.System, which implements System.loadLibrary, depends on ICU4CMetadata.\nThus, libicu_jni has to be loaded before libopenjdk, which initializes java.lang.System. Otherwise, the device fails to boot.\nSee b/143888405 for details.\n\nBug: 138994281\nBug: 143888405\nTest: device boots\nChange-Id: I3d6691be012601368820c3de717ee1268b6b7ca9\n"
    },
    {
      "commit": "92eec3a90282edf30ca1535d58a4b52294ba7e76",
      "tree": "27b05f588a5286f5b08b33f7a57b20544841f5ef",
      "parents": [
        "4f7c0cc6b272f9998074d0cde36b24bdd7b06bf9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 05 10:59:36 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 08 14:46:52 2019 +0000"
      },
      "message": "Add boot image checksums to image header.\n\nThis adds an early validity check, so that we do not need to\nload an image extension and oat file before we can discard\nthem as out-of-date based on the checksums from oat header.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --interp-ac\nBug: 119800099\nChange-Id: I951e8429f8dde73f3fc41c36dffe5a657a0db62b\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": "267366ca19e7b71a63d3c4a02976cc56a6e58adc",
      "tree": "063ef118f770096ac667f5b4c7d22b75693896c0",
      "parents": [
        "fa2b2d35255515accd0aa69193aa5e72b009e38e"
      ],
      "author": {
        "name": "Artur Satayev",
        "email": "satayev@google.com",
        "time": "Thu Oct 31 14:59:26 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Nov 07 15:23:32 2019 +0000"
      },
      "message": "Only allow access to @TestApi signatures in instrumented processes.\n\nNote that the check is for \"pure\" @TestApi signatures, i.e. those that are on blacklist. If the signature is also annotated with @SystemApi or @UnsupportedApiUsage then it would not be on blacklist.\n\nBug: 133832325\nTest: manual\nChange-Id: I546fb42495331efd638d9def924ef33da0c80182\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": "add69acb7db965bd8d817a185e962e5474f690d1",
      "tree": "ed5f5c469eeeaedf9fc7c102b728046eaf28bbe0",
      "parents": [
        "dd49278c4a8c476f6af832ac0f9fe71752a742d6"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Nov 06 18:21:43 2019 +0000"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Nov 06 14:41:20 2019 -0800"
      },
      "message": "Revert^2 \"Revoke CC\u0027s thread-local mark stack in ~Thread\"\n\nThis reverts commit 93e5ae90697d879a82103b492c6853cda11d0925.\n\nMove revoking thread-local mark stack from Thread::Destroy() to\nThread::~Thread. We also don\u0027t need to perform this revocation with\nScopedObjectAccess.\nAlso, updated the assertion in RevokeThreadLocalMarkStack for cases\nwhere an exiting thread during marking phase of the 2-phase full-heap GC\ninvokes it.\n\nReason for revert: Removed assertion that will no longer be true with\nthis change.\n\nBug: 140119552\nTest: art/testrunner/testrunner.py\nChange-Id: Ic827fcc9729e19c0a9af772287ea3e96dbdd5ff9\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": "acdb9a350fede0776e1f4d6d04dc3246249345e3",
      "tree": "571b9d7e6b9606b1258314f781eb1341399def81",
      "parents": [
        "4c6d765dae35f7a3e7cafdbe346821622e65d6d4"
      ],
      "author": {
        "name": "Artur Satayev",
        "email": "satayev@google.com",
        "time": "Mon Oct 28 18:09:53 2019 +0000"
      },
      "committer": {
        "name": "satayev",
        "email": "satayev@google.com",
        "time": "Wed Nov 06 13:16:51 2019 +0000"
      },
      "message": "Plumb @TestApi enforcement policy to runtime.\n\nBy default access to test APIs would be allowed for instrumented processes only.\n\nBug: 133832325\nTest: manual\nChange-Id: Iaa68447c88304b062025c96e8b863a0758b78add\n"
    },
    {
      "commit": "4c6d765dae35f7a3e7cafdbe346821622e65d6d4",
      "tree": "378a564aacb0a0cd50ec68a717f2fae1c8b3d80a",
      "parents": [
        "93e5ae90697d879a82103b492c6853cda11d0925"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Nov 01 09:23:19 2019 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Nov 06 09:40:31 2019 +0000"
      },
      "message": "Make GetBytesAllocatedEver() monotonic\n\nMake the _freed_ever_ counters atomic, since they can apparently\nbe read concurrently. This removes the data race.\n\nWe enforce monotonicity in a brute force way, which is probably good\nenough here. The results remain approximate, as they always were.\n\nBug: 142328050\nTest: Built AOSP.\n\nChange-Id: Ifb8520d0edee7cadadc62f59992c6d9b67251c32\n"
    },
    {
      "commit": "93e5ae90697d879a82103b492c6853cda11d0925",
      "tree": "bf4b87ff633803e09dad62adae5e3193a880c89a",
      "parents": [
        "c7c711bb7303586e66c8c0ce18a4cc8f9d5d904c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 06 09:16:44 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 06 09:17:01 2019 +0000"
      },
      "message": "Revert \"Revoke thread-local mark stack for CC in ~Thread\"\n\nThis reverts commit 129d61b4c45ee2cf14a9ea964ec97bca1441b621.\n\nBug: 140119552\nReason for revert: Test failures\n\nChange-Id: If31d47973c442bed57415cc55341602274e5851b\n"
    },
    {
      "commit": "129d61b4c45ee2cf14a9ea964ec97bca1441b621",
      "tree": "b914dcccd298e118964392080fcd0455b7f752ac",
      "parents": [
        "0d7232c1b332377b251d1d3c05f7d843fe201571"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Mon Nov 04 12:22:47 2019 -0800"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Nov 06 01:35:40 2019 +0000"
      },
      "message": "Revoke thread-local mark stack for CC in ~Thread\n\nMove revoking thread-local mark stack from Thread::Destroy() to\nThread::~Thread. We also don\u0027t need to perform this revocation with\nScopedObjectAccess.\nAlso, updated the assertion in RevokeThreadLocalMarkStack for cases\nwhere an exiting thread during marking phase of the 2-phase full-heap GC\ninvokes it.\n\nBug: 140119552\nTest: art/testrunner/testrunner.py\nChange-Id: I64c6cc52ca802bd3ddfb210ac9254f37f059ea03\n"
    },
    {
      "commit": "3314457ac7abe7d61b88550b5d9bea8ad3c7ec9d",
      "tree": "7533cdd8e3292d427c0cbdcaa00d181ed16422b3",
      "parents": [
        "215cf3fd27a264953b8657107c8523359d38a5bc"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 05 07:13:54 2019 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 05 07:17:50 2019 -0800"
      },
      "message": "Remove unused MethodInspectionCallback declaration\n\nAddresses code review comment.\n\nTest: make\nChange-Id: I8ee9b83989d24e89d3987a1bf754fb7ab23a2abc\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"
    },
    {
      "commit": "ccc75191d44f696c39262d3c774b2500d06bebb7",
      "tree": "4e30f0d47d916e2da7aebe1213c028d543095c79",
      "parents": [
        "5fd05e5cfd06c9e682d8b3a097bf0b30e2a85ed4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 28 13:34:03 2019 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 04 23:42:59 2019 +0000"
      },
      "message": "Avoid making oat files executable for system server profiling\n\nDone so that we will only use JIT + interpreter to get samples for\nservices.jar.\n\nBug: 139883463\nTest: showmap `pid system_server` and verify\n\nChange-Id: I6f13446948fd92a43a9312988fd6e00ee4a0ed41\n"
    },
    {
      "commit": "02820f424714e711bbd4cb4b04a109416eb0c8b8",
      "tree": "ca7554d4dd148a3832b46c19fd9bd706d83ed4a4",
      "parents": [
        "962a110efb2c6a2b0161f919bfd5921e3dee7168"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 04 10:31:27 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 04 15:33:02 2019 +0000"
      },
      "message": "Revert^2 \"Boot image extension.\"\n\nThis reverts commit 9f459c4ef60d771fc4eb8da1f709f479ca23a6ab.\n\nFixed the extension test to be more hermetic. Added a clean\nspec to work around broken dependencies; obsolete images may\nhave been a reason for boot time regressions.\n\nTest: aosp_taimen-userdebug boots.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nBug: 119800099\nBug: 143492855\nChange-Id: I37e714d53e66f94f791e6d1e9f4d78bf7bcb2116\n"
    },
    {
      "commit": "831f20f06f1f3eb2230c7a2266f72bebc6232587",
      "tree": "5b61d85311f4526dbd3f4633aba7bb0ca55ce7c9",
      "parents": [
        "382df393c684c6a5f3856365177da715880d7f08"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Nov 03 20:54:28 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 04 10:40:59 2019 +0000"
      },
      "message": "Don\u0027t use F_SEAL_FUTURE_WRITE for boot image methods.\n\nThe behavior with private mappings on fork is unexpected.\n\nBug: 143833776\nBug: 119800099\nBug: 143637883\nBug: 143569713\n\nTest: boots\nChange-Id: Iaccf33b787a7a5cb09a0054b87e4f34850929c72\n"
    },
    {
      "commit": "382df393c684c6a5f3856365177da715880d7f08",
      "tree": "ef0923a3f0b2ab354e4be077798777533fc8f9e2",
      "parents": [
        "9f459c4ef60d771fc4eb8da1f709f479ca23a6ab"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 31 11:57:15 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 04 08:24:20 2019 +0000"
      },
      "message": "Add consistency CHECKs around ArtMethod fields.\n\nThe jitzygote approach relies on those CHECKs which are currently\nguaranteed.\n\nBug: 119800099\nTest: builds\nChange-Id: Ie5bb57bdd9b3c28a2d9cab607db2cf858e1ec131\n"
    },
    {
      "commit": "9f459c4ef60d771fc4eb8da1f709f479ca23a6ab",
      "tree": "5c998b1bd23d0a348ec77a4fcd760e7e9cac00f7",
      "parents": [
        "9e709debacab08be8adbac366e0555ca302a3bed"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Nov 01 18:23:06 2019 +0000"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Nov 01 18:29:26 2019 +0000"
      },
      "message": "Revert \"Boot image extension.\"\n\nThis reverts commit 4f6ebe89af462ff05d97433deb2bca3f3b011fc2.\n\nReason for revert: b/143492855\n\nBug: 119800099\nBug: 143492855\nChange-Id: I27da7e790f61f836701f8f39c98d14b507af8b9e\n"
    },
    {
      "commit": "4f6ebe89af462ff05d97433deb2bca3f3b011fc2",
      "tree": "856ef32276112b78fb51bd95dfd545217b86cb33",
      "parents": [
        "3155aa4e6167c5f346aa5e90da43ee0e9d04d2ec"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 19 15:23:44 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 01 12:48:46 2019 +0000"
      },
      "message": "Boot image extension.\n\nAllow the boot image to be split into the primary boot image\nand any number of optional boot image extensions.\n\nTest: New extension test in dex2oat_image_test.\nTest: aosp_taimen-userdebug boots.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nBug: 119800099\nChange-Id: If5a2fa1c0facccbfaf0a1f0cb015ea9233f1f4c6\n"
    },
    {
      "commit": "3155aa4e6167c5f346aa5e90da43ee0e9d04d2ec",
      "tree": "ed6a28a96717a0c0df963c506f7cf15f42220883",
      "parents": [
        "014c16c3e1ccedbea025111bc79f0a0351ba52d0"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Oct 31 13:48:53 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 31 22:18:30 2019 +0000"
      },
      "message": "Add DCHECK that Allocation PreFenceVisitors do not suspend\n\nAs PreFenceVisitors perform initial setup of objects before they are\nfully visible to the GC they should not ever suspend. This adds a\nScopedAssertNoThreadSuspension around calls to the fence in order to\nverify (on kIsDebugBuild) that no suspend occurs.\n\nTest: ./test.py --host\nChange-Id: I3b073252cf74289da30e1a5ebf4272dcc4c0023f\n"
    },
    {
      "commit": "014c16c3e1ccedbea025111bc79f0a0351ba52d0",
      "tree": "c3657115f919ae42d72416697573a4dcfbfb2c6f",
      "parents": [
        "201ffea4a91f1ff052bb72eedb44a3bff2a35c76"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Oct 31 15:56:08 2019 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Oct 31 20:29:41 2019 +0000"
      },
      "message": "Revert \"Enable JIT dual data mapping.\"\n\nThis reverts commit b3b803b69d5db392ea7cf7a1fea443d4ba133134.\n\nReason for revert: Another random idea for diagnosing timeouts.\nThis CL was submitted around the right time and touches mmaps.\n\nBug: 142039427\nTest: device boots\nTest: test.py --host -b -r --jit --64\nChange-Id: If8e3fb5e9bd5b4389f807f8ce07e4b9d8f263009\n"
    },
    {
      "commit": "201ffea4a91f1ff052bb72eedb44a3bff2a35c76",
      "tree": "c5c1757b9b3093ebf6f653d402153e1ed2af780f",
      "parents": [
        "7d48dcd51db4b950c22ec78ef3caa53fdf4214d3"
      ],
      "author": {
        "name": "Artur Satayev",
        "email": "satayev@google.com",
        "time": "Thu Oct 31 14:58:03 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 31 19:01:57 2019 +0000"
      },
      "message": "Add tests for GreylistMaxQ.\n\nTest: mma test-art-host-gtest-hidden_api_test64\nBug: 133832325\nChange-Id: I1a91bcea501325fd4e79e25db1ed0be6e1028b49\n"
    },
    {
      "commit": "f05f04b429a63eb036f501866a863109f05b95b2",
      "tree": "e6abb50536cb04ed60cf134b2e9556366e5a2064",
      "parents": [
        "5859799ce6ad57ee862434603fc29cecfec1d775"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 31 11:50:41 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 31 14:52:45 2019 +0000"
      },
      "message": "Make ArtMethod methods const or requiring the mutator lock.\n\nHelps the jitzygote optimization on sharing the boot image methods\npost fork.\n\nThe CL shows that the code base already almost fully handles requiring\nthe mutator lock when mutating ArtMethod data.\n\nBug: 119800099\nTest: builds\nChange-Id: If4a938b66aac85304ec0a27c53bb9fa951191d8c\n"
    },
    {
      "commit": "8e23d38035fe04ffab8b89c348b5b178bd8c492e",
      "tree": "23e776aa2939410ce8648f7e4532bd77ee2fab35",
      "parents": [
        "4b7950139575c76d716986cdb8621166ea2bb849"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 30 13:53:01 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 31 11:24:32 2019 +0000"
      },
      "message": "[jitzygote] Suspend all threads when remapping boot image methods.\n\nPrevents other threads from concurrently modifying the data.\n\nBug: 143569713\nBug: 119800099\nTest: boots\nChange-Id: I2b07d34c98a37306e9157bfa63321ed01f68479e\n"
    },
    {
      "commit": "4b7950139575c76d716986cdb8621166ea2bb849",
      "tree": "a8c9bfb8041ad66dbcb981423bc1845990e81e11",
      "parents": [
        "8852e5309a47c99d098aa85e8934cc06e8104807"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Oct 31 08:46:28 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 31 10:19:45 2019 +0000"
      },
      "message": "Remove unused art::mirror::MethodHandle::GetTargetClass\n\nBug: 140980573\nTest: m\nChange-Id: I05567c27a35501c4ba5f350f6fd3d0b32a753be4\n"
    },
    {
      "commit": "8852e5309a47c99d098aa85e8934cc06e8104807",
      "tree": "8316f4b25034531bacaab06aa235d64dd1f41e63",
      "parents": [
        "7cf5607f472020711e36eedbbfebb25b40d3f90e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 30 09:43:35 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 31 09:39:12 2019 +0000"
      },
      "message": "[jitzygote] Remap boot boot image methods in zygote when single-threaded.\n\nThis avoids concurrent updates made by other threads while copying the\ndata.\n\nBug: 143569713\nBug: 119800099\nTest: boots\nChange-Id: Ife0141a45b8d8671ab0c5868ccf90b4799a9f5db\n"
    },
    {
      "commit": "436c6f5fae95aae332361060778599d0ef24a167",
      "tree": "eb81e98fc92a58a31efb6754f0f73d67720b7e24",
      "parents": [
        "0c63f76d90ed5b5dc4bc420fc51ffc383f8d87d9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 25 14:50:14 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 30 13:59:29 2019 +0000"
      },
      "message": "Oat file checksums for boot image extensions.\n\nModify the oat checksums check for boot image extensions.\nThere may be more extensions loaded at runtime than when the\noat file was compiled, so we need to check the checksum type\nfrom the checksums string to determine whether to use an\nimage checksum or dex file checksum. Different checksums\ncan be valid for the same boot class path.\n\nThe creation of boot image extensions and other aspects\nof loading them shall be implemented in separate CLs.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: I43d1f9464678784e902ad72f4a89cf38b4786122\n"
    },
    {
      "commit": "e3884e357566d739a33f22a0bdc4b76173cd6093",
      "tree": "d6169d034cb5a5d1c7e7a3cd0e9e6c18dd161f0b",
      "parents": [
        "45217376b527cd17d758152c54960e6786288e31"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 28 17:04:49 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 29 15:45:01 2019 +0000"
      },
      "message": "[jitzygote] Map the boot image fd after the contents have been written.\n\nIn order to not rely on undefined behavior from the kernel, map\nthe boot image methods fd after the shared mapping got updated with\nthe contents.\n\nBug: 119800099\nTest: BusinessCard\nChange-Id: I501b8994f2b0f2b27c4693443827ae1583f9fae4\n"
    },
    {
      "commit": "c2d0c9627b969ba988c8817d1b765b1cb61a61f3",
      "tree": "be3d4547d2a0a42d4085355383c509b0cb55f587",
      "parents": [
        "0c262edd22824f4465e0cb08879b7eea89d3fac0"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 23 14:14:25 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Oct 28 23:46:26 2019 +0000"
      },
      "message": "Perform reverify with shared mutator-lock.\n\nDespite comments that seemed to indicate otherwise the verifier is not\ncapable of running with a strong mutator-lock in all circumstances.\nSpecifically it relies on being able to allocate exceptions in a\nnumber of situations (for example when a field could not be found but\nthe class could). This could lead to problems when trying to\nreverify a class. To fix this we changed the reverify step to happen\noutside of the strong mutator-lock and instead temporarily mark the\nredefined methods with every verifier fail flag. The new verification\nwill then be performed and the flags reset (after suspending\neverything).\n\nThis also fixes a related issue where performing the verification\nwith an exclusive mutator lock changed how elements in the dex-cache\nwere populated, causing the dex-cache to break invariants about\nmethods always having their classes be present. This could cause\ncrashes in some circumstances (for example test 1990).\n\nTest: ./test.py --host\nTest: go/lem\nBug: 142876078\n\nThis partially reverts commit b1eebde9469914ad634a6dc3746ddfb222595609\nThis partially reverts commit db55a1121b2437765e732c8bbedf914f8a52f624\n\nChange-Id: I0f1e8c47118cc84c8f23c4068944069ac74f5ea3\n"
    },
    {
      "commit": "7f958e36546bc0ebf92573da24ff620179526243",
      "tree": "a712a5527fdb5fe0b3e14b6f17fea90a89f55ecc",
      "parents": [
        "7814c122dd35ac5c79e7b76b12f1ae95201739a1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 24 09:03:58 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 25 08:16:27 2019 +0000"
      },
      "message": "Revert^2 \"ARM64: toHalf() intrinsic for ARMv8\"\n\nThis reverts commit 67bf99b8a575b15c117a3fbf7aae421330e4795a.\n\nReason for revert: The original CL was reverted because\nof build breakages not directly related to the CL itself.\n\nChange-Id: Ic98e9912701d81d73bc3af719a7e3a8e44e8c058\n"
    },
    {
      "commit": "faeaeaf068e5ac1a9944a93001a2df61a6fbd8ab",
      "tree": "2b3508ddf34ec45aff27f9ab8e32ec66bda67d09",
      "parents": [
        "409736f166dbdde2e4fed3631d73bf55eb543737"
      ],
      "author": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Tue Oct 22 17:25:00 2019 -0700"
      },
      "committer": {
        "name": "Lokesh Gidra",
        "email": "lokeshgidra@google.com",
        "time": "Wed Oct 23 18:24:18 2019 +0000"
      },
      "message": "Print mark stack address in ~Thread()\n\nPrint thread-local mark stack\u0027s address in the assertion that it\nshouldn\u0027t exist in Thread destructor. This is to confirm if there is\nmemory corruption causing the bug.\n\nBug: 140119552\nTest: art/test/testrunner/testrunner.py\nChange-Id: Iad6998a64f240a8e621e5d3e46baad7b56833f19\n"
    },
    {
      "commit": "409736f166dbdde2e4fed3631d73bf55eb543737",
      "tree": "fe83e2255ff8aeb18107d259627b2c83839b688b",
      "parents": [
        "1b13d28d5d19e7a71f5e428ba0b460fb3aa59018"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 22 18:13:29 2019 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 23 17:02:37 2019 +0000"
      },
      "message": "Do backtrace collection while holding lock\n\nPrevent cases where enough threads are doing backtraces at the same\ntime so that the system runs out of virtual address space, resulting\nin std::bad_alloc.\n\nRe-enabled test 708.\n\nTest: test/testrunner/run_build_test_target.py art-jit-on-first-use-gcstress\nBug: 120112467\nChange-Id: I291b9028880998aa33a53720dc2b3258ea7f3000\n"
    },
    {
      "commit": "1b13d28d5d19e7a71f5e428ba0b460fb3aa59018",
      "tree": "db1b23f64f51d208578c8e2d7f579732b864c33f",
      "parents": [
        "f1ddc20f37fe12e36792770414b66948b601ff1f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 23 15:10:55 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 23 15:35:25 2019 +0000"
      },
      "message": "Improve diagnostic messages for reading image header.\n\nDifferentiate between missing file, read error and invalid\nimage header. This should help distinguish incremental build\nerrors due to missing dependencies (invalid image header due\nto image version change) from other infrastructure problems.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 143205070\nChange-Id: I529705c8049f75793aab373976e6fa5e0f980bab\n"
    },
    {
      "commit": "dee09f90d1b445c3a133c392a0afc03c62d75ef1",
      "tree": "3ad816ebd68fff982a7562dbce3f2538eb63f738",
      "parents": [
        "c3c7eb082bf0f965096817adc3ff153a3d61b57d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 23 15:18:20 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 23 15:23:47 2019 +0000"
      },
      "message": "Add the compiler filter to InMemoryDexClassLoader backed by oat files.\n\nOatHeader::GetCompilerFilter requires it.\n\nBug: 143155012\nTest: 692-vdex-inmem-loader\nChange-Id: I96c3aa38361e01b7f109d91a0f5c634f7dae0278\n"
    },
    {
      "commit": "c3c7eb082bf0f965096817adc3ff153a3d61b57d",
      "tree": "c38370343c4a942dbb5f0b26be87b9a2228eb60f",
      "parents": [
        "4e6abea8f7568f6bbbc6c11470cfd89e83caacc6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 23 13:48:53 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 23 14:34:52 2019 +0000"
      },
      "message": "Remove obsolete patchoat-related code from dexopt_test.\n\nTest: m test-art-host-gtest\nChange-Id: I3c0036c42bc2054bcfcd514717611d3021843792\n"
    },
    {
      "commit": "67bf99b8a575b15c117a3fbf7aae421330e4795a",
      "tree": "2077b459c5b43c3b1399544faf07a326e253681a",
      "parents": [
        "2cc0c0f4b6a76dfb1ad205cfd79efe7efe2904d6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 23 13:29:10 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 23 13:29:10 2019 +0000"
      },
      "message": "Revert \"ARM64: toHalf() intrinsic for ARMv8\"\n\nThis reverts commit 2cc0c0f4b6a76dfb1ad205cfd79efe7efe2904d6.\n\nReason for revert: Broke some builds. To be investigated.\n\nBug: 143205070\nChange-Id: Ib36e149cc5ed7f53c932c0b611b43c28d19f22dc\n"
    },
    {
      "commit": "2cc0c0f4b6a76dfb1ad205cfd79efe7efe2904d6",
      "tree": "5ff5f5f7c5c25f441a36506a84988fa95d2dbd46",
      "parents": [
        "b8c884e5f22390386b202459ab55ef3046631e42"
      ],
      "author": {
        "name": "Usama Arif",
        "email": "usama.arif@linaro.org",
        "time": "Tue Oct 15 15:36:51 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 23 12:04:00 2019 +0000"
      },
      "message": "ARM64: toHalf() intrinsic for ARMv8\n\nThis CL implements an intrinsic for toHalf() method with\nARMv8.2 FP16 instructions.\n\nThis intrinsic implementation achieves bit-level compatibility with the\noriginal Java implementation android.util.Half.toFloat().\n\nThe time required to execute the below code on Pixel3:\n- Java implementation android.util.Half.toFloat():\n    - big cluster only: 2136ms\n    - little cluster only: 6442ms\n- arm64 Intrinisic implementation:\n    - big cluster only: 1347ms (~37% faster)\n    - little cluster only: 4937ms (~ 23% faster)\n\nint benchmarkToHalf() {\n    int result \u003d 0;\n    // 5.9605E-8 is the smallest positive subnormal number that can be\n    // represented by FP16. This is 0x33800032 in float bits.\n    int raw_input \u003d 0x33800032;\n    long before \u003d 0;\n    long after \u003d 0;\n    before \u003d System.currentTimeMillis();\n    do {\n        float input \u003d Float.intBitsToFloat(raw_input);\n        short output \u003d FP16.toHalf(input);\n        result +\u003d output;\n    } while (++raw_input !\u003d 0x477fff00);\n    // 65535 is the max possible integer that can be represented by FP16.\n    //This is 0x477fff00 in float bits.\n    after \u003d System.currentTimeMillis();\n    System.out.println(\"Time of FP16.toHalf (ms): \" + (after - before));\n    return result;\n}\n\nTest: 580-fp16\nTest: art/test/testrunner/run_build_test_target.py -j80 art-test-javac\nTest: test-art-host, test-art-target\n\nChange-Id: I69b152682390e5ffa5b3fdca60b496261191655d\n"
    },
    {
      "commit": "b1eebde9469914ad634a6dc3746ddfb222595609",
      "tree": "c34ad8df86b5c2f3b66e21ecd41352a02f3944d5",
      "parents": [
        "2a21cc6849df474afc63eff21913637c313efdf5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 22 16:30:47 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 22 17:00:09 2019 +0000"
      },
      "message": "Revert^2 \"Class redefinition sometimes needs to update verification\"\n\nWe were incorrectly preventing dex2oat from suspending during\nverification. This caused a major regression in memory use and\ncompilation speed.\n\nThis reverts commit 2cf00ede148bd9d77c291d4c0cb23edd5a9c36b4.\n\nReason for revert: Fixed issue causing AOT slowdown.\nTest: go/lem\nTest: go/lem-allight-unrevert-verify-check\nTest: ./test.py --host\nBug: 142876078\n\nChange-Id: If699f71a06818856358859ed5e4e01e0ffc1c1a4\n"
    },
    {
      "commit": "2cf00ede148bd9d77c291d4c0cb23edd5a9c36b4",
      "tree": "c59d055e9f611d1e9b7bdd36ce3756cc090b86c7",
      "parents": [
        "776d0015730e1c00c86119a5db2fe606867ae3a7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 22 08:10:44 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 22 08:34:02 2019 +0000"
      },
      "message": "Revert \"Class redefinition sometimes needs to update verification\"\n\nThis reverts commit db55a1121b2437765e732c8bbedf914f8a52f624.\n\nBug: 142876078\n\nReason for revert: up to 10x regressions on vdex-based compilation.\n\nChange-Id: Ib034c02617db2c8e4e15bc386631a612256f0ad4\n"
    },
    {
      "commit": "e41eec3b193d594577cbe8afc7c3dc6608c2f201",
      "tree": "a9914bbb64b8fc87a90ccf165368b6b33475322f",
      "parents": [
        "98e97c6953e970ce99e53640c963fa79a525b1eb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 18 14:41:54 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 21 09:24:58 2019 +0000"
      },
      "message": "Fix deadlock in ThreadList::RunCheckpoint().\n\nBe smarter about the situation when a thread races the\nsuspend request to become Runnable. In that case we try to\nreschedule the checkpoint on that thread and, if successful,\nwe clear the suspend request. Thus we never have to wait for\na Runnable thread to become suspended.\n\nThis avoids a deadlock where the ThreadList::RunCheckpoint()\nwas waiting for a Runnable thread which was waiting for the\nGC to allow weak ref access while the GC thread was actually\nsuspended by the suspend request, trying to become Runnable.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit --interpreter\nBug: 138852758\nChange-Id: I746b00160e09ac9e55ee6214faee6447025615b9\n"
    }
  ],
  "next": "289e7124653b58a42a9cb431117362890f584945"
}
